Освещение Mi-Light (MiLight)
Добавлено: Чт дек 04, 2014 12:35 pm
Приветствую,
На днях удалось выбрать время и поиграться с системой управления освещением Mi-Light от наших китайских друзей.
Система представляет собой свето-диодные лампочки со встроенным приёмником (белые с регулировкой теплоты света и RGBW), пульты и Wi-Fi контроллер. Всё работает на частоте 2.7GHz (если правильно помню)
Выглядит оно примерно вот так:
"Традиционная" схема использования: лампочка привязывается либо к пульту напрямую либо к WiFi-контроллеру с помощью мобильного приложения (им же и управляется). Есть странная особенность -- пульты от белых ламп и от RGBW ламп не совместимы, т.е. указанным на фото пультом белой лампочкой управлять нельзя. Wi-Fi контроллер поддерживает все виды ламп. Кстати, кроме ламп ещё в ассортименте имеется контроллер RGB-лент, который так же управляется либо пультом либо через WiFi-контроллер.
WiFi-контроллер (и пульт) может управлять 4-мя лампочками либо 4-мя группами ламп (т.е. есть 4 независимых канала).
По цене, если брать усреднённо, то около $20 за отдельную единицу (пульт, лампочка, wifi-контроллер) - это уже у нас в Минске, думаю на каком aliexpress дешевле будет.
Самое интересное -- после включения WiFi-контроллера в домашнюю сеть, он может легко управляться из MajorDoMo.
Ниже простой пример использования. Я не использовал все возможности контроллера, т.к. пока было время только на проверку базовых команд -- включение и выключение лампочки, но желающие по аналогии могут дополнить другими возможностями.
Итак, в классе Relays я создал новый под-класс MiLight и объект MiLamp1
В самом классе прописал следующие дополнительные свойства:
В методах добавил метод sendCommand и переписал методы turnOn и turnOff:
Коды методов:
Далее в объекте MiLamp1 установил данные лампочки, предварительно с помощью приложения привязанной к зоне 1 WiFi-контроллера:
Собственно, практически всё. Напоследок добавил пункт в меню для управления:
Который успешно заработал в интерфейсе:
Работает очень быстро и достаточно надёжно. Расстояние не замерял, но при нахождении контроллера и лампочек в одной комнате, всё работает отлично и без сбоев. С пультом уходил довольно далеко (около 10 метров + 1 кирпичная стена) и всё ещё работало без сбоев.
Предварительные выводы: вполне себе недорогая и достаточно удобная в монтаже система для управления светом. Явный минус -- отсутствие простого способа управления через стандартный выключатель.
Спасибо за внимание
На днях удалось выбрать время и поиграться с системой управления освещением Mi-Light от наших китайских друзей.
Система представляет собой свето-диодные лампочки со встроенным приёмником (белые с регулировкой теплоты света и RGBW), пульты и Wi-Fi контроллер. Всё работает на частоте 2.7GHz (если правильно помню)
Выглядит оно примерно вот так:
"Традиционная" схема использования: лампочка привязывается либо к пульту напрямую либо к WiFi-контроллеру с помощью мобильного приложения (им же и управляется). Есть странная особенность -- пульты от белых ламп и от RGBW ламп не совместимы, т.е. указанным на фото пультом белой лампочкой управлять нельзя. Wi-Fi контроллер поддерживает все виды ламп. Кстати, кроме ламп ещё в ассортименте имеется контроллер RGB-лент, который так же управляется либо пультом либо через WiFi-контроллер.
WiFi-контроллер (и пульт) может управлять 4-мя лампочками либо 4-мя группами ламп (т.е. есть 4 независимых канала).
По цене, если брать усреднённо, то около $20 за отдельную единицу (пульт, лампочка, wifi-контроллер) - это уже у нас в Минске, думаю на каком aliexpress дешевле будет.
Самое интересное -- после включения WiFi-контроллера в домашнюю сеть, он может легко управляться из MajorDoMo.
Ниже простой пример использования. Я не использовал все возможности контроллера, т.к. пока было время только на проверку базовых команд -- включение и выключение лампочки, но желающие по аналогии могут дополнить другими возможностями.
Итак, в классе Relays я создал новый под-класс MiLight и объект MiLamp1
В самом классе прописал следующие дополнительные свойства:
В методах добавил метод sendCommand и переписал методы turnOn и turnOff:
Коды методов:
Коды методовПоказать
Код метода turnOn
Код метода turnOff
Код метода sendCommand (в комментариях оставил все возможные коды команд для дальнейшего расширения)
Код: Выделить всё
$this->callMethod('sendCommand',array('command'=>'on'));
Код: Выделить всё
$this->callMethod('sendCommand',array('command'=>'off'));
Код: Выделить всё
$command=$params['command'];
$host=$this->getProperty('Host');
$type=(int)$this->getProperty('LampType');
$zone=(int)$this->getProperty('Zone');
$port=8899;
$commands='';
if ($type==0 && $command=='on' && $zone==1) {
//&H38
$commands=chr(0x38);
}
if ($type==0 && $command=='off' && $zone==1) {
//{&H3B
$commands=chr(0x3B);
}
if ($commands) {
$commands.=chr(0).chr(0x55);
$fp = pfsockopen( "udp://".$host, $port, $errno, $errstr );
if ($fp) {
socket_set_timeout ($fp, 10);
$write = fwrite( $fp, $commands);
fclose($fp);
} else {
debmes("error opening socket for milight at $host");
}
} else {
debmes("command '$command' not set for $host / $type / $zone");
}
/*
Friend LimitlessLED_Command_WHITE_ALLOFF As Byte() = New Byte() {&H39, &H0, &H55}
Friend LimitlessLED_Command_WHITE_ALLON As Byte() = New Byte() {&H35, &H0, &H55}
Friend LimitlessLED_Command_WHITE_BRIGHTNESS_UP As Byte() = New Byte() {&H3C, &H0, &H55}
Friend LimitlessLED_Command_WHITE_BRIGHTNESS_DOWN As Byte() = New Byte() {&H34, &H0, &H55}
Friend LimitlessLED_Command_WHITE_WARM_WHITE_INCREASE As Byte() = New Byte() {&H3E, &H0, &H55}
Friend LimitlessLED_Command_WHITE_COOL_WHITE_INCREASE As Byte() = New Byte() {&H3F, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_1_ALL_ON As Byte() = New Byte() {&H38, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_1_ALL_OFF As Byte() = New Byte() {&H3B, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_2_ALL_ON As Byte() = New Byte() {&H3D, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_2_ALL_OFF As Byte() = New Byte() {&H33, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_3_ALL_ON As Byte() = New Byte() {&H37, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_3_ALL_OFF As Byte() = New Byte() {&H3A, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_4_ALL_ON As Byte() = New Byte() {&H32, &H0, &H55}
Friend LimitlessLED_Command_WHITE_GROUP_4_ALL_OFF As Byte() = New Byte() {&H36, &H0, &H55}
Friend LimitlessLED_Command_WHITE_NIGHT_MODE_ALL As Byte() = New Byte() {&H39, &H0, &H55} '100ms followed by: 0xB9
Friend LimitlessLED_Command_WHITE_NIGHT_MODE_ALL_PRESSAndHOLD As Byte() = New Byte() {&HBB, &H0, &H55}
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_1 As Byte() = New Byte() {&H3B, &H0, &H55} '100ms followed by: 0xBB
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_1_PRESSAndHOLD As Byte() = New Byte() {&HBB, &H0, &H55}
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_2 As Byte() = New Byte() {&H33, &H0, &H55} '100ms followed by: 0xB3
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_2_PRESSAndHOLD As Byte() = New Byte() {&HB3, &H0, &H55}
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_3 As Byte() = New Byte() {&H3A, &H0, &H55} '100ms followed by: 0xBA
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_3_PRESSAndHOLD As Byte() = New Byte() {&HBA, &H0, &H55}
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_4 As Byte() = New Byte() {&H36, &H0, &H55} '100ms followed by: 0xB6
Friend LimitlessLED_Command_WHITE_NIGHT_SAVER_MODE_GROUP_4_PRESSAndHOLD As Byte() = New Byte() {&HB6, &H0, &H55}
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_ALL As Byte() = New Byte() {&H35, &H0, &H55} '100ms followed by: 0xB5
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_ALL_PRESSAndHOLD As Byte() = New Byte() {&HB5, &H0, &H55}
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_1 As Byte() = New Byte() {&H38, &H0, &H55} '100ms followed by: 0xB8
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_1_PRESSAndHOLD As Byte() = New Byte() {&HB8, &H0, &H55}
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_2 As Byte() = New Byte() {&H3D, &H0, &H55} '100ms followed by: 0xBD
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_2_PRESSAndHOLD As Byte() = New Byte() {&HBD, &H0, &H55}
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_3 As Byte() = New Byte() {&H37, &H0, &H55} '100ms followed by: 0xB7
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_3_PRESSAndHOLD As Byte() = New Byte() {&HB7, &H0, &H55}
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_4 As Byte() = New Byte() {&H32, &H0, &H55} '100ms followed by: 0xB2
Friend LimitlessLED_Command_WHITE_FULL_BRIGHTNESS_GROUP_4_PRESSAndHOLD As Byte() = New Byte() {&HB2, &H0, &H55}
Friend LimitlessLED_Command_RGB_ALLOFF As Byte() = New Byte() {&H21, &H0, &H55}
Friend LimitlessLED_Command_RGB_ALLON As Byte() = New Byte() {&H22, &H0, &H55}
Friend LimitlessLED_Command_RGB_BRIGHTNESS_UP As Byte() = New Byte() {&H23, &H0, &H55}
Friend LimitlessLED_Command_RGB_BRIGHTNESS_DOWN As Byte() = New Byte() {&H24, &H0, &H55}
Friend LimitlessLED_Command_RGB_DISCO_SPEED_FASTER As Byte() = New Byte() {&H25, &H0, &H55}
Friend LimitlessLED_Command_RGB_DISCO_SPEED_SLOWER As Byte() = New Byte() {&H26, &H0, &H55}
Friend LimitlessLED_Command_RGB_DISCO_MODE_NEXT As Byte() = New Byte() {&H27, &H0, &H55}
Friend LimitlessLED_Command_RGB_DISCO_MODE_PREVIOUS As Byte() = New Byte() {&H28, &H0, &H55}
Friend LimitlessLED_Command_RGB_SET_COLOR As Byte() = New Byte() {&H20, &H0, &H55}
Friend LimitlessLED_Command_RGBW_ALLOFF As Byte() = New Byte() {&H41, &H0, &H55}
Friend LimitlessLED_Command_RGBW_ALLON As Byte() = New Byte() {&H42, &H0, &H55}
Friend LimitlessLED_Command_RGBW_DISCO_SPEED_SLOWER As Byte() = New Byte() {&H43, &H0, &H55}
Friend LimitlessLED_Command_RGBW_DISCO_SPEED_FASTER As Byte() = New Byte() {&H44, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_1_ALL_ON As Byte() = New Byte() {&H45, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_1_ALL_OFF As Byte() = New Byte() {&H46, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_2_ALL_ON As Byte() = New Byte() {&H47, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_2_ALL_OFF As Byte() = New Byte() {&H48, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_3_ALL_ON As Byte() = New Byte() {&H49, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_3_ALL_OFF As Byte() = New Byte() {&H4A, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_4_ALL_ON As Byte() = New Byte() {&H4B, &H0, &H55}
Friend LimitlessLED_Command_RGBW_GROUP_4_ALL_OFF As Byte() = New Byte() {&H4C, &H0, &H55}
Friend LimitlessLED_Command_RGBW_DISCO_MODE_NEXT As Byte() = New Byte() {&H4D, &H0, &H55}
Friend LimitlessLED_Command_RGBW_WHITE_ALL As Byte() = New Byte() {&H42, &H0, &H55} '100ms followed by: 0xC2
Friend LimitlessLED_Command_RGBW_WHITE_ALL_PRESSAndHOLD As Byte() = New Byte() {&HC2, &H0, &H55}
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_1 As Byte() = New Byte() {&H45, &H0, &H55} '100ms followed by: 0xC5
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_1_PRESSAndHOLD As Byte() = New Byte() {&HC5, &H0, &H55}
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_2 As Byte() = New Byte() {&H47, &H0, &H55} '100ms followed by: 0xC7
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_2_PRESSAndHOLD As Byte() = New Byte() {&HC7, &H0, &H55}
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_3 As Byte() = New Byte() {&H49, &H0, &H55} '100ms followed by: 0xC9
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_3_PRESSAndHOLD As Byte() = New Byte() {&HC9, &H0, &H55}
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_4 As Byte() = New Byte() {&H4B, &H0, &H55} '100ms followed by: 0xCB
Friend LimitlessLED_Command_RGBW_WHITE_GROUP_4_PRESSAndHOLD As Byte() = New Byte() {&HCB, &H0, &H55}
Friend LimitlessLED_Command_RGBW_SET_BRIGHTNESS As Byte() = New Byte() {&H4E, &H0, &H55}
Friend LimitlessLED_Command_RGBW_SET_COLOR As Byte() = New Byte() {&H40, &H0, &H55}
Friend RGBW_Violet As Integer = &H0
Friend RGBW_RoyalBlue As Integer = &H10
Friend RGBW_LightSkyBlue As Integer = &H20
Friend RGBW_Aqua As Integer = &H30
Friend RGBW_AquaMarine As Integer = &H40
Friend RGBW_SeaGreen As Integer = &H50
Friend RGBW_Green As Integer = &H60
Friend RGBW_LimeGreen As Integer = &H70
Friend RGBW_Yellow As Integer = &H80
Friend RGBW_Goldenrod As Integer = &H90
Friend RGBW_Orange As Integer = &HA0
Friend RGBW_Red As Integer = &HB0
Friend RGBW_Pink As Integer = &HC0
Friend RGBW_Fuchsia As Integer = &HD0
Friend RGBW_Orchid As Integer = &HE0
Friend RGBW_Lavender As Integer = &HF0
*/
Собственно, практически всё. Напоследок добавил пункт в меню для управления:
Который успешно заработал в интерфейсе:
Работает очень быстро и достаточно надёжно. Расстояние не замерял, но при нахождении контроллера и лампочек в одной комнате, всё работает отлично и без сбоев. С пультом уходил довольно далеко (около 10 метров + 1 кирпичная стена) и всё ещё работало без сбоев.
Предварительные выводы: вполне себе недорогая и достаточно удобная в монтаже система для управления светом. Явный минус -- отсутствие простого способа управления через стандартный выключатель.
Спасибо за внимание