SmartLiving.ru

Обсуждение проекта
 
Текущее время: Пт янв 19, 2018 1:03 am

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




Начать новую тему Ответить на тему  [ Сообщений: 162 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 17  След.
Автор Сообщение
СообщениеДобавлено: Чт ноя 02, 2017 10:41 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 954
Откуда: Киров, Россия
Благодарил (а): 169 раз.
Поблагодарили: 444 раз.
Использование библиотеки php-miio в MajorDoMo на примере Philips Light Bulb

1. Подготовительный этап.
1.1. Скачиваем и распаковываем архив с гитхаба https://github.com/skysilver-lab/php-mi ... master.zip.
1.2. На сервере MajorDoMo в каталоге modules создаем каталог miio и копируем в него файлы:
- miio.class.php
- mipacket.class.php
- philipsbulb.class.php
При необходимости mirobot.class.php и philipseyecare2.class.php копируем сюда же.
1.3. Для вновь созданных папки и файлов назначаем владельца (обычно www-data) и права (0644). Если ОС Windows, то пропускаем этот шаг.

2. Объект, свойства и методы.
Для управления лампой я воспользовался стандартным классом Relays.
2.1. В классе Relays создаем объект PhilipsLamp.
2.2. На уровне объекта создаем свойства ip, token и bright. Заполняем свойства ip и token корректными значениями.
2.3. На уровне класса создаем метод getStatus и setBright. На уровне объекта редактируем эти методы, вписывая следующий код:
Метод getStatus
[Показать] Скрытый текст:
Код:
include_once(DIR_MODULES.'miio/philipsbulb.class.php');

$ip = $this->getProperty('ip');
$token = $this->getProperty('token');
$bind_ip = null;
$debug = false;

$bulb = new philipsBulb($ip, $bind_ip, $token, $debug);

if ($bulb->getStatus()) {
    
     if 
(isset($bulb->status['power']) && $bulb->status['power'] != '') {
         if ($bulb->status['power'] == 'off') { $this->setProperty('status', 0); $this->setProperty('statusText', 'Выключено'); }
         if ($bulb->status['power'] == 'on')  { $this->setProperty('status', 1); $this->setProperty('statusText', 'Включено'); }
    }
     
     if 
(isset($bulb->status['bright']) && $bulb->status['bright'] != '') $this->setProperty('bright', $bulb->status['bright']);
    if (isset($bulb->status['cct']) && $bulb->status['cct'] != '') $this->setProperty('cct', $bulb->status['cct']);

}
 else say("Статус настольной лампы не получен. Ошибка: $bulb->error", 0);
Метод setBright
[Показать] Скрытый текст:
Код:
include_once(DIR_MODULES.'miio/philipsbulb.class.php');

$ip = $this->getProperty('ip');
$token = $this->getProperty('token');
$bind_ip = null;
$debug = true;

$bulb = new philipsBulb($ip, $bind_ip, $token, $debug);

if ($bulb->setBrightness($this->getProperty('bright'))) {
     say('Задана яркость настольной лампы ' . $this->getProperty('bright'), 0);
}
 else say("Яркость настольной лампы не задана. Ошибка: $bulb->error", 0);

2.4 На уровне объекта редактируем методы turnOn и turnOff, вписывая следующий код:
Метод turnOn
[Показать] Скрытый текст:
Код:
include_once(DIR_MODULES.'miio/philipsbulb.class.php');

$ip = $this->getProperty('ip');
$token = $this->getProperty('token');
$bind_ip = null;
$debug = false;

$bulb = new philipsBulb($ip, $bind_ip, $token, $debug);

if ($bulb->powerOn()) {
     $this->setProperty('status', 1);
     $this->setProperty('statusText', 'Включено');
     say('Настольная лампа включена', 0);
}
 else say("Настольная лампа не включена. Ошибка: $bulb->error", 0);
Метод turnOff
[Показать] Скрытый текст:
Код:
include_once(DIR_MODULES.'miio/philipsbulb.class.php');

$ip = $this->getProperty('ip');
$token = $this->getProperty('token');
$bind_ip = null;
$debug = false;

$bulb = new philipsBulb($ip, $bind_ip, $token, $debug);

if ($bulb->powerOff()) {
     $this->setProperty('status', 0);
     $this->setProperty('statusText', 'Выключено');
     say('Настольная лампа выключена', 0);
}
 else say("Настольная лампа не выключена. Ошибка: $bulb->error", 0);

2.5 Проверяем работу методов, запуская их вручную.
2.6 Важно! miIO-устройства никак не оповещают локальный сервер об изменении своего статуса. Предположительно, такой функционал есть для облака Xiaomi, но нам это ничем не поможет, т.к. протокол работы с облаком на данный момент не расшифрован. Поэтому, если включить лампу через Mihome на смартфоне, то MajorDoMo никак не узнает, что лампа включена. Для этого нужно делать периодический опрос состояния устройства, например, добавив ежеминутный вызов метода getStatus в таймер onNewMinute:
Код:
cm('PhilipsLamp.getStatus'); 

3. Элементы меню.
Тут даже расписывать нечего, все просто. Создаем элемент switch, привязываем к нему метод switch нашего объекта PhilipsLamp для включения и выключения лампы, и свойство status для контроля состояния лампы (включена или выключена). Для управления яркостью создаем элемент sliderbox, привязываем к нему свойство bright объекта PhilipsLamp, а в поле код пишем вызов метода setBright:
Код:
cm('PhilipsLamp.setBright'); 

Вложение:
property_lamp.png
property_lamp.png [ 48.69 КБ | Просмотров: 739 ]

Вложение:
menu_lamp.png
menu_lamp.png [ 23.06 КБ | Просмотров: 739 ]

По такому же принципу уже сегодня можно интегрировать пылесос и настольную лампу (Eyecare Smart Lamp 2), т.к. для них описаны базовые API-функции в классах (файлы mirobot.class.php и philipseyecare2.class.php). Для остальных устройств требуется написать свои классы по аналогии с вышеуказанными.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт ноя 02, 2017 10:51 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 954
Откуда: Киров, Россия
Благодарил (а): 169 раз.
Поблагодарили: 444 раз.
AnT писал(а):
Готов быть подопытным владельцем: Philips/Yeelight bulb, Power Strip2, Vacuum, камера кубик
Philips bulb и Vacuum можно тестировать уже сейчас (см. пример выше). Для Yeelight и Power Strip2 сначала нужно api-функции в класс сводить. Камеры - это отдельная песня, насколько знаю, они по этому протоколу не управляются и работают только через облако.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 6:58 am 
В сети

Зарегистрирован: Сб авг 12, 2017 7:16 pm
Сообщения: 15
Благодарил (а): 11 раз.
Поблагодарили: 7 раз.
skysilver писал(а):
Использование библиотеки php-miio в MajorDoMo на примере Philips Light Bulb

Отчёт о тестировании: вкратце - всё работает.
Подробнее:
Немного расширил способ, так сказать на будущее.
Создал класс MiioDevices на основе Relays
В нём подкласс PhilipsBulb, а уже в нём Объект PhilipsLamp, ибо таких ламп имею несколько - упростил:
Цитата:
2.4 На уровне объекта редактируем методы turnOn и turnOff, вписывая следующий код
, переписав эти методы в подклассе.
Ладно, долго рассказывать не могу, поступим так:
[Показать] Скрытый текст: Под спойлером всё в картинках, думаю будет ясно.
Вложение:
Screenshot-2017-11-3 classes (Панель управления).png
Screenshot-2017-11-3 classes (Панель управления).png [ 14.4 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 MiioDevices.png
Screenshot-2017-11-3 MiioDevices.png [ 25.57 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsBulb.png
Screenshot-2017-11-3 PhilipsBulb.png [ 19.95 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsBulb(1).png
Screenshot-2017-11-3 PhilipsBulb(1).png [ 44.85 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsBulb(2).png
Screenshot-2017-11-3 PhilipsBulb(2).png [ 46.35 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsBulb(3).png
Screenshot-2017-11-3 PhilipsBulb(3).png [ 18.06 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsLamp.png
Screenshot-2017-11-3 PhilipsLamp.png [ 25.05 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsLamp(1).png
Screenshot-2017-11-3 PhilipsLamp(1).png [ 61.35 КБ | Просмотров: 717 ]
Вложение:
Screenshot-2017-11-3 PhilipsLamp(2).png
Screenshot-2017-11-3 PhilipsLamp(2).png [ 42.27 КБ | Просмотров: 717 ]

К посту прилагаю свой результат в виде файла MiioDevices.txt
Вложение:
MiioDevices.txt [9.55 КБ]
Скачиваний: 39
, который можно импортировать в панели управления - Объекты - (внизу) Инструменты - Импортировать...
К сожалению, в процессе экспорта/импорта не сохраняется иерархия классов (вложенность), потому сразу после импорта стоит зайти в класс PhilipsBulb и указать для него родительский класс MiioDevices.
Вложение:
Screenshot-2017-11-3 PhilipsBulb(4).png
Screenshot-2017-11-3 PhilipsBulb(4).png [ 18.36 КБ | Просмотров: 717 ]

В устройствах есть тестовая лампочка - там нужно установить значения свойств token и ip.
Спасибо :roll:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 1:14 pm 
Не в сети
Site Admin

Зарегистрирован: Пн сен 05, 2011 6:48 pm
Сообщения: 4213
Откуда: Минск, Беларусь
Благодарил (а): 69 раз.
Поблагодарили: 1165 раз.
Очень интересная разработка, но может это стандартным модулем оформить? Чтобы не создават вручную объекты и прочее. Нужна в этом помощь или оно в процессе ещё?

_________________

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 1:40 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 954
Откуда: Киров, Россия
Благодарил (а): 169 раз.
Поблагодарили: 444 раз.
sergejey писал(а):
Очень интересная разработка, но может это стандартным модулем оформить? Чтобы не создават вручную объекты и прочее. Нужна в этом помощь или оно в процессе ещё?
Модуль однозначно есть в планах, но непосредственно к разработке пока не приступал - дефицит времени и навыков написания модулей. Буду благодарен, если подготовишь некий прототип. А я бы его уже дальше допиливал и поддерживал.
В модуле явно придется свой цикл использовать, чтобы организовать периодический опрос устройств.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 2:52 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 28, 2013 8:14 am
Сообщения: 4197
Откуда: Екатеринбург
Благодарил (а): 96 раз.
Поблагодарили: 898 раз.
А может попробовать добавить в основной модуль хиаоми? (или заменить его?) Мне кажется wifi-gate тоже будет работать по этому же протоколу...только без включенного режима разработчика...

_________________
Raspberry Pi3 + Broadlink + esp8266 (blynk) + Arduino Mega (AMS)
Уважаемые пользователи! Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Помощь пользователям | Создание сцен


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 2:54 pm 
Не в сети

Зарегистрирован: Чт июн 02, 2016 9:33 pm
Сообщения: 565
Благодарил (а): 111 раз.
Поблагодарили: 34 раз.
skysilver писал(а):
Для Yeelight и Power Strip2 сначала нужно api-функции в класс сводить.

подскажите пожалуйста что значит "нужно api-функции в класс сводить", есть некоторый опыт программирования на пхп, подскажите хотя бы план действий что нужно делать, куда копать? Есть ли смысл по инструкции добавлять филипс лампу, а потом пытаться переделать под Yeelight? В чём будет принципиальная разница управления этой лампой от филипс?

nick7zmail писал(а):
А может попробовать добавить в основной модуль хиаоми? (или заменить его?) Мне кажется wifi-gate тоже будет работать по этому же протоколу...только без включенного режима разработчика...

+1

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 3:07 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 954
Откуда: Киров, Россия
Благодарил (а): 169 раз.
Поблагодарили: 444 раз.
nick7zmail писал(а):
А может попробовать добавить в основной модуль хиаоми? (или заменить его?) Мне кажется wifi-gate тоже будет работать по этому же протоколу...только без включенного режима разработчика...
Нее, не надо.

Во-первых, в случае режима разработчика шлюз сам шлет данные на сервер (и в облако по шифрованному протоколу) по событиям от датчиков. Это идеальный вариант, нет необходимости поллить его запросами каждую секунду на предмет нажал ли кто кнопку и т.п.

Во-вторых, по протоколу miIO в локальной сети шлюз поддерживает весьма ограниченный набор функций, особо не разбежишься. Вся движуха там в протоколе, которые с облаком связывает шлюз (на базе https), а его пока не расшифровали.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 3:16 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 954
Откуда: Киров, Россия
Благодарил (а): 169 раз.
Поблагодарили: 444 раз.
Gelezako писал(а):
подскажите пожалуйста что значит "нужно api-функции в класс сводить", есть некоторый опыт программирования на пхп, подскажите хотя бы план действий что нужно делать, куда копать? Есть ли смысл по инструкции добавлять филипс лампу, а потом пытаться переделать под Yeelight? В чём будет принципиальная разница управления этой лампой от филипс?
Это значит, что нужно написать класс, в котором будут функции, отправляющие нужные команды на устройство и принимающие и обрабатывающие ответы от него.

Для каждого устройства требуется предварительно выяснить, какие команды оно поддерживает и что шлет в ответ на них. Чтобы не изобретать велосипед, я сначала ищу эти команды на гитхабе в аналогичных библиотеках на питоне, nodejs или других системах умного дома, где уже есть поддержка нужного устройства. В большинстве случаев этого будет достаточно, и нужная информация по командам найдется. Если нет, то можно перехватить трафик между устройством и смартфоном с Mihome, расшифровать его и узнать все нужные команды и ответы на них.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт ноя 03, 2017 3:40 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 954
Откуда: Киров, Россия
Благодарил (а): 169 раз.
Поблагодарили: 444 раз.
Gelezako писал(а):
Есть ли смысл по инструкции добавлять филипс лампу, а потом пытаться переделать под Yeelight? В чём будет принципиальная разница управления этой лампой от филипс?
В инструкции речь про объекты и классы в МЖД. Их можно заводить, обзывать, переделывать как угодно. Вся фишка в файлах классов philipsbulb.class.php. Под каждый тип устройства нужно свой файл делать.

Если речь про обычную белую yeelight, то включение, выключение и яркость будет работать без всяких переделок с тем же philipsbulb.class.php. Нужно только ip и токен указать от лампочки. А вот запрос статуса, включение сцен, таймер отключения и др. в полном объеме не заработают, т.к. там уже специфичные команды - у филипс одни, у елайт другие.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 162 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 17  След.

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


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

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


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

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