Приветствую.
Заинтересовался я платформой majordomo, впервые с ней сталкиваюсь. Так как у меня есть некоторые устройства
Broadlink, а именно
RM2 Pro и
SP 2 Mini Contros, решил поковыряться с отправкой команд, в начале пробовал ставить
BroadlinkHTTPBrige, с этим ничего не вышло, как я не пытался запустить под разными эмуляторами, но все равно получал фиг. Потому плюнул и решил попробовать на прямую.
По описанию тут
http://4pda.ru/forum/index.php?showtopi ... ry51074568
Поставил на телефон
Packet Capture, в приложении
e_control отправил команду на включение увлажнителя для начала, нашел по инструкции пакет, далее сохранил на компьютер файл с дампом пакета, с помощью прилагающейся программы из инструкции пробовал отправлять, все работало отлично!
Но когда я попытался то же самое сделать в
Majordomo, срабатывало раз и все! Я очень долго анализировал WireShark сниффером что же происходит, но в упор не понятно было, все что делала программа из инструкции (исходник там тоже прилагается), это посылала в начале неверную комманду, чтоб разбудить девайс (RM2 Pro), а далее посылала правильный пакет.
Тогда я написал свой, небольшой UDP клиент для тестов, и там так же не хотело работать, как и в Majordomo. Опять же просидел с WireShark, полностью все повторял, но не работало! Тогда я залез снова в дампы
Packet Capture, и увидел, что там по мимо каких-то технических пакетов, отсылается два, немного разных пакета, непосредственно команды которую нужно отправлять.
И выяснилось, что нужно поочередно отправлять эти два пакета, и только тогда! будет работать, с пакетом на включение увлажнителя, это было еще и удобно, так как один пакет включает, а другой выключает.
Так же работает и с 433Mhz сигналами, тестировал на выключателе
Livolo (правда Broadlink не очень корректно работает с ними, но это другой вопрос).
А вот с розеткой
SP 2 Mini Contros, все проще, работает один и тот же пакет, на включение и выключение.
В итоге я набросал простой код для
Majordomo
Код: Выделить всё
$this->setProperty("svet", $this->getProperty("svet_old"));
if ($this->getProperty("svet")== 0) {
getURL("localhost/objects/?script=BroadLinkCommand&ip=192.168.1.103&cmd=5AA5AA555AA5AA5500000000000000000000000000000000000000000000000073E2000012276A00A48181DD9B0D43B40300000058C10000E576F5FF97E936EE8D3E65554DD3A676D369426F6D68F64E7F3B7330DA0F6F6ACC6BA0B26C4888960E92B2B3C2C95DC6");
say("Увлажнитель включен");
$this->setProperty("svet_old",1);
}
else if ($this->getProperty("svet")== 1){
getURL("localhost/objects/?script=BroadLinkCommand&ip=192.168.1.103&cmd=5AA5AA555AA5AA55000000000000000000000000000000000000000000000000E0E1000012276A00108281DD9B0D43B40300000058C10000E576F5FF97E936EE8D3E65554DD3A676D369426F6D68F64E7F3B7330DA0F6F6ACC6BA0B26C4888960E92B2B3C2C95DC6");
say("Увлажнитель выключен");
$this->setProperty("svet_old",0);
}
Создается два свойства
Svet и
Svet_old и метод. Потом кидается выключатель в главное меню и все!
Возможно потом удастся понять, как отловить и разобрать ответы, хотя бы от розетки
Contros, чтоб знать, включена она или нет, а вот считать данные с A2, конечно не получится.