Статья

"Бомж" Умный дом, финальная настройка системы. Часть 4

В предыдущих сериях...

Когда-то в юности с заворожением смотрел Star Trek и Babylon 5, где автоматизированные системы корабля следили за уровнем кислорода, двери кают открывались для членов экипажа автоматически, включая освещение и мягкую музыку. С тех пор прошло уже достаточно времени, и теперь все эти технологии автоматизации стали доступны и до безобразия просты в интеграции. Самое важное в умном доме - это логика его работы, то, как все системы взаимодействуют друг с другом с одной лишь целью - сделать нашу жизнь проще, комфортней и безопасней. Для этого не нужны космические технологии. Все, что для этого нужно  - это лишь желание, умный дом для себя сделать не сложно и это может каждый. Статья получилась немного длинной, но я решил не дробить ее на две части, приятного прочтения!

Domoticz, первоначальная настройка

В качестве системы управления умным домом я выбрал Domoticz, главным образом из-за простоты настройки и гибкого языка скриптов DzVents, специально заточенного для написания логики умного дома. Приступим к настройке. Для начала установим современную тему Machinon  и службу автоматического обнаружения и добавления новых устройств для Domoticz.

cd /home/smarthomeless/domoticz/www/styles git clone https://github.com/EdddieN/machinon-domoticz_theme.git machinon cd /home/smarthomeless/domoticz/plugins git clone https://github.com/emontnemery/domoticz_mqtt_discovery.git sudo systemctl restart domoticz

Применяем тему в настройках. Если до этого Domoticz запускался в браузере, необходимо предварительно очистить кэш. Дальше нам необходимо создать план дома. Это можно сделать в любом дизайнере помещений (я нарисовал тестовую квартиру в Home Design 3D), графическом редакторе, отсканировать план квартиры, который передал застройщик либо просто дать своему ребенку лист бумаги, карандаш и попросить нарисовать вашу квартиру - как видит это он =). Далее идем в настройки -> план комнаты -> план помещения, добавляем новый план, загрузив нашу картинку. Пришло время добавить оборудование. Для этого открываем Настройки -> оборудование и добавляем следующие элементы:

Dummy - виртуальные элементы, MQTT - необходим для подслушивания всего того, что о нас думают наши датчики, Weather - служба прогноза погоды (она может понадобится в системе поддержания микроклимата), можно также подключить внутренние датчики апельсинки для того, чтобы следить за динамикой использования ресурсов и температурой. Для включения MQTT Discovery Service на нашей ESP необходимо зайти в веб интерфейс ESP8266 в браузере и ввести в консоле команду publish sonoffs/cmnd/SetOption19 1. После этого наша ESP перезагрузится, в меню Domoticz Настройка -> Устройства автоматически подтянутся все наши подключенные датчики и реле. Easiest!

В поле Имя отображается "дружественное имя", которое для удобства можно поменять в настройках прошивки Sonoff-Tasmota в меню Конфигурация -> Конфигурация прочее. Все, что теперь нам нужно - это уточнить спецификацию устройств. Мы помним, что первый переключатель - это датчик дыма,  заходим в редактирование датчика и выбираем тип переключателя Smoke Detector, сохраняем. Второй переключатель у нас датчик движения, аналогичным образом выбираем тип переключателя Motion Sensor. Третий переключатель связан с реле, он будет в системе управления умным домом подключен к вентилятору. Здесь нам нужно только поменять для него значок на Fan. К четвертому выключателю будет подключен увлажнитель - меняем значок на Water. Пятый - это датчик протечки, для него так же выберем значок Water. Что у нас вышло?

Все на месте, при срабатывании датчика проходит индикация в Domoticz, при нажатии на элементы управления - переключение физических реле. Красота! Теперь нам нужно красиво разместить все наши элементы на плане помещения. Для этого заходим в настройки -> план комнаты, нажимаем добавить план и выбираем его. Снизу появится список устройств, которые можно добавить. Добавляем поочередно все, что нам понадобится. Далее идем в меню план помещения, выбираем наш ранее созданный план. Все добавленные в комнату устройства отображаются слева, все что нам нужно - это перетащить их в нужное место в комнате. 

Здесь я добавил несколько дополнительных устройств, а также создал виртуальный селекторный переключатель Radio, уточнив его спецификацию как Media Player и элемент "Уровень громкости" для управления уровнем звука в нашем доме. Пора двигаться дальше. 

Где логика?

Пришло время поработать немного над интеллектом нашего дома. Какие системы у нас будут работать на данной сборке?

  • Система поддержания микроклимата
  • Система управления освещением
  • Система безопасности
  • Мультимедиа система

Сценарии:

  • Я пришел / Я ушел
  • Ночь / Утро / Вечер
  • Пожар / Авария
  • Проникновение

Итак, приступим. Для создания автоматизации заходим в настройки -> события, там создаем событие iCame, выбираем триггер Device - Domoticz, который сразу подгрузит нужный нам шаблон. В данном сценарии у нас будет участвовать устройство Entrance door, при ее открытии загорается свет в прихожей и включается мягкая музыка с уровнем громкости 60%. 

return { on = { devices = { 'Entrance door' } }, execute = function(domoticz, door) if (door.state == 'Open') then domoticz.devices('Hallway Light').switchOn() domoticz.devices('Volume Control').dimTo(60) domoticz.devices('Radio').switchSelector(10) end end }

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

return { on = { timer = { 'every 30 minutes' } }, execute = function(domoticz) if (domoticz.devices('Motion Sensor').lastUpdate.minutesAgo > 60) then domoticz.groups('Light').switchOff() domoticz.groups('Appliances').switchOff() end end }

Если датчик не обнаруживает движения в комнате более, чем 60 минут, наш дом понимает, что никого нет и выключает группу освещения и бытовых приборов. Скрипт прекрасно работает и в случае, если вы просто задремали. Добавить устройства в группы можно в меню сцены, выбрав тип "группа". Для точности срабатывания сценария можно добавить в качестве условия другие датчики движения/касания, ограничить выполнение скрипта определенным временем. Самое точное срабатывание происходит по геозонам, т.е. когда вы действительно ушли из заданных координат. Задать геозоны можно в приложении Pilot Home Control

Сценарий Ночь / Утро. Хотите засыпать под звуки океана, а просыпаться под пение птиц? С умным домом это возможно! В качестве триггера у нас будет выступать виртуальный переключатель Night (создается как Dummy устройство). 

return { on = { devices = { 'Night' } }, execute = function(domoticz, switch) if (switch.state == 'On') then domoticz.groups('Light').switchOff() domoticz.groups('Appliances').switchOff() domoticz.devices('Volume Control').dimTo(10) domoticz.devices('Radio').switchSelector(30) domoticz.devices('Volume Control').switchOn().forMin(15) end end }

При включении переключателя Night отключается свет и бытовые приборы (как в сценарии "я ушел"), включается потоковое вещание шума океана. Уровень громкости устанавливается на 10%, функция forMin() задает таймер отключения.  При активном переключателе Night, свет дома не будет включаться, даже если датчик движения будет активен. После выключения ночного режима, свет в доме будет работать в обычном режиме. Сценарий GoodMorning активируется по таймеру в рабочие дни: сначала включается потоковое вещание утреннего пения птиц, затем, через 15 минут, включается свет в доме. Как вам такой умный будильник? Если к изголовью кровати подключена светодиодная лента, можно настроить "умное пробуждение", моделируя восход солнца, когда тон цвета плавно меняется с красных оттенков на теплые, планомерно наращивая яркость. Получится "умная кровать"! 

return { on = { timer = { 'at 06:45 mon,tue,wed,thu,fri' } }, execute = function(domoticz) domoticz.groups('Light').switchOn().afterMin(15) domoticz.devices('Volume Control').dimTo(10) domoticz.devices('Radio').switchSelector(30) domoticz.devices('Night').switchOff() end }


Сценарии Пожар / Авария. Сценарий Пожар активируется датчиками дыма, протечки и является частью системы безопасности. К сожалению все, что мы можем в данной сборке - это информирование о произошедшем событии. Однако, если добавить вот такой кран на электрическом управлении - получится система защиты от протечки! Я себе сделал такую. Итак, вернемся к нашему дому. Информировать нас о важных событиях Domoticz может через e-mail, push уведомления либо с помощью Telegram. Подключить службу оповещения можно в настройках системы Domoticz. Пример скрипта:

return { on = { devices = { 'Smoke Detector', 'Water Leak' } }, execute = function(domoticz, device) if (device.name == 'Smoke Detector') then domoticz.notify('Система безопаности', 'Аааа... дом в огне! Копируюсь в облако!', domoticz.PRIORITY_EMERGENCY) end if (device.name == 'Water Leak') then domoticz.notify('Система безопаности', 'Обнаружена протечка в санузле.', domoticz.PRIORITY_EMERGENCY) end end }

В данном случае в сценарии участвуют сразу два триггера и скрипт вызывается каждый раз, когда срабатывает хотя бы один из них. Для того, чтобы система распознавала сработавшее устройство и реагировала на них по-разному, введена проверка по имени инициатора. Для сценария Проникновение также предусмотрено информирование. 

return { on = { devices = { 'Entrance door', 'Loggia door', 'Window' } }, execute = function(domoticz, device) if (domoticz.time.matchesRule('at 8:00-18:00 on mon,tue,wed,thu,fri')) then domoticz.notify('Система безопаности', 'Обнаружено проникновение в дом!', domoticz.PRIORITY_EMERGENCY) end end }

В этом сценарии триггерами являются источники возможного проникновения - входная дверь, дверь лоджии, окно. Обычно, при срабатывании такого сценария, включается веб камера и снимок с камеры отправляется на e-mail. Выполнение информирования ограничено временем предположительного отсутствия хозяев. Как и в примере сценария "Я пришел", скрипт будет более корректно срабатывать при отслеживании нашего местоположения по геотегам. 

Система поддержания микроклимата. В данной автоматизации в качестве триггеров будут использоваться датчики температуры и влажности, также дверь на балкон. Скрипт выглядит так: 

return { on = { devices = { 'Room TempHyum', 'BathRoom TempHyum', 'Loggia Door' } }, execute = function(domoticz, TH) if (domoticz.devices('Motion Sensor').lastUpdate.minutesAgo < 60) then if (domoticz.devices('Room TempHyum').temperature > 24) then domoticz.devices('Fan').switchOn() else domoticz.devices('Fan').switchOff() end if (domoticz.devices('Room TempHyum').humidityStatusValue == domoticz.HUM_DRY) then domoticz.devices('Humidifier').switchOn() else domoticz.devices('Humidifier').switchOff() end if (domoticz.devices('Loggia Door').state == 'Open') then domoticz.devices('Humidifier').switchOff() end if (domoticz.devices('BathRoom TempHyum').humidityStatusValue == domoticz.HUM_WET) then domoticz.devices('BathroomFan').switchOn() else domoticz.devices('BathroomFan').switchOff() end end end }

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

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

return { on = { devices = { 'Motion Sensor', 'Motion Sensor Hallway' } }, execute = function(domoticz, MotionSensor) if (domoticz.devices('Night').state == 'Off') then if (MotionSensor.name == 'Motion Sensor' and domoticz.devices('Room Lux Sensor').lux < 25) then domoticz.devices('Room Light').switchOn() end if (MotionSensor.name == 'Motion Sensor Hallway' and domoticz.devices('HallWay Lux Sensor').lux < 35) then domoticz.devices('Hallway Light').switchOn() end end end }

return { on = { timer = { 'every 30 minutes' } }, execute = function(domoticz) if (domoticz.devices('Motion Sensor').lastUpdate.minutesAgo > 30) then domoticz.devices('Room Light').switchOff() end if (domoticz.devices('Motion Sensor Hallway').lastUpdate.minutesAgo > 30) then domoticz.devices('Hallway Light').switchOff() end end }

Первый скрипт включает свет в зоне работы датчика движения, но только в том случае, если дома темно. Второй скрипт запускается по таймеру каждые полчаса и опрашивает датчик движения, если движение не фиксируется в зоне покрытия датчика в течение 30 минут, тогда свет выключается. Тайминги и уровни освещенности настраиваются индивидуально. 

Мультимедиа система. Для воспроизведения музыки будем использовать mpd сервер, настроенный в части 2 данного цикла статей. Для начала нужно создать несколько скриптов для управления потоковым воспроизведением из Domoticz. Создаем файл mpcstop.sh с содержимым:

#!/bin/bash -x mpc stop

Данный скрипт останавливает воспроизведение музыки. Нам понадобится еще несколько скриптов для запуска потокового вещания. 

#!/bin/bash -x mpc stop mpc clear mpc load nature mpc play

Скрипт останавливает воспроизведение, очищает плейлист и загружает новый. Сами плейлисты хранятся в ранее сконфигурированной папке. Скачать нужный плейлист можно из огромной базы потокового вещания SHOUTcast, а можно просто загрузить свои любимые альбомы на апельсинку и создать для них плейлисты. Добавляем наши скрипты в ранее созданный элемент Radio.  

Теперь осталось прописать логику работы плеера в Domoticz. 

return { on = { devices = { 'Volume Control', 'Radio' } }, execute = function(domoticz, volume) if (volume.name == 'Volume Control' and (volume.state == 'Off' or volume.level == 0)) then domoticz.devices('Radio').switchSelector(0) else if (volume.name == 'Volume Control') then domoticz.utils.osExecute("mpc volume ".. volume.level) end end if (volume.name == 'Volume Control' and (volume.state == 'On' or volume.level ~= 0)) then domoticz.utils.osExecute("mpc play ") end -- корректировка состояния уровня громкости при внешнем управлении if (volume.name == 'Radio' and volume.level ~= 0) then domoticz.devices('Volume Control').switchOn().silent() end if (volume.name == 'Radio' and volume.level == 0) then domoticz.devices('Volume Control').switchOff().silent() end end }

Ну вот и все... или нет?

Привет, Siri!

Ну какой же умный дом без голосового ассистента. Некоторые до сих пор считают, что умный дом - это когда хлопаешь в ладоши и свет включается. Нет! Это далеко не так, умный дом не должен заставлять вас прихлопывать и причмокивать, умный дом должен работать полностью в автоматическом режиме, как космический корабль! Пришло время познакомить наш "Бомж" Умный дом с Siri. Для добавления нашей сборки в HomeKit устанавливаем Homebridge. 

sudo curl -sL https://deb.nodesource.com/setup_12.x | bash - sudo apt install -y nodejs sudo npm install -g --unsafe-perm homebridge sudo npm install -g homebridge-edomoticz homebridge

Если все прошло успешно, то в консоли терминала мы увидим QR код, приглашающий подключить homebridge к Homekit. Но пока рано, необходимо сконфигурировать HomeBridge для работы с Domoticz. Нажимаем Ctrl-C, вводим следующую команду: 

sudo nano ~/.homebridge/config.json

И заменяем содержимое файла на:

{ "bridge": { "name": "Homebridge", "username": "42:22:15:18:EA:B6", "port": 51826, "pin": "123-44-321" }, "description": "Configuration file for (e)xtended Domoticz platform.", "platforms": [ { "platform": "eDomoticz", "name": "eDomoticz", "server": "<Domoticz username>:<password>@127.0.0.1", "port": "8080", "ssl": 0, "roomid": 2, "mqtt": 1 } ], "accessories": [] }

В качестве username вставляем mac адрес нашей апельсинки. Pin - это пароль для Homebridge, позволяющий добавить устройства в ручном режиме. Для запуска homebridge при старте системы нужно выполнить еще пару действий. 

sudo nano /etc/systemd/system/homebridge.service

Вставляем следующее содержимое:

[Unit] Description=Node.js HomeKit Server After=syslog.target network-online.target [Service] Type=simple User=smarthomeless EnvironmentFile=/etc/default/homebridge ExecStart=/usr/bin/homebridge /home/smarthomeless/.homebridge Restart=on-failure RestartSec=1m KillMode=process [Install] WantedBy=multi-user.target

sudo systemctl daemon-reload sudo systemctl enable homebridge sudo systemctl start homebridge

Все! Теперь наш Homebridge действительно готов для добавления в HomeKit! Все сконфигурированные устройства Domoticz добавятся автоматически, вам нужно лишь дать им более понятное для вас имя и выбрать отображаемый устройством значок (при необходимости). Теперь нам доступно не только голосовое управление, мы можем создать сценарий "доброе утро" и "спокойной ночи", указав в качестве действия выключение или включение ранее созданного переключателя Night. После этого стоит только сказать "Привет, Siri! Спокойной ночи!" как свет тут же погаснет, а Siri пожелает нам доброй ночи, а после пробуждения - удачного дня. В HomeKit можно настроить отслеживание геолокации - так наш умный дом поймет, что мы покинули его и отключит свет и бытовые приборы. 

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

Спасибо всем, кто поддерживал лайками и оставлял комментарии на протяжении всего цикла статей, я делал это для вас. 


Отличный цикл статей.Думаю многим пригодится.Со временем ждем 2й сезон:)

Спасибо за статью. Она дает представление как система создается и реализуется в жизни.
Как вы сделали управление тв? Как управляется освещение? К выключателям провели ноль?

Вообще, всеми приборами с ИК портом (в т.ч. и кондиционером) я управляю с помощью Broadlink, подойдет версия Mini, большинство ламп у меня "умные", к ним не нужен ноль в выключателе. Есть группы с обычными светодиодными лампами, для них я за гибсокартоном спрятал реле с ESP, ноль не нужен и в этом случае в выключателе - он просто всегда включен, свет управляется автоматически. 


Вернуться назад
Вернуться назад