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

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

Модератор: immortal

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

Сообщение nick7zmail » Чт июл 20, 2017 8:00 am

Как ты это там находишь?)) я сколько там не рылся - ничего полезного не нашел...а списка команд случайно для MS1 не видел?)) json строки, похожие на то, что мы расшифровали из пакета.

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
dr.pavlov.alex
Сообщения: 103
Зарегистрирован: Вс апр 23, 2017 7:09 pm
Благодарил (а): 38 раз
Поблагодарили: 1 раз

Re: Модуль Broadlink

Сообщение dr.pavlov.alex » Чт июл 20, 2017 9:06 am

MS1 реально работает кнопки Power и Mute, остальные нет.
Aopen de7000 на Ubuntu 16.04.4 LTS+Broadlink
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Модуль Broadlink

Сообщение dmw » Чт июл 20, 2017 9:15 am

Да особо для колонки не искал, пока пытаюсь выковырнуть алгоритм хеширования пароля для облака.
Увижу скину. А пока вот такое есть например - константы для колонки:
СпойлерПоказать

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

package com.broadlink.rmt.data;

public class M1Constat
{
  public static final String ALARM_SET = "alarm-setting";
  public static final String BAIDU_API_KEY = "jP9fYHBp9rUbzrV3CzAgQGyC";
  public static final String BAIDU_SOURCE = "CLOUD:BAIDU";
  public static final String BURNING_IMG = "burning-img";
  public static final int CODE_NOT_AUTH = 401;
  public static final String COLLECT_MUSIC = "sourcelist-add";
  public static final String CONNECTION_PLAY = "ConnectionPlay";
  public static final String DELETE_COLLECT_MUSIC = "sourcelist-del";
  public static final int ENABLE = 1;
  public static final String FAVORITES_SOURCE = "FAVORITES";
  public static final String FORMAT_BAIDU_MUSIC = "CLOUD:BAIDU/app/BroadLink_MS1/MUSIC:%s";
  public static final String FORMAT_NET_URL = "IR:%1$s:-:-";
  public static final String FORMAT_SD_MUSIC = "SD:%1$s:-:-";
  public static final String LOADING = "loading";
  public static final String MUSIC_QUERY = "sourcemusic-query";
  public static final String NET_SOURCE = "IR:";
  public static final String PLAY = "play";
  public static final String QT_CHANNEL = "QINGTING:{\"feature\":3,\"id1\":%1$s,\"id2\":0}";
  public static final String QT_FM_SOURCE = "QINGTING:";
  public static final String QT_RADIO = "QINGTING:{\"feature\":1,\"id1\":%1$s,\"id2\":%2$s}";
  public static final String QT_VOICE = "QINGTING:{\"feature\":2,\"id1\":%1$s,\"id2\":%2$s}";
  public static final String QUERY_SOURCE_INFO = "requestSource";
  public static final String QUERY_SOURCE_NUM = "requestSourceNum";
  public static final String QUERY_SSID = "get-networkinfo";
  public static final String QUERY_UPDATE_PROGRESS = "request-upgstatus";
  public static final String QUERY_VERSION = "request-version";
  public static final String REQUEST_DEV = "request-dev";
  public static final String REQUEST_PB = "request-pb";
  public static final int SD_MISS = 1;
  public static final String SD_ROOT = "sd root";
  public static final String SD_SOURCE = "SD:";
  public static final String SET_SSID = "set-networkinfo";
  public static final String SET_TIME = "set-time";
  public static final String SLEEP_MODE = "sleepMode";
  public static final String[] SOURCE_ARRAY = { "SOURCE0", "SOURCE1", "SOURCE2", "SOURCE3", "SOURCE4", "SOURCE5", "SOURCE6", "SOURCE7", "SOURCE8", "SOURCE9", "SOURCE10", "SOURCE11" };
  public static final String SOURCE_QUERY = "source-query";
  public static final String SOURCE_SET = "source-setting";
  public static final String TF_SHARE = "TFShare";
  public static final int UNENABLE = 0;
  public static final String UPDATE_START = "upgrade-start";
  public static final String VOICE_REMAIND = "voiceRemaind";
  public static final String XIAMI_ALBUMS = "XIAMI:{\"feature\":11,\"id\":%1$s}";
  public static final String XIAMI_ARTIST = "XIAMI:{\"feature\":13,\"id\":%1$s}";
  public static final String XIAMI_COLLECT = "XIAMI:{\"feature\":2,\"id\":%1$s}";
  public static final String XIAMI_MY_MUSIC = "XIAMI:{\"feature\":9,\"token\":\"%1$s\"}";
  public static final String XIAMI_MY_RADIO = "XIAMI:{\"feature\":8,\"token\":\"%1$s\"}";
  public static final String XIAMI_RADIO = "XIAMI:{\"feature\":1,\"id\":%1$s,\"index\":%2$s}";
  public static final String XIAMI_RANK = "XIAMI:{\"feature\":4,\"str\":\"%1$s\"}";
  public static final String XIAMI_SONG = "XIAMI:{\"feature\":12,\"id\":%1$s}";
  public static final String XIAMI_SOURCE = "XIAMI:";
  public static final String XIAMI_TODAY_MUSIC_LIST = "XIAMI:{\"feature\":7}";
  public static final String XIMA_ABLUM = "XIMALAYA:{\"feature\":1,\"id\":%1$s}";
  public static final String XIMA_VOICE = "XIMALAYA:{\"feature\":2,\"id\":%1$s}";
  public static final String XIMI_SOURCE = "XIMALAYA:";
  
  public static class AlarmMode
  {
    public static int GET_UP = 1;
    public static int NORMAL = 0;
  }
  
  public static class KEY
  {
    public static int AUX;
    public static int MUTE;
    public static int NEXT;
    public static int PAUSE = 9;
    public static int PLAY = 1;
    public static int POWER_OFF = 2;
    public static int PREV;
    public static int VOL_ADD;
    public static int VOL_SUB;
    
    static
    {
      MUTE = 3;
      VOL_ADD = 4;
      VOL_SUB = 5;
      AUX = 6;
      NEXT = 7;
      PREV = 8;
    }
  }
  
  public static class NetRadioId
  {
    public static String CHAINA = "1";
    public static String CUSTOM = "0";
    public static String ECONOMIC;
    public static String FOREIGN = "0";
    public static String INTEGRATED;
    public static String MUSIC = "1";
    public static String NEWS;
    public static String QUYI;
    public static String SPORTS;
    public static String TRAFFIC = "2";
    
    static
    {
      SPORTS = "3";
      INTEGRATED = "4";
      ECONOMIC = "5";
      QUYI = "6";
      NEWS = "7";
    }
  }
  
  public static class PBType
  {
    public static int PLAY_LIST = 0;
    public static int PLAY_ORDER = 3;
    public static int PLAY_RANDOM = 1;
    public static int PLAY_SINGLE = 2;
  }
  
  public static class UpdateState
  {
    public static int DOWNLOADING;
    public static int DOWNLOADING_SUCCESS = 1;
    public static int DOWNLOAD_FAIL = 41;
    public static int ERASE_WRITE;
    public static int FAIL_CAUSE_BATTERY = 51;
    public static int FAIL_CAUSE_CHECKSUM = 42;
    public static int SUCCESS;
    
    static
    {
      DOWNLOADING = 10;
      ERASE_WRITE = 11;
      SUCCESS = 14;
    }
  }
} 
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

Сообщение nick7zmail » Чт июл 20, 2017 9:49 am

Дак это же они и есть!! =D
По крайней мере большинство.
Например request-dev - основная инфа об устройстве...именно оттуда заряд батареи вытащил...
key:2 - это то что мы расшифровывали))) как раз кнопка питания...
3(mute) и 9 (pause) методом перебора нашел)) Тыкал без музыки, по-этому PREV, NEXT VOL_UP VOL_SUB не распознались...догадывался, что они что-то значат =D
Единственное чего не увидел - vol-setting...или как там...громкость которая выставляет...но её я и так отснифил) если увидишь ещё список где встретится vol-setting, и будут ещё другие команды - скидывай))
Судя по командам - можно даже апгрэйд прошивки запустить запросом)))
Шикарно, спасибо.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

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

nick7zmail писал(а):В broadlink.class.php в функции check_energy попробуй функцию поменять на
(7байт*10000+6байт*100+5байт)/100
Перед работой попробовал чуть-чуть затестить. Чувствуется, что где-то рядом ходим. Значения меняются синхронно E-Control, но чуть-чуть не совпадают. Например:
1) Включил вентилятор в SP3S. В Е-Control показывает (точно не помню, примерно) 14.2, в пэйлоаде моего скрипта тоже поймал 14.2, в модуле 19,3.
2) Включил в вентиляторе режим обогрева. В Е-Control показывает примерно 910, в моем скрипте тоже, а в модуле 920 (и в упор не хочет совпадать с E-Control).
3) Включил 2-й режим обогрева. В Е-Control показывает примерно 1701, в модуле 1780 (в моем скрипте забыл посмотреть).
В общем, в модуле чуть-чуть завышены значения почему-то. Всегда. Особенно это заметно на маленьких значениях.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

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

dr.pavlov.alex писал(а):MS1 реально работает кнопки Power и Mute, остальные нет.
Громкость проверял - точно работала...только для этого со свойством связать надо, и выставлять значение свойства от 1 до 15.
Пауза точно должна работать...только сейчас она названа ButtonPlay...я думал это и плэй и пауза...оказалась только пауза.
VooDooN писал(а): Перед работой попробовал чуть-чуть затестить. Чувствуется, что где-то рядом ходим. Значения меняются синхронно E-Control, но чуть-чуть не совпадают. Например:
1) Включил вентилятор в SP3S. В Е-Control показывает (точно не помню, примерно) 14.2, в пэйлоаде моего скрипта тоже поймал 14.2, в модуле 19,3.
2) Включил в вентиляторе режим обогрева. В Е-Control показывает примерно 910, в моем скрипте тоже, а в модуле 920 (и в упор не хочет совпадать с E-Control).
3) Включил 2-й режим обогрева. В Е-Control показывает примерно 1701, в модуле 1780 (в моем скрипте забыл посмотреть).
В общем, в модуле чуть-чуть завышены значения почему-то. Всегда. Особенно это заметно на маленьких значениях.
Расчет, как я понял, поменял на предложенный вариант? Или тот что после обновы был - остался?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

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

nick7zmail писал(а):Расчет, как я понял, поменял на предложенный вариант? Или тот что после обновы был - остался?
Да, поменял.

Жесть, мне тут подсказали, что ребята для библиотеки python-broadlink нас опередили и запилили подобную функцию на python, но для SP2: https://github.com/mjg59/python-broadli ... 59b6e5e5a6
Байты совпадают с SP3S:

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

 def get_energy(self):
 +    packet = bytearray([8, 0, 254, 1, 5, 1, 0, 0, 0, 45])
 +    response = self.send_packet(0x6a, packet)
 +    err = response[0x22] | (response[0x23] << 8)
 +    if err == 0:
 +      payload = self.decrypt(bytes(response[0x38:]))
 +      energy = int(hex(ord(payload[7]) * 256 + ord(payload[6]))[2:]) + int(hex(ord(payload[5]))[2:])/100.0
 +      return energy
Но что это за странные махинации с байтами для energy?

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

energy = int(hex(ord(payload[7]) * 256 + ord(payload[6]))[2:]) + int(hex(ord(payload[5]))[2:])/100.0
Последний раз редактировалось VooDooN Чт июл 20, 2017 2:24 pm, всего редактировалось 1 раз.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

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

Ой хз)) питоном почти не пользовался...но можно попробовать повторить)))

В пхп есть точно команда ord, int...а hex это скорее перевод в 16ричное число, в пхп это dec2hex

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

Сообщение VooDooN » Чт июл 20, 2017 4:29 pm

В общем, попытался я конвертнуть питоновскую строку

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

energy = int(hex(ord(payload[7]) * 256 + ord(payload[6]))[2:]) + int(hex(ord(payload[5]))[2:])/100.0
в PHP (без знаний Python и PHP). Думаю, что типа так должно быть:

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

$energy = hexdec(substr(dechex(ord($payload[0x07]) * 256 + ord($payload[0x06])),2)) + hexdec(substr(dechex(ord($payload[0x05])),2))/100.0;
Эксперимент показал, что получается ерунда. Интриги и расследования для заинтересованных:
СпойлерПоказать
Чтобы не париться на работе с установкой PHP, использовал чудный онлайн эмулятор PHP http://phpfiddle.org.
Там сэмулировал пэйлоад и его разборку таким кодом:

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

$packet = bytearray(10); 
$packet[0x00] = 0x08; //засунул в массив байты из настоящего пакета от E-Control со значением 12.8
$packet[0x01] = 0x00;
$packet[0x02] = 0xfe;
$packet[0x03] = 0x01;
$packet[0x04] = 0x01;
$packet[0x05] = 0x80;
$packet[0x06] = 0x12;
$packet[0x07] = 0x00;
$packet[0x08] = 0x00;
$packet[0x09] = 0xa0;
$packet[0x0a] = 0x00;
$packet[0x0b] = 0x00;
$packet[0x0c] = 0x00;
$packet[0x0d] = 0x00;
$packet[0x0e] = 0x00;
$packet[0x0f] = 0x00;

$payload = $packet;

echo $payload[0x7]; // результат 0
echo "<br>";
echo $payload[0x6]; // результат 18, а я ожидал 12 (значит, в массиве хранятся значения в dec)
echo "<br>";
echo $payload[0x5]; // результат 128
echo "<br>";

$energy = hexdec(substr(dechex(ord($payload[0x07]) * 256 + ord($payload[0x06])),2)) + hexdec(substr(dechex(ord($payload[0x05])),2))/100.0;

echo $energy; // результат 49, а я ожидал 12.8

function bytearray($size){
       $packet = array();
    for($i = 0 ; $i < $size ; $i++){
        $packet[$i] = 0;
    }
    return $packet;
}
 
Попробовал код, который утром использовал

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

$data= ($payload[0x7]*10000+$payload[0x6]*100+$payload[0x5])/100;
В результате $data = 19.28, а не 12.8.
Но если конвертнуть каждое значение пэйлоада в hex перед подсчетом

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

$data= (dechex($payload[0x7])*10000+dechex($payload[0x6])*100+dechex($payload[0x5]))/100;
то в результате $data = 12.8! УРА!
Вечером потестирую эту строку с большими значениями:

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

$data= (dechex($payload[0x7])*10000+dechex($payload[0x6])*100+dechex($payload[0x5]))/100;
Надеюсь, что все получится.
Albert
Сообщения: 57
Зарегистрирован: Чт янв 26, 2017 7:08 pm
Благодарил (а): 40 раз
Поблагодарили: 4 раза

Re: Модуль Broadlink

Сообщение Albert » Чт июл 20, 2017 6:56 pm

по SP3S(16A) в модуле:
В свойствах SP3S(16A) и в "power" и в "status" при нажатии "молнии" происходит переключение питания.
Если привязать "power" к устройству/объекту и при активировании в "power" "молнии", нажать "Обновить" , то она выключается, при выключенной розетке - моргает светодиод, но не включается.
При автоматическом обновлении показаний происходит тоже самое.

Словно "power" переходит в режим "status".

Все приходит в норму если отвязать "power" и включиться через "status".
Ответить