[Модуль] Broadlink (dev_broadlink)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: Модуль Broadlink

Сообщение vitt76 » Ср июл 26, 2017 8:14 am

И все же мне немного непонятно, как работать с ms1.
Хочется перед запуском потока (будильника) быть уверенным, что колонка онлайн, иначе выбрать другой плеер.
Когда колонка выключена с кнопки, понятно, что ее из модуля не дозваться.
Если она выключена из модуля по power, даже находясь на зарядке, модуль мой перестает ее видеть и обновлять, включить колонку не получается.
И даже если ничего не трогать, колонка со временем переходит в какой-то спящий режим (индикатор питания медленно мерцает) и тоже перестает быть доступна из модуля. E-control ее легко при этом будит.
Ну и кнопка pause ставит колонку на паузу, из которой выход только по кнопке next с переходом на следующую песню.
Может, я что-то не так понимаю или делаю?
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

Сообщение VooDooN » Ср июл 26, 2017 8:22 am

Для начала можно пинговать ip-колонки. Если в сети - включена.
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: Модуль Broadlink

Сообщение vitt76 » Ср июл 26, 2017 8:33 am

Я неправильно выразился, хочется не убеждаться, что она оффлайн (статус у нее и так оффлайн), а попинать ее как-то, чтобы разбудить. Вот и сейчас индикатор мерцает, колонка то ли спит, то ли дремлет, последнее обновление в модуле вчера 19:45, вручную не обновляется. Из e-control доступна.
Если говорить про пинг, то да, колонка пингуется, но для модуля она оффлайн.
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июл 26, 2017 9:57 am

vitt76 писал(а):Я неправильно выразился, хочется не убеждаться, что она оффлайн (статус у нее и так оффлайн), а попинать ее как-то, чтобы разбудить. Вот и сейчас индикатор мерцает, колонка то ли спит, то ли дремет, последнее обновление в модуле вчера 19:45, вручную не обновляется. Из e-control доступна.
Если говорить про пинг, то да, колонка пингуется, но для модуля она оффлайн.
Для модуля она оффлайн - потому что ответы не выдаёт в спящем...
Будилась она у меня по посылу любой команды (вроде или плэй тыкал, или мьют - и она просыпалась)...
Если без питания вырубить - колонка естественно вырубится вообще (питание не будет гореть).
Не знаю, что за "глубокий" сон...через сколько он наступает? Может тогда поможет "PowerButton" и затем типа Play команды... Дома поэкспериментирую.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

Сообщение VooDooN » Ср июл 26, 2017 11:17 am

nick7zmail, а добавлена ли в модуль возможность показывать мощность из SP2? А то у меня тут спрашивают про SP2, что для него есть возможность только включить/выключить, а поле с энергией вообще не показывается. Вроде бы и циклы проверили, и удаляли/добавляли устройство, и модуль самый последний используют, и в Debug ошибок нет.
dr.pavlov.alex
Сообщения: 103
Зарегистрирован: Вс апр 23, 2017 7:09 pm
Благодарил (а): 38 раз
Поблагодарили: 1 раз

Re: Модуль Broadlink

Сообщение dr.pavlov.alex » Ср июл 26, 2017 1:28 pm

MS1 часа 4 ждал глубокого спящего режима (мигание кнопки Power) так и не дождался. Колонка без проблем включилась из модуля. Включается из модуля любой кнопкой, даже если в свойство DLNA Render отправить ссылку на онлайн радиостанцию.
У меня вот другая проблема, так и не заработали кнопки (Power, pause, play, mute) из меню.
Aopen de7000 на Ubuntu 16.04.4 LTS+Broadlink
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июл 26, 2017 2:23 pm

Про sp2 хз...если протокол такой же как у sp3s -то должно работать...если нет - уж извиняйте)) протокол копать надо...а sp2 у меня нет.

По ms1 гляну, как время будет.

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
ipc2002
Сообщения: 125
Зарегистрирован: Пн май 15, 2017 8:13 pm
Откуда: Москва
Благодарил (а): 102 раза
Поблагодарили: 14 раз
Контактная информация:

Re: Модуль Broadlink

Сообщение ipc2002 » Чт июл 27, 2017 12:35 am

Снова доброго времени суток!

Подскажите, пожалуйста, как сделать ссылку на поле "примечание" или "название" объекта, чтобы в команде say(), например, использовать (чтоб в логе писала, что включилось, что выключилось)? Чтобы использовать по аналогии с тем, как в примере: $this->getProperty('...'). Добавить в шаблон группы объектов например, чтоб для каждого отдельно не писать...
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

Сообщение VooDooN » Чт июл 27, 2017 11:20 am

У кого есть SP2, работает или не работает отображение энергии на вкладке Data (поле power)? Отображается ли оно вообще?
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Модуль Broadlink

Сообщение dmw » Пт июл 28, 2017 11:44 am

Добавил работу broadlink.class.php с облаком, nick7zmail прими pull request.
Пока только 5 функций:
  • Auth("email", "password") - авторизация
    GetUserInfo() - информация о пользователе (ничего интересного)
    GetLastBackup() - получить последний backup сделаный через e-control
    GetListBackups() - получить список всех доступных backup-ов
    GetBackup("/path/name/") - получить конкретный backup из списка полученного через GetListBackups()
Теперь как это работает, информация пока техническая и предназначена скорей для nick7zmail:
СпойлерПоказать
Все функции возвращают массив, в каждом присутствует поле [error] с кодом ошибки, "0" - все в порядке.
В базе логин и пароль не хранятся нам нужны только номер сессии, id пользователя и ник.
Чтобы их получить нужно пройти авторизацию:

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

include_once("/var/www/modules/dev_broadlink/broadlink.class.php");
$cloud = Broadlink::Cloud();
$response = $cloud->Auth("my@email.ru", "password"); 
$response будет содержать массив:
[error] => 0
[msg] => ok
[userid] => 4690560846290745793
[nickname] => dmw
[iconpath] =>
[loginsession] => b2b5175390728bcc501a031631c8b4a4
[logintime] => 2017-07-27T17:27:37+08:00
[loginip] => 10.243.41.151
для дальнейшей работы нужно запомнить только эти поля: [userid], [nickname] и [loginsession]. В процессе они не меняются, всегда статичны и если даже повторить авторизацию, то будут выданы опять они же. Думаю что присваиваются каждому пользователю при первой регистрации и закрепляются на всегда, хотя nickname изменить можно, изменяться при этом остальное не знаю.
Если использовать класс Cloud() без параметров, то работает только функция авторизации, все остальные будут возвращать ошибку:
["error"] => -1009
["msg"] => Authorization Required
Чтобы считалось что авторизация пройдена при подключении класса нужно передавать параметры Broadlink::Cloud(nickname, userid, loginsession).
Вот например запрос информации о пользователе:

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

include_once("/var/www/modules/dev_broadlink/broadlink.class.php");
$cloud = Broadlink::Cloud("dmw", "4690560846290745793", "b2b5175390728bcc501a031631c8b4a4");
$response = $cloud->GetUserInfo();
Если все в порядке $response будет таким:
[error] => 0
[msg] => ok
[nickname] => dmw
[registerdate] => 2017-02-13 21:31:52
[country] =>
[preferlanguage] =>
[realname] =>
[birthday] => 0000-00-00 00:00:00
[gender] =>
[getnews] =>
[phone] =>
Это запрос списка доступных backup-ов в облаке:

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

include_once("/var/www/modules/dev_broadlink/broadlink.class.php");
$cloud = Broadlink::Cloud("dmw", "4690560846290745793", "b2b5175390728bcc501a031631c8b4a4");
$response = $cloud->GetListBackups();
в $response будет список (максимально 10 позиций):
[сode] => 200
  • [0][pathname] => /23/3c4b3262363a8d0424f7e74f5f072a/2017-07-18_20:23:29
    • [0][size] => 171.7KB
      • [1][pathname] => /23/3c4b3262363a8d0424f7e74f5f072a/2017-07-26_00:19:43
        • [1][size] => 171.7KB
          [msg] => OK
          [error] => 0
Если нужен конкретный файл из этого списка, то можно запросить его по [pathname]:

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

include_once("./modules/dev_broadlink/broadlink.class.php");
$cloud = Broadlink::Cloud("dmw", "4690560846290745793", "b2b5175390728bcc501a031631c8b4a4");
$response = $cloud->GetBackup("/23/3c4b3262363a8d0424f7e74f5f072a/2017-07-18_20:23:29");
Функция скачает zip-архив в ./files/bl_buckup.zip, распакует его в ./files/SharedData/ и удалит чтоб место не занимал.
Если все хорошо, $response вернет путь к папке с распакованными файлами:
[msg] => /var/www/files/SharedData
[error] => 0
Если нужен последний сохраненный backup, то:

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

include_once("./modules/dev_broadlink/broadlink.class.php");
$cloud = Broadlink::Cloud("dmw", "4690560846290745793", "b2b5175390728bcc501a031631c8b4a4");
$response = $cloud->GetLastBackup();
Тоже результатом будет путь куда распаковал архив.

Далее работаем с полученными файлами как с обычным json, например:

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

$buttons = json_decode(file_get_contents("./files/SharedData/jsonButton"));    //список пультов для jsonIrCode
$ircodes = json_decode(file_get_contents("./files/SharedData/jsonIrCode"));    //коды пультов из jsonButton, здесь берем и для TC2 коды
$devices = json_decode(file_get_contents("./files/SharedData/jsonDevice"));    //список устройств, можно найти publicKey и terminalId  
и т.д.
За это сообщение автора dmw поблагодарили (всего 3):
VooDooN (Пт июл 28, 2017 1:05 pm) • SolarW (Пт июл 28, 2017 8:45 pm) • vitt76 (Сб июл 29, 2017 10:03 am)
Рейтинг: 3.49%
Ответить