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

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

Модератор: immortal

smart_g
Сообщения: 292
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 15 раз
Поблагодарили: 33 раза

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

Сообщение smart_g » Пт дек 22, 2017 11:02 am

Задам вопрос здесь, никак не могу найти на форуме. Как объединить несколько лампочек по свойству status и bright на одну кнопку и слайдер?
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение cahek2202 » Сб дек 30, 2017 12:18 am

Привет! Все с наступающим Новым Годом! Нужна помощь знатоков php) в общем попытался сделать прослушку TCP порта. Результат есть, но не совсем тот, какой хотелось бы. Пока смог победить только для одного устройства. При запуске кода через скрипт все работает, свойства со светильника читает (потолочный светильник), на сценах и в меню все обновляется. Попытался добавить в cycle_Yeelight.php. Стала вываливаться такая ошибка:

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

Closing thread: exec php -q ./scripts/cycle_Yeelight.php --params "a:0:{}">>/var/www/debmes/log_2017-12-30-cycle_Yeelight.php.txt
что самое интересное - после удаления того что вставлял ошибка так и осталась. Может это так и было?
В общем пока нужно победить этот косяк, потом буду думать как слушать сразу несколько устройств.
Может кто побыстрей справится - вот мой рабочий код:

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

$socket=['IP'=>'192.168.1.60',
        'PORT'=>55443];
$IP = $socket['IP'];
$port = $socket['PORT'];
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>0,"usec"=>5000000));
$result = socket_connect($socket, $IP, $port);
$read_buf = '';
$res = socket_recv($socket, $read_buf, 2048, 0);
$res=json_decode($read_buf,true);
$status=$res["params"]["power"];
$bright=$res["params"]["bright"];
$ct=$res["params"]["ct"];
$rgb=$res["params"]["rgb"];
if($status){
    if($status=='on'){sg('Xiaomi_hall.status',1);}
    if($status=='off'){sg('Xiaomi_hall.status',0);}
    }
if($bright){
    sg('Xiaomi_hall.bright',$bright);
    }
if($ct){
    sg('Xiaomi_hall.ct',$ct);
    } 
если есть какие косяки - буду рад выслушать, учебник по php только вчера читать начал))

З.Ы. Спустя 3 часа.

Создал файл cycle_Yeelight_monitor.php в нем организовал прослушку порта, правда пока только для одного девайса (на каждый можно создать свой исполняемый файл). Все работает, свойства обновляет по команде с пульта. рабочий файл во вложении, заменить только IP и глобальные переменные для своего девайса.
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

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

Сообщение Gelezako » Сб дек 30, 2017 4:04 pm

cahek2202 писал(а): Создал файл cycle_Yeelight_monitor.php в нем организовал прослушку порта, правда пока только для одного девайса (на каждый можно создать свой исполняемый файл). Все работает, свойства обновляет по команде с пульта. рабочий файл во вложении, заменить только IP и глобальные переменные для своего девайса.
а можно пояснить для самых маленьких? Зачем вы организовываете прослушку порта? Какую задачу вы решаете? И ещё, в посте нет никакого вложения. Вы имели ввиду блок "Код"?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение cahek2202 » Сб дек 30, 2017 4:43 pm

Gelezako писал(а):
cahek2202 писал(а): Создал файл cycle_Yeelight_monitor.php в нем организовал прослушку порта, правда пока только для одного девайса (на каждый можно создать свой исполняемый файл). Все работает, свойства обновляет по команде с пульта. рабочий файл во вложении, заменить только IP и глобальные переменные для своего девайса.
а можно пояснить для самых маленьких? Зачем вы организовываете прослушку порта? Какую задачу вы решаете? И ещё, в посте нет никакого вложения. Вы имели ввиду блок "Код"?
Чтобы получить обратную связь от устройств yeelight. Например при изменении состояния люстры через mihome или блютус пульт комплектный, данные в md становятся уже неактуальными. А все устройства yeelight отправляют в порт 55443 данные об изменении состояния, которые я и читаю этим циклом. Нет, файл видимо не прикрепился, до дома доберусь - выложу.

Отправлено с моего MI 5 через Tapatalk
smart_g
Сообщения: 292
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 15 раз
Поблагодарили: 33 раза

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

Сообщение smart_g » Сб дек 30, 2017 5:15 pm

Заморочился управлением люстрой из ламп YeeLight. Если использовать конструкцию
setGlobal("Bulb_0x1.status",1);
setGlobal("Bulb_0x2.status",1);
callMethod("Bulb_0x1.on_off");
callMethod("Bulb_0x2.on_off");
то не комфортно, потому что идет плавное включение каждой лампы.

В описании управления лампами написано "Пример запроса: {"id": 1, "method": "set_power", "params": ["on", "effect", duration]}" при этом
если effect = "sudden" (внезапное) а не "smooth" (гладкое) то параметр duration игнорируется.
Изменил метод on_off, заменив smooth на sudden , но почему то не помогло. А вот уменьшение duration сработало.
Лампы включаются выключаются синхронно, во всяком случае глаз задержки не замечает.
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

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

Сообщение Gelezako » Сб дек 30, 2017 6:58 pm

cahek2202 писал(а):Чтобы получить обратную связь от устройств yeelight. Например при изменении состояния люстры через mihome или блютус пульт комплектный, данные в md становятся уже неактуальными. А все устройства yeelight отправляют в порт 55443 данные об изменении состояния, которые я и читаю этим циклом. Нет, файл видимо не прикрепился, до дома доберусь - выложу.
ясно, спасибо, буду ждать ваш атачмент, попробую на своихлампочках
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение cahek2202 » Сб дек 30, 2017 11:30 pm

Gelezako писал(а):
cahek2202 писал(а):Чтобы получить обратную связь от устройств yeelight. Например при изменении состояния люстры через mihome или блютус пульт комплектный, данные в md становятся уже неактуальными. А все устройства yeelight отправляют в порт 55443 данные об изменении состояния, которые я и читаю этим циклом. Нет, файл видимо не прикрепился, до дома доберусь - выложу.
ясно, спасибо, буду ждать ваш атачмент, попробую на своихлампочках
Наконец добрался до компа... Вот файлик
Вложения
cycle_Yeelight_monitor_рабочий.rar
(874 байт) 170 скачиваний
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

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

Сообщение Gelezako » Вт янв 02, 2018 3:46 pm

cahek2202 писал(а): Наконец добрался до компа... Вот файлик
Спасибо за код, вот пытаюсь понять как он работает. Вижу что у вас идёт жёсткая привязка к имени объекта "Xiaomi_hall". Если вы пробовали ставить модуль, который я оформил из готового класса от erandess, то могли заметить что я изначально включил в него шаблонный файл с циклом, который генерирует помощник создания модулей. Так же модуль динамически сам создаёт столько объектов с уникальным именем сколько он сможет найти устройств в сети. В вашем примере я так понимаю участвует только одно устройство и имя объекта жёстко зашито. Я попробовал подставить один из своих объектов, заменил IP на адрес на тот где установлен МЖД и пробую запустить цикл в ручную. Но по какой-то причине он не запускается, подскажите куда копать?

https://github.com/Gelezako/MajorDomo-Y ... elight.php
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
cahek2202
Сообщения: 23
Зарегистрирован: Пт окт 07, 2016 7:35 pm
Откуда: Москва
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение cahek2202 » Вт янв 02, 2018 7:23 pm

Gelezako писал(а):
cahek2202 писал(а): Наконец добрался до компа... Вот файлик
Спасибо за код, подскажите куда копать?

https://github.com/Gelezako/MajorDomo-Y ... elight.php
Да, на данный момент идет жесткая привязка, потому что это пока тестовая версия, сюда выложил полуфабрикат, чтобы если кто хорошо знаком с php помог, подсказал возможно некоторые моменты, потому что я сам неделю назад впервые открыл учебник по php. С Вашим циклом я пробовал запускать, пока не вышло, решил делать поэтапно и добиться работы хотя бы с одним жестко прописанным устройством. У Вас не работает потому что Вы это добавили в основной цикл Yeelight, а это должен быть отдельный цикл (см. картинку во вложении). И еще важный момент, в этом цикле ...Monitor который, не должно быть строк

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

$latest_check=0;
$checkEvery=5; // poll every 5 seconds

...........................................
   
   if ((time()-$latest_check)>$checkEvery) {
    $latest_check=time();
    echo date('Y-m-d H:i:s').' Polling devices...';
    $Yeelight_module->processCycle();
   }
 
Вложения
Безымянный.jpg
Безымянный.jpg (23.32 КБ) 5854 просмотра
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

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

Сообщение Gelezako » Ср янв 03, 2018 1:51 pm

cahek2202 писал(а):У Вас не работает потому что Вы это добавили в основной цикл Yeelight, а это должен быть отдельный цикл (см. картинку во вложении).
Хм, а почему должен быть отдельный цикл?
cahek2202 писал(а): И еще важный момент, в этом цикле ...Monitor который, не должно быть строк
Попробовал комментировать код, который вы указали, но не помогло, цикл не хочет запускаться :(
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Ответить