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

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

Модератор: immortal

Аватара пользователя
dimaxus
Сообщения: 6
Зарегистрирован: Сб мар 28, 2020 2:15 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

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

Сообщение dimaxus » Вт дек 14, 2021 3:41 pm

Доброго всем дня.
Хотел подключится к теме SP4L, два раза вопрос задавался, но ответ так и повис в воздухе, разработчик ау...
Аватара пользователя
dance12r
Сообщения: 105
Зарегистрирован: Пн июл 17, 2017 12:14 pm
Откуда: Киев
Благодарил (а): 10 раз
Поблагодарили: 47 раз

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

Сообщение dance12r » Чт янв 06, 2022 1:07 pm

Всем день добрый, выдрал из e-Control коды кнопок выключателей TC, может кто сможет теперь напомнить как выглядела структура бекапа для импорта?
Raspberry Pi 3 + Broadlink + MySensors + MDM VoiceAssistant
Аватара пользователя
dance12r
Сообщения: 105
Зарегистрирован: Пн июл 17, 2017 12:14 pm
Откуда: Киев
Благодарил (а): 10 раз
Поблагодарили: 47 раз

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

Сообщение dance12r » Чт янв 06, 2022 1:52 pm

Если вдруг кому нужно:
1. Заходим в e-Control и пытаемся сделать резевную компию - получаем ошибку
2. Открываем в телефоне проводник и идем в папку: /broadlink/newremote/SharedData/
3. Копируем от сюда файлы: jsonDevice, jsonSubIr, jsonButton, jsonIrCode на локальный компьютер
4. Создаем дирректории в MJDM:

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

ssh pi@mjdm_ip
cd /var/www/html/cms/cached
mkdir broadlink
cd broadlink/
mkdir SharedData
5. Копируем загруженные файлы в эту папку:

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

scp * pi@mjdm_ip:/var/www/html/cms/cached/broadlink/SharedData
6. Открываем в браузере модуль Broadlink - > BLCloud - > Экспорт облачных команд
7. Копируем содержимое и импортируем
8. DONE!
За это сообщение автора dance12r поблагодарили (всего 3):
chibis (Чт янв 06, 2022 3:17 pm) • xor (Пт янв 07, 2022 3:12 pm) • Soichi (Сб июл 02, 2022 12:12 pm)
Рейтинг: 3.49%
Raspberry Pi 3 + Broadlink + MySensors + MDM VoiceAssistant
gdv3_
Сообщения: 1
Зарегистрирован: Пн фев 07, 2022 9:57 am
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение gdv3_ » Пн фев 07, 2022 11:38 am

Есть такой проект: https://github.com/mjg59/python-broadlink
Там давно расписан протокол общения с новыми устройствами broadlink.

В частности, для RM4, совместив данные оттуда с кодом модуля, получил две функции:

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

	public function Send_data($data){

		$packet = self::bytearray(6);
		$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)));
			}
		}

		$checksum = sizeof($packet) - 2;
		$packet[0] = $checksum & 0xFF;
		$packet[1] = $checksum >> 8;

		$response = $this->send_packet(0x6a, $packet);
                $err = hexdec(sprintf("%x%x", $response[0x23], $response[0x22]));
                return($err);
	}

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

	public function Check_temperature(){

		$temp = false;

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

		$packet[0] = 0x04;
		$packet[2] = 0x24;
		$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[0x6] + $payload[0x7] / 100.0;

			}
		}

		return $temp;

	}
igor_spodarev
Сообщения: 17
Зарегистрирован: Вс мар 10, 2019 1:18 pm
Благодарил (а): 8 раз
Поблагодарили: 1 раз

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

Сообщение igor_spodarev » Вт апр 19, 2022 1:46 pm

что не так делаю подскажите система стоит на убунту сервере. на PHP ONLINE добавил коды которые в бродлинк с помощью RM плагина в консоли пробую код зависает и не происходит не чего хотя на RM плагине все работает сразу,бродлинк RM2PRO+
Willy
Сообщения: 16
Зарегистрирован: Сб дек 21, 2019 9:23 am
Благодарил (а): 1 раз
Поблагодарили: 1 раз

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

Сообщение Willy » Вс сен 11, 2022 1:32 pm

Только у меня такая фигня? не могу добавить BroadLink RM4 pro и потом его использовать?

1. Нашел, но видно, что дата неверная
1.jpg
1.jpg (74.5 КБ) 1514 просмотров
2. Собственно ошибка
2.jpg
2.jpg (206.12 КБ) 1514 просмотров
3. Пробую вставить в базу напрямую
3.jpg
3.jpg (60.47 КБ) 1514 просмотров
4. Цикл запущен, устройство есть, но нет картинки (подозрительно)
4.jpg
4.jpg (51.99 КБ) 1514 просмотров
5. Но пробую обучить - железка не переходит в режим обучения
5.jpg
5.jpg (75.79 КБ) 1514 просмотров

Куда копать?
evgeniynd
Сообщения: 31
Зарегистрирован: Вт сен 17, 2019 12:25 pm
Благодарил (а): 0
Поблагодарили: 1 раз

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

Сообщение evgeniynd » Пт фев 17, 2023 10:29 am

Всем привет, сегодня решил подключить свой старый broadlink RM pro+ к мажору и что то ничего не выходит. Подключаю через PHP only. Цикл не стартует, устройство не видит(
Мажор стоит на винде.

Вот что в логах при нажатии кнопки "обновить"

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

10:32:56 0.91123800 /admin.php?pd=ZGV2X2Jyb2FkbGluazp7aW5zdGFuY2U9YWRtfQ%3D%3Dpz_cGFuZWw6e2FjdGlvbj1kZXZfYnJvYWRsaW5rfQ%3D%3Dpz_&md=dev_broadlink&inst=adm&data_source=&id=&view_mode=&mode=check_params
PHP shutdown error: Uncaught Error: Call to undefined method SP1::Check_temperature() in C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink_check.inc.php:96
Stack trace:
#0 C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink.class.php(627): require()
#1 C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink.class.php(190): dev_broadlink->check_params()
#2 C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink.class.php(120): dev_broadlink->admin(Array)
#3 C:\_majordomo\htdocs\lib\jTemplate.class.php(640) : eval()'d code(8): dev_broadlink->run()
#4 C:\_majordomo\htdocs\lib\jTemplate.class.php(640): eval()
#5 C:\_majordomo\htdocs\lib\jTemplate.class.php(181): jTemplate->parseModules('<!DOCTYPE html>...', Array, './templates/')
#6 C:\_majordomo\htdocs\lib\jTemplate.class.php(98): jTemplate->parse('<!DOCTYPE html>...', Array, './templates/')
#7 C:\_majordomo\htdocs\lib\parser.class.php(93): jTemplate->__construct('./templates/pan...', Array, Object(panel))
#8 C:\_majordomo\htdocs\lib\parser.class.php(63): parser->jtem
Backtrace: #0 [internal function]: phpShutDownFunction()
#1 {main}
10:32:56 0.77318400 /admin.php?pd=ZGV2X2Jyb2FkbGluazp7aW5zdGFuY2U9YWRtfQ%3D%3Dpz_cGFuZWw6e2FjdGlvbj1kZXZfYnJvYWRsaW5rfQ%3D%3Dpz_&md=dev_broadlink&inst=adm&data_source=&id=&view_mode=&mode=check_params&part_load=1
PHP shutdown error: Uncaught Error: Call to undefined method SP1::Check_temperature() in C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink_check.inc.php:96
Stack trace:
#0 C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink.class.php(627): require()
#1 C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink.class.php(190): dev_broadlink->check_params()
#2 C:\_majordomo\htdocs\modules\dev_broadlink\dev_broadlink.class.php(120): dev_broadlink->admin(Array)
#3 C:\_majordomo\htdocs\lib\jTemplate.class.php(640) : eval()'d code(8): dev_broadlink->run()
#4 C:\_majordomo\htdocs\lib\jTemplate.class.php(640): eval()
#5 C:\_majordomo\htdocs\lib\jTemplate.class.php(181): jTemplate->parseModules('<!DOCTYPE html>...', Array, './templates/')
#6 C:\_majordomo\htdocs\lib\jTemplate.class.php(98): jTemplate->parse('<!DOCTYPE html>...', Array, './templates/')
#7 C:\_majordomo\htdocs\lib\parser.class.php(93): jTemplate->__construct('./templates/pan...', Array, Object(panel))
#8 C:\_majordomo\htdocs\lib\parser.class.php(63): parser->jtem
Backtrace: #0 [internal function]: phpShutDownFunction()
Вложения
image_2023-02-17_10-35-19.png
image_2023-02-17_10-35-19.png (155.73 КБ) 1212 просмотров
image_2023-02-17_10-28-19.png
image_2023-02-17_10-28-19.png (40.53 КБ) 1213 просмотров
Serh
Сообщения: 2
Зарегистрирован: Пт мар 04, 2022 4:45 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение Serh » Пт апр 28, 2023 2:18 pm

Willy писал(а):
Вс сен 11, 2022 1:32 pm
Только у меня такая фигня? не могу добавить BroadLink RM4 pro и потом его использовать?

1. Нашел, но видно, что дата неверная 1.jpg
2. Собственно ошибка 2.jpg
3. Пробую вставить в базу напрямую 3.jpg
4. Цикл запущен, устройство есть, но нет картинки (подозрительно) 4.jpg
5. Но пробую обучить - железка не переходит в режим обучения 5.jpg


Куда копать?
Serh
Сообщения: 2
Зарегистрирован: Пт мар 04, 2022 4:45 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение Serh » Пт апр 28, 2023 2:21 pm

RM4 mini не обучается кодам ,аналогичная проблема..
Может кто нибудь подсказать ,куда копать?
bartwell
Сообщения: 62
Зарегистрирован: Пн апр 23, 2018 11:10 am
Благодарил (а): 16 раз
Поблагодарили: 32 раза

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

Сообщение bartwell » Ср июн 12, 2024 12:26 am

Лень было обучать кондиционер вручную, а из бэкапа вытащить не получалось... В итоге использовал базу кодов отсюда. Они там в base64, я написал конвертер:

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

<?php
const NAME_PREFIX = "samsung_ac";
const MAC = "78:0f:77:11:22:33";
const URL = "https://raw.githubusercontent.com/smartHomeHub/SmartIR/master/codes/climate/1401.json";

function decodeIrCode($data)
{
    $bytes = base64_decode($data);
    $decodedIrCode = "";
    for ($i = 0; $i < strlen($bytes); $i++) {
        $byte = $bytes[$i];
        $value = unpack('C', $byte)[1];
        $value = dechex($value);
        $decodedIrCode .= str_pad($value, 2, "0", STR_PAD_LEFT);
    }
    return $decodedIrCode;
}

function mapArray($name, $data)
{
    $result = [];
    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $subResult = mapArray($name . "_" . $key, $value);
            $result = array_merge($result, $subResult);
        } else {
            $result[] = ["name" => $name . "_" . $key, "data" => decodeIrCode($value), "mac" => MAC];
        }
    }
    return $result;
}

$content = file_get_contents(URL);
$json = json_decode($content, true);
echo json_encode(mapArray(NAME_PREFIX, $json['commands']));
Если кому еще будет нужно, находите подходящее устройство, заменяете 1401 на ваш айди, заодно меняете MAC и NAME_PREFIX. Скрипт выдаст готовый JSON, который можно будет засунуть в импорт в модуле бродлинка.
За это сообщение автора bartwell поблагодарили (всего 3):
andrey040670 (Ср июн 12, 2024 12:40 am) • Chainik (Ср июн 12, 2024 12:19 pm) • xor (Ср июн 12, 2024 10:30 pm)
Рейтинг: 3.49%
Ответить