Предыстория такова: создаю виртуальное устройство, например DEV1 и контроллер на нем CON1. Передаю на него вручную значение командой mosquitto_pub -t /devices/DEV1/controls/CON1 -m 25. Всё ок, в веб интерфейсе значения меняются. Но если я пишу правило, например, по нажатию кнопки записать в переменную значение на этом устройстве ( var x = dev[DEV1][CON1]) то тут выходит лажа. В массиве dev постоянно одно значение, которое было на устройстве в момент инициализации (например, после сохранения скрипта). Можем сколько угодно посылать вручную значения на устройство. В интерфейсе оно будет отображаться, но в массиве dev обновляться не будет. Что я делаю не так??
По этой же причине, как я понимаю, передача значений вручную не инициирует правила в блоке whenChanged: “DEV1/CON1”
Ну и доп вопрос: есть ли в wb-rules функции для работы с файлами?
В wb-rules есть функция loadConfig(), которая загружает и парсит JSON-файл с диска. Это очень полезно, если вашему правилу нужна конфигурация. Примеры использования можно посмотреть у нас в коде, например в драйвере wb-mqtt-dac.
Для всего остального сейчас обёрток нет, но вы можете использовать семейство команд spawn и runShellCommand для выполнения произвольных shell-команд.
Изменение состояния должно производиться отправкой сообщения в подтопик /on, как описано в документации.
В документации написано про реле, и я наивно подумал, что это относится только к переключателю.
доп. вопрос не очень понятен.
В wb-rules есть функция loadConfig(), которая загружает и парсит JSON-файл с диска.
Это именно то, что нужно. Спасибо. Только похоже readConfig(), а не loadConfig().
Сохранять только через runShellCommand, или есть что-то типа saveConfig()?
Подскажите, еще, как правильно сохранить в фал JSON? Просто если сохранять через echo, то она убирает кавычки. Можно конечно перед сохранением перегонять все параметры и переименовывать их с " но кажется мне, что есть более простое решение.