[Модуль] Broadlink (dev_broadlink)
Модератор: immortal
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Модуль Broadlink
Как ты это там находишь?)) я сколько там не рылся - ничего полезного не нашел...а списка команд случайно для MS1 не видел?)) json строки, похожие на то, что мы расшифровали из пакета.
Отправлено с моего Xperia Z через Tapatalk
Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
-
- Сообщения: 103
- Зарегистрирован: Вс апр 23, 2017 7:09 pm
- Благодарил (а): 38 раз
- Поблагодарили: 1 раз
Re: Модуль Broadlink
MS1 реально работает кнопки Power и Mute, остальные нет.
Aopen de7000 на Ubuntu 16.04.4 LTS+Broadlink
-
- Сообщения: 469
- Зарегистрирован: Вт мар 12, 2013 1:22 am
- Благодарил (а): 41 раз
- Поблагодарили: 81 раз
Re: Модуль Broadlink
Да особо для колонки не искал, пока пытаюсь выковырнуть алгоритм хеширования пароля для облака.
Увижу скину. А пока вот такое есть например - константы для колонки:
Увижу скину. А пока вот такое есть например - константы для колонки:
СпойлерПоказать
Код: Выделить всё
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
Дак это же они и есть!! =D
По крайней мере большинство.
Например request-dev - основная инфа об устройстве...именно оттуда заряд батареи вытащил...
key:2 - это то что мы расшифровывали))) как раз кнопка питания...
3(mute) и 9 (pause) методом перебора нашел)) Тыкал без музыки, по-этому PREV, NEXT VOL_UP VOL_SUB не распознались...догадывался, что они что-то значат =D
Единственное чего не увидел - vol-setting...или как там...громкость которая выставляет...но её я и так отснифил) если увидишь ещё список где встретится vol-setting, и будут ещё другие команды - скидывай))
Судя по командам - можно даже апгрэйд прошивки запустить запросом)))
Шикарно, спасибо.
По крайней мере большинство.
Например 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
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- VooDooN
- Сообщения: 307
- Зарегистрирован: Сб июн 11, 2016 12:02 am
- Благодарил (а): 170 раз
- Поблагодарили: 64 раза
Re: Модуль Broadlink
Перед работой попробовал чуть-чуть затестить. Чувствуется, что где-то рядом ходим. Значения меняются синхронно E-Control, но чуть-чуть не совпадают. Например:nick7zmail писал(а):В broadlink.class.php в функции check_energy попробуй функцию поменять на
(7байт*10000+6байт*100+5байт)/100
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
Громкость проверял - точно работала...только для этого со свойством связать надо, и выставлять значение свойства от 1 до 15.dr.pavlov.alex писал(а):MS1 реально работает кнопки Power и Mute, остальные нет.
Пауза точно должна работать...только сейчас она названа 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
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- VooDooN
- Сообщения: 307
- Зарегистрирован: Сб июн 11, 2016 12:02 am
- Благодарил (а): 170 раз
- Поблагодарили: 64 раза
Re: Модуль Broadlink
Да, поменял.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 = 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
Ой хз)) питоном почти не пользовался...но можно попробовать повторить)))
В пхп есть точно команда ord, int...а hex это скорее перевод в 16ричное число, в пхп это dec2hex
Отправлено с моего Xperia Z через Tapatalk
В пхп есть точно команда ord, int...а hex это скорее перевод в 16ричное число, в пхп это dec2hex
Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- VooDooN
- Сообщения: 307
- Зарегистрирован: Сб июн 11, 2016 12:02 am
- Благодарил (а): 170 раз
- Поблагодарили: 64 раза
Re: Модуль Broadlink
В общем, попытался я конвертнуть питоновскую строку
в PHP (без знаний Python и PHP). Думаю, что типа так должно быть:
Эксперимент показал, что получается ерунда. Интриги и расследования для заинтересованных:
Вечером потестирую эту строку с большими значениями:
Надеюсь, что все получится.
Код: Выделить всё
energy = int(hex(ord(payload[7]) * 256 + ord(payload[6]))[2:]) + int(hex(ord(payload[5]))[2:])/100.0
Код: Выделить всё
$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.
Там сэмулировал пэйлоад и его разборку таким кодом:
Попробовал код, который утром использовал
В результате $data = 19.28, а не 12.8.
Но если конвертнуть каждое значение пэйлоада в hex перед подсчетом
то в результате $data = 12.8! УРА!
Там сэмулировал пэйлоад и его разборку таким кодом:
Код: Выделить всё
$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;
Но если конвертнуть каждое значение пэйлоада в hex перед подсчетом
Код: Выделить всё
$data= (dechex($payload[0x7])*10000+dechex($payload[0x6])*100+dechex($payload[0x5]))/100;
Код: Выделить всё
$data= (dechex($payload[0x7])*10000+dechex($payload[0x6])*100+dechex($payload[0x5]))/100;
-
- Сообщения: 57
- Зарегистрирован: Чт янв 26, 2017 7:08 pm
- Благодарил (а): 40 раз
- Поблагодарили: 4 раза
Re: Модуль Broadlink
по SP3S(16A) в модуле:
В свойствах SP3S(16A) и в "power" и в "status" при нажатии "молнии" происходит переключение питания.
Если привязать "power" к устройству/объекту и при активировании в "power" "молнии", нажать "Обновить" , то она выключается, при выключенной розетке - моргает светодиод, но не включается.
При автоматическом обновлении показаний происходит тоже самое.
Словно "power" переходит в режим "status".
Все приходит в норму если отвязать "power" и включиться через "status".
В свойствах SP3S(16A) и в "power" и в "status" при нажатии "молнии" происходит переключение питания.
Если привязать "power" к устройству/объекту и при активировании в "power" "молнии", нажать "Обновить" , то она выключается, при выключенной розетке - моргает светодиод, но не включается.
При автоматическом обновлении показаний происходит тоже самое.
Словно "power" переходит в режим "status".
Все приходит в норму если отвязать "power" и включиться через "status".