Wb-rules 1.7. Подписка на событие не срабатывает из правила


#1

Есть устройство, состояние которого публикуются в mqtt python клиентом.
Если подписаться на события устройства, то сообщения приходят:

Summary

aqualx@wb ~ $ mosquitto_sub -t ‘/devices/bedroom/controls/#’ -v
/devices/bedroom/controls/temperature 23.9
/devices/bedroom/controls/temperature/meta/type temperature
/devices/bedroom/controls/humidity 35.7
/devices/bedroom/controls/humidity/meta/type rel_humidity
/devices/bedroom/controls/battery 96
/devices/bedroom/controls/battery/meta/type value
/devices/bedroom/controls/battery/meta/units %
/devices/bedroom/controls/timestamp 2019-02-11 23:52:11
/devices/bedroom/controls/timestamp/meta/type text
/devices/bedroom/controls/humidity 35.7
/devices/bedroom/controls/temperature 23.8
/devices/bedroom/controls/battery 96
/devices/bedroom/controls/timestamp 2019-02-11 23:56:55
/devices/bedroom/controls/humidity 35.8
/devices/bedroom/controls/temperature 23.9
/devices/bedroom/controls/battery 96
/devices/bedroom/controls/timestamp 2019-02-12 00:02:15
/devices/bedroom/controls/humidity 35.9
/devices/bedroom/controls/temperature 23.9
/devices/bedroom/controls/battery 96
/devices/bedroom/controls/timestamp 2019-02-12 00:07:07

Но если подписаться в правиле, то сообщения от устройства никогда не приходят. От w1 датчиков сообщения обрабатываются нормально. Вот пример правила:

Summary

defineRule(‘thermostat.displayTemperature’, {
whenChanged: [
TEMP.bathroom_floor,
TEMP.bathroom_mi,
TEMP.kids_room,
TEMP.kids_room_mi,
TEMP.kids_room_floor,
TEMP.bedroom,
TEMP.bedroom_mi,
TEMP.server_room,
TEMP.kitchen_living_room_floor,
TEMP.kitchen,
TEMP.kitchen_mi,
TEMP.kitchen_floor,
TEMP.corridor,
TEMP.kitchen_living_room_ac,
TEMP.living_room_ac,
TEMP.bedroom_ac
],
then: function(newValue, devName, cellName) {
log( ‘thermostat.displayTemperature: {}/{} = {}’.format( devName, cellName, newValue ) );
}
});

global.proto.TEMP = {
‘bathroom_floor’: ‘wb-w1/28-800000038967’,
‘bathroom_mi’: ‘bathroom/temperature’,
‘kids_room’: ‘wb-w1/28-800000016d97’,
‘kids_room_mi’: ‘kidsroom/temperature’,
‘kids_room_floor’: ‘wb-w1/28-8000000387f1’,
‘kids_room_ac’: ‘wb-mir_v2_4/int_temp’,
‘bedroom’: ‘wb-w1/28-800000037ded’,
‘bedroom_ac’: ‘wb-mir_v2_3/int_temp’,
‘bedroom_mi’: ‘bedroom/temperature’,
‘server_room’: ‘wb-w1/28-800000036f5f’,
‘living_room_ac’: ‘wb-mir_v2_2/int_temp’,
‘kitchen_living_room_floor’: ‘wb-w1/28-80000003826d’,
‘kitchen_living_room_ac’: ‘wb-mir_v2_1/int_temp’,
‘kitchen’: ‘wb-w1/28-8000000174c7’,
‘kitchen_mi’: ‘kitchen/temperature’,
‘kitchen_floor’: ‘wb-w1/28-8000000173fb’,
‘corridor’: ‘wb-w1/28-800000037c9d’,
};

Пробовал менять топик устройства на /devices/bedroom/controls/temperature и… тоже не работает :frowning:


#2

Поставьте /devices/bedroom/controls/temperature/meta/type , думаю дело в этом


#3

Там стоит мета тайп temperature. Или число передавать через запятую?


#4

попробуйте ещё в веб-интерфейсе открыть консоль с сообщениями правил, включить отладку и посмотреть, нет ли там чего подозрительного


#5

Мда, ночью сам перезапустился движок правил (из-за превышения queue handleMessage length) и события пошли.
Может известно, что стоит избегать в правилах, чтобы движок успевал вовремя обрабатывать события на WB5? Кроме избавления от крон правил…
Поменять подписку в правилах с whenChanged на cron ("@every 1m") для правил обработки температурных датчиков? Супер реалтайм обработка не нужна. Или это ничего не даст?

top показывает такую загрузку:
top - 08:05:11 up 9:32, 1 user, load average: 2.03, 2.13, 1.92
Tasks: 111 total, 1 running, 110 sleeping, 0 stopped, 0 zombie
%Cpu(s): 21.9 us, 18.5 sy, 0.0 ni, 57.7 id, 0.0 wa, 0.0 hi, 1.9 si, 0.0 st
KiB Mem : 122868 total, 3764 free, 65184 used, 53920 buff/cache
KiB Swap: 262140 total, 249216 free, 12924 used. 48564 avail Mem

Похоже после этого начало работать:

Summary

1 Feb 12 06:25:10 wb daemon.info wb-mqtt-confed[487]: WARNING: MQTT connection lost
2 Feb 12 06:25:10 wb daemon.info wb-rules[3762]: WARNING: MQTT connection lost
3 Feb 12 06:25:10 wb daemon.info wb-mqtt-confed[487]: INFO: MQTT connection established
4 Feb 12 06:25:10 wb daemon.info wb-rules[3762]: INFO: MQTT connection established
5 Feb 12 06:25:13 wb authpriv.info CRON[32557]: pam_unix(cron:session): session closed for user root
6 Feb 12 06:25:16 wb daemon.info wb-rules[3762]: WARNING: queue handleMessage is half-filled: 1025/2048
7 Feb 12 06:25:18 wb daemon.info wb-rules[3762]: INFO: queue handleMessage length back to normal: 1024/2048


#6

Памяти свободной мало, думаю это может быть связано.


#7

Да, мало. Но в свап не много скинулось. Жаль, что CPU модуль обновить нельзя :frowning: