SmartLiving.ru

Обсуждение проекта
 
Текущее время: Вс дек 17, 2017 2:58 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения: Модуль MiLight
СообщениеДобавлено: Сб апр 29, 2017 9:45 am 
Не в сети
Site Admin

Зарегистрирован: Пн сен 05, 2011 6:48 pm
Сообщения: 4177
Откуда: Минск, Беларусь
Благодарил (а): 68 раз.
Поблагодарили: 1139 раз.
В маркет добавился модуль поддержки оборудования MiLight
Внимание: данный модуль пока не поддерживает новую версию протокола взаимодействия с WiFi-шлюзом (работает только со старым wifi-шлюзом)

Изображение

Ранее поддержка этого оборудования уже была описана через настройку классов/объектов, но модуль несколько упрощает дело.

Список устройств:
Изображение

Данные устройства:
Изображение

Интеграция с объектами/простыми устройствами:
Изображение

_________________

Сергей Джейгало, разработчик MajorDoMo
Профиль Connect -- информация, сотрудничество, услуги


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Сб апр 29, 2017 2:12 pm 
Не в сети

Зарегистрирован: Сб июл 09, 2016 10:05 am
Сообщения: 22
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
sposibo bolshoe . jdyom na novii milight

Отправлено с моего m1 note через Tapatalk


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Ср май 03, 2017 12:22 pm 
Не в сети

Зарегистрирован: Пт июл 26, 2013 4:11 pm
Сообщения: 248
Благодарил (а): 22 раз.
Поблагодарили: 7 раз.
Сергей, спасибо за модуль.
У меня просьба перебросить ТИП(устройства) в вкладыш "Данные", т.к. у меня стоит устройство с RGBW, который может работать как белой свет или RGB.

_________________
Connect


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Ср май 31, 2017 2:53 pm 
Не в сети

Зарегистрирован: Пн апр 03, 2017 12:21 pm
Сообщения: 48
Благодарил (а): 4 раз.
Поблагодарили: 1 раз.
Планируется ли поддержка нового WiFi-шлюза?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Ср май 31, 2017 6:48 pm 
Не в сети
Site Admin

Зарегистрирован: Пн сен 05, 2011 6:48 pm
Сообщения: 4177
Откуда: Минск, Беларусь
Благодарил (а): 68 раз.
Поблагодарили: 1139 раз.
barsmaster писал(а):
Планируется ли поддержка нового WiFi-шлюза?


Да, только у меня его нет ) Как только появится, так сразу и адаптирую модуль.

_________________

Сергей Джейгало, разработчик MajorDoMo
Профиль Connect -- информация, сотрудничество, услуги


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Ср июн 07, 2017 8:00 pm 
Не в сети

Зарегистрирован: Вт май 02, 2017 7:31 am
Сообщения: 60
Благодарил (а): 17 раз.
Поблагодарили: 4 раз.
я там запостил в старую ветку, продублирую тут, так как обсуждение нового модуля будет скорее всего здесь.

http://www.limitlessled.com/apps/ вот тут скачал приложение под Windows. Просканировал им сеть и нашёл свой контроллер. Приложение коннектится к нему на 5987 порту и отлично работает. Кроме того в приложении видно, какие команды оно отправляет, например чтобы выключить свет оно шлёт 31 00 00 08 04 02 00 00 00.

Также по ссылке http://www.limitlessled.com/dev/ есть примеры использования кода.

Сам я - не программист, так что с кодом разобраться не смогу, но надеюсь это кого-нибудь натолкнёт на светлые мысли...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Чт июн 15, 2017 8:56 am 
Не в сети

Зарегистрирован: Вт май 02, 2017 7:31 am
Сообщения: 60
Благодарил (а): 17 раз.
Поблагодарили: 4 раз.
Лёд тронулся, как говорится! Благодаря youtube-каналу "Электроника в объективе" (за что отдельное спасибо автору! Рассказывает итересно, доходчиво и подробно!) а именно, ролику про управление кондиционером, я таки понял, как отправлять UDP-пакеты из Majordomo. Прошу сильно не пинать, я ж писал, что не программист. Ну а постом выше - я давал ссылки на прогу, которая знает, какие именно пакеты отправлять. Осталось только склеить картину воедино.

Далее будет много букв про то, как отправлять команды новому контроллеру (про старый не знаю, так как у меня его нет)

[Показать] Скрытый текст:
Итак, общение с контроллером идёт в 2 захода, и это хорошо видно по логу программы LimitlessLED:
Код:
Switch On:
Start Wifi Bridge Session...
Send UDP commands to 192.168.0.100 port 5987
Sent
: 20 00 00 00 16 02 62 3A D5 ED A3 01 AE 08 2D 46 61 41 A7 F6 DC AF D3 E6 00 00 1E
Received
: 28 00 00 00 11 00 02 F0 FE 6B 2С C2 A0 14 CA 28 EE 00 01 4D 01 00
LimitlessLEDWifiBridgeSessionID1 is 4D
LimitlessLEDWifiBridgeSessionID2 is 01
IP Address is 192.168.0.100
MAC Address is FE
:6B::C2:A0:14
Sequence Number is 05
Checksum is 3F
Sent
: 80 00 00 00 11 4D 01 00 05 00 31 00 00 08 04 01 00 00 00 01 00 3F
Command SUCCESSFUL
.
Received: 88 00 00 00 03 00 05 00
Command completed
.

Первым делом нужно отправить своеобразное приветствие, которое одинаково для всех команд и для всех отправителей (пробовал отправлять с разных компов)
Код:
20 00 00 00 16 02 62 3A D5 ED A3 01 AE 08 2D 46 61 41 A7 F6 DC AF D3 E6 00 00 1E

В ответ на это приветствие, контроллер ответит, например так:
Код:
[   начало ответа  ][MAC адрес контроллера]             [     ]--SessionID. Вот его нам и надо! 
28 00 00 00 11 00 02 F0 FE 6B 2С C2 A0 14 CA 28 EE 00 01 4D 01 00
                                          
[       ]--вот это не знаю, что, но оно всегда одинаковое

Из этого ответа нам нужен SessionID. Далее отправляем команду на включение света, которая будет выглядеть так:
Код:
[начало команды]       [  ]--Sequence number            [  ]--канал
80 00 00 00 11 4D 01 00 05 00 31 00 00 08 04 01 00 00 00 01 00 3F
               
[    ]--SessionID                              [  ]--контрольная сумма команды 
                              
[                         ]--команда

В качестве разделителя между частями команды используется 00
На это контроллер ответит:
Код:
[             ]--начало
88 00 00 00 03 00 05 00
                 
[  ]--текущий Sequence number

В принципе можно всегда использовать 01 для Sequence number, а можно и хранить его где-то в глобальной переменной, и при следующем вызове команды добавлять 1, но помнить, что это значение должно быть в HEX-виде. Я заморачиваться на это не стал :)
Теперь, как прикрутить это к МДМ. Я сделал скрипт, такого содержания:
Код:
$ip $params["ip"];
$hello hex2bin("200000001602623AD5EDA301AE082D466141A7F6DCAFD3E600001E");
$port $params["port"];
$cmd $params["cmd"];
$chan $params["chan"];
$sock socket_create(AF_INETSOCK_DGRAMSOL_UDP);
socket_sendto($sock$hellostrlen($hello), 0$ip$port);
socket_recvfrom($sock$bufbin440$ip$port);
$buf bin2hex($bufbin);
$sessionID substr($buf,38,4);
$outhex "8000000011".$sessionID."00".$chan."00";
$off "3100000804020000000100";
$on  "3100000804010000000100";
switch(
$cmd){
 case 
"off";
  
$outcmd$off;
  break;
 case 
"on";
  
$outcmd $on;
  break;
}
$crcdec 0;
for (
$i 0$i <= 21$i+=2) {
    
$crcdec $crcdec hexdec(substr($outcmd,$i,2));
}
$crc dechex($crcdec);
$outhex $outhex.$outcmd.$crc;
$out hex2bin($outhex);
socket_sendto($sock$outstrlen($out), 0$ip$port);
socket_recvfrom($sock$buf160$ip$port);
socket_close($sock); 

Кстати, в ролике про управление кондиционером, автор сделал функцию для преобразования HEX в BIN. Погуглив обратное преобразование, я нашёл, что в РНР это уже всё встроено.
Теперь для включения лампы можно вызывать этот скрипт с параметрами ip=ip_контроллера&port=5987&chan=01&cmd=on
Так как я пользуюсь интеграцией МДМ и HomeKit, которая работает только с "простыми устройствами", управление лампочкой я привязал к Switch1. В методах этого объекта (turnOn и turnOff) я добавил РНР-код вызова скрипта с соответствующими параметрами.
Жаль, что обратной связи нет. В планах поиграть с уровнями яркости, как настрою - отпишу тут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Пт июн 16, 2017 12:43 pm 
Не в сети

Зарегистрирован: Вт май 02, 2017 7:31 am
Сообщения: 60
Благодарил (а): 17 раз.
Поблагодарили: 4 раз.
И снова - здасьти! Немного проапгрейдил скрипт - добавил коменты, причесал и добавил поддержку диммирования.
[Показать] Скрытый текст:
Код:
// Прописываем начальные переменные и переносим в них параметры из строки вызова скрипта
$ip = $params["ip"];
$hello = hex2bin("200000001602623AD5EDA301AE082D466141A7F6DCAFD3E600001E");
$port = $params["port"];
$cmd = $params["cmd"];
$chan = $params["chan"];
$level = str_pad(dechex($params["level"]), 2, '0', STR_PAD_LEFT); // так как нам надо значение в HEX с 0 в начале для значений от 1 до 9, конвертим параметр из DEC в HEX и добавляем 0, если надо

// Прописываем команды
$off = "3100000804020000000100";
$on  = "3100000804010000000100";
$lvl = "3100000803".$level."0000000100";

// Выбираем, какую команду отправлять контроллеру
switch($cmd){
 case "off";
  $outcmd= $off;
  break;
 case "on";
  $outcmd = $on;
  break;
 case "level";
  $outcmd = $lvl;
  break;
}

// Высчитываем контрольную сумму команды
$crcdec = 0;
for ($i = 0; $i <= 21; $i+=2) {
    $crcdec = $crcdec + hexdec(substr($outcmd,$i,2));
}
$crc = dechex($crcdec);

// Общаемся с контроллером
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($sock, $hello, strlen($hello), 0, $ip, $port);
socket_recvfrom($sock, $bufbin, 44, 0, $ip, $port);
$buf = bin2hex($bufbin);
$sessionID = substr($buf,38,4); // Получаем SessionID из ответа контроллера
$outhex = "8000000011".$sessionID."00".$chan."00".$outcmd.$crc; // Собираем полный текст команды контроллеру
$out = hex2bin($outhex); // конвертируем её в BIN
socket_sendto($sock, $out, strlen($out), 0, $ip, $port);
socket_recvfrom($sock, $buf, 16, 0, $ip, $port); // Так как я всегда отправляю команды с SequenceID = 1, то ответ от контроллера не обрабатываю
socket_close($sock);
А вот с цветом не могу понять, что там курили китайцы, когда это придумывали?
Код:
31 00 00 00 01 BA BA BA BA = Set Color to Blue (BA) (FF = Red, D9 = Lavender, BA = Blue, 85 = Aqua, 7A = Green, 54 = Lime, 3B = Yellow, 1E = Orange)
при этом для красного надо командовать так:
Код:
31 00 00 00 01 FF FF FF FF
для зелёного так:
Код:
31 00 00 00 01 7A 7A 7A 7A
именно по 4 раза и не понятно как кодируется цвет? точнее как его перекодировать от обычного #RRGGBB?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Ср июн 21, 2017 8:07 pm 
Не в сети

Зарегистрирован: Сб янв 28, 2017 2:17 pm
Сообщения: 159
Благодарил (а): 12 раз.
Поблагодарили: 5 раз.
cepxuo писал(а):
И снова - здасьти! Немного проапгрейдил скрипт - добавил коменты, причесал и добавил поддержку диммирования.
[Показать] Скрытый текст:
Код:
// Прописываем начальные переменные и переносим в них параметры из строки вызова скрипта
$ip = $params["ip"];
$hello = hex2bin("200000001602623AD5EDA301AE082D466141A7F6DCAFD3E600001E");
$port = $params["port"];
$cmd = $params["cmd"];
$chan = $params["chan"];
$level = str_pad(dechex($params["level"]), 2, '0', STR_PAD_LEFT); // так как нам надо значение в HEX с 0 в начале для значений от 1 до 9, конвертим параметр из DEC в HEX и добавляем 0, если надо

// Прописываем команды
$off = "3100000804020000000100";
$on  = "3100000804010000000100";
$lvl = "3100000803".$level."0000000100";

// Выбираем, какую команду отправлять контроллеру
switch($cmd){
 case "off";
  $outcmd= $off;
  break;
 case "on";
  $outcmd = $on;
  break;
 case "level";
  $outcmd = $lvl;
  break;
}

// Высчитываем контрольную сумму команды
$crcdec = 0;
for ($i = 0; $i <= 21; $i+=2) {
    $crcdec = $crcdec + hexdec(substr($outcmd,$i,2));
}
$crc = dechex($crcdec);

// Общаемся с контроллером
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($sock, $hello, strlen($hello), 0, $ip, $port);
socket_recvfrom($sock, $bufbin, 44, 0, $ip, $port);
$buf = bin2hex($bufbin);
$sessionID = substr($buf,38,4); // Получаем SessionID из ответа контроллера
$outhex = "8000000011".$sessionID."00".$chan."00".$outcmd.$crc; // Собираем полный текст команды контроллеру
$out = hex2bin($outhex); // конвертируем её в BIN
socket_sendto($sock, $out, strlen($out), 0, $ip, $port);
socket_recvfrom($sock, $buf, 16, 0, $ip, $port); // Так как я всегда отправляю команды с SequenceID = 1, то ответ от контроллера не обрабатываю
socket_close($sock); 
А вот с цветом не могу понять, что там курили китайцы, когда это придумывали?
Код:
31 00 00 00 01 BA BA BA BA = Set Color to Blue (BA) (FF = Red, D9 = Lavender, BA = Blue, 85 = Aqua, 7A = Green, 54 = Lime, 3B = Yellow, 1E = Orange
при этом для красного надо командовать так:
Код:
31 00 00 00 01 FF FF FF FF
для зелёного так:
Код:
31 00 00 00 01 7A 7A 7A 7A
именно по 4 раза и не понятно как кодируется цвет? точнее как его перекодировать от обычного #RRGGBB?


Подскажите, куда данный скрипт закидываете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль MiLight
СообщениеДобавлено: Ср июн 21, 2017 9:15 pm 
Не в сети

Зарегистрирован: Вт май 02, 2017 7:31 am
Сообщения: 60
Благодарил (а): 17 раз.
Поблагодарили: 4 раз.
airafree писал(а):
Подскажите, куда данный скрипт закидываете?
Скрипт сохранил в "сценариях" и запускаю его из соответствующего метода объекта. Например из метода turnOn можно запустить скрипт с параметрами ip=ip_контроллера&port=5987&chan=01&cmd=on


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: nick7zmail, VlasVic, Voyager и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB