| Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
iot:software:node-red:flows:humidity_correction [2021/07/10 18:29] Николай Солошин [Дополнение] |
iot:software:node-red:flows:humidity_correction [2022/02/16 21:20] (текущий) Николай Солошин ↷ Операцией перемещения обновлены ссылки |
| Пришла весна, потом пришло лето... и все это подряд, да еще и в один и тот же город Владивосток! Было бы смешно, если не сезонная влажность, которая в этот период на улице может неделями держаться на уровне 100%, а в квартире... Ну, вот сейчас, 67%! | Пришла весна, потом пришло лето... и все это подряд, да еще и в один и тот же город Владивосток! Было бы смешно, если не сезонная влажность, которая в этот период на улице может неделями держаться на уровне 100%, а в квартире... Ну, вот сейчас, 67%! |
| |
| В ванной комнате, как это не печально, тоже... А там установлен [[iot:homebridge:tasmota:sonoff:th|Sonoff TH10]], работающий под Tasmota в автоматическом режиме -- влажность поднялась, он включился, влажность упала -- выключился. Удобно, все привыкли, а тут -- ну не выключается((Естественно, живя в этом славном городе с рождения, это не стало внезапным шоком и было спрогнозировано, что такое скорее всего будет иметь место.)), хоть ты тресни! | В ванной комнате, как это не печально, тоже... А там установлен [[iot:firmware:tasmota:sonoff:th|Sonoff TH10]], работающий под Tasmota в автоматическом режиме -- влажность поднялась, он включился, влажность упала -- выключился. Удобно, все привыкли, а тут -- ну не выключается((Естественно, живя в этом славном городе с рождения, это не стало внезапным шоком и было спрогнозировано, что такое скорее всего будет иметь место.)), хоть ты тресни! |
| |
| Сперва вручную поправил пороги в соответствующем правиле, потом почесал, где обычно чешут, и родил этот поток. 8-) | Сперва вручную поправил пороги в соответствующем правиле, потом почесал, где обычно чешут, и родил этот поток. 8-) |
| ===== Дополнительные подпотоки ===== | ===== Дополнительные подпотоки ===== |
| |
| * [[iot:node-red:subflows:sendmail|Отправка почты]] | * [[iot:software:node-red:subflows:sendmail|Отправка почты]] |
| |
| Этот подпоток входит в состав кода ниже и загружать отдельно его не надо! | Этот подпоток входит в состав кода ниже и загружать отдельно его не надо! |
| Цепочка запускается по таймеру -- сейчас установлено 15 минут, но после тестирования планирую увеличить промежуток до 6-12 часов. Данные получаются и передаются по MQTT. | Цепочка запускается по таймеру -- сейчас установлено 15 минут, но после тестирования планирую увеличить промежуток до 6-12 часов. Данные получаются и передаются по MQTT. |
| |
| Сперва проверяется, включена или выключена вентиляция, т.к. в первом случае ни о какой корректировке порогов влажности не может идти речи. Если включена, ничего не делается, кроме отправки письма с предупреждением. Если выключена, вводятся настройки и сравнивается уровень текущей влажности с предыдущим, если он не выходит за рамки установленной погрешности, опять же, ничего, кроме письма не делается. Если влажность изменилась больше порога погрешности, проверяется уровень порога включения вентиляции на предмет превышения максимального значения в 100% -- если при грядущем изменении порогов он может быть превышен, отправляется соответствующее письмо с предупреждением, если нет, т.е. все нормально и {{ :iot:node-red:flows:146.jpg?linkonly |легендарных 146%}} случайно не выйдет, то подготавливается MQTT-сообщение с новыми порогами и отправляется. Дополнительно, как обычно, отправляется письмо. | ==== Автоматическая коррекция ==== |
| |
| {{:iot:node-red:flows:hum-corr.png?nolink|}} | Сперва проверяется, включена или выключена вентиляция, т.к. в первом случае ни о какой корректировке порогов влажности не может идти речи. Если включена, ничего не делается, кроме отправки письма с предупреждением. Если выключена, вводятся настройки и сравнивается уровень текущей влажности с предыдущим, если он не выходит за рамки установленной погрешности, опять же, ничего, кроме письма не делается. Если влажность изменилась больше порога погрешности, проверяется уровень порога включения вентиляции на предмет превышения максимального значения в 100% -- если при грядущем изменении порогов он может быть превышен, отправляется соответствующее письмо с предупреждением, если нет, т.е. все нормально и {{ iot:software:node-red:flows:146.jpg?linkonly |легендарных 146%}} случайно не выйдет, то подготавливается MQTT-сообщение с новыми порогами и отправляется. Дополнительно, как обычно, отправляется письмо. |
| | |
| | {{iot:software:node-red:flows:hum-corr.png?nolink|}} |
| |
| После полной отладки, можно отключить узел "link out", чтобы было меньше писем, или вовсе подпоток "sendmail", чтобы писем не было вообще. | После полной отладки, можно отключить узел "link out", чтобы было меньше писем, или вовсе подпоток "sendmail", чтобы писем не было вообще. |
| Профит. ;-) | Профит. ;-) |
| |
| ==== Дополнение ==== | ==== Ручная коррекция ==== |
| |
| Если в web-интерфес модуля [[iot:homebridge:tasmota:sonoff:th#ручной_запуск_корректировки|добавить дополнительную кнопку]] для ручной коррекции, то для ее работы понадобится такая логика: | Если в web-интерфес модуля [[iot:firmware:tasmota:sonoff:th#ручной_запуск_корректировки|добавить дополнительную кнопку]] для ручной коррекции, то для ее работы понадобится такая логика: |
| |
| {{:iot:node-red:flows:hum-bonus.png?nolink|}} | {{iot:software:node-red:flows:hum-bonus.png?nolink|}} |
| |
| Узел "mqtt in" подписывается на соответствующий топик и при смене его статуса включает описанный выше поток минуя таймер. | Узел "mqtt in" подписывается на соответствующий топик и при смене его статуса включает описанный выше поток минуя таймер. |
| |
| FIXME Помимо новых узлов, нужно изменить настройки следующих узлов: | FIXME Помимо добавления новых узлов, нужно изменить настройки следующих узлов: |
| |
| - "Статус вентиляции" -- поменять "тему" на ''ventilation_000457/stat/**POWER1**''; | - "Статус вентиляции" -- поменять "тему" на ''ventilation_000457/stat/**POWER1**''; |
| - "Подготовка правила и сброс метки" -- поменять первое правило на ''<nowiki>"ON SI7021#Humidity>=" & threshold.on & " DO</nowiki> **Power1** <nowiki>on ENDON ON SI7021#Humidity<=" & threshold.off & " DO</nowiki> **Power1** <nowiki>off ENDON"</nowiki>''. | - "Подготовка правила и сброс метки" -- поменять первое правило на ''<nowiki>"ON SI7021#Humidity>=" & threshold.on & " DO</nowiki> **Power1** <nowiki>on ENDON ON SI7021#Humidity<=" & threshold.off & " DO</nowiki> **Power1** <nowiki>off ENDON"</nowiki>''. |
| |
| :!: Измененные узлы входят в код, [[#дополнительный_код|указанный ниже]] в соответствующем разделе! | //Измененные узлы входят в код, [[#дополнительные_узлы|указанный ниже]] в соответствующем разделе!// |
| | |
| | FIXME Аналогичные изменения нужно внести в [[iot:software:homebridge:config:accessories#две_кнопки|код конфигурации аксессуаров]] Homebridge! |
| | |
| | ==== Принудительная коррекция ==== |
| | |
| | Важное дополнение ко всему вышеуказанному -- для правильной работы корректировок в большую сторону((Т.е. когда общая влажность в квартире повышается.)) необходимо заменить узлы "Статус вентиляции" и "Сохранение статуса" [[#дополнительные_узлы_2|этим кодом]]. |
| | |
| | {{iot:software:node-red:flows:update2.png?nolink|}} |
| | |
| | Эта цепочка, помимо своего исконного предназначения, запускает таймер, по истечению которого, если вентиляция не выключится автоматически, запустится принудительная коррекция. |
| |
| ===== Код для загрузки ===== | ===== Код для загрузки ===== |
| ]</file> | ]</file> |
| |
| ==== Дополнительный код ==== | ==== Дополнительные узлы ==== |
| |
| <file javascript humidity-manual-correction.json>[ | <file javascript humidity-manual-correction.json>[ |
| } | } |
| ]</file> | ]</file> |
| | |
| | ==== Дополнительные узлы 2 ==== |
| | |
| | <file javascript humidity-forced-correction.json>[ |
| | { |
| | "id": "cab7bd9.198da4", |
| | "type": "mqtt in", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Статус работы вентиляции", |
| | "topic": "ventilation_000457/stat/POWER1", |
| | "qos": "2", |
| | "datatype": "utf8", |
| | "broker": "8745b931.133868", |
| | "x": 180, |
| | "y": 580, |
| | "wires": [ |
| | [ |
| | "dd9d91a4.08a5a" |
| | ] |
| | ] |
| | }, |
| | { |
| | "id": "dd9d91a4.08a5a", |
| | "type": "change", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Сохранение статуса", |
| | "rules": [ |
| | { |
| | "t": "set", |
| | "p": "status.power", |
| | "pt": "flow", |
| | "to": "payload", |
| | "tot": "msg" |
| | } |
| | ], |
| | "action": "", |
| | "property": "", |
| | "from": "", |
| | "to": "", |
| | "reg": false, |
| | "x": 460, |
| | "y": 580, |
| | "wires": [ |
| | [ |
| | "ca2cb356.08fbf" |
| | ] |
| | ] |
| | }, |
| | { |
| | "id": "ca2cb356.08fbf", |
| | "type": "switch", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Маршрутизация", |
| | "property": "payload", |
| | "propertyType": "msg", |
| | "rules": [ |
| | { |
| | "t": "eq", |
| | "v": "ON", |
| | "vt": "str" |
| | }, |
| | { |
| | "t": "eq", |
| | "v": "OFF", |
| | "vt": "str" |
| | } |
| | ], |
| | "checkall": "false", |
| | "repair": false, |
| | "outputs": 2, |
| | "x": 150, |
| | "y": 640, |
| | "wires": [ |
| | [ |
| | "ed82b8.ba997d48" |
| | ], |
| | [ |
| | "5d2821b8.6e178" |
| | ] |
| | ], |
| | "outputLabels": [ |
| | "Включена", |
| | "Выключена" |
| | ] |
| | }, |
| | { |
| | "id": "5d2821b8.6e178", |
| | "type": "change", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Сброс триггера", |
| | "rules": [ |
| | { |
| | "t": "set", |
| | "p": "reset", |
| | "pt": "msg", |
| | "to": "true", |
| | "tot": "bool" |
| | } |
| | ], |
| | "action": "", |
| | "property": "", |
| | "from": "", |
| | "to": "", |
| | "reg": false, |
| | "x": 140, |
| | "y": 700, |
| | "wires": [ |
| | [ |
| | "ed82b8.ba997d48" |
| | ] |
| | ] |
| | }, |
| | { |
| | "id": "ed82b8.ba997d48", |
| | "type": "trigger", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Максимальное время работы", |
| | "op1": "", |
| | "op2": "true", |
| | "op1type": "nul", |
| | "op2type": "bool", |
| | "duration": "3", |
| | "extend": false, |
| | "overrideDelay": false, |
| | "units": "hr", |
| | "reset": "", |
| | "bytopic": "all", |
| | "topic": "topic", |
| | "outputs": 1, |
| | "x": 430, |
| | "y": 640, |
| | "wires": [ |
| | [ |
| | "9b8b6e17.b3521" |
| | ] |
| | ], |
| | "info": "Максимальное время непрерывной работы, по истечению которого считается, что порог выключения вентиляции выше минимально возможной влажности в помещении - требуется принудительная корректировка порогов." |
| | }, |
| | { |
| | "id": "9b8b6e17.b3521", |
| | "type": "change", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Установка сообщения", |
| | "rules": [ |
| | { |
| | "t": "set", |
| | "p": "payload", |
| | "pt": "msg", |
| | "to": "ON", |
| | "tot": "str" |
| | } |
| | ], |
| | "action": "", |
| | "property": "", |
| | "from": "", |
| | "to": "", |
| | "reg": false, |
| | "x": 700, |
| | "y": 640, |
| | "wires": [ |
| | [ |
| | "53dc503a.78c4" |
| | ] |
| | ] |
| | }, |
| | { |
| | "id": "53dc503a.78c4", |
| | "type": "mqtt out", |
| | "z": "d1e5566a.2c1c08", |
| | "name": "Запуск коррекции по порогу времени", |
| | "topic": "ventilation_000457/cmnd/POWER2", |
| | "qos": "0", |
| | "retain": "false", |
| | "broker": "8745b931.133868", |
| | "x": 650, |
| | "y": 700, |
| | "wires": [] |
| | }, |
| | { |
| | "id": "8745b931.133868", |
| | "type": "mqtt-broker", |
| | "name": "localhost", |
| | "broker": "localhost", |
| | "port": "1883", |
| | "clientid": "", |
| | "usetls": false, |
| | "compatmode": false, |
| | "keepalive": "60", |
| | "cleansession": true, |
| | "birthTopic": "", |
| | "birthQos": "0", |
| | "birthPayload": "", |
| | "closeTopic": "", |
| | "closeQos": "0", |
| | "closePayload": "", |
| | "willTopic": "", |
| | "willQos": "0", |
| | "willPayload": "" |
| | } |
| | ]</file> |
| | |
| | ==== Итоговый код ==== |
| | |
| | {{ iot:software:node-red:flows:humidity-correction-final.zip |Этот код}} содержит все изменения и дополнения указанные выше. Однако, при его использовании, все равно необходимо [[iot:firmware:tasmota:sonoff:th#ручной_запуск_корректировки|внести изменения в конфигурацию Tasmota]] и [[iot:software:homebridge:config:accessories#две_кнопки|применить соответствующий конфиг для Homebridge]]. |