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

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

Модератор: immortal

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

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июн 28, 2017 3:34 pm

Я хз...эт МД чет чудит...в модуле точно нету функции/переменной cmp

У себя проверил - падений не замечено...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
vitt76
Сообщения: 372
Зарегистрирован: Вс апр 09, 2017 2:36 pm
Благодарил (а): 101 раз
Поблагодарили: 51 раз

Re: Модуль Broadlink

Сообщение vitt76 » Ср июн 28, 2017 4:17 pm

nick7zmail, и что же, с этим никак не побороться? у меня лог скоро все свободное место сожрет :)
UPD опытным путем выяснено, что это S1 "спамит", убрал обновление - прекратилось.
Broadlink + Orange Pi PC ARMBIAN 5.31
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июн 28, 2017 4:59 pm

Ну вот видимо потому что у меня нет s1- и не наблюдается такое)))Если выяснится причина - хорошо будет)) поправим.

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ILGAS
Сообщения: 366
Зарегистрирован: Пт июл 26, 2013 4:11 pm
Благодарил (а): 71 раз
Поблагодарили: 18 раз

Re: Модуль Broadlink

Сообщение ILGAS » Ср июн 28, 2017 5:17 pm

подскажите пункт "Обновлять каждые: none, 5s.. " должны ли обновляться данные (температура) в RM pro? удалил обновление через

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

include_once(DIR_MODULES."dev_broadlink/dev_broadlink.class.php");
$dev_broadlink=new dev_broadlink();
$dev_broadlink->check_params();
думал будет теперь обновляться, но оно не обновляет (((
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июн 28, 2017 7:03 pm

Должно работать...проверьте цикл бродлинка...если не запущен - запустите.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
vshuka911
Сообщения: 76
Зарегистрирован: Пт июн 02, 2017 11:02 am
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Модуль Broadlink

Сообщение vshuka911 » Ср июн 28, 2017 8:08 pm

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

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июн 28, 2017 8:09 pm

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

Re: Модуль Broadlink

Сообщение nick7zmail » Ср июн 28, 2017 8:14 pm

viewtopic.php?p=38425#p38425
Вот например 1 из моих ответов...только вместо getUrl используйте brLinkCommand('команда');, ибо там вариант для rm-bridge был
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ILGAS
Сообщения: 366
Зарегистрирован: Пт июл 26, 2013 4:11 pm
Благодарил (а): 71 раз
Поблагодарили: 18 раз

Re: Модуль Broadlink

Сообщение ILGAS » Ср июн 28, 2017 8:16 pm

nick7zmail писал(а):Должно работать...проверьте цикл бродлинка...если не запущен - запустите.
Цикл работал.

Отправлено с моего SM-G7508Q через Tapatalk
Аватара пользователя
VooDooN
Сообщения: 307
Зарегистрирован: Сб июн 11, 2016 12:02 am
Благодарил (а): 170 раз
Поблагодарили: 64 раза

Re: Модуль Broadlink

Сообщение VooDooN » Ср июн 28, 2017 8:26 pm

Подебажил я модуль давеча...

Наставил в нескольких местах запись значений разных переменных в лог с отметками времени и стал ждать, когда настройки сбросятся на 0 у S1C. Часов через 6 отловил (кстати, почти всю ночь нормально проработал, а вот днем относительно часто ловится проблема, видимо это зависит от активности использования соседских wi-fi, которые могут засорять эфир). Потом я экспериментировал и еще несколько раз отловил проблему. Не буду пока аттачить скрины и логи, чтобы долго не объяснять в каких местах записывал в лог. Начну с секции

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

if ($rec['TYPE']=='s1') {

в файле dev_broadlink_check.inc.php.
Если все нормально, то она полностью отрабатывает в течении секунды. Но в какой-то момент что-то происходит и S1C не отвечает в течении 10 секунд и дальше по таймауту закрывается коннекшин и все настройки превращаются в 0.
Посмотрим внутрь Check_Status() с моими комментариями:

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

public function Check_Status(){
        $data = array(); //Создается переменная $data в виде массива, запомним этот момент!
        
        $packet = self::bytearray(16);
        $packet[0] = 0x12;
        
        $response = $this->send_packet(0x6a, $packet); // Когда S1C не отвечает в течении 10 секунд, то $response пустой!
         $err = hexdec(sprintf("%x%x", $response[0x23], $response[0x22])); // $err всегда 0, даже когда S1C не ответил (я ожидал не 0).
        if($err == 0){ //наверное, условие не защищает от проблемы молчания S1C и дальше идет работа с пустым $response
            $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()));
                $data['status'] = $payload[0x04];
                $data['delay_time_m'] = $payload[0x08];
                $data['delay_time_s'] = $payload[0x09];
                $data['alarm_buzzing'] = $payload[0x0a];
                $data['alarm_buzzing_duration'] = $payload[0x0b];
                $data['beep_mute'] = $payload[0x0d];
                $data['alarm_detector'] = $payload[0x28];
                switch ($data['status']) {
                    case 0x00:
                        $data['status_val'] = constant('LANG_BRS1_DISARM');
                        break;
                    case 0x01:
                        $data['status_val'] = constant('LANG_BRS1_PART');
                        break;
                    case 0x02:
                        $data['status_val'] = constant('LANG_BRS1_FULL');
                        break;
                    default:
                        $data['status'] = constant('LANG_BRS1_UNKNOWN').$data['status'];
                }
            }
        }
        return $data; // и в результате нам возвращают пустой массив $data, не "" и не NULL, а просто Array.
    } 
Возвращаемся в секцию

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

if ($rec['TYPE']=='s1') {

на строке
$response = $rm->Check_Status();
мы получаем $response, как пустой массив.
А дальше идет проверка

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

if(isset($response) && $response!='') { 
которая не защищает от пустого массива и происходят всякие гадости, что превращается в сброс на 0 статуса охраны и настроек.
И если проверку сделать так

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

if(isset($response) && $response!='' && !empty($response)) { 
То прекращается сброс настроек (звука в том числе) и статуса охраны. Я уже отловил несколько молчаний S1C и настройки не сбросились.

Я заметил, что такая проверка

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

if(isset($response) && $response!='') { 
встречается во многих местах и она не защищает от молчания опрашиваемого девайса. Я думаю, что именно по этой причине MP1 и SP3 иногда выключаются при плохой связи. И A1 записывает 0 градусов и 0 влажность при плохой связи, как я уже давно писал, так как там тоже (в Check_sensors) создается пустой массив, во время обработки иногда что-то валится и возвращается пустой массив, который не проверяется со всеми последствиями.

Может я что-то не так объяснил, ногами не пинайте. Я не программист, а просто QA со стажем. Код читаю, но редко пишу.
За это сообщение автора VooDooN поблагодарил:
nick7zmail (Ср июн 28, 2017 9:08 pm)
Рейтинг: 1.16%
Ответить