Страница 5 из 14

Re: Модуль MiLight

Добавлено: Вт окт 17, 2017 5:32 am
havenofear
Если кому интересно, у мменя реализована работа нового WIFI модуля уже больше года. Отправляю команды следующим образом:
SPOILERSPOILER_SHOW
$host = "192.***";
$port = 5987;

$ggcomand = gg ("MiLamp1.Comand");
$arraycmd = explode (",", $ggcomand);

$zoneID = gg ("MiLamp1.Zone");

$PREAMPLE = array(0x80,0x00,0x00,0x00,0x11);
$FILLER = 0x00;

$sesID1 = 0x00;
$sesID2 = 0x00;

$initiate = array(0x20,0x00,0x00,0x00,0x16,0x02,0x62,0x3a,0xd5,0xed,0xa3,0x01,0xae,0x08,0x2d,0x46,0x61,0x41,0xa7,0xf6,0xdc,0xaf,0xfe,0xf7,0x00,0x00,0x1e);
$message = vsprintf(str_repeat('%c', count($initiate)), $initiate);
if ($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) {
$timeout = array('sec'=>2,'usec'=>0);
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$timeout);
socket_sendto($socket, $message, strlen($message), 0, $host, $port);
socket_recvfrom($socket, $buf, 65000, 0, $host, $port);
$sesID1 = bin2hex($buf[19]);
$sesID2 = bin2hex($buf[20]);

// Sequence Number
$seq = $this -> getProperty ('Seq');
sg ("MiLamp1.Seq", $seq+1);
if ($seq == 50) {sg ("MiLamp1.Seq", 0);}

// command build
$cmd1 = $PREAMPLE;
$cmd1[] = hexdec($sesID1);
$cmd1[] = hexdec($sesID2);
$cmd1[] = 0x00;
$cmd1[] = $seq;
$cmd1[] = $FILLER;

$cmd2 = $arraycmd;
$cmd2[] = $zoneID;;
$cmd2[] = 0x00;

$sum = array_sum ($cmd2);
$chksum = $sum & 0xFF;

$cmd = array_merge ($cmd1, $cmd2);
$cmd[] = $chksum;
//send command
$message = vsprintf(str_repeat('%c', count($cmd)), $cmd);
socket_sendto($socket, $message, strlen($message), 0, $host, $port);
socket_recvfrom($socket, $buf, 65000, 0, $host, $port);
socket_close($socket);

}
Сам вычислил команды, которые нужно отправлять (последовательность байт) и вбил их в кнопки...

Если есть какие-то вопросы - пишите

Re: Модуль MiLight

Добавлено: Вс окт 22, 2017 4:13 pm
markovrv
Я тоже нашел способ. Вот пример от разработчиков, рабочий, нужно только ваш айпи вбить. https://github.com/winosaure/MilightAPI ... ilight.php
Были проблемы с настройкой wifi модуля, решаются с помощью настройки программой, указанной выше в этой теме.

Если кому интересно, опишу подробнее.

Re: Модуль MiLight

Добавлено: Вс окт 22, 2017 7:32 pm
Rad81
Почему то стандартный программый под виндосом у меня лента не управляется. И по этому не могу управлять из МД. А с помощью телефона и пульта работает.

Re: Модуль MiLight

Добавлено: Пн окт 23, 2017 1:07 am
markovrv
Rad81 писал(а):Почему то стандартный программый под виндосом у меня лента не управляется. И по этому не могу управлять из МД. А с помощью телефона и пульта работает.
Программа LimitlessLEDv6 находит устройство?
Если не находит - нужно настраивать wifi модуль на милайте.
Если находит, значит команды просто не подходят для Вашей конфигурации. Мне, например, достаточно было поменять "хвосты" команд на эти:
'link' => array (0x07, 0x00, 0x00, 0x00, 0x00, 0x00),
'unlink' => array (0x07, 0x00, 0x00, 0x00, 0x00, 0x00),
'on' => array (0x07, 0x03, 0x01, 0x00, 0x00, 0x00),
'off' => array (0x07, 0x03, 0x02, 0x00, 0x00, 0x00),
'white' => array (0x07, 0x03, 0x05, 0x00, 0x00, 0x00),
'blue' => array (0x07, 0x01, 0xBA, 0xBA, 0xBA, 0xBA),
'aqua' => array (0x07, 0x01, 0x85, 0x85, 0x85, 0x85),
'red' => array (0x07, 0x01, 0xFF, 0xFF, 0xFF, 0xFF),
'lavender' => array (0x07, 0x01, 0xD9, 0xD9, 0xD9, 0xD9),
'green' => array (0x07, 0x01, 0x7A, 0x7A, 0x7A, 0x7A),
'lime' => array (0x07, 0x01, 0x54, 0x54, 0x54, 0x54),
'orange' => array (0x07, 0x01, 0x1E, 0x1E, 0x1E, 0x1E),
'yellow' => array (0x07, 0x01, 0x3B, 0x3B, 0x3B, 0x3B),
'brightness' => array (0x07, 0x02, 0x64, 0x00, 0x00, 0x00)
Получилось так:

Re: Модуль MiLight

Добавлено: Ср окт 25, 2017 1:51 pm
havenofear
markovrv писал(а):
Rad81 писал(а):Почему то стандартный программый под виндосом у меня лента не управляется. И по этому не могу управлять из МД. А с помощью телефона и пульта работает.
Программа LimitlessLEDv6 находит устройство?
Если не находит - нужно настраивать wifi модуль на милайте.
Если находит, значит команды просто не подходят для Вашей конфигурации. Мне, например, достаточно было поменять "хвосты" команд на эти:
Я уже точно не помню, как было у меня, но что-то я тоже менял. Непонятно, почему изначально там неправильные команды вбиты...

Re: Модуль MiLight

Добавлено: Пн окт 30, 2017 2:20 pm
barsmaster
SPOILERSPOILER_SHOW

Код: Выделить всё

// Прописываем начальные переменные и переносим в них параметры из строки вызова скрипта
$ip = $params["ip"];
$hello = hex2bin("200000001602623AD5EDA301AE082D466141A7F6DCAFD3E600001E");
$cmd = $params["cmd"];
$level = str_pad(dechex($params["level"]), 2, '0', STR_PAD_LEFT); // так как нам надо значение в HEX с 0 в начале для значений от 1 до 9, конвертим параметр из DEC в HEX и добавляем 0, если надо

$cct = str_pad(dechex($params["cct"]), 2, '0', STR_PAD_LEFT); // так как нам надо значение в HEX с 0 в начале для значений от 1 до 9, конвертим параметр из DEC в HEX и добавляем 0, если надо

$DECcolor = $params["color"];
if( !$params["port"] ) {
   $port = 5987; // Порт по умолчанию 5987
} else {
  $port = $params["port"]; 
}
if( !$params["chan"] ) {
   $chan = "01"; // Канал по умолчанию 01
} else {
  $chan = $params["chan"]; 
}
if( !$params["mo"] ) {
   $mo = "05"; // Режим по умолчанию 05 - переключение цветов
} else {
  $mo = $params["mo"]; 
}

//Вычисляем цвет
$color = dechex($DECcolor);

// Прописываем команды
$off = "310000080402000000".$chan."00";
$on  = "310000080401000000".$chan."00";
$lvl = "3100000803".$level."000000".$chan."00";
$clr = "3100000801".$color.$color.$color.$color.$chan."00";
$night = "310000080405000000".$chan."00";
$white = "310000080564000000".$chan."00";
$cct = "3100000805".$cct."000000".$chan."00";
$disco = "3100000806".$mo."000000".$chan."00";
$slower = "310000080404000000".$chan."00";
$faster = "310000080403000000".$chan."00";


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

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

if( strlen(dechex($crcdec)) > 2){
    $crc1 = dechex($crcdec);
    $crc = substr($crc1,1,2);
} else {
    $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."000100".$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);
Немного модифицировал код, добавил поддержку плавного изменения температуры белого.
Вызывается

Код: Выделить всё

http://192.168.0.114/objects/?script=MiLight&ip=192.168.0.115&port=5987&cmd=cct&chan=01&cct=100   
где cmd=cct = новая команда
cct=100 величина от 1 до 100 меняет температуру белого.

Re: Модуль MiLight

Добавлено: Чт ноя 09, 2017 7:46 pm
EvgenySM
Уважаемые форумчане, скажите, а кто-нибудь научился на новых WiFi контроллерах milight менять цвет не спомощью слайдера и палитры, а с помощью стандартного элемента выбора цвета в меню?

Re: Модуль MiLight

Добавлено: Чт ноя 09, 2017 9:16 pm
Rad81
markovrv писал(а):Я тоже нашел способ. Вот пример от разработчиков, рабочий, нужно только ваш айпи вбить. https://github.com/winosaure/MilightAPI ... ilight.php
Были проблемы с настройкой wifi модуля, решаются с помощью настройки программой, указанной выше в этой теме.

Если кому интересно, опишу подробнее.
Была бы хорошо если напишите подробно. Еще лучше будет если скриншотами покажете.

Re: Модуль MiLight

Добавлено: Пт ноя 10, 2017 12:59 am
markovrv
Хорошо, пишу подробнее.
1. Сбросим настройки на стандартные.
2. Скачаем и запустим программу LimitlessLEDv6
3. Подключаемся к wifi сети milight3.0-трампампам
4. В программе LimitlessLEDv6 нажимаем кнопку Изображение
5. Смотрим лог. Если увидели это Изображение, идем дальше, если нет - что-то не так с wifi подключением, перезагрузитесь и начните снова.
6. Нажимаем Изображение чтобы знать логин - пароль админки модуля.
7. Жмем Изображение, откроется админ-панель wifi-модуля.
Изображение
На этой странице у вас не будет пока раздела sta mode, его надо настроить. см. скрины:
Изображение
Здесь пока выбираем ap+sta mode. После успешной настройки, чтобы не раздавать лишний wifi, можно будет зайти сюда и поменять на sta mode.

Чуть не забыл -- нужно статический айпи настроить на роутере для милайта
Изображение
Настраивайтесь на ваш wifi. После успешного подключения запомните полученный айпи адрес, пригодится

Изображение
Здесь не трогаем serial port, нам нужен Server Address. Если он не совпадает с полученным от роутера, надо поменять на него. Если поле не активно, попробуйте сменить протокол Protocol на другой и сменить адрес, сохранить и поменять протокол обратно на tcp-server, сохранить снова.

Настройка окончена, перезагрузите модуль, подключитесь к wifi вашего роутера, зайдите по адресу, который вбивали выше. Если видите админку модуля, всё работает!

Re: Модуль MiLight

Добавлено: Пт ноя 10, 2017 12:51 pm
Rad81
Прошу прощения за наглость . Но хотелось бы именно увидеть интеграции Махором скриншотами.
Заранее спасибо