Что я пытаюсь сделать: я сохраняю атрибут "rgb_color" объекта домашнего помощника в текстовом файле, который работает, когда происходит изменение температуры выше определенного порога.
Когда он опускается ниже этого порога, поток должен прочитать файл и передать эту полезную нагрузку узлу, вызывающему службу домашнего помощника, с атрибутом «rgb_color» в качестве данных. «Когда превышена определенная пороговая температура, сохраните текущий rgb_color в файл и вызовите службу light.turn_on с entity_id light.neopixel_light и дополнительными данными rgb_color: [255,0,0]» - часть и « Когда он падает ниже порогового значения, считайте rgb_color из файла «-part работают нормально, но для последней части« передача этого rgb_color на узел call_service »-part не работает
Но я думаю, это не будет работать таким образом, потому что он только копирует msg.payload в «rgb_color [0], а не в« rgb_color [0] »,« rgb_color [1] »и« rgb_color [2] », поскольку полезная нагрузка является только строкой AFAIK, ему нужен объект, может быть, как int, я не уверен.
Для примера кода я могу только дать вам поток из узла-красный, что я сделал до сих пор, я не написал никакого кода в это. Чтение из файла: «[133,0,22]» или любые случайные числа до 255 в виде строки, которые мне нужно преобразовать. Чтобы вызвать службу домашнего помощника, я должен предоставить ей некоторые данные, подобно сервис (в моем случае light.turn_on), entity-id (устройство, которое должно что-то делать) (в моем случае light.neopixel_strip) и имеет поле данных для дополнительных данных, таких как rgb_color, которое на домашней странице помощника это читает "Список, содержащий три целых числа от 0 до 255, представляющих цвет RGB, которым вы хотите, чтобы был свет. Три целых числа через запятую, которые представляют цвет в RGB в квадратных скобках. "Поэтому мне нужно преобразовать строку в массив, содержащий целые числа, и передать его в узел call_service. Как это сделать? С помощью кода из первого ответа из "andresmunozit", бит изменен, чтобы использовать msg.payload в качестве входных данных и скопировать arr в msg.payload и вернуть его в функциональный узел между файлом в и только вызовами сервисных узлов. Функция пыталась отправить сообщение типа число ". Вот код для узла функции:
const str = msg.payload
const arr = str
.replace(/\[|\]/i,'') // Remove the brackets
.split(',') // Divide each element separated by a comma, into an array of string numbers.
.map(el => parseInt(el)) // Transform each string number of the array to integer
console.log(arr)
// Result: An array of integers = [1,3,4,3,5,1,2]
msg.payload = arr;
return msg.payload;
И вот поток:
[
{
"id": "84edd84e.07d29",
"type": "function",
"z": "62b9e7a5.4fb288",
"name": "",
"func": " const str = msg.payload\n const arr = str\n .replace(/\\[|\\]/i,'') // Remove the brackets \n .split(',') // Divide each element separated by a comma, into an array of string numbers.\n .map(el => parseInt(el)) // Transform each string number of the array to integer\n console.log(arr)\n // Result: An array of integers = [1,3,4,3,5,1,2]\n msg.payload = arr;\n return msg.payload;",
"outputs": 1,
"noerr": 0,
"x": 620,
"y": 360,
"wires": [
[
"e771f1a9.1c59e8",
"a64a7143.11c328"
]
]
}
]
узел-красный работает как так называемый" hassio-addon "docker Контейнер управляется из установки hass.io в raspbian, поэтому красный узел и домашний помощник работают как контейнер * 1017. * С помощью аддона красный узел узлы из "node-red-contrib-home-assistant-websocket" предустановлен, и я использую их в своем потоке.
Я нашел исправление: использование узла синтаксического анализатора json, установленного на "Преобразование между json -строкой и объектом "и" format json -string "для msg.payload. Таким образом, я получаю желаемый тип данных, и часть «восстановить старый цвет» работает.