В качестве затравки на тему простых автоматизаций хочу поделиться своим подходом к туалетному вопросу.

Речь пойдет о вытяжке в санузле.

Вводная

В ванной установлена обычная вытяжка на 120мм. Вытяжка, как и свет в ванной, управляется выключателем установленным в самом санузле (собственно говоря, у меня все настенные выключатели такого типа, без 0 с wifi). Они проброшены в homeassistant через кастомный компонент с последующей интеграцией в node-red.

Задача

Обеспечить автоматическое управление вытяжкой по набору событий и параметров.

Включение

  • Влажность > 55%
  • Смыв воды
  • Открыты несколько окон для проветривания

Выключение

  • Влажность <45%
  • Включился свет
  • Позднее время
  • Окна закрыты + проверка влажности

Цель

Как и любая автоматизация целью этой было уменьшить или вовсе исключить необходимость человеческого участия в вопросе включения вытяжки.

А теперь простое описание почему именно такой набор входных условий. Я уже озвучивал его в telegram чате ресурса, расскажу подробнее.

С влажностью понятно нужно разбираться и избегать ее повышения в подобных помещениях. Плесень, грибки, прочая гадость. Значение 45-55 было получено опытным путем. Такое окно в 10% дает уверенность в том, что процесс осушения будет идти должным образом. Если разницу, при которой вытяжка включается и выключается уменьшить или вовсе исключить, то, во-первых, это будет вызывать частое изменение статуса, а во-вторых, не даст должным образом просохнуть помещению.

Связать включение вытяжки с открытием окон на проветривание меня побудило желание увеличить скорость циркуляции воздуха. Это правда работает, попробуйте. Особенно заметно, когда открывается дальнее и ближнее к ванной окно. Поэтому автоматизация включает условие «минимум два окна открыты». При закрытии окон я не выключаю вытяжку, а проверяю уровень влажности по озвученному выше условию.

Само собой я не хочу слышать звук работающей вытяжки в ночное время. Поэтому на работу вытяжки от автоматизаций наложен запрет — тихий час с 23:30 до 9:00. Это не мешает включить вытяжку вручную, однако она выключиться не более чем через 5 минут сама.

А еще я не хочу слышать как работает вытяжка находясь в санузле. По крайней мере, только что зайдя туда. Поэтому стоит лишь включить свет в ванной любым удобным способом (выключатель, круглая кнопка xiaomi которую поставил для ребенка, home.app, голосовые ассистенты…) вытяжка останавливается.

Ну и самая вишенка на торте — смыв. Так вышло что я приобрел под реализацию одной из автоматизаций датчик вибрации Aqara. И, к сожалению, он не подошел под задуманное, но случайным образом пригодился для реализации этой автоматизации. У меня стоит инсталляция с большой, двухклавишной кнопкой. Она легко снимается и оказывается что на ней есть огромное количество места для размещения датчика вибрации. Который, при нажатии на смыв, будет отдавать координатору сигнал о наличии вибрации! То, что надо.

Реализация

Саму логику я выполнил в node-red — самый, на мой взгляд, гибкий и удобный софт для создания автоматизаций умного дома. Выключатели, как я уже говорил, у меня живут в homeassistant. А датчики в homebridge. Да, вот такой стек компонентов я использую и считаю его самым удачным.

Первый блок — влажность, свет, смыв

[{"id":"5cf6e83a.9ecb28","type":"switch","z":"1984610f.e86c6f","name":"","property":"payload.CurrentRelativeHumidity","propertyType":"msg","rules":[{"t":"gte","v":"55","vt":"num"},{"t":"lte","v":"45","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":340,"wires":[["9b126022.b245a"],["b4ebf9e5.5fe878"]]},{"id":"267b4b33.fac814","type":"time-range-switch","z":"1984610f.e86c6f","name":"","lat":"","lon":"","startTime":"09:00","endTime":"23:30","startOffset":0,"endOffset":0,"x":270,"y":340,"wires":[["513c1d09.2a2db4","5cf6e83a.9ecb28","8d816e60.3fac6"],["b4ebf9e5.5fe878"]]},{"id":"513c1d09.2a2db4","type":"switch","z":"1984610f.e86c6f","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"off","vt":"str"},{"t":"cont","v":"on","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":380,"wires":[[],["b4ebf9e5.5fe878"]]},{"id":"e5d298c.7a0cc68","type":"link in","z":"1984610f.e86c6f","name":"Проверить влажность в ванной","links":["6aa6b067.a21f5","56dd3b38.e8fd94","d72aad5f.cf5b1"],"x":35,"y":380,"wires":[["a54b6caa.6fdd8"]]},{"id":"ca43cb00.0643a8","type":"server-state-changed","z":"1984610f.e86c6f","name":"","server":"2922b62.081994a","version":1,"entityidfilter":"switch.sonoff_10008b595f_1","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":35,"y":340,"wires":[["267b4b33.fac814"]],"l":false},{"id":"ade2b2f.871ed5","type":"api-call-service","z":"1984610f.e86c6f","name":"","server":"2922b62.081994a","version":1,"service_domain":"switch","service":"turn_on","entityId":"switch.sonoff_1000887d45","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":730,"y":320,"wires":[[]]},{"id":"65bdeb5d.1c4344","type":"api-call-service","z":"1984610f.e86c6f","name":"","server":"2922b62.081994a","version":1,"service_domain":"switch","service":"turn_off","entityId":"switch.sonoff_1000887d45","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":730,"y":360,"wires":[[]]},{"id":"9b126022.b245a","type":"change","z":"1984610f.e86c6f","name":"","rules":[{"t":"delete","p":"payload.CurrentRelativeHumidity","pt":"msg"},{"t":"delete","p":"payload.ContactSensorState","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":595,"y":320,"wires":[["ade2b2f.871ed5"]],"l":false},{"id":"b4ebf9e5.5fe878","type":"change","z":"1984610f.e86c6f","name":"","rules":[{"t":"delete","p":"payload.CurrentRelativeHumidity","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":595,"y":360,"wires":[["65bdeb5d.1c4344"]],"l":false},{"id":"a54b6caa.6fdd8","type":"hb-status","z":"1984610f.e86c6f","name":"TemperatureAndHumiditySensor_HumiditySensor_ede4","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Humidity Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraTemperatureAndHumiditySensor_HumiditySensor_ede400000082","conf":"7728cd66.d29bb4","x":135,"y":380,"wires":[["267b4b33.fac814"]],"l":false},{"id":"7edb1980.975b58","type":"hb-event","z":"1984610f.e86c6f","name":"Унитаз","Homebridge":"Pavel-HomeBridge","Manufacturer":"mqttthing","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7mqttthingУнитаз00000080","conf":"7728cd66.d29bb4","x":70,"y":300,"wires":[["267b4b33.fac814"]]},{"id":"8d816e60.3fac6","type":"switch","z":"1984610f.e86c6f","name":"","property":"payload.ContactSensorState","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":470,"y":300,"wires":[["9b126022.b245a"]]},{"id":"2922b62.081994a","type":"server","z":"","name":"My Home Assistant","legacy":false,"hassio":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"7728cd66.d29bb4","type":"hb-conf","z":"","username":"033-44-157"}]

Обратите внимание на link к пятиминутному таймеру. Это необходимо как раз для отключения вытяжки ночью и периодической проверки влажности. Не забудьте поменять конфигурационные параметры на свои.

Второй блок — окна

Тут конечно иженерная мысль меня вывела на костыли, но нет ничего более прекрасного чем работающий костыль.

[{"id":"6c730888.8892b8","type":"comment","z":"1984610f.e86c6f","name":"Вытяжка если открты окна","info":"","x":140,"y":2100,"wires":[]},{"id":"29ba0eb2.84d782","type":"hb-event","z":"1984610f.e86c6f","name":"ContactSensor_ContactSensor_4781","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraContactSensor_ContactSensor_478100000080","conf":"7728cd66.d29bb4","x":35,"y":2140,"wires":[["d1d8c7d8.b05d28"]],"l":false},{"id":"962bc278.6a06","type":"hb-event","z":"1984610f.e86c6f","name":"ContactSensor_ContactSensor_e0de","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraContactSensor_ContactSensor_e0de00000080","conf":"7728cd66.d29bb4","x":35,"y":2180,"wires":[["d1d8c7d8.b05d28"]],"l":false},{"id":"8259327c.0ee98","type":"hb-event","z":"1984610f.e86c6f","name":"ContactSensor_ContactSensor_f645","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraContactSensor_ContactSensor_f64500000080","conf":"7728cd66.d29bb4","x":35,"y":2220,"wires":[["d1d8c7d8.b05d28"]],"l":false},{"id":"3c36dd70.d4fb82","type":"hb-status","z":"1984610f.e86c6f","name":"ContactSensor_ContactSensor_4781","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraContactSensor_ContactSensor_478100000080","conf":"7728cd66.d29bb4","x":315,"y":2140,"wires":[["2332c16a.3555ae"]],"l":false},{"id":"df3cfead.99052","type":"hb-status","z":"1984610f.e86c6f","name":"ContactSensor_ContactSensor_e0de","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraContactSensor_ContactSensor_e0de00000080","conf":"7728cd66.d29bb4","x":315,"y":2180,"wires":[["99144067.a0cf8"]],"l":false},{"id":"84f75450.e119f8","type":"hb-status","z":"1984610f.e86c6f","name":"ContactSensor_ContactSensor_f645","Homebridge":"Pavel-HomeBridge","Manufacturer":"Aqara","Service":"Contact Sensor","device":"Pavel-HomeBridgeB8:27:EB:A3:F3:A7AqaraContactSensor_ContactSensor_f64500000080","conf":"7728cd66.d29bb4","x":315,"y":2220,"wires":[["f933d868.116a18"]],"l":false},{"id":"2332c16a.3555ae","type":"change","z":"1984610f.e86c6f","name":"","rules":[{"t":"move","p":"payload.ContactSensorState","pt":"msg","to":"payload.window1","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":375,"y":2140,"wires":[["7421bc98.701924"]],"l":false},{"id":"99144067.a0cf8","type":"change","z":"1984610f.e86c6f","name":"","rules":[{"t":"move","p":"payload.ContactSensorState","pt":"msg","to":"payload.window2","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":375,"y":2180,"wires":[["7421bc98.701924"]],"l":false},{"id":"f933d868.116a18","type":"change","z":"1984610f.e86c6f","name":"","rules":[{"t":"move","p":"payload.ContactSensorState","pt":"msg","to":"payload.window3","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":375,"y":2220,"wires":[["7421bc98.701924"]],"l":false},{"id":"7421bc98.701924","type":"join","z":"1984610f.e86c6f","name":"","mode":"custom","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"3","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":455,"y":2180,"wires":[["e29b9f7a.bbff1"]],"l":false},{"id":"e29b9f7a.bbff1","type":"change","z":"1984610f.e86c6f","name":"","rules":[{"t":"set","p":"payload.wind","pt":"msg","to":"msg.payload.window1+msg.payload.window2+msg.payload.window3","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":515,"y":2180,"wires":[["2a9191fd.cd43fe"]],"l":false},{"id":"2a9191fd.cd43fe","type":"switch","z":"1984610f.e86c6f","name":"","property":"payload.wind","propertyType":"msg","rules":[{"t":"gte","v":"2","vt":"num"},{"t":"lt","v":"2","vt":"str"},{"t":"eq","v":"3","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":575,"y":2180,"wires":[["549fac45.7c27c4"],["56dd3b38.e8fd94"],["b202535e.4fa62"],["4a5fbe5f.a486"]],"l":false},{"id":"549fac45.7c27c4","type":"api-call-service","z":"1984610f.e86c6f","name":"","server":"2922b62.081994a","version":1,"service_domain":"switch","service":"turn_on","entityId":"switch.sonoff_1000887d45","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":770,"y":2120,"wires":[[]]},{"id":"c8bdb4af.5c9e68","type":"link in","z":"1984610f.e86c6f","name":"for wind","links":["460660cb.2e83d","d1d8c7d8.b05d28"],"x":215,"y":2180,"wires":[["3c36dd70.d4fb82","df3cfead.99052","84f75450.e119f8"]]},{"id":"d1d8c7d8.b05d28","type":"link out","z":"1984610f.e86c6f","name":"to wind","links":["c8bdb4af.5c9e68"],"x":115,"y":2180,"wires":[]},{"id":"56dd3b38.e8fd94","type":"link out","z":"1984610f.e86c6f","name":"Минимум два окна закрыты","links":["e5d298c.7a0cc68"],"x":695,"y":2160,"wires":[]},{"id":"b202535e.4fa62","type":"link out","z":"1984610f.e86c6f","name":"Все окна открыты","links":[],"x":695,"y":2200,"wires":[]},{"id":"4a5fbe5f.a486","type":"link out","z":"1984610f.e86c6f","name":"Все окна закрыты","links":[],"x":695,"y":2240,"wires":[]},{"id":"7728cd66.d29bb4","type":"hb-conf","z":"","username":"033-44-157"},{"id":"2922b62.081994a","type":"server","z":"","name":"My Home Assistant","legacy":false,"hassio":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Тут обратите внимание что выход с link ноды идет на вход link ноды первого блока для инициации проверки влжаности. Так же я оставил link выходы для определения когда все окна закрыты или открыты. Может пригодиться.

Итог

В этой автоматизации прекрасно все. Она вышла действительно удобной и понятной для домочадцев. Именно такие автоматизации и дают право называть свое жилище умным. По настоящему умным.

Какие идеи или готовые автоматизации быта знаете вы? Я и другие участники сообщества с радостью примут их во внимание и поделятся своими в telegram канале https://t.me/inhomekit_chat и комментариях.

Author

Write A Comment