Bugs and Suggestions

Here you can vote for ideas by projects. You can add your ideas to any open project from the project's page.

Спасибо!

Мы очень рады, что Вам нравится данный проект и вы проголосовали за его развитие.

Работа над задачами по проекту отнимает у его разработчика самое ценное — время, так что небольшая компенсация в виде материальной поддержки поднимет интерес к разработке и позволит сделать больше задач для общей пользы :)

Перейти к проекту Нет, спасибо

<<< Back

Баг в HYNSEN.get_status();

Added by: 2020-10-10 12:50:11 AE / Status: New / Project: Модуль Broadlink

Время от времени термостат в ответ на запрос статуса присылает либо битый пакет, либо пакет другого формата.
Несмотря на то, что пакет проходит контроль целостности проходит - в payload содержатся неверные данные. Если при этом к свойству broadlink устройства привязано свойство класса MD - то оно получает неправильное значение. В результате срабатывает триггер на изменение значения свойства объекта, и это новое (уже неверное) значение будет передано через Broadlink в термостат.
Как это выглядит:
10:03:40 HYNSEN.get_status: temp=29.5, [5..35]: 1,3,44,0,0,59,59,0,0,0,0,35,5,0,0,1,0,0,0,3,40,42,6,6,0,8,0,11,30,12,30,17,0,22,0,8,0,23,0,40,30,30,30,44,33,44,30,171,195
10:03:40 HYNSEN.get_status: temp=1.5, [0..0]: 165,165,90,90,98,193,3,11,9,0,0,0,0,59,59,35,5
10:03:40 dev_broadlink: 'thermostat_temp' set '1.5'
10:03:40 therm01.targetTemp changed to '1.5'
10:03:40 dev_broadlink: set_temp({8,0,1,6,0,1,0,3,152,11})
10:03:40 HYNSEN.set_advanced({19,0,1,16,0,2,0,5,10,0,9,0,0,0,5,0,0,1,0,165,250})
10:03:40 HYNSEN.get_status: temp=1.5, [0..0]: 1,3,44,0,0,59,3,0,0,0,0,0,0,0,0,1,0,0,0,3,40,55,6,6,0,8,0,11,30,12,30,17,0,22,0,8,0,23,0,40,30,30,30,44,33,44,30,191,5

И это совсем проблема, ибо на уровне MD такие глюки отфильтровать уже невозможно.
Фигня происходит несколько раз в сутки. Если через модуль привязывать SThermostats, то проблемы незаметно, ибо SThermostats плюет на текущие значения, каждый раз переустанавливая новое. А вот пользоваться термостатом как термостатом а не как реле системы обогрева при этом нельзя - температура сбрасывается на 1.5 градуса.

Workaround: в HYNSEN.get_status() хотя бы проверять не просто наличие данных, а наличие достаточного количества данных:
if(count($enc_payload) > 22){

Решением было бы проверять целостность пакета - если там вообще есть контрольная сумма.
Или хотя бы диапазон допустимых значений: (dayofweek>0) && (svh>svl) && (svl>0) и тд.

+1
 
Discuss (0)