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

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

Модератор: immortal

Stor
Сообщения: 133
Зарегистрирован: Ср окт 31, 2018 11:45 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: Модуль Broadlink

Сообщение Stor » Чт июн 18, 2020 10:54 pm

nick7zmail писал(а):
Пн июн 15, 2020 7:04 am
Stor писал(а):
Вс июн 14, 2020 10:59 pm
Я нашел пакеты 5a a5 aa 55 5a a5 aa 55. Но программа BroadlinkCommand, я так понял, под видну, а под линукс есть?
И подскажите где искать ключи в е-контроле - попробую найти по аналогии в BroadLink - универсальный пульт. И что потом с этими ключами делать?
В е-контроле ключи лежат где-то там /data/data/com.broadlink.rmt/databases/rmt.db (это база данных, открывается, вроде, при помощи SQLStudio или как то так прога называлась). Далее в модуле (/modules/dev_broadlink) есть файл broadlink_debug_scr.php. Его прямо открываете и вписываете ключики ($key, $iv) туда. Ваш пакет скармливаете этому файлику (примеры там так же есть) https://github.com/nick7zmail/MajorDoMo ... ug_scr.php и запускаете его из браузера что то формата ip_сервера/modules/dev_broadlink/broadlink_debug_scr.php?mode=decrypt...и тогда увидите расшифрованный файл...по-расшифровывайте несколько файлов. Если первые 2-4 байта совпадают - тогда всё делаете правильно. На самом деле я сам подзабыл как этим всем пользоваться)) но вроде как то так)))
1) Мне удалось вытащить publicKey и перевести его из HEX - получился ключ:

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

sqlite> select hex( publicKey ) from deviceTable;
--------------------------------
B9D49940BCA7C0472078E8..........
2)В примере $key представлен в каком формате? Можно ли его получить из HEX формата?
Вы пишите "ключики", но в моей базе был только один публичный ключ.
3) Не понял откуда брать $iv?
4) Переменная $wireshark только одна, но через Pocket Capture я поймал пакеты начинающиеся на 5a a5 aa 55 5a a5 aa 55, но потом у всех продолжение разное - как их всех в файле указать (и надо?)?
5) "Ваш пакет скармливаете этому файлику" - это как я понял, нужно каждый перехваченный пакет из Pocket Capture так прогнать?
6) У меня в файле /modules/dev_broadlink/broadlink_debug_scr.php уже есть заполненные $wireshark, $key и $iv - их нужно удалить или оставить (может они при добавлении RM4 PRO через web интерфейс добавились)?
7) Кнопка "Generate from bin" - можно как-то это использовать в моем случае?
Stor
Сообщения: 133
Зарегистрирован: Ср окт 31, 2018 11:45 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

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

Сообщение Stor » Чт июн 18, 2020 11:35 pm

nick7zmail писал(а):
Ср апр 29, 2020 10:21 pm
Мне нужна последовательность байт, которая отправляется в девайс для перевода в режим обучения хотя бы...
Пытаюсь ее получить - если во время обучения включен перехват пакетов, то обучени яне происходит и приложение жалуется что нет доступа в сеть, при этом рассылает кучу пакетов по IP:
224.0.0.251:80
255.255.255.255:80

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

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июн 24, 2020 7:51 am

Stor писал(а):
Вс июн 14, 2020 10:59 pm
Я нашел пакеты 5a a5 aa 55 5a a5 aa 55. Но программа BroadlinkCommand, я так понял, под видну, а под линукс есть?
И подскажите где искать ключи в е-контроле - попробую найти по аналогии в BroadLink - универсальный пульт. И что потом с этими ключами делать?
Откатимся немного назад...по ходу это таки расшифрованный пакет...нужно за ним понаблюдать...сейчас, на сколько я помню модулем отправляется что то типа

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

		$packet[0x00] = 0x5a;
		$packet[0x01] = 0xa5;
		$packet[0x02] = 0xaa;
		$packet[0x03] = 0x55;
		$packet[0x04] = 0x5a;
		$packet[0x05] = 0xa5;
		$packet[0x06] = 0xaa;
		$packet[0x07] = 0x55;
		$packet[0x24] = 0x2a;
		$packet[0x25] = 0x27;
Потом команда для RM
А для RM 4 специальные байты добавлены

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

		$packet[0] = 0xd0;
		$packet[1] = 0x00;
		$packet[2] = 0x02;
и только потом сама команда.
Понаблюдайте что приложение вашему РМ засылает...надо выловить постоянную часть
ну и ещё в пакете где то должен быть мак, айпи и чексумма.

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

		$packet[0x28] = $this->count & 0xff;
		$packet[0x29] = $this->count >> 8;
		$packet[0x2a] = $this->mac[0];
		$packet[0x2b] = $this->mac[1];
		$packet[0x2c] = $this->mac[2];
		$packet[0x2d] = $this->mac[3];
		$packet[0x2e] = $this->mac[4];
		$packet[0x2f] = $this->mac[5];
		$packet[0x30] = $this->id[0];
		$packet[0x31] = $this->id[1];
		$packet[0x32] = $this->id[2];
		$packet[0x33] = $this->id[3];
		$packet[0x34] = $checksum & 0xff;
		$packet[0x35] = $checksum >> 8;
		$packet[0x20] = $checksum & 0xff;
		$packet[0x21] = $checksum >> 8;
Возможно где то что то поменяли, и что то лишнее отправляется или чего то не хватает.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Denis_k
Сообщения: 579
Зарегистрирован: Сб мар 19, 2016 7:24 pm
Благодарил (а): 297 раз
Поблагодарили: 27 раз

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

Сообщение Denis_k » Чт июл 09, 2020 2:33 pm

Приветствую, коллеги, пытаюсь подружить кондиционеры (без wifi) с пультами brodlink, ессно столкнулся с необходимостью использовать облако для импорта команд. Когда то давно пользовался для первичного подключения устройств приложением e-control, но в этот раз ни в каком режиме это приложение нужные устройства не увидело, соответственно скачал более свежее приложение broadlink, в котором с n-ой попытки добавил нужный пульт и сделал его backup, но вот авторизоваться из модуля с этими данными не получилось.
MD на raspberry pi3
Аватара пользователя
nick7zmail
Сообщения: 7274
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 1895 раз

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

Сообщение nick7zmail » Чт июл 09, 2020 3:34 pm

Denis_k писал(а):Приветствую, коллеги, пытаюсь подружить кондиционеры (без wifi) с пультами brodlink, ессно столкнулся с необходимостью использовать облако для импорта команд. Когда то давно пользовался для первичного подключения устройств приложением e-control, но в этот раз ни в каком режиме это приложение нужные устройства не увидело, соответственно скачал более свежее приложение broadlink, в котором с n-ой попытки добавил нужный пульт и сделал его backup, но вот авторизоваться из модуля с этими данными не получилось.
Авторизацию модуль поддерживает только с облаком e-control. С другими приложениями не работает.

Отправлено с моего Xperia XZ1 Compact через Tapatalk

За это сообщение автора nick7zmail поблагодарил:
Denis_k (Чт июл 09, 2020 9:06 pm)
Рейтинг: 1.23%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Stor
Сообщения: 133
Зарегистрирован: Ср окт 31, 2018 11:45 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: Модуль Broadlink

Сообщение Stor » Чт июл 23, 2020 10:48 pm

nick7zmail писал(а):
Ср июн 24, 2020 7:51 am
Stor писал(а):
Вс июн 14, 2020 10:59 pm
Я нашел пакеты 5a a5 aa 55 5a a5 aa 55. Но программа BroadlinkCommand, я так понял, под видну, а под линукс есть?
И подскажите где искать ключи в е-контроле - попробую найти по аналогии в BroadLink - универсальный пульт. И что потом с этими ключами делать?
Откатимся немного назад...по ходу это таки расшифрованный пакет...нужно за ним понаблюдать...сейчас, на сколько я помню модулем отправляется что то типа

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

		$packet[0x00] = 0x5a;
		$packet[0x01] = 0xa5;
		$packet[0x02] = 0xaa;
		$packet[0x03] = 0x55;
		$packet[0x04] = 0x5a;
		$packet[0x05] = 0xa5;
		$packet[0x06] = 0xaa;
		$packet[0x07] = 0x55;
		$packet[0x24] = 0x2a;
		$packet[0x25] = 0x27;
Потом команда для RM
А для RM 4 специальные байты добавлены

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

		$packet[0] = 0xd0;
		$packet[1] = 0x00;
		$packet[2] = 0x02;
и только потом сама команда.
Понаблюдайте что приложение вашему РМ засылает...надо выловить постоянную часть
ну и ещё в пакете где то должен быть мак, айпи и чексумма.

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

		$packet[0x28] = $this->count & 0xff;
		$packet[0x29] = $this->count >> 8;
		$packet[0x2a] = $this->mac[0];
		$packet[0x2b] = $this->mac[1];
		$packet[0x2c] = $this->mac[2];
		$packet[0x2d] = $this->mac[3];
		$packet[0x2e] = $this->mac[4];
		$packet[0x2f] = $this->mac[5];
		$packet[0x30] = $this->id[0];
		$packet[0x31] = $this->id[1];
		$packet[0x32] = $this->id[2];
		$packet[0x33] = $this->id[3];
		$packet[0x34] = $checksum & 0xff;
		$packet[0x35] = $checksum >> 8;
		$packet[0x20] = $checksum & 0xff;
		$packet[0x21] = $checksum >> 8;
Возможно где то что то поменяли, и что то лишнее отправляется или чего то не хватает.
Нашел программу, которая умеет доставать любые пакеты из пультов - https://github.com/t0mer/broadlinkmanager-docker
С помощью нее всего за пару минут достал все мне нужные RF и IR коды команд в открытом виде (то есть не надо ничего перехватывать и расшифровывать).
Аватара пользователя
nick7zmail
Сообщения: 7274
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 1895 раз

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

Сообщение nick7zmail » Пт июл 24, 2020 9:57 am

А толку? Это не добавит неработающие RM в модуль так, чтоб они работали...
Вопрос то, как я понял в неподдерживаемых моделях RM?

Отправлено с моего Xperia XZ1 Compact через Tapatalk


Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Natrix
Сообщения: 1
Зарегистрирован: Чт июл 30, 2020 3:22 pm
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение Natrix » Чт июл 30, 2020 3:32 pm

nick7zmail писал(а):
Пт июл 24, 2020 9:57 am
Вопрос то, как я понял в неподдерживаемых моделях RM?
Долго маялся с mini 0x5f36. Оказалось, что по крайней мере мой экземпляр, работает либо с приложением либо с majordomo.
Сейчас заработал и стал записывать и отправлять сигналы. Делал по следующей схеме:
Для начала заменил код на указанный ранее.
class RM extends Broadlink{

function __construct($h = "", $m = "", $p = 80, $d = 0x2712) {

parent::__construct($h, $m, $p, $d);

}

public function Enter_learning(){

$packet = self::bytearray(16);
$packet[0] = 0x04;
$packet[1] = 0x00;
$packet[2] = 0x03;
$this->send_packet(0x6a, $packet);

}

public function Send_data($data){

$packet = self::bytearray(4);
$packet[0] = 0xd0;
$packet[1] = 0x00;
$packet[2] = 0x02;

if(is_array($data)){
$packet = array_merge($packet, $data);
}
else{
for($i = 0 ; $i < strlen($data) ; $i+=2){
array_push($packet, hexdec(substr($data, $i, 2)));
}
}

$this->send_packet(0x6a, $packet);
}

public function Check_data(){

$code = array();

$packet = self::bytearray(16);
$packet[0] = 0x04;
$packet[1] = 0x00;
$packet[2] = 0x04;
$response = $this->send_packet(0x6a, $packet);
if (empty($response))
return false;

$err = hexdec(sprintf("%x%x", $response[0x23], $response[0x22]));

if($err == 0){
$enc_payload = array_slice($response, 0x38);

if(count($enc_payload) > 0){

$payload = $this->byte2array(aes128_cbc_decrypt($this->key(), $this->byte($enc_payload), $this->iv()));

$code = array_slice($payload, 0x04);
}
}

return $code;
}
public function Check_temperature(){

$temp = false;

$packet = $this->bytearray(16);

$packet[0] = 0x01;
$response = $this->send_packet(0x6a, $packet);
if (empty($response))
return false;

$err = hexdec(sprintf("%x%x", $response[0x23], $response[0x22]));

if($err == 0){
$enc_payload = array_slice($response, 0x38);

if(count($enc_payload) > 0){

$payload = $this->byte2array(aes128_cbc_decrypt($this->key(), $this->byte($enc_payload), $this->iv()));

$temp = ($payload[0x4] * 10 + $payload[0x5]) / 10.0;

}
}

return $temp;

}
}
Далее удалил из приложения все пульты и девайсы.
Сбросил mini (reset 6 sec.)
Через приложение прописал wifi в mini и на этом все. Сам mini в приложение не добавлял. После этого все заработало.
За это сообщение автора Natrix поблагодарил:
korikutkin (Ср авг 05, 2020 9:03 am)
Рейтинг: 1.23%
Аватара пользователя
korikutkin
Сообщения: 17
Зарегистрирован: Вт окт 29, 2019 5:41 am
Благодарил (а): 3 раза
Поблагодарили: 0

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

Сообщение korikutkin » Ср авг 05, 2020 9:05 am

Natrix писал(а):
Чт июл 30, 2020 3:32 pm
nick7zmail писал(а):
Пт июл 24, 2020 9:57 am
Вопрос то, как я понял в неподдерживаемых моделях RM?
Долго маялся с mini 0x5f36. Оказалось, что по крайней мере мой экземпляр, работает либо с приложением либо с majordomo.
Сейчас заработал и стал записывать и отправлять сигналы. Делал по следующей схеме:
Для начала заменил код на указанный ранее.
class RM extends Broadlink{

function __construct($h = "", $m = "", $p = 80, $d = 0x2712) {

parent::__construct($h, $m, $p, $d);

}

.........
}
Далее удалил из приложения все пульты и девайсы.
Сбросил mini (reset 6 sec.)
Через приложение прописал wifi в mini и на этом все. Сам mini в приложение не добавлял. После этого все заработало.
Можно по подробней, как и где заменили код? У меня тоже девайс mini 0x5f36.
X98Pro_AML_s912_3G_32G_Armbian_Linux arm 5.5.1-arm-64_MD_Яндекс станции_Z2M_Sonoff-Tasmota_Lonsonho_Aqara_Broadlink_MagicHome_MQTT_Tuya
Аватара пользователя
korikutkin
Сообщения: 17
Зарегистрирован: Вт окт 29, 2019 5:41 am
Благодарил (а): 3 раза
Поблагодарили: 0

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

Сообщение korikutkin » Ср авг 05, 2020 3:03 pm

korikutkin писал(а):
Ср авг 05, 2020 9:05 am
Natrix писал(а):
Чт июл 30, 2020 3:32 pm
nick7zmail писал(а):
Пт июл 24, 2020 9:57 am
Вопрос то, как я понял в неподдерживаемых моделях RM?
Долго маялся с mini 0x5f36. Оказалось, что по крайней мере мой экземпляр, работает либо с приложением либо с majordomo.
Сейчас заработал и стал записывать и отправлять сигналы. Делал по следующей схеме:
Для начала заменил код на указанный ранее.
class RM extends Broadlink{

function __construct($h = "", $m = "", $p = 80, $d = 0x2712) {

parent::__construct($h, $m, $p, $d);

}

.........
}
Далее удалил из приложения все пульты и девайсы.
Сбросил mini (reset 6 sec.)
Через приложение прописал wifi в mini и на этом все. Сам mini в приложение не добавлял. После этого все заработало.
Можно по подробней, как и где заменили код? У меня тоже девайс mini 0x5f36.
УРА Всё заработало, после ваших действий!!!!! Большое спасибо!!!!!!!!!!!!
X98Pro_AML_s912_3G_32G_Armbian_Linux arm 5.5.1-arm-64_MD_Яндекс станции_Z2M_Sonoff-Tasmota_Lonsonho_Aqara_Broadlink_MagicHome_MQTT_Tuya
Ответить