Умный дом на роутере domoticz

Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie

Здравствуйте друзья

В своих обзорах устройств умного дома экосистемы Xiaomi — я уже неоднократно упоминал название Domoticz. Наконец у меня дошли руки поделится своими наработками на эту тему, и рассказать что же это такое и каким образом можно дополнить стандартные возможности умного дома от Xiaomi при помощи этой системы. В рамках одного обзора это рассказать невозможно, но нужно с чего-то начинать — поехали…

Ссылка на комплект 6 в 1 базовый набор для умного дома Xiaomi — 

GearBest  Aliexpress

Таблица (обновляется) по экосистеме Xiaomi

Для тех кто любит больше смотреть и слушать, видеоверсия этого обзора в конце текста.

Вопросы и ответы

1. Что такое Domoticz ?
Это мультиплатформенное ПО с открытым кодом ориентированное на создание системы управления умным домом. Поддерживает большое количество различных устройств разных вендоров, в том числе работает с устройствами Xiaomi.

2. Какие устройства Xiaomi могут управлятся Domoticz?
Буду говорить только о тех устройствах, которые я проверил лично. На данный момент можно управлять шлюзом Xiaomi Gateway — и всеми устройствами которыми он управляет — кнопки, датчики открытия и движения, розетки ZigBee, выключатели Aqara. Так же поддерживаются осветительные гаджеты Yeelight — RGBW и White лампы, потолочный светильник Celling Light.
Читал про работу с bluetooth сенсорами miflora.

3. Для чего мне Domoticz ?
Система имеет более гибкие возможности по настройке сценариев — например проверку активности устройства, то чего нет в MiHome, или создание переменных — которые позволяют по одному условию — например нажатие клавиши — выполнять различные действия, в зависимости от значения переменной.
Сценарии, созданные в Domoticz не зависят от китайских серверов и наличия интернет.
Domoticz расширяет функциональность устройств — например новые действия «free fall» или «alert» для кубика, или «Long Click Release» для кнопки.

4. Если я буду использовать Domoticz то не смогу работать с MiHome?
Обе системы прекрасно живут паралелльно — функциональность MiHome — полностью сохраняется, просто часть сценариев будет жить в одной системе — часть в другой. В принципе все сценарии могут жить в Domoticz.

5. Зачем мне нужен MiHome если я буду использовать Domoticz?
По крайней мере для добавления новых устройств. Выбор стоит за вами — но мое мнение — на данный момент Domoticz лучше всего использовать как дополнение к MiHome

6. Что нужно для подключения устройств Xiaomi к Domoticz?
Сразу хочу успокоить — паяльников, программаторов и танцев с бубнами не надо. Так же вам не понадобится Linux или виртуальные машины — попробовать все можно прямо на вашей рабочей винде. В дальнейшем — если будет такое желание, то систему можно будет установить на одноплатном компьютере типа Raspberry или Orange — об этом я тоже расскажу, но на начальном этапе установка системы не сложнее установки календаря огородника на 2017 год. Подключение очень легко и просто и совершенно не влияет на базовую функциональность устройств. При желании вернуть все назад — элементарно.

Подготовительные работы

Итак, что нужно для того что бы начать работать с Domoticz?

1. Резервирование IP адресов
Первым делом необходимо, тем устройствам которыми вы планируете управлять — пока это шлюз и лампы — установить статические IP адреса. Это делается на вашем домашнем роутере, при помощи таблицы клиентов DHCP которая выглядит примерно так —

и информации из вкладок Network info плагинов управления шлюзом и лампами, где указаны MAC адреса устройств

Используя эту информацию нужно прописать выдачу постоянных IP адресов этим устройствам — так как они будут управлятся именно по IP, и если адрес будет сменен — Domoticz потеряет связь с ним. Таблица резервирования адресов выглядит примерно так — 

2. Режим разработчика
Необходимо активировать режим разработчика. Для шлюза Xiaomi Gateway необходимо зайти в меню, выбрать опцию about, внизу экрана где написана версия (2.23 у меня) — нажимать на нее до тех пор пока в меню не появится две новые опции, они могут быть на китайском, в моем примере — на английском. Нажимаем на первую из двух — local area network communication protocol, в меню активируем верхний переключатель и записываем пароль шлюза.

Для ламп все проще — нужно установить приложение Yeelight, если вы его еще не поставили, и для каждого светильника — заходим в меню, режим разработчика — включить

Установка Domoticz

Приложение берем здесь выбираем Beta — так как именно в ней имеется поддержка устройств Xiaomi. Так как на данный момент я работаю с Domoticz под управлением Windows — то и писать про про нее. Когда ко мне доедет RaspBerry — тогда расскажу и про нее.

Установочный файл занимает чуть более 14 Мб, просто качаем запускаем — установка стандартная, со всем соглашаемся

И через минуту имеем установленный на локальной машине Domoticz, доступный по адресу 127.0.0.1:8080 либо вместо 127.0.0.1 — адрес компьютера в локальной сети. Интерфейс изначально на английском (у меня уже переключено на русский)

Язык системы, пароль для входа, координаты — меняем в меню настройки — настройки
127.0.0.1:8080/#/Setup

Добавление устройств

Для добавления устройств переходим во вкладку Настройки — Оборудование
127.0.0.1:8080/#/Hardware

Выбираем тип устройства Xiaomi Gateway, называем его как нибудь, указываем его IP адрес, который мы зарезирвировали на роутере, прописываем пароль полученный в окне режима разработчика. Порт — у меня работает на порту 54321. В вики домотикз описано подключение с указанием порта 9898

Для добавления ламп — просто добавляем устройство YeeLight LED — адреса указывать не надо, лампы подтянутся сами. 

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

Устройства

Устройств добавится НАМНОГО больше чем вы ожидаете :) Список их доступен на вкладке Настройки — устройства. 
127.0.0.1:8080/#/Devices

Например каждый датчик температуры и влажности — добавится как три устройства, отдельно температура, отдельно влажность, и все вместе. Розетки — отдельно розетка (управляемое устройство) отдельно — как датчик энергопотребления. А вот шлюз — отдельно подстветка, отдельно сирена сигнализации, отдельно будильник, дверной звонок и регулятор звука. Для того чтобы добавить устройство в список используемых — в конце строки нужно нажать зеленую стрелочку. Убрать из используемых — синюю стрелочку. То что нам не нужно — не добавляем. 
Добавленные к использованию устройства располагаются по нескольким вкладкам — 

Переключатели

На этой вкладке собраны все управляемые устройства 
127.0.0.1:8080/#/LightSwitches

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

Например выбрать звук который будет звучать на шлюзе, или цвет свечения на RGB лампе или яркость на белой лампе.

Температура

На этой вкладке группируются климатические датчики — влажности и температуры
127.0.0.1:8080/#/Temperature

Поначалу они все называются одинаково, определить где какой — можно по их показаниям и сверке с приложением Mi Home, после чего их можно соответственно переназвать. 

Вспомогательное

Здесь сгрупирован датчик освещенности шлюза — хотя его показания весьма странные, и счетчики потребления энергии розеток. 

127.0.0.1:8080/#/Utility

Сценарии

Для создания сценариев — необходимо перейти во вкладку — Настройка — Дополнительно — События. Написание сценариев доступно в двух вариантах — блочный и скриптовый на языке lua. 

Примеры сценариев

Учится работать с Domoticz лучше начинать с блоков. Тут все разбито на группы и составлять сценарии довольно просто. Пример простого сценария на блоках — включение света по обнаружению движения, и выключения через минуту после того как датчик движения перейдет в статус выключено. После составления сценария нужно назвать его, поставить галочку на опции Event active: — для включения и сохранить его.

Точно такой же сценарий на lua

Примеры использования

Больше внимания конкретным сценарям я буду уделять в других обзорах, тут в качестве примера приведу сценарий, который НЕВОЗМОЖНО реализовать в Mi Home, а именно — двухкнопочный выключатель Aqara c размыканием проводов — левая кнопка будет работать по назначению — разрывать и соединять фазу, а правая — не подключенная к линии (для питания выключателя достаточно подключения только одной из кнопок) — будет включать и выключать Yeelight лампу, которая физического соединения с выключателем не имеет.

В данном сценарии будет проверятся состояние лампы Yeelight, значение самого выключателя On или Off — значения иметь не будет. Если состояние лампа отлично от Off — значит она работает, и будет выключена, а если выключена — то будет включена. 

На этом, вводную часть по Domoticz буду завершать, если тема будет интересна — то продолжу, интересного еще очень много. 

Видеоверсия обзора:

Все мои видео обзоры — YouTube

Спасибо за внимание.

Безумный дом

Время на прочтение
10 мин

Количество просмотров 56K

Мы часто думаем о том, как автоматизировать свое жилище, но часто этот вопрос упирается в то, что готовые системы слишком негибки и дороги, а разбираться, как сделать что-нибудь самому совершенно нет времени.

Под катом — подробный гайд по настройке системы умного дома: сделаем возможным работу устройств ZWave и кастомных MQTT-устройств на базе ESP8266, настроим управление домом при помощи HomeKit и Яндекс Алисы.

Первоначальная настройка Raspberry PI

Установка системы

На распберри ставим raspberry pi os https://www.raspberrypi.org/downloads/raspberry-pi-os/ Записываем ее на MicroSD от 16 ГБ. Обязательно класса 10 и выше, иначе не хватает скорости доступа для работы операционной системы.

$ sudo dd bs=4M if=raspbian.img of=/dev/sdf status=progress

Headless

Если не хотим подключать монитор

SSH

В boot разделе создаем файл с именем ssh(это одноразовый способ: при наличии файла с именем ssh в разделе при старте raspberry sshd запускается и удаляется этот файл, поэтому не забываем в sudo raspi-config включить ssh насовсем)

# mkdir /mnt/boot_partition
# mount /dev/sdf1 /mnt/boot_partition
# touch /mnt/boot_partition/ssh
# umount /dev/sdf1

Теперь при первом запуске у нас будет возможность подключиться к системе по ssh.

Wi-Fi

Если необходимо подключение к локальной сети посредством wifi, создаем в boot разделе файл wpa_supplicant.conf

# mkdir /mnt/boot_partition
# mount /dev/sdf1 /mnt/boot_partition
# vim /mnt/boot_partition/wpa_supplicant.conf
# umount /dev/sdf1

Содержимое файла wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=RU
network={
 ssid="your_ssid"
 psk="your_wifi_password"
}

Подробнее об этом конфиге

Первый запуск

Вставляем флешку в малину, подключаем ее по ethernet к сети, если не настроили wifi, подаем питание по microUSB, используя блок питания с предельным током как минимум 2 ампера.

Raspberry PI должна загрузить систему, а также подключиться к сети.

Попробуем получить к ней доступ по ssh.

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

# nmap -sn 192.168.0.1/24
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-23 23:49 MSK
Nmap scan report for 192.168.0.1
Host is up (0.00033s latency).
Nmap scan report for 192.168.0.105
Host is up (0.00016s latency).
Nmap scan report for 192.168.0.120
Host is up (0.00050s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.57 seconds

Здесь можно заметить, что кроме самого роутера(192.168.0.1) и моего ПК(192.168.0.105) появился еще один хост 192.168.0.120 — многовероятно, что это и есть наша малина.

Попробуем подключиться. Стандартная пара логин/пароль: pi/raspberry.

# ssh pi@192.168.0.120
Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Aug 23 21:54:16 2020 from 192.168.0.105
pi@raspberrypi:~ $

Мы успешно вошли по ssh на raspberry pi и теперь можем приступать к дальнейшей настройке системы.

Установка Domoticz

Domoticz — программная система для управления умным домом с открытым исходным кодом. Написана на C++. На хабре я видел статьи про аналоги этой системы, такие как openhub и home assistant, но мой выбор пал на domoticz вследствие того, что эта платформа максимально проста для конфигурирования, а кроме того, написана на C++, что делает ее гораздо менее требовательной к вычислительным мощностям для работы, чем аналоги, использующие java и python. Кроме того, подкупила простая система написания сценариев на Lua или python.

Итак, установим domoticz на наш одноплатник. Установка максимально простая, за что личный респект разработчикам.

pi@raspberrypi:~ $ curl -L install.domoticz.com | sudo bash

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

После окончания установки и, на всякий случай, ребута, проверяем, что демон domoticz поднялся:

pi@raspberrypi:~ $ sudo service domoticz status

Также проверим, что web интерфейс доступен: http://192.168.0.120/

Watchdog

В процессе эксплуатации я заметил, что Domoticz иногда падает с ошибкой. Чтобы поднимать его автоматически, напишу watchdog с помощью cron.

#!/bin/sh
# /etc/scripts/check_domoticz_online.sh
# check domoticz
status=`curl -s -i -H "Accept: application/json" "http://localhost:8080/json.htm?type=devices&rid=1" | grep "status"| awk -F: '{print $2}'|sed 's/,//'| sed 's/\"//g'`
if [ $status ]
then
    echo "Domoticz has already been started"
else
    /home/pi/domoticz/domoticz.sh restart   
fi
pi@raspberrypi:~ $ sudo crontab -e -u root
*/5 * * * * /etc/scripts/check_domoticz_online.sh > /dev/null 2>&1

Теперь каждые 5 минут будет запускаться скрипт, который проверит, работает ли Domoticz и перезапустит его, если это необходимо

Настройка domoticz для работы с устройствами

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

IP-камера

Самое простое, что можно настроить в Domoticz — это камера. Для этого зайдем в web-интерфейсе в Setup -> More options -> Cameras -> Add camera.

Вводим данные о своей камере. У меня возникли сложности с определением picture url, но они решились вот этим сервисом.

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

Z-Wave USB Stick

Посредством Domoticz, мы можем управлять домашней сетью Z-Wave IoT устройств. Это удобный протокол, позволяющий устройствам взаимодействовать друг с другом так, чтобы некоторые из них являлись, помимо своего основного назначения, Z-Wave ретрансляторами, своей работой расширяя радиус покрытия Z-Wave. Протокол закрытый, проприеритарный, поэтому просто создать свое Z-Wave устройство не выйдет, поэтому обычно, по этому протоколу работают покупные устройства/компоненты умного дома.

По моему опыту, настройка Z-Wave сети в Domoticz оказалась сильно проще и, в отличие от систем Home Assistant и openHub, здесь USB Stick заработал сразу и без проблем.

Для того, чтобы настроить свою сеть Z-Wave, я приобрел Z-Wave USB Stick. Подключив его к Raspberry pi, я добавил его как еще одну Hardware, с Type OpenZWave USB. Путь к Serial Port у меня выглядел примерно так: /dev/serial/by-id/usb-0658_0200-if00

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

ВАЖНО: следите, чтобы рабочая частота Z-Stick соответствовала рабочей частоте Z-Wave устройств

MQTT-брокер

Для создания кастомных IoT устройств я собираюсь использовать Arduino с подключением к локальной сети. В рамках данной сети общепринятым стандартом общения между устройствами является MQTT — протокол, ориентированный для обмена сообщениями по принципу издатель-подписчик. Для передачи сообщений посредством данного протокола нам необходим MQTT-брокер — своеобразный хаб для сообщений. Domoticz и IoT устройства выступят в качестве клиентов сети, подключившись к брокеру.

Установим свободный MQTT-брокер Mosquitto.

pi@raspberrypi:~ $ sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key  
pi@raspberrypi:~ $ sudo apt-key add mosquitto-repo.gpg.key  
pi@raspberrypi:~ $ cd /etc/apt/sources.list.d/  
pi@raspberrypi:/etc/apt/sources.list.d/ $ sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
pi@raspberrypi:/etc/apt/sources.list.d/ $ cd
pi@raspberrypi:~ $ sudo apt-get install mosquitto mosquitto-clients
pi@raspberrypi:~ $ rm mosquitto-repo.gpg.key

Теперь Mosquitto установлен и работает. Мы можем подключиться к нему без аутентификации по адресу 0.0.0.0:1883. Таких настроек нам хватит на первое время.

Domoticz — MQTT клиент

Подключим domoticz к MQTT-брокеру. В web-интерфейсе Domoticz — Setup -> Hardware.

  • Type — MQTT Client Gateway with LAN interface.

  • Remote address — localhost

  • Port — 1883

  • Data Timeout — disabled

  • Username и password — оставляем пустыми до лучших времен

  • Prevent loop — в большинстве случаев эту настройку следует оставить включенной, но в нашем случае мы собираемся подключать собственные устройства по MQTT и управлять ими внешними методами, поэтому мы выключим prevent loop и domoticz будет пересылать все обновления статусов устройств из domoticz/in в domoticz/out. Это нужно, тк внешнее управление осуществляется посредством публикаций в domoticz/in, а наши устройства слушают domoticz/out, и если domoticz не будет пересылать сообщения из in в out, то устройства не смогут узнать об обновлениях их статусов.

  • Publish topic — топик, куда domoticz будет публиковать все обновления статусов. Для себя я оставил стандартно — out, и domoticz публикует в топик domoticz/out.

После нажатия на Add у нас добавился новый hardware. Если все хорошо, то в таблице, в колонке Enabled мы увидим Yes.

Dummy switch

Хотелось бы быстро проверить работу нашей системы. Для этого есть виртуальные устройства — не имеющие физических воплощений(по крайней мере, пока мы их не сделаем), но имеющие статус в системе domoticz и управляемые из нее.

Добавим Dummy hardware. В web-интерфейсе Domoticz — Setup -> Hardware

  • Type — Dummy (Does nothing, use for virtual switches only)

Добавляем. В таблице появилась еще одна запись. Можно увидеть, что в таблице рядом с Type есть кнопка Create virtual sensors. Нажимаем ее, вводим параметры

  • Name — lamp

  • Sensor type — Switch

Сохраняем и переходим в меню Switches. Теперь здесь можно увидеть новый переключатель:

Теперь мы можем посмотреть, как изменение переключателя отражается в топике MQTT.

pi@raspberrypi:~ $ mosquitto_sub -h localhost -v -t "domoticz/out"

Мы использовали клиент MQTT, который установили вместе с брокером, и подписались на топик, куда domoticz публикует свои обновления. Нажмем на лампочку в веб-интерфейсе

Смотрим в терминал и видим сообщение из топика:

domoticz/out {
    "Battery" : 255,
    "RSSI" : 12,
    "description" : "",
    "dtype" : "Light/Switch",
    "hwid" : "4",
    "id" : "00014052",
    "idx" : 2,
    "name" : "lamp",
    "nvalue" : 1,
    "stype" : "Switch",
    "svalue1" : "0",
    "switchType" : "On/Off",
    "unit" : 1
}

В подобных сообщениях Domoticz сообщает нам об изменении своего состояния. Формат тела сообщения — JSON. В поле name видим название, которое мы ранее установили для switch’а в domoticz. Новое состояние свитча мы можем увидеть в поле nvalue.

Программируем собственные IoT устройства на базе Arduino-like контроллеров.

Теперь, когда MQTT-брокер доступен из сети и Domoticz публикует туда сообщение каждый раз, когда мы переключаем switch, можно заняться программированием микроконтроллера. Задача: подключиться к сети, подключиться к брокеру MQTT, подписаться на нужный топик и парсить сообщения от Domoticz, выделяя те, поле name которых совпадает с названием, захардкоженым в программу, и выполняя переключения встроенного светодиода в зависимости от нового состояния из сообщения. Впоследствии переключаться будет не встроенный светодиод, а реле, управляя каким-либо процессом.

Для реализации данного функционала я использую клон Arduino Uno, Ethernet Shield, а также Arduino-like плату на основе контроллера ESP8266, который способен подключаться к сети по WiFi. Таким образом, у меня будут две версии устройства — с подключением по Ethernet и по WiFi.

Для работы с MQTT я использовал библиотеку MQTT.h. Для парсинга JSON — ArduinoJSON.h.

Изначально, написав скетч для Arduino, я, выставив значение для буферов MQTTClient и ArduinoJSON в 500 байт и использовав преобразование входных данных в класс String, превысил мизерное количество оперативной памяти в 2 килобайта. Уменьшив размер буферов до 300 байт и использовав «сишные» строки, мне удалось уложиться в данный лимит, и даже оставить 300-400 свободных байт, но стало понятно, что модифицировать и усложнять программу, добавлять дополнительную логику в случае этой платы будет затруднительно.

Исходный код скетча Arduino + Ethernet.

Программировать ESP8266 оказалось сильно проще, так как оперативной памяти здесь на порядок больше.

Исходный код скетча для ESP8266(WiFi).

Отлично! Оба устройства отслеживают изменения значения переключателя в интерфейсе Domoticz, и переключают светодиод соответственно значению переключателя!

Для себя в данный момент я сделал вывод, что гораздо разумнее использовать платы на основе ESP8266, потому что:

  • нет давящего ограничения по оперативной памяти

  • цена за комплект Arduino UNO + Ethernet Shield — 1100 руб, а на плату с работающим из коробки WiFi — 400

Таким образом, мы научились управлять собственным WiFi устройством прямо из интерфейса Domoticz, что открывает перед нами гигантские перспективы для автоматизации

Управляем всем через Яндекс Алису

Domoticz как таковой не поддерживает интеграцию с Алисой, потому что для этого необходим работающий навык Алисы и какой-то облачный интерфейс. Поэтому, для работы с Алисой предлагается следующий костыль: к mqtt брокеру, куда domoticz публикует изменения своих статусов, подключить homebridge — средство для подключения умного дома Apple, и передавать команды от Алисе к domoticz через него.

Поставим все необходимое ПО:

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt install -y nodejs npm libavahi-compat-libdnssd-dev
pi@raspberrypi:~ $ sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
pi@raspberrypi:~ $ sudo npm install -g -g --unsafe-perm homebridge-edomoticz

Запускаем

sudo hb-service install --user homebridge

Теперь заходим на веб-интерфейс homebridge по порту 8581, логинимся admin:admin и видим qr-код устройства, который сканируем приложением Дом на iphone. Homebridge своим плагином для domoticz должен видеть все устройства, зарегистрированные в domoticz, и когда мы добавим homebridge в приложение Дом на iphone, то мы сможем ими управлять. Происходит это посредством отправки сообщений в domoticz/in. Чтобы мое самодельное устройство начало получать эти изменения своего статуса, я отключил в настройках mqtt domoticz prevent loop. Таким образом, теперь, когда domoticz получает обновления статусов устройств через domoticz/in, он дублирует их в domoticz/out и устройства, слушающие domoticz/out, могут их получить. Позаботьтесь о том, чтобы ваши устройства не отвечали в domoticz/in на изменения своего статуса, чтобы не образовывались петли.

Для подключения Homebridge к Алисе я использовал g-on плагин. По ссылке — исчерпывающее описание настройки.

После окончания настройки мы имеем возможность управлять устройствами Domoticz, используя приложение Дом или Алису

Итог

Результатом моей работы стала система, обладающая приемлемой стабильностью, способная управлять IoT устройствами без необходимости подключения к интернету, позволяющая интегрировать собственные IoT устройства, работающие в сети WiFi, а также управлять этими устройствами голосовыми командами через Алису, или же с помощью облачного сервиса Apple

P.S.

Демонстрация работы системы. Торшер подключен к самодельной «умной розетке», состоящей из реле, которым управляет ESP8266. Розетка по MQTT общается с Domoticz

P.P.S

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

Исправление костыля с watchdog’ом

Большое спасибо автору этой статьи, который показал на примере из моей статьи, что в данном случае более подходящим инструментом для контроля работы domoticz будет systemd. И действительно, systemd снимает с нас необходимость следить за работой демонов, предоставляя гибкий интерфейс для настройки управления ими

Tasmota

Использование готовой прошивки для ESP8266 позволит не писать свой код для нее. Я проверил работоспособность этой прошивки на плате Wemos D1 R32.

Прошивку скачиваем отсюда

Прошиваем:

# esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 erase_flash
# esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_freq 40m --flash_size detect 0x1000 bootloader_dout_40m.bin 0x8000 partitions.bin 0xe000 boot_app0.bin 0x10000 tasmota32.bin

Можем посмотреть логи tasmota через монитор последовательного порта

# screen /dev/ttyUSB0 115200

Подключаемся к wifi сети tasmota, открываем web морду устройства: http://192.168.4.1

Вводим данные wifi сети и ждем, пока esp8266 не подключится к ней.

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

Сначала настраиваем MQTT: все оставляем стандартно, кроме логопассов и IP адреса MQTT брокера. После этого настраиваем модуль: выбираем порты, которыми хотим управлять, указываем, что за устройство на них висит: реле, кнопка или что-то еще. После этого настраиваем Domoticz — смотрим, какое idx у dummy device, и записываем его в соответствующее поле. Теперь мы можем управлять этим устройством при помощи domoticz

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

  • «Бомж» Умный дом, подбор комплектующих. Часть 1
  • «Бомж» Умный дом, подбор и установка ПО для центрального хаба. Часть 2
  • «Бомж» Умный дом, конфигурирование конечных устройств. Часть 3

Когда-то в юности с заворожением смотрел 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 можно настроить отслеживание геолокации — так наш умный дом поймет, что мы покинули его и отключит свет и бытовые приборы. 

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

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

Страница 1 из 27

  1. =======
    Полезное здесь и не здесь. Оглавим:
    Вот здесь азы Domoticz.
    И здесь полно информации.

    NodeRed.

    Температура и безопасность.
    Аларм в Телеграм.
    Отправка данных с ESP-8266.
    InfluxDb — запариваем.
    MQTT — Общий способ передачи информации. И формат отдельный.
    Как воткнуть камеру. http://www.ispyconnect.com/sources.aspx — база данных по камерам, как их соединять.
    JSON таки.
    Присутствие в сети и управление выключателями по присутствию.
    DHT-22 и Domoticz.
    Немного про Node Red и Domoticz.
    Передача команд на MQTT устройства что сделаны по протоколу OpenHab.
    Bash и Domoticz.
    Про Сяоми. И здесь.
    Включение 3-ёх режимного «Light/Switch/Selector» по датчику движения.
    Забираем данные погодной станции по MQTT.
    Скрипты много.
    Голосовое оповещение. И здесь про него и радио. И здесь. Securbond радует нас!
    Функция map.
    Перезагрузка роутера.
    Выгоняем температуру из Домотикз.
    Устанавливаем целевую температуру по MQTT.
    Простые скрипты отопления балкона и протечки.
    Нет -127 и 85 градусам! Node Red.
    Скрипт датчика движения.
    Извлечение части топика в NodeRed
    cancelQueuedCommands() — датчик движения от @om1212
    influxDB Debian Buster

    =======
    Начнем с… удаления:

    service domoticz stop
    #remove the domoticz folder with binary and all subdirs
    sudo rm -Rfv domoticz
    sudo rm -Rfv /etc/domoticz
    sudo rm -Rfv /etc/init.d/domoticz.sh

    Любимый мной OpenHab, все таки, не до конца отвечает запросам и чаяниям. Была надежда, что ОН2 станет лучше.

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

    Смотрю Domoticz.
    Домотикз работает с MQTT путем выгона на брокер отчетов о переключении выключателей (вообще всех событий) следующим фейерверком json в теле сообщения(проще говоря — щелчок выключателя на экране и такой комплект на брокер):

    {
       «Battery» : 255,
       «RSSI» : 12,
       «description» : «»,
       «dtype» : «Light/Switch»,
       «id» : «00014055»,
       «idx» : 5,
       «name» : «Участок»,
       «nvalue» : 0,
       «stype» : «Switch»,
       «svalue1» : «99»,
       «switchType» : «On/Off»,
       «unit» : 1
    }
     

    Как ESP-8266 будет забирать это добро себе? Конечно — в таблицу! При помощи модуля sjson.
    Только прямой обработкой сообщение -> функция sjson не получается.
    Посему dofile(«analize.lua») в помощь:

    — gdata — сообщение от брокера в глобальной переменной
    local msg = gdata
    local nms = «»
    for i = 1, #msg do
        — выбираем каждый символ сообщения по одному
        local z = string.sub(msg,i,i)
        — очищаем от всего лишнего
        local zz = string.match(z, «([%w:{}.,\’])») or «»
        nms = nms..zz
    end
    if msg then
        — t — выброс в глобальную таблицу сообщения от domoticz
        t = sjson.decode(nms)
        for k,v in pairs(t) do print(k,v) end
    end
     

    А чтобы слать сообщения на domoticz надо формировать такой стринг

    ‘{«idx»:1,»nvalue»:0,»svalue»:»25.0″}’

    и гнать его в топик «domoticz/in»
    Об этом впереди.

    UPD 01/10/2017

    Если мы работаем с json (отправляем его на Domoticz и там парсим), то в теле сообщения от Domoticz этот json повторяется в лоб, как и был получен.

    Это явление не ухватывается модулем sjson от nodeMcu и валит устройство на бок.
    Посему код надо подправить так:

    local msg = gdata
    local nms = «»
    local keys = {
        ‘idx’,
        ‘nvalue’,
        ‘svalue1’
    }
    for i = 1, #msg do
        nms = nms..(string.match(string.sub(msg,i,i), «([%w:{}.,\’])») or «»)
    end
    print(msg)
    —print(nms)
    local function parce()
        local t = sjson.decode(nms)
        for i=1, #keys do
            print(keys[i], t[keys[i]])
        end
         —[[
            — Здесь ваш код, если надо что-то сделать
            — с пришедшим сообщением
            if t.idx == … then
            …
            …
            end
         —]]

    end
    if nms ~= «» then
        pcall(parce)
    end

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

    Последнее редактирование: 27 окт 2020

  2. Снова интересная тема ))). Ещё пока просматривал инфу по данному вопросу наткнулся на: node-red https://nodered.org (для объединения всего) и
    ImperiHome http://www.evertygo.com/imperihome (для создания панелей управления).

  3. 1. Температура и безопасность.
    Да, ds18b20 в количестве три штуки и вот такая гадость:

    upload_2017-9-19_11-1-39.png

    Эта гадость, хотя и заявлено что работает от трех вольт — не работает!
    Что делает, подлюка: включается, поднимает единицу на выходе, через 15 секунд роняет его в ноль навсегда. Никаких признаков жизни.

    То есть АрдуиноПятьВотльтФорева, к радости отдельностоящих товарищей.
    Ну, в общем, через питалово 5 вольт и делитель из резисторов — работает. (Если что, я не рекламирую, а даже наоборот — посмотрел бы что другое)

    Ну, поехали…

    upload_2017-9-19_18-55-59.png

    upload_2017-9-19_16-17-22.png

    upload_2017-9-19_16-19-57.png

    Общий старт:

    — Запуск MQTT
    dofile(«setmqtt.lua»)
    — Запуск Микроволонового Датчика
    dofile(«scurity02.lua»)
    — Запуск измерения температуры
    dofile(«ds18b20todomoticz.lua»)

    Запуск MQTT

    — setmqtt.lua
    local myClient = «security»
    local pass = «superpassword»
    local mybroker = «iot.eclipse.org»
    — mod — глобальная таблица состояния связи
    if not mod then mod = {} end
    mod.broker = false — есть брокер
    mod.internet = false — есть Интернет

    local begin = function()
        m = mqtt.Client(myClient, 180, myClient, pass)
        m:lwt(myClient, «OFF», 0, 0)
        connecting = function ()
            — соединение с брокером — через модуль
            connect = require(‘_getmqtt’)
            connect.connecting(m, mybroker, 1883, myClient, mod, function() connect = nil end)
            — самоустраняемся
            begin, setmqtt = nil, nil
        end
        — Потеряли связь? Не беда:
        m:on(«offline», function(con)
            mod.broker = false
            mod.interenet = false
            m:close()
            dofile(«setmqtt.lua»)
        end)
        — Получили сообщение?
        m:on(«message», function(conn, topic, dt)
            local top = string.gsub(topic, myClient..«/»,«»)
            — print(top..»:»..dt)
            — Выталкиваем сообщение в глобальные переменные
            — _G.gtopic = top
            _G.gdata = dt
            — Вызываем анализатор
            dofile(«analize.lua»)
        end)
        connecting()
    end
    begin()

    Модули.

    — getmqtt.lua
    local ml =
    local M={}
    function M.connecting(m, Broker, port, myCl, mod, unload)
        local getConnect
        local count = 0
        getConnect = function()
           if mod.internet == true then
                m:connect(Broker, port, 0, 0,
                function(con)
                    tmr.stop(getmq)
                    tmr.unregister(getmq)
                    getmq = nil
                    print(«Got «..Broker)
                    m:subscribe(«domoticz/out»,0, function(conn)
                        print(«Subscribed.»)
                    end)
                    m:publish(myCl,«ON»,0,0)
                    _G.mod.broker = true
                    if unload then
                        getConnect, count = nil, nil
                        package.loaded[ml]=nil
                        unload()
                    end
                end)
            else
                print(«Wating for WiFi «..count..» times»)
                count = count + 1
                if count > 20 then node.restart() end
            end
        end
        getmq = tmr.create()
        getmq:alarm(10000, 1, function()
            getConnect()
        end)
        local call = function()
            print(«Got WiFi!»)
            wf = nil
        end
        wf = require(«_getwifi»)
        wf.check(call)
        getConnect()
    end
    return M

    local modn =
    local M = {}
    M.check = function(call)
        local isconnect = function()
            tmr.create():alarm(15000, tmr.ALARM_SINGLE,
            function(t)
                t = nil
                M.check(call)
            end)
        end

        local ip = wifi.sta.getip()
        if ip ~= nil then
            net.dns.resolve(«www.google.com», function(sk, ip)
                if (ip == nil) then
                    print(«DNS fail: Ask Connect!»)
                    isconnect()
                else
                    print(‘Got google: ‘..ip)
                    if not mod then mod = {} end
                    mod.internet = true
                    if call then call() end
                    package.loaded[modn] = nil
                end
            end)
        else
            isconnect()
        end
    end
    return M

    local M={}
    M.adrtbl = {}
    M.pin = 4
    M.del = 750

    function M.getaddrs(ttable, call)
        ow.setup(M.pin)
        ow.reset_search(M.pin)
        repeat
            local adr = ow.search(M.pin)
            if(adr ~= nil) then
                table.insert(M.adrtbl, adr)
            end
        until (adr == nil)
        ow.reset_search(M.pin)
        M.askTemp(ttable, call)
    end

    function M.askTemp(ttable, call)
        ow.setup(M.pin)
        for _, v in pairs(M.adrtbl) do
            ow.reset(M.pin)
            ow.select(M.pin, v)
            ow.write(M.pin, 0x44, 1)
        end
        v = nil

        tmr.create():alarm(M.del, tmr.ALARM_SINGLE, function (t)
            M.readResult(ttable, call)
            t = nil
        end)
    end

    function M.readResult(ttable, call)
        local data, crc, t
        for _, v in pairs(M.adrtbl) do
            ow.reset(M.pin)
            ow.select(M.pin, v)
            ow.write(M.pin,0xBE,1)
            data = string.char(ow.read(M.pin))
            for i = 1, 8 do
                data = data .. string.char(ow.read(M.pin))
            end
            crc = ow.crc8(string.sub(data,1,8))
            if (crc == data:byte(9)) then
                t = (data:byte(1) + data:byte(2) * 256)
                if (t > 32767) then t = t 65536 end
                t = t * 625 /10000
                local ts = string.format(«%.02f», t)
                table.insert(ttable, ts)
            end
        end
        if call then call(ttable) end
    end

    function M.getTemp(ttable, call, pin, del)
        if #M.adrtbl == 0 then
            M.pin = pin or M.pin
            M.del = del or M.del
            M.getaddrs(ttable, call)
        else
            M.askTemp(ttable, call)
        end
    end

    Измерение и отправка температуры:

    do
    temp = {}
    local pin = 4
    local del = 750

    — Важная тебличка! Перечисляем idx приемных элементов
    — в порядке следования датчиков
    idx = {
        19,
        2,
        3
    }

    function myWork()
        print(«Got DS18b20: «..#temp)
        table.foreach(temp, print)
        ds = nil
        package.loaded[«ds18b20m»]=nil
        local itog = {}
        for i = 1, #temp do
            table.insert(itog, {idx[i], temp[i]})
        end
        local function publNow()
            local p = table.remove(itog)
            if p and _G.mod.broker then
                m:publish(«domoticz/in»,‘{«idx»:’..p[1]..‘,»nvalue»:0,»svalue»:»‘..p[2]..‘»}’,0,0,publNow)
            end
        end
        if mod and mod.broker then
            publNow()
        end
    end

    local function send()
        temp = {}
        ds = require(‘ds18b20m’)
        ds.getTemp(temp, myWork, pin, del )
    end
    send()
    tmr.create():alarm(30000, 1, send)
    end

    Отправляем данные с датчика движения :

    do
      print(«Start Security»)
      local pin = 1
      gpio.mode(pin,gpio.INT)
      gpio.trig(pin)
      local function pin1cb(level)
            print(«Level now «..level)
            if mod and mod.broker then
                local switchcmd = (level == 1 and «On» or «Off»)
                — «idx»:14 — это idx принимающего выключателя в Domoticz
                m:publish(«domoticz/in»,‘{«command»:»switchlight»,»idx»:14,»switchcmd»:»‘..switchcmd..‘»}’,0,0)
            end
            gpio.trig(pin, level == gpio.HIGH  and «down» or «up»)
      end
      gpio.trig(pin, «down», pin1cb)
    end

    Анализируем полученные от Domoticz json(ы):

    local msg = gdata
    local nms = «»
    local keys = {
        ‘idx’,
        ‘nvalue’,
        ‘svalue1’
    }
    for i = 1, #msg do
        nms = nms..(string.match(string.sub(msg,i,i), «([%w:{}.,\’])») or «»)
    end
    if nms then
        local function annmg()
            local t = sjson.decode(nms)
            for i=1, #keys do
                print(keys[i], t[keys[i]])
            end
            —[[
            Здесь ваш код, если надо что-то сделать
            с пришедшим сообщением
            if t.idx == … then…
            …
            end
            —]]

        end
        pcall(annmg)
    end

    Последнее редактирование: 20 сен 2017

  4. Как нет?
    Все есть, просто надо это реализовать через nginx.
    Если интересно, могу выложить как это сделать.

  5. Конечно выкладывайте!
    Но, замечу, раньше это было само собой.

    Последнее редактирование: 20 сен 2017

  6. Установка и настройка авторизации в openHAB2 через nginx.

    Устанавливаем nginx

    sudo aptget update && sudo aptget install nginx


    Переносим и переименовываем файл дефолтных настроек

    sudo mv /etc/nginx/sitesenabled/default /etc/nginx/sitesenabled/openhab2


    Редактируем файл конфигурации

    sudo nano /etc/nginx/sitesenabled/openhab2


    Приводим его к виду:

    server {
        listen                          80;
        server_name                     Main;
    }

    server {
        listen                          8081;
        server_name                     openHAB;

        location / {
            proxy_pass                              http://localhost:8080/;
            proxy_set_header Host                   $http_host;
            proxy_set_header XRealIP              $remote_addr;
            proxy_set_header XForwardedFor        $proxy_add_x_forwarded_for;
            proxy_set_header XForwardedProto      $scheme;
            satisfy                                 any;
            allow                                   192.168.1.0/24; #Пул адресов с которых разрешен вход без указания логина и пароля
            allow                                   192.168.2.0/24; #Пул адресов с которых разрешен вход без указания логина и пароля
            auth_basic                              «Username and Password Required»;
            auth_basic_user_file                    /etc/nginx/.htpasswd;
        }
    }

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

    Устанавливаем утилиту от Apache для создания файла паролей

    sudo aptget install apache2utils

    Создаем файл паролей

    sudo htpasswd c /etc/nginx/.htpasswd username

    !!!ВНИМАНИЕ!!!
    Если вы хотите добавить пользователя в существующий файл паролей, то используйте команду без ключа «-c»

    sudo htpasswd /etc/nginx/.htpasswd username

    Для удаления пользователя выполнить команду:

    sudo htpasswd D /etc/nginx/.htpasswd username

    После изменения обязательно выполнять команду перезагрузки nginx

    sudo service nginx restart

    Обращаю ваше внимание, что обращение теперь должно быть на порт указанный в настройках файла конфигурации nginx (8081).
    Вот вроде и все, если будут вопросы, пишите, будем разбираться вместе.


    sys, petr0vsk и ИгорьК нравится это.

  7. Класс! Но зря в этой теме. Уже дал ссылку из темы про ОпенХаб.

    Последнее редактирование: 21 сен 2017

  8. А вот чем мне нравится Domoticz. Вошел под паролем наблюдателя, нажал на лампочку включения освещения на участке и получил это:

    upload_2017-9-21_12-25-57.png

    Последнее редактирование: 21 сен 2017

  9. Согласен, с правами доступа очень удобно, но для управления по протоколу MQTT, без костылей не получится.
    Domoticz может отслеживать состояние по MQTT, но вот управлять не может.
    Json как вариант, но больно много информации он отправляет в эфир, в некоторых ситуациях это критично.

  10. Не понял — что значит не может управлять по MQTT? Он выдает на брокер необходимую информацию, а исполнительное устройство, подписчик, ее ловит, парсит и что-то делает.
    Пример кода я уже написал в предыдущем посте.

    Я пока не готов что-то комментировать по Domoticz — не вижу общей картины.
    Но то что уже понял — мне очень очень нравится.
    Скрипты — на Lua (в т.ч.), песня!
    Писать скрипты можно прямо из окна браузера, там же сразу логи и ошибки.
    Три типа пользователей: администратор, участник и наблюдатель.
    Отличные графики и система логов событий — тоже из окна.

    Не увидел пока систему вложений окон как в OH, но за Lua вместо Xtend в скриптах готов простить сразу, авансом.

    Вообще, ESP-8266 и скрипты Domoticz на одном языке — то что надо.

  11. Второй вариант, тоже очень даже — bash скрипты. На них вообще все что хочешь можно сделать.

    upload_2017-9-21_14-5-34.png

    То есть, по умолчанию уже просто силища заложена.

  12. Последний раз когда я сталкивался с MQTT на Domoticz, то поддержка там была на уровне
    «Currently only receiving sensor data is supported on Domoticz MQTT. Switching actuators is not supported»

  13. Ну что вы… Все не так. Каждый девайс отправляет на брокер инфо — бери и действуй.
    Хорошо это или плохо — вопрос. Можно и запретить такую отправку, и работать скриптами.

  14. Обязательно посмотрю, как будет время. Если все устроит, то заменить OH2 на Domoticz труда не составит, т.к. использую в качестве управляющего звена NodeRed.

    NodeRed.JPG

  15. С любимыми не расстаются,
    …но если нет взаимности ;)

  16. Не туда он пошел, не туда!
    Главные претензии к первому:
    — малораспространенный язык скриптов, нет нормальной документации К API
    — «разрозненное» программирование итемы-сайтмэп-правила-персистенсы — все надо ловить по файлам и компоновать.
    — нет разделения прав пользователей.
    Второй
    — добавил путаницу в способы управления
    — и даже парольный вход — по костылю.
    Какая тут взаимность?
    ОН2 начали раскрашивать как задницу попугая, а не упрощать и улучшать взаимодействие с пользрователями.

    Я сейчас сижу на ОН 1.8 и изучаю Domoticz — усиленно копать OH2 желания абсолютно нет.
    Может быть после погружения в эту систему и вернусь к ОН, но пока говорить об этом рано.

  17. Если здесь еще кто-то пытается разобраться с Домотикз, привожу пример, ИМХО, полезного скрипта.
    Скрипт зажигает красную лампочку, если температура на датчике больше 27 и шлет сообщение в телеграм.
    Меньше — гасит лампочку.
    … и как же все просто! Это вам нe OpenHab.

    commandArray = {}
    if devicechanged then

    token = «ЗДЕСЬ ВАШ ТОКЕН»
    chatid = 11111111 — чат ID
    message = ‘Караул! ‘

    — «Зал» — название детчика температуры, его idx = 3
    if devicechanged[‘Зал_Temperature’] ~= nil then
        if devicechanged[‘Зал_Temperature’]  > 25 then
            — ‘Красная Лампочка’ — название выключателя лампочки. Красной лампочки :-)
            commandArray[‘Красная Лампочка’]=‘On’
            print(«\n\nТемпература Повысилась!\n\n«)
            ttt = string.format(«%.02f», devicechanged[‘Зал_Temperature’])
            message = message..ttt..» в Зале! Все пропало!»
            os.execute(‘curl —data chat_id=’..chatid..‘ —data-urlencode «text=’..message..‘»  «https://api.telegram.org/bot’..token..‘/sendMessage» ‘)
        else
            commandArray[‘Красная Лампочка’]=‘Off’
            print(«\n\nТемпература Понизилась!\n\n«)
        end

    for deviceName,deviceValue in pairs(otherdevices) do
        print («otherdevices ‘»..deviceName..«‘, value ‘»..tostring(deviceValue)..«‘»);
    end

    for deviceName,deviceValue in pairs(otherdevices_svalues) do
        print («otherdevices_svalues ‘»..deviceName..«‘, value ‘»..tostring(deviceValue)..«‘»);
    end

    for deviceName,deviceValue in pairs(otherdevices_idx) do
        print («otherdevices_idx ‘»..deviceName..«‘, value ‘»..tostring(deviceValue)..«‘»);
    end

    for deviceName,deviceValue in pairs(otherdevices_lastupdate) do
        print («otherdevices_lastupdate ‘»..deviceName..«‘, value ‘»..tostring(deviceValue)..«‘»);
    end

    end

    end
    return commandArray

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

    Еще вариант отправки информации на телеграм:

    upload_2017-9-25_17-49-54.png

    В поле «Действие при включении» забивается строка типа:

    https://api.telegram.org/bot0000000:KEYKEYKEYKEYKEYKEY/sendMessage?chat_id=12345678&text=»ВАШ ТЕКСТ»

    Последнее редактирование: 25 сен 2017


    sys и Securbond нравится это.

  18. Пока не понравилось то, что одна ветка в mqtt сервере. При разборе на плате придется читать все что с нее валится и выбирать свое. Это может быть проблемой.

    В ОН для каждого датчика была своя ветка и это на мой взгляд несколько удобней.

  19. Я уже привел код выше — никаких проблем.
    Не нравится одна ветка — отключите. Отправляйте данные через скрипты bash.

  20. Дело привычки. Надо дольше поковыряться.
    Мне уже кажется Домотикз и проще и логичнее. Хотя не без напряжения мозга в некоторых местах.
    У меня, думаю и у всех, основа работы с устройствами — MQTT. Осталось чуть — до конца разобраться с парсингом json из скриптов и я уже готов переходить на Домотикз.

Страница 1 из 27

Добавляем камеру в Domoticz

Во-первых, почему Domoticz? Мне он показался намного более простым по сравнению с Majordomo и другими системами. Во-вторых, этот пакет присутствует в репозитории на роутере (с установленным OpenWrt). С одной стороны ставить такую программу я предпочел бы на сервер, с другой — именно роутер является точкой, соединяющей все сетевые устройства в квартире. Поэтому пусть пока будет так.
Так как камера у меня — «чистый» китаец, то просто так добавить ее в систему не получится. По крайней мере, мне это не удалось. Пришлось идти обходным путем.
Строка подключения к камере выглядит примерно так:

rtsp://192.168.1.12:554/user=admin&password=&channel=1&stream=0.sdp?real_stream

Открыв этот адрес, например, через плеер VLC, можно увидеть основной поток камеры. В принципе, строку можно чуть-чуть сократить, убрав всё после sdp. В любом случае, Domoticz такое не понимает. Поэтому нам понадобится пакет под названием motion. У меня он уже установлен и отправляет мне в Telegram фото событий. Камера у меня пока что одна, но в будущем планируется еще несколько, поэтому все настройки, отличающиеся от настроек по умолчанию, я вынес в отдельный файл, который подключил в motion.conf. Там нам понадобятся несколько параметров, перечисленных ниже.

netcam_url rtsp://192.168.1.12:554/user=admin&password=&channel=1&stream=1.sdp?real_stream
netcam_keepalive on
width 704
height 576
stream_port 8091
on_event_start /root/motion/actions/on_event_start
on_event_end /root/motion/actions/on_event_end

Первая строка — подключение к самой камере на вторичный поток. Вторая — поддержка подключения, можно пропустить. Третья и четвертая — размеры кадра вторичного потока, у меня они такие. Можно выбрать, конечно, и основной, но это повлечет за собой увеличение трафика в сети и времени подключения. Самая «интересная» строка — следующая. Она указывает motion через какой порт выводить картинку. И последние две строки — пути к скриптам, которые будут выполняться при возникновении и завершении события. У скриптов должны быть установлены права на выполнение.
Запускаем motion и первым делом проверяем наличие потока, просто открыв ссылку в браузере. Например, motion у нас будет установлен на компьютер с адресом 192.168.1.10. Тогда в браузере набираем:

http://192.168.1.10:8091/

Вы должны увидеть видеопоток с камеры. Если его нет — придется разбираться что не так. Чаще всего просто не открыт указанный порт на компьютере. Если картинка есть — идем дальше.
Открываем Domoticz и пробуем добавить камеру.

Нужное меню в Domoticz
Добавляем камеру в Domoticz

Добавляем камеру в Domoticz

Протокол оставляем HTTP, в качестве IP-адреса указываем адрес компьютера, куда установили motion. Порт указываем тот же самый, что и в файле настроек motion. Имя пользователя и пароль заполняем в том случае, если для просмотра камеры нужна авторизация. Ну и в ImageURL забиваем полный путь к потоку, тот же самый, который вбивали в браузере при проверке потока камеры. Нажимаем «Тест соединения» и надеемся, что картинка появится. Обычно на это нужно до 10 секунд. Если картинки нет, значит что-то пошло не так и придется всё проверять. В моем случае картинка нормально появляется когда я работаю в домашней сети. Если я запускаю Domoticz с рабочего компьютера, то она не показывается.
Нажимаем кнопку «Add», чтобы добавить камеру в список. И тут тоже есть нюанс. В строке с камерой тоже есть предварительный просмотр, но в моем случае он не работает. Также не работают кнопки «Сделать снимок» и «Stream video». Но это не важно, камера работает.
Не зря же мы это все делали? Пусть теперь камера работает датчиком движения — нечего ей просто так висеть на потолке. Например, включает освещение в коридоре, когда обнаружит движение.
В качестве выключателя с удаленным доступом у меня стоит простой Sonoff Basic, подключенный к моей сети через WiFi. Идем в настройки Domoticz, выбираем «Оборудование». В выпадающем списке ищем пункт «Dummy (Does nothing, use for virtual switches only)», называем его как-нибудь и нажимаем кнопку добавить. Теперь в списке чуть выше нажимаем кнопку «Создать виртуальные датчики», вводим название выключателя (придумываем сами) и указываем тип «Переключатель». Жмем «ОК». Всё, мы создали виртуальное устройство, которое будет управлять освещением в коридоре. Остается теперь соединить между собой камеру и выключатель.
Вспоминаем, что у нас есть два скрипта от motion, которые выполняются при возникновении и завершении события, в данном случае — в коридоре. Добавляем в каждый из скриптов по одной строке. В  /root/motion/actions/on_event_start добавляем

/usr/bin/curl -s "http://api_username:api_password@domoticz_server:domoticz_port/json.htm?
type=command&param=switchlight&idx=your_ID&switchcmd=On"

а в  /root/motion/actions/on_event_end такую строку:

/usr/bin/curl -s "http://api_username:api_password@domoticz_server:domoticz_port/json.htm?
type=command&param=switchlight&idx=your_ID&switchcmd=Off"

Теперь разберем, что это за бред.
curl — программа, позволяющая выполнить те или иные действия по указанному адресу, используя только командную строку.
api_username и api_password — имя пользователя и пароль, которые вы установили для доступа к Domoticz. Если не устанавливали, то эту часть «api_username:api_password@» можно не вводить.
domoticz_server и domoticz_port — IP-адрес и порт компьютера, где у вас установлен Domoticz. В качестве порта нужно указать стандартный 8080, если, конечно, вы не делали перенаправления портов.
idx=your_ID — в качестве your_ID нужно указать значение выключателя из колонки Idx таблицы устройств. У меня это значение равно «1».

Таблица устройств

Таблица устройств

Ну и последний параметр switchcmd может принимать значения On или Off, в зависимости от того, хотите ли вы включить освещение или выключить соответственно. Подозреваю, что можно также указать «1» и «0» соответственно, но, если честно, лень проверять :-)
Должен также отметить, что в Sonoff установлена не стандартная прошивка с привязкой к китайскому облаку (и возможностью потерять доступ к своему выключателю из-за рвения Роскомнадзора заблокировать всех и вся), а Tasmota. Возможностей у нее немного, но лично мне хватит с избытком. Не будет же выключатель вещать радио, когда мне скучно? :-)
Теперь почему мы используем такой сложный способ включения/выключения? Просто при таком способе состояние выключателя будет корректно отображаться в Domoticz в случае возникновения или завершения движения в коридоре.

Другие наши интересноые статьи:

  • Универсальный адаптер питания для роутера
  • Умный дом на базе роутера
  • Умный дом в роутере что это
  • Уличный роутер nr 410 тандем 4gl антенна petra bb mimo unibox
  • Умная розетка для перезагрузки роутера

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии