Аварийный режим работы котла
Переменная Emergency_mode принимает значение ON при неисправной работе датчиков, либо при температуре в котельной, сильно отличающейся от нормы и значение OFF при нормализации температуры и восстановлении связи с датчиками.
Переменные thingStatusInfo считывают состояние датчиков
При условии, что датчик, по которому осуществляется управление неисправен, включается аварийный режим (если раньше не был включен), при включенных уведомлениях, пользователя оповещает приложение, и при условии выключенного ручного режима, запускается цикл, включающий и выключающий отопление каждые 30 минут. Цикл работает, пока не включат ручной режим, либо пока все датчики не придут в норму.
Завершение аварийного режима также выключает ручной режим
//Проверяет смену состояния датчика в помещении и при отсутствии сигнала, включает аварийный режим. Отправляет уведомления
rule "connection_lost2"
when
Thing "onewiregpio:sensor:b71f2e0775" changed or
Item systemstarted received update
then
logInfo("warning", "room sensor state is supposed to be updated")
var thingStatusInfo2 = getThingStatusInfo("onewiregpio:sensor:b71f2e0775")
if (thingStatusInfo2 !== null && thingStatusInfo2.getStatus().toString() == "OFFLINE"){
if (Notifications.state == ON){
sendBroadcastNotification("Потеряна связь с датчиком в помещении")
}
Temperature_sensor2_ONLINE.sendCommand(OFF)
logInfo("warning", "room sensor disabled")
Emergency_mode.sendCommand(ON)
}
if (thingStatusInfo2 !== null && thingStatusInfo2.getStatus().toString() == "ONLINE") {
if (Notifications.state == ON){
sendBroadcastNotification("Связь с датчиком в помещении восстановлена")
}
Temperature_sensor2_ONLINE.sendCommand(ON)
logInfo("warning", "room sensor enabled")
Emergency_mode.sendCommand(OFF)
}
end
//Каждые 30 секунд проверяет состояние аварийного режима. Если ВКЛ, меняет состояние котла на противоположное.
rule "emergency_mode_cron"
when
Time cron "0 */30 * ? * *"
then
if(Emergency_mode.state == ON && Manual_mode.state == OFF){
if (nn_n1.state == OFF){
nn_n1.sendCommand(ON)
logInfo("warning", "Emergency ON, relay ON")
}
else{
nn_n1.sendCommand(OFF)
logInfo("warning", "Emergency ON, relay OFF")
}
}
end
//turns auto control off in case of emergency
//При смене состояния аварийного режима, выключает ручной режим. Если ВКЛ, выключает контроль температуры, если Выкл, включает его
rule "automatic_mode_off"
when
Item Emergency_mode changed
then
Manual_mode.sendCommand(OFF)
if (Emergency_mode.state == ON){
Temp_control.sendCommand(OFF)
logInfo("warning", "Emergency ON, Manual mode OFF, Temp control mode OFF")
}
else {
Temp_control.sendCommand(ON)
logInfo("warning", "Emergency OFF, Manual mode OFF, Temp control mode ON")
}
end