Управление лампочками Yeelight

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

BaRoN
Сообщения: 6
Зарегистрирован: Ср мар 14, 2018 9:35 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Управление лампочками Yeelight

Сообщение BaRoN » Ср мар 14, 2018 9:59 am

Gelezako писал(а):ясно пасиб, видимо эта лампа либо не имеет общих методов и свойств, либо вообще не поддерживает API Yeelight :(
Кста, а управление происходит через блютус или вайфай?
Вопрос, конечно, не ко мне обращён, но всё же вклинюсь в дискуссию: через Wi-Fi.

У меня тоже не появилось устройство, хотя честно говоря Majordomo я поставил вчера ночью, очень хотелось спать, да и ставил руками, а не автоскриптом, да ещё и не совсем на чистый дебиан/убунту - так что проблема запросто может быть в моём компьютере. Стороннее управление включено, через Алексу управление работает. У меня проблема в cycle.php, точнее в вызываемом им cycle_Yeelight.php:

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

$Yeelight_module = new Yeelight();
$Yeelight_module->getConfig();
$tmp = SQLSelectOne("SELECT ID FROM  LIMIT 1"); 
Но потом чтобы исключить проблему в мажордомо, я сваял собственный файл следующего содержания:

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

<?php
require_once('Yeelight_library.php');
$y = new YeelightClient();
$prop = $y->search_prop();
var_export($prop); 
И он выводит пустой массив. Быстренько подебажил и обнаруживается, что тело этого цикла while вообще не выполнялось:

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

        while ($this->socket->selectRead($this->readTimeout)) {
            $data = $this->formatResponse($this->socket->read(self::PACKET_LENGTH));
            $bulb = $this->bulbFactory->create($data);
            $this->bulbList[$bulb->getIp()] = $bulb;
                        $this->bulbListProp[$bulb->getIp()] = $data;                    
        }         
С мажордомой у меня опыт нулевой, а с пхп околонулевой, но зато есть от Yeelight и лампочки и потолочный светильник, и примерно 15 лет опыта с Java - попробую поразбираться и сам.

Пока что обезьяньим методом переделал сокет на блокирующий, и результат получился такой:

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

array (
  '192.168.1.167' => 
  array (
',  'HTTP/1.1 200 OK' => 'HTTP/1.1 200 OK
',  'Cache-Control' => ' max-age=3600
',  'Date' => ' 
',  'Ext' => ' 
',  'Location' => ' yeelight://192.168.1.167:55443
',  'Server' => ' POSIX UPnP/1.0 YGLC/1
',  'id' => ' 0x0000000003609487
',  'model' => ' ceiling1
',  'fw_ver' => ' 180
',  'support' => ' get_prop set_default set_power toggle set_bright set_scene cron_add cron_get cron_del start_cf stop_cf set_ct_abx set_name set_adjust set_ps set_wrgb bg_set_wrgb suicide set_test
',  'power' => ' off
',  'bright' => ' 100
',  'color_mode' => ' 2
',  'ct' => ' 4000
',  'rgb' => ' 0
',  'hue' => ' 0
',  'sat' => ' 0
    'name' => '',
  ),
) 
smart_g
Сообщения: 292
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 15 раз
Поблагодарили: 33 раза

Re: Управление лампочками Yeelight

Сообщение smart_g » Ср мар 14, 2018 11:27 am

Попробуйте поработать с питоновским скриптом с сайта yeelight: https://www.yeelight.com/en_US/developer. У меня после включения режима разработчика он заработал сразу. Дальше уже разбирался с MD
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Управление лампочками Yeelight

Сообщение skysilver » Ср мар 14, 2018 12:19 pm

Если не лениво достать токен лампы, то можно проверить работу в модуле miIO.
За это сообщение автора skysilver поблагодарил:
BaRoN (Ср мар 14, 2018 5:34 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
BaRoN
Сообщения: 6
Зарегистрирован: Ср мар 14, 2018 9:35 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Управление лампочками Yeelight

Сообщение BaRoN » Ср мар 14, 2018 12:25 pm

Ага, попробую. Правда, конкретно у меня ответ, судя по всему, нашёлся в Google: http://forum.yeelight.com/t/bulb-stops- ... inutes/702
Похоже, светильник начал отвечать не после перевода на блокирующие сокеты, а после ночного сна. А потом он перестаёт отвечать: ни когда я просто шлю мультикастом стандартный SSDP discovery, ни на запросы от этого модуля. Но у меня как раз OpenWRT на роутере, и как раз не отключен multicast_snooping.
Возможно,

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

echo "0" > /sys/devices/virtual/net/br-lan/bridge/multicast_snooping
поможет: узнаю чуть позже.
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Управление лампочками Yeelight

Сообщение Gelezako » Ср мар 14, 2018 12:41 pm

BaRoN писал(а):У меня проблема в cycle.php, точнее в вызываемом им cycle_Yeelight.php
Никакой проблемы в cycle_Yeelight.php у вас быть не может, он полностью пустой и в нём нет никакой логики поиска устройств. Стартовать его нет смысла. Файл добавлен для будущих версий что бы получать актуальные состояния с лампочек.
Если и ковырять то файлы:
Yeelight_library.php - сам клиент
Yeelight.class.php - тут в методе install() происходит поиск девайсов, создаётся класс (раздел объекты в Мажордомо), объекты (устройства) их свойства и методы.
BaRoN писал(а):Быстренько подебажил и обнаруживается, что тело этого цикла while вообще не выполнялось:
Поиск осуществляется один единственный раз - при установке модуля. Поэтому если в момент установки модуля у вас не была включена лампочка, либо вы включили режим разработчика после установки модуля, то устройство скорей всего не будет найдено. Самый простой способ инициировать поиск ещё раз, это зайти в раздел "Модули", найти там Yeelight и нажать реинстал. Позже попробую добавить кнопку сканирования новых устройств.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
BaRoN
Сообщения: 6
Зарегистрирован: Ср мар 14, 2018 9:35 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Управление лампочками Yeelight

Сообщение BaRoN » Ср мар 14, 2018 2:06 pm

Отчитываюсь по результатам:
1) После отключения multicast snooping в OpenWRT, ответ на SSDP search стал стабильным, успевает выполниться за одну секунду (таймаут по умолчанию).

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

echo "0" > /sys/devices/virtual/net/br-lan/bridge/multicast_snooping
2) У моего потолочного светильника (маленького) модель определяется как ceiling1, а не ceiling. Поменял - начало определяться.
Отправил pull request.
BaRoN
Сообщения: 6
Зарегистрирован: Ср мар 14, 2018 9:35 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Управление лампочками Yeelight

Сообщение BaRoN » Ср мар 14, 2018 5:39 pm

skysilver писал(а):Если не лениво достать токен лампы, то можно проверить работу в модуле miIO.

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

root@one:~/php-miio# php miio-cli.php --discover all
 IP 192.168.1.116 DevType 04ab Serial 53c4 Token 350c2f4cfbba7e6a621bb4fb01de6715
 IP 192.168.1.167 DevType 0360 Serial 9487 Token 00000000000000000000000000000000
192.168.1.116 это, вероятно, гейтвей, который я было попробовал поставить для опытов %). А 192.168.1.167 лампочка, но что-то как-то 00000000000000000000000000000000 не похож на валидный токен.
Но вроде как уже определилось через SSDP, и даже управление заработало. На удивление быстрее, чем когда я на смартфоне в кнопки тыкаю.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Управление лампочками Yeelight

Сообщение skysilver » Ср мар 14, 2018 6:00 pm

Есть же модуль в МД, зачем в консоль лезть? ))

Токен лампа не вещает значит, поэтому его только из базы Михом выдергивать.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
BaRoN
Сообщения: 6
Зарегистрирован: Ср мар 14, 2018 9:35 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Управление лампочками Yeelight

Сообщение BaRoN » Чт мар 15, 2018 10:55 am

skysilver писал(а):Есть же модуль в МД, зачем в консоль лезть? ))
Не знаю :) Мне самым очевидным показался именно такой способ. Я часто в консоли лазию :-)
Потом нашёл, что можно по HTTP дёрнуть метод on_off у объекта, созданного модулем YeeLight, но он светильник только выключает.
В общем, ещё разбираться надо.
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Управление лампочками Yeelight

Сообщение Gelezako » Чт мар 15, 2018 12:06 pm

BaRoN писал(а): 2) У моего потолочного светильника (маленького) модель определяется как ceiling1, а не ceiling. Поменял - начало определяться.
Отправил pull request.
Вспомнил, оказывается я делал поддержку всех известных устройств от Yeelight. Нашёл в их документации названия всех устройств и добавил. Среди них было ваше устройство, оно называлось ceiling. Очень странно что у вас оно называется ceiling1. В Любом случае я принял pull request.

На страничке модуля устройство теперь отображается ?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Ответить