Опять про работу с type alarm

Вообщем работает неправильно.
Создал автоматизацию с переменной. То есть если переменная не равна 1 то идет перевод ошибки и лампочки в состояние true

Если переменная 1 (то есть ошибка уже вышла то не срабатывает автоматизация), ошибка обнуляется в полночь и потом снова начинает работать автоматизация.

И столкнулся с тем что если делать сактивным окном (у меня в одной окне открыто wirenboard а во втором node red) то автоматизация срабатывает и ошибка и лампа переходит в состояние true.

Но если я запсускаю таймер и закрываю окна то лампа перейдет в состояние true а ошибка останется false.

Вообщем некорректно работает type alarm

вот я запустил таймер и закрыл окна в браузере

А вот с открытым браузером и все сработало

Вот код для node red
[{“id”:“3b965b1bb8a87301”,“type”:“tab”,“label”:“Тест”,“disabled”:false,“info”:“”,“env”:[]},{“id”:“46437c9aef6d5b7c”,“type”:“inject”,“z”:“3b965b1bb8a87301”,“name”:“Старт”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:“10”,“crontab”:“”,“once”:false,“onceDelay”:0.1,“topic”:“”,“payload”:“”,“payloadType”:“date”,“x”:100,“y”:80,“wires”:[[“8fd5817c85989918”]]},{“id”:“8fd5817c85989918”,“type”:“switch”,“z”:“3b965b1bb8a87301”,“name”:“нет ошибки”,“property”:“alarm1”,“propertyType”:“flow”,“rules”:[{“t”:“neq”,“v”:“1”,“vt”:“num”}],“checkall”:“true”,“repair”:false,“outputs”:1,“x”:250,“y”:80,“wires”:[[“6575d4349c90c373”]]},{“id”:“f19cb089c8df0db5”,“type”:“inject”,“z”:“3b965b1bb8a87301”,“name”:“Каждую полночь”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:“”,“crontab”:“01 00 * * *”,“once”:false,“onceDelay”:0.1,“topic”:“”,“payload”:“”,“payloadType”:“date”,“x”:130,“y”:280,“wires”:[[“d19bd92b8ebfd9a6”]]},{“id”:“d19bd92b8ebfd9a6”,“type”:“change”,“z”:“3b965b1bb8a87301”,“name”:“Сброс ошибки”,“rules”:[{“t”:“set”,“p”:“payload”,“pt”:“msg”,“to”:“0”,“tot”:“num”}],“action”:“”,“property”:“”,“from”:“”,“to”:“”,“reg”:false,“x”:320,“y”:280,“wires”:[[“0f7dbf05823c8ac5”,“f29895e6739646a4”,“79a718061a33d0d8”]]},{“id”:“0f7dbf05823c8ac5”,“type”:“mqtt out”,“z”:“3b965b1bb8a87301”,“name”:“”,“topic”:“/devices/fridge_2/controls/alarm”,“qos”:“0”,“retain”:“”,“respTopic”:“”,“contentType”:“”,“userProps”:“”,“correl”:“”,“expiry”:“”,“broker”:“4d88405bfd0f6171”,“x”:570,“y”:280,“wires”:[]},{“id”:“f29895e6739646a4”,“type”:“change”,“z”:“3b965b1bb8a87301”,“name”:“”,“rules”:[{“t”:“set”,“p”:“alarm1”,“pt”:“flow”,“to”:“0”,“tot”:“num”}],“action”:“”,“property”:“”,“from”:“”,“to”:“”,“reg”:false,“x”:570,“y”:220,“wires”:[[]]},{“id”:“79a718061a33d0d8”,“type”:“wirenboard-out”,“z”:“3b965b1bb8a87301”,“name”:“”,“server”:“e6f5ac70ac829d8f”,“channel”:[“/devices/fridge_2/controls/redLamp”],“command”:“/on”,“commandType”:“wb_cmd”,“payload”:“payload”,“payloadType”:“msg”,“rbe”:true,“x”:530,“y”:340,“wires”:[]},{“id”:“efa3b2eb9e162bb9”,“type”:“wirenboard-out”,“z”:“3b965b1bb8a87301”,“name”:“”,“server”:“e6f5ac70ac829d8f”,“channel”:[“/devices/fridge_2/controls/redLamp”],“command”:“/on”,“commandType”:“wb_cmd”,“payload”:“payload”,“payloadType”:“msg”,“rbe”:true,“x”:670,“y”:120,“wires”:[]},{“id”:“46d427d3488a3b20”,“type”:“mqtt out”,“z”:“3b965b1bb8a87301”,“name”:“”,“topic”:“/devices/fridge_2/controls/alarm”,“qos”:“0”,“retain”:“”,“respTopic”:“”,“contentType”:“”,“userProps”:“”,“correl”:“”,“expiry”:“”,“broker”:“4d88405bfd0f6171”,“x”:710,“y”:80,“wires”:[]},{“id”:“8783deaae3d914b9”,“type”:“change”,“z”:“3b965b1bb8a87301”,“name”:“”,“rules”:[{“t”:“set”,“p”:“alarm1”,“pt”:“flow”,“to”:“1”,“tot”:“num”}],“action”:“”,“property”:“”,“from”:“”,“to”:“”,“reg”:false,“x”:690,“y”:40,“wires”:[[]]},{“id”:“6575d4349c90c373”,“type”:“trigger”,“z”:“3b965b1bb8a87301”,“name”:“”,“op1”:“”,“op2”:“1”,“op1type”:“nul”,“op2type”:“num”,“duration”:“15”,“extend”:false,“overrideDelay”:false,“units”:“s”,“reset”:“Температура в норме”,“bytopic”:“all”,“topic”:“topic”,“outputs”:1,“x”:450,“y”:80,“wires”:[[“8783deaae3d914b9”,“46d427d3488a3b20”,“efa3b2eb9e162bb9”]]},{“id”:“4d88405bfd0f6171”,“type”:“mqtt-broker”,“name”:“”,“broker”:“localhost”,“port”:“1883”,“clientid”:“”,“autoConnect”:true,“usetls”:false,“protocolVersion”:“4”,“keepalive”:“60”,“cleansession”:true,“autoUnsubscribe”:true,“birthTopic”:“”,“birthQos”:“0”,“birthRetain”:“false”,“birthPayload”:“”,“birthMsg”:{},“closeTopic”:“”,“closeQos”:“0”,“closeRetain”:“false”,“closePayload”:“”,“closeMsg”:{},“willTopic”:“”,“willQos”:“0”,“willRetain”:“false”,“willPayload”:“”,“willMsg”:{},“userProps”:“”,“sessionExpiry”:“”},{“id”:“e6f5ac70ac829d8f”,“type”:“wirenboard-server”,“name”:“”,“host”:“localhost”,“mqtt_port”:“1883”,“mqtt_username”:“”,“mqtt_password”:“”}]

Добрый день.

Не понимаю сути вопроса. Из информации вижу много Node-RED’а.
Если у вас вопрос по работе самого Node-RED, то это лучше в техподдержку продукта обращаться.

Если у вас есть вопросы или проблемы с нашим оборудованием и ПО, то опишите подробнее, что не получается.

Что понял на данный момент я. Вам нужно, чтобы в виджете отрабатывал Alarm. Воспроизвожу:

  1. отправляю в топик /devices/virtual-fridge_2/controls/error 1 - вижу так:
    2024-04-11_12-16_1
  2. отправляю в топик /devices/virtual-fridge_2/controls/error 0 - вижу так:
    2024-04-11_12-16

Не понимаю данных действий.

нет проблемма не в ноде ред а в работе alarm

Когда я закрываю браузер аларм не срабатывает

то есть я запускаю таймер и должен быть аларм + лампочка на true, лампочка включается а аларм нет (если я закрыл браузер)

Так вроде понятнее. Чуть позже попробую воспроизвести. О результате напишу.

Добрый день.
Верно я понял, что вы создали виртуальное устройство с типом alarm? Воспроизвести пока не получилось.
Покажите как именно вы описали виртуальное устройство.

Здесь я некорректно указал топик. Необходимо писать в данный подтопик:

/devices/virtual-fridge_2/controls/error/on

Добрый день, вот мое виртуальное устройство

// 1. НЕОБХОДИМО ЗАПОЛНИТЬ ДАННЫЕ ПО УСТРОЙСТВУ

// 1.1 путь до внешних физических устройств
var temperatureSensorDoor = “wb-mai6_66/IN 2 P Temperature”
var temperatureSensorDeep = “hwmon/CPU Temperature”
var redLamp = “wb-mrm2-mini_54/K2”
var greenLamp = “wb-gpio/A4_OUT”
var yellowLamp = “wb-gpio/A3_OUT”
var loock = “wb-m1w2_78/Input 1”
var cleaning = “wb-mrm2-mini_54/Input 2 counter”

// 1.2 введите Id и Имя холодильника (устройства (обычно +1 к предыдущему)
var idDevice = 2
var idName = “Холодильник с тестом №6”

// -------------------------------------------------------------------------- //

// 2. СКРИПТ НА СОЗДАНИЕ УСТРОЙСТВА
defineVirtualDevice(“fridge_”+idDevice, {
title: idName ,
cells: {
temperatureSensorDoor: {
title: “Температура у двери”,
type: “temperature”,
value: 0,
order: 8
},
temperatureSensorDeep: {
title: “Температура у блока”,
type: “temperature”,
value: 0,
order: 9
},
redLamp: {
title: “Сброс ошибки”,
type: “switch”,
value: false,
order: 3
},
greenLamp: {
title: “Зеленая лампа”,
type: “switch”,
value: false,
order: 5
},
yellowLamp: {
title: “Желтая лампа”,
type: “switch”,
value: false,
order: 7
},
cleaning: {
title: “Режим уборки”,
type: “switch”,
value: false,
order: 4
},
loock: {
title: “Дверь заперта”,
type: “switch”,
value: false,
order: 6
},
alarm: {
title: “ОШИБКА”,
type: “alarm”,
value: false,
order: 1
},
textAlarm: {
title: “”,
type: “text”,
value: “описание ошибки”,
order: 2
},
}
});

// привязка показаний физических устройств (внешних)
// датчик у двери
defineRule( {
whenChanged: temperatureSensorDoor,
then: function (newValue) {
dev [“fridge_” +idDevice+ “/temperatureSensorDoor”] = newValue
}
});
// датчик у блока
defineRule( {
whenChanged: temperatureSensorDeep,
then: function (newValue) {
dev [“fridge_” +idDevice+ “/temperatureSensorDeep”] = newValue
}
});

// Красная лампа
defineRule( {
whenChanged: redLamp,
then: function (newValue) {
dev [“fridge_”+idDevice+“/redLamp”] = newValue
}
});
defineRule( {
whenChanged: “fridge_”+idDevice+“/redLamp”,
then: function (newValue) {
dev [redLamp] = newValue
}
});

// Зеленая лампа
defineRule( {
whenChanged: greenLamp,
then: function (newValue) {
dev [“fridge_”+idDevice+“/greenLamp”] = newValue
}
});
defineRule( {
whenChanged: “fridge_”+idDevice+“/greenLamp”,
then: function (newValue) {
dev [greenLamp] = newValue
}
});

// Желтая лампа
defineRule( {
whenChanged: yellowLamp,
then: function (newValue) {
dev [“fridge_”+idDevice+“/yellowLamp”] = newValue
}
});
defineRule( {
whenChanged: “fridge_”+idDevice+“/yellowLamp”,
then: function (newValue) {
dev [yellowLamp] = newValue
}
});

// геркон (датчик на закрытие двери)
defineRule( {
whenChanged: loock,
then: function (newValue) {
dev [“fridge_” + idDevice + “/loock”] = !newValue
}
});

// Режим уборки
defineRule( {
whenChanged: cleaning,
then: function () {
dev [“fridge_”+idDevice+“/cleaning”] = true
}
});

// активация аларм
defineRule( {
whenChanged: “fridge_”+idDevice+“/redLamp”,
then: function (newValue) {
dev [“fridge_” + idDevice + “/alarm”] = newValue
}
});

Данный кусок я бы для корректной работы переписал вот так:

alarm: {
title: "ОШИБКА",
type: "alarm",
readonly: false,
value: 0,
order: 1
},

И в Node-RED’е пишите в подтопик /devices/fridge_2/controls/alarm/on.

Попробуйте так и сообщите о результате.