Преобразование строки, содержащей массив целых чисел обратно в массив - PullRequest
0 голосов
/ 13 апреля 2020

Что я пытаюсь сделать: я сохраняю атрибут "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. Таким образом, я получаю желаемый тип данных, и часть «восстановить старый цвет» работает.

...