Добрый день!
Вот и мой черед пришел подключать реле (управляемую розетку) и бороться с организацией переключения реле используя Простые устройства
Долго искал ответы, но явного не смог найти. Допускаю что не сильно качественно искал и не так глубоко копал.
Для понимания моего вопроса опишу ситуацию чуть подробнее. Простите, если много и сильно подробно, но я в надежде, что когда будет решение другим будет проще найти тут ответ.
zigbee2mqtt умеет конвертировать на лету ON/OFF в 1/0 при записи в свойства Majordomo. Но проблема в том что кликая мышкой на мое Реле (простое устройство) релюшка назад не переключалась. Получается как бы одностороннее действие - исключительно информирование о фактическом состоянии релюшки взятое из MQTT.
Погуглив и поискав на данном форуме я нашел вроде для себя решение. Используя Методы turnOn и turnOff. Написал в них следующую команду:
Код: Выделить всё
include_once(DIR_MODULES . 'zigbee2mqtt/zigbee2mqtt.class.php');
$z2m = new zigbee2mqtt();
$z2m->sendcommand('ZigbeeXXXX/0x00158D0002EE1285/set', '{"state":"ON"}');
Соответсвенно
в методе turnOn передаем
"state":"ON", а
в методе turnOff -
"state":"OFF"
Ну и сам вопрос: Скажите, а можно как-то получать адрес устройства непосредственно из Majordomo? В модуле zigbee2mqtt адрес отображается. Было бы круто ещё и иметь возможность сохранять его в свойство, чтобы сделать метод по переключению более универсальным.
Я это вижу так: Во всем классе SDevices завожу свойство adress (без хранения истории). Лично для меня разные адреса много где используются. Создаю простое устройство Реле. В zigbee2mqtt в самом устройстве (в моем случае это управляемая розетка) в Данные привязываю state к свойству Реле.status, а ZigBee адрес розетки привязываю к свойству Реле.adress. И тогда в Простых устройствах - выбираю мое Реле и на вкладке Действия в модулях turnOn и turnOff можно будет использовать более универсальный:
Код: Выделить всё
include_once(DIR_MODULES . 'zigbee2mqtt/zigbee2mqtt.class.php');
$z2m = new zigbee2mqtt();
$z2m->sendcommand('ZigbeeXXXX/'.$this->getProperty('adress').'/set', '{"state":"ON"}');
ZigbeeXXXX у меня на все устройсва один и поэтому это не так важно откуда-то забирать.
... ну или может кто-то поделиться поподробнее своим решением данного вопроса. Уверен, что данная проблема актуальна для одних, и уже давно решена для других. И наверняка куда более элегантным способом.
На мой взгляд эту информацию было бы интересно разместить в мануалке к модулю.