В этом разделе вы можете проголосовать за идеи по открытым проектам. Вы всегда можете предложить свою идею, перейдя на страницу проекта.
<<< НазадВремя от времени термостат в ответ на запрос статуса присылает либо битый пакет, либо пакет другого формата.
Несмотря на то, что пакет проходит контроль целостности проходит - в 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) и тд.