Nodered Управление zigbee устройством через алису

Добрый день Мне нужно с Алисы включить выключить устройство zigbee.
Подскажите как в node red настроить?
Я так понимаю в функции change нужно прописать изменения с логического типа (true false) на JONS или на строку?

publish(“zigbee2mqtt/0x00158d0001f3fc34/set”, JSON.stringify({ state: “ON” }), 2, false);
publish(“zigbee2mqtt/0x00158d0001f3fc34/set”, JSON.stringify({ state: “OFF” }), 2, false);

Если пишу вот так то пишет неверное свойство rules


image

Простой пример публикации:

[
    {
        "id": "60eea32e3b755cb4",
        "type": "tab",
        "label": "Поток 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "8ed7edda666058db",
        "type": "mqtt out",
        "z": "60eea32e3b755cb4",
        "name": "публикация",
        "topic": "zigbee2mqtt/0x00158d0001f3fc34/set",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "5323be007d8233e0",
        "x": 570,
        "y": 420,
        "wires": []
    },
    {
        "id": "7c852288e228b74d",
        "type": "inject",
        "z": "60eea32e3b755cb4",
        "name": "Просто инициатор",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "4",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "zigbee2mqtt/0x00158d0001f3fc34/set",
        "payload": "{\"state\":\"ON\"}",
        "payloadType": "str",
        "x": 260,
        "y": 420,
        "wires": [
            [
                "8ed7edda666058db"
            ]
        ]
    },
    {
        "id": "5323be007d8233e0",
        "type": "mqtt-broker",
        "name": "Локальный",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    }
]

Ну и соответственно:

mosquitto_sub -v -t zigbee2mqtt/#
zigbee2mqtt/0x00158d0001f3fc34/set {"state":"ON"}
zigbee2mqtt/0x00158d0001f3fc34/set {"state":"ON"}

Вопрос заключался в другом.
Где и как в node red прописывается топик
вот эта часть zigbee2mqtt/0x00158d0001f3fc34/set?
И где вот эта часть {“state”:“ON”}? Чтобы они отправлялись

Я так понимаю в change
image
на как прописать(отправить) топик я не понимаю именно топик zigbee2mqtt/0x00158d0001f3fc34/set
Потому, что он обращается к “/devices/2-etag/controls/state_left” хотя поидее это одно и тоже, что и “zigbee2mqtt/0x00158d0002a18ff7/set” Один и тот же девайс. Но где и как изменить отправку именно “zigbee2mqtt/0x00158d0002a18ff7/set” я не знаю.
image

Вопрос мне кажется немного странным…
Да совершенно без разницы, топик может быть статично прописан, может передаваться в msg.topic
В зависимости от удобства. Можно в сериализовать обе части и распаковать перед публикацией.

А зачем используете узел предназначенный для работы с конвенционными устройствами для работы с ziggbee?

Хочу подключить алису, чтобы управлять через голос.
У меня wirenboard 7 к нему подключены zigbee устройства(оставшиеся от xiaomi), физически и через intrahouse (через мобильное приложение ) у меня настроено и работает. Хочется сделать чтобы через колонку работало. Тестово я сделал виртуальную кнопку(которая управляет физическим устройством) и через нее могу включать и выключать голосом. Но хочется понять как напрямую отправлять команды zigbee устройству

msg.topic Это что и где его найти в node red?

Не обижайтесь, но вы видимо не понимаете основ работы node.red
Искренне советую почитать Node-RED Concepts : Node-RED (где-то в интернете встречал перевод на русский)
Отвечая на вопрос: msg - объект -это то чем обмениваются ноды. у него может быть свойство topic.
Но речь судя по контексту разговора не о том. Под топиком понимается топик mqtt в который можно писать или читать.
Завтра попробую повнимательнее посмотреть на всю переписку - кажется дело в простом.

1 лайк

Дело в том что ноды wb предназначены для чтения и записи устройств по конвенции Wirenboard. То есть расположенных в подтопиках /devices
Я ведь привел максимально простой пример записи именно в произвольный топик.

Смысл обижаться? Я не знаю node red и только пытаюсь разобраться в его работе. Поставил его потому, что хочу сделать голосовое управление через Яндекс Алису,
Посмотрел пару видео, почитал пару статей и не пытаюсь разобраться.
Был бы признателен помощи.
Я конечно реализовал голосовое управление через Node red. Сделав wb-rules правило которое создало виртуальную кнопку и отправляет топик publish(“zigbee2mqtt/0x00158d0001f3fc34/set”, JSON.stringify({ state: “ON” }), 2, false); при изменение статуса кнопки(которой я уже рулю через node red). Но по мне это лишний костыль, хотелось понять как напрямую отправлять в node red команду управления для включения выключения устройства zigbee. Но я только учусь и делаю как понимаю. Так что от помощи не откажусь. Спасибо за статьи , завтра обязательно посмотрю

Я это понимаю. Я установил Node red пару дней назад и пока не понимаю, где и куда прописываются эти данные

Может быть вам поможет эта статья: Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED / Хабр

Спасибо, Интересная статья. Похоже как раз то что надо. Попозже попробую. По диагонали прочитал я так понял, что идентификация zigbee устройств надо делать не в системе wirenboard. а в node red(через установленный в нем плагин Zigbee2mqtt).

Да - с плагином Zigbee2mqtt будет попрямее. Но суть от этого не меняется.
Если пробежаться по верхам суть вот в чем: у вас есть сервер MQTT на котором устройства публикуют\читают\подписываются на некоторые значения в древовидной структуре путь в которой называется топиком. Программа Zigbee2mqtt "связывает устройства zigbee и топики mqtt. Есть определенные соглашения как что называется, при изменении состояния утройства меняется значение в определенном топике. При записи в определенные топики специальных значений можно добитmся от устройств определенных действий. Лучше всего возможности устройств описаны на сайте | Zigbee2MQTT
Теперь про nodeRed - для упрощения работы с некоторыми системами сделаны специальные ноды собранные в палитры (типа WB, zigbee2mqtt) - суть у них тоже проста - читать\писать\ лушать определенные топики на сервере MQTT и принимать или отправлять объект msg.
В вашем примере всё правильно в принципе сделано. поменяйте начальную ноду WB слушающую топик mqtt на ноду in из палитры Z2M . Она должна быть подписана на топик состояния устройства и в случае изменения значения в нем отправит далее сообщение msq со свойством msg.payload содержашим полученное состояние. Это может быть строка \ json \ логическая переменная и т.п. Далее Это значение путешествует по следующим нодам и в них изменяется или что-то делается в зависимости от значения. ель - чтобы в ноду от Алисы пришло нужное значение нужного типа. Выходная цепочка от алисы строится таким же образом. Смотрите что Алиса_нода отдает на выход, преобразуете и в конце ставите ноду OUt Z2M которая передаст полученное значение в топик zigbee устройства => устройство на него среагирует…
Кстати у node.red есть правило что с плагинами идут еще и примеры. В частности и к Z2M. Идете в меню импорт а там в примеры и импортируете поток с примером.

1 лайк

Необязательно, совсем. Слушать можно и так, устройсво конвенционное.

Можно и просто ноду “mqtt out”, совершенно не принципиально.
Но в целом - согласен, отлично описано.

Спасибо.

Согласен с замечаниями - я то это знаю и пощупал. На многие грабли понаступал :slight_smile:
По первости всё странно и запутано, Но после того как разобрался с “внутренностями” нод, топиков и т.п. - появилась некая лёгкость в работе с node.red Реализовал все свои хотелки!

1 лайк

У себя я с Алисой не интергрировался и не знаю что она отдает\принимает. Если покажете вывод дебаг ноды которая у вас есть - смогу подсказать далее что сделать. Если к тому времени сами не разберетесь конечно.

Я сделал голосовое управление через костыль(создание виртуальной кнопки в wirenboard и отправки через скрипт топика на вкл выкл света и розеток), а дальше уже соеденил их через Node red c Алисой.
Думаю домой приду попробую переделать напрямую как предложено вами и описано в этой статье Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED / Хабр
Вопрос только если я подключу zigbee устройства в Node Red они останутся в wirenboard? (имеется ввиду не отваляться)
А так действительно проще сделать в одной системе, а не плодить зоопарк из кучи систем. Просто хочется в первую очередь мозги не много расшевелить, не много нового узнать, сделать систему управления отоплением, светом и охраной на даче как голосом так и чеез мобильное управление.
Я в принципе то что хотел уже реализовал(хотя нужно обкатать и устранить кое какие баги), но чем больше получается тем больше хочется внедрить что ни будь еще.
А так спасибо за помощь и предложение, если что то не будет получаться то обязательно обращусь.

1 лайк

Останутся. Обмен-то все равно через те же топики MQTT.

Настроил Алису через Node Red для управление розетками и светом. Возник вопрос, как настроить, чтобы Алиса говорила температуру с датчика 1-wire DS18B20 подключенного к wirenboard.