Безумный дом +21


AliExpress RU&CIS

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

Под катом - подробный гайд по настройке системы умного дома: сделаем возможным работу устройств 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




Комментарии (59):

  1. N0Good
    /#22485952 / +3

    Какое-то костыльно-велосипедное строительство. На днях настроил на OrangePi PC Home assistant — интеграция с Алисой (через HACS) и Гугл — из коробки. Esp8266 прошиты Tasmota — тоже из коробки есть в HA. Камеры от регистратора HiWatch — даже выбор был — через onvif или тупо rtsp. Выбрал последнее. Даже смарт события от регистратора — из коробки. Даже ИБП подтянул через NUT. Попробуйте HA — вам понравится.

    • apkotelnikov
      /#22486032 / +2

      НА, тоже не совершенен, к сожалению. Я остановился на node-Red. Стабильность выше всяческих похвал, поддерживается больше устройств и протоколов. Да, идея с flow не всегда рациональна, иной раз проще было бы скриптом, но в целом очень достойно.

      • N0Good
        /#22486042

        Я, как раз, с нод-ред мигрировал на ha. И, как раз, стабильности node-red не хватает. Для него тоже висел в кроне таск на запуск сервиса. Причём виновата была интеграция с Алисой — она эпизодически поняла всю году. А уж отсутвие необходимости изобретать свои велосипеды под всё что есть у меня — прям вообще обрадовало. Но, в целом, если нужна гибкость — то да, года позволяет вообще всё.

        • N0Good
          /#22486334 / +2

          М-да. За т9 надо следить — "роняла" и "ноду".

      • C4ET4uK
        /#22486102

        У HA есть модуль node-red.

        • apkotelnikov
          /#22486594 / +1

          Не только у НА, но это уже совсем, мне лично, непонятная конструкция получается. Совмещать два продукта с плюс-минус одинаковым функционалом в одном проекте… У меня не очень большой «объект» но одних KNX релейных актуаторов штук 80 плюс вентиляция bacnet плюс какое то количество tasmot и esp-easy. Есть ещё котёл, но он lon и его по хорошему тоже надо интегрировать плюс сигнализация парадокс (в процессе интеграции) плюс, плюс плюс. Натуральный зоопарк. Собрать все в кучу на чем то едином можно только если все для начала перевести на единый протокол, но это экономически нецелесообразно. Последние года два живёт в виде отдельных «кусков» — интеграция knx и всей мелочевки node — red и здесь же оповещения, если отвалится (ни разу не было) то потеряна будет только часть и не основная. Интеграция knx и bacnet — open.rb LM3 старенький, тут же планировщики, таймеры, минимальная визуализация (управление с мобильных устройств лично для меня ненужная вещь). Этот кусок более критичный. А основной мониторинг influx и все желающие в нем добывают/складывают данные + grafana для вищуалиции того, что происходит. НА, open hub, iobroker, domotics и прочие появлялись и уходили в разные периоды. Да и переходически появляются «посмотреть, может что дельное появилось». А, забыл, ещё есть маленький кусочек z-wave который находится в кочевом состоянии ибо более менее приличной интеграции с knx я не нашёл (приличной в том числе удобной лично мне)

          • Haarolean
            /#22499062

            У них далеко не одинаковый функционал. Написать простейшие аналоги флоу от node-red в самом HA — задача нетривиальная.

    • C4ET4uK
      /#22486150

      Кстати да, пробовал Domoticz, OpenHab в итоге остановился на Home Assistant

    • Wesha
      /#22486434

      1. Наколхозить какую-нибудь примочку их готовых "кубиков", совершенно не задумываясь о безопасности (ни отдельных "кубиков", ни примочки в целом), и порадоваться, как по команде моргают лампочки в доме.
      2. Сильно удивиться, когда примочка окажется взломанной "рюцкими хацкерами", и лампочки начнут моргать уже по их команде.
      3. ???
      4. PROFIT!!!

      Недаром говорят — "in IoT, S stands for Security".

      • N0Good
        /#22486598 / +1

        Ну дык… А вы и не колхозьте всё это великолепие всеми кишками наружу. Правильная настройка сети решает половину указанных вами проблем. Ну и… не используйте всякие облака и колхозные решения для ответственных систем, особенно китайские.

  2. apkotelnikov
    /#22486030 / +1

    Посмотрите на sonoff. Он позволит уйти от розеток поверх распаечных коробок.

    • N0Good
      /#22486046

      Sonoff Mini у меня в тасмоту прошитые уже с год работают без проблем. И пара собственных сборок на esp8266. Вот ещё никак на esp32 не соберу — тоже ждут своей участи.

      • tmin10
        /#22486318

        А в чём плюс прошивки? У моих sonoff basic с 3 прошивкой появился lan доступ, с ним может работать HA. Пока думаю, а нужно-ли прошивать.

        • N0Good
          /#22486328 / +1

          Ну, не считая того, что меня вообще не волнует доступность и работа Китайского облака ( в т.ч. при добавлении нового устройства в сеть) — я шил до появления lan на официальной. И у меня не только sonoff, есть и пара собственных ковыряний на esp. С Tasmota — всё единообразно, подключать-обслуживать проще — всё через одну интеграцию. Но, да, через HACS в HA можно добавить поддержку официальной прошивки Sonoff с lan-доступом и облаком и не напрягаться.

  3. tchkEn
    /#22486092 / +6

    Всегда возникает вопрос: если отключилось электричество, потом снова появляется, то что будет с системой, включится ли она повторно без вмешательства человека?

    • N0Good
      /#22486340

      Зависит, конечно, от конкретного решения. Вот моё старое решение на node-red, запущенной на роутере, после некоторого допиливания напильником вполне себе само запускалось и всё приводило в рабочий вид само. Новое решение на HA — даже без допиливания пока само стартует нормально.

    • Bonio
      /#22486738

      Wifi релешки с прошивкой tasmota сохраняют своё состояние после пропадания электричества.

      • sintech
        /#22488186 / +1

        А при пропадании wifi они начинают светить своей открытой сетью на весь подъезд.

        • Bonio
          /#22488766 / +2

          По умолчанию нет. При пропадании сети они будут делать бесконечные попытки найти сеть и подключиться.
          Вообще это всё в tasmota настраивается, можно сделать и чтобы сетью светить начинали и состояние при пропадании напряжения не сохраняли. Это очень гибкая прошивка.

  4. sav13
    /#22486096 / +2

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

    • Jack_Vo
      /#22486304 / +1

      Для батарейных датчиков есть zigbee.

      • tmin10
        /#22486314 / +1

        Или BLE

        • sav13
          /#22486462

          Есть готовые проекты BLE с mesh архитектурой, шлюзами и пр?

          • tmin10
            /#22486468

            Там скорее точка-точка получается, сенсоры подключаются к шлюзу.

      • sav13
        /#22486460

        Zigbee — совсем другая архитектура. Глупо гонять команду от зигби выключателя через шлюз в WiFi реле. Хорошо если задержка одной секундой ограничится. Да и надежность такого решения не очень.

        • tmin10
          /#22486490

          Это как раз то, что я хочу сделать сейчас :) А какие варианты лучше? Zigbee выключатеь и zigbee реле?

          • sav13
            /#22486512 / +2

            Лично мне очень нравится MySensors с модулями NRF52. Причем все NRF52 поддерживают BLE, а последние и Zigbee.
            Zigbee тоже нравится, но пока свои устройства только проектирую, а работаю с готовыми от Xiaomi
            Сервер у меня на MajorDoMo. HA пробовал, но не смог решить проблему, что он ронял Mysensors Gatway по непонятным причинам

    • N0Good
      /#22486360

      Ну, к слову, у esp есть режим сна, и, при желании, в виде датчика с батарейкой, люди вполне добивались от esp автономии больше года. Но, на мой взгляд, wi-fi, всё же, плохо подходит для датчиков в системах умного дома. Для этих целей лучше z-wave, zigbee, bluetooth ble наконец. И вот все датчики пусть там и сидят, а к wi-fi уже их всех скопом подключает один шлюз. Причём, при желании, для zigbee и ble для этой задачи достаточно esp32 с модулем для zigbee и прошитую tasmota. Ну, или, если уж совсем лень, те же свистки с BT, zigbee и z-wave, обычно, вполне можно подключить к тому устройству, на котором работает ваш сервер "автоматизации".

      • sav13
        /#22486496

        ESP8266 выходит из сна через задницу перезагрузку с 16-го порта на ресет. После инициализации, еще нужно к WiFi подцепиться и все это при токе 100мА. Да и режим DeepSllep — 20мкА без учета работы всяких стабилизаторов и внешних резисторов тоже на так уж и мало. Так что питание CR2032 или CR2450 вряд ли получится.
        Zigbee, BLE и Co хороши, но гонять управление через шлюз — тоже так себе решение. И медленно и ненадежно. В Zigbee сети ESP явно лишний )))
        По BLE кстати, хорошего готового решения не нашел. Да и в ESP32 как шлюзе разочаровался. Там один радиотракт на WiFi и BLE, поэтому как шлюз BLE/MQTT он нормально не сможет работать. Хотя модуль очень мощный и не такой глючный как ESP8266.

  5. anonimNO
    /#22486104

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

  6. Oxyd
    /#22486170 / +2

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

    Но зачем такие костыли? Если прочитать, да хотя-бы ровно один ман (man systemd.service), то выяснится, что минимум одной строчкой в юните можно обеспечить автоматический перезапуск сервиса. Кстати, как я понимаю, domoticz свои штатным инсталлятором не создаёт *.service файл, хотя распбиан или как он там сейчас зовётся — вполне systemd-like система. Короче вот. Юнит из AUR (manjaro / arch). Если нужно, пути / User / Group / порты поправьте под свою конфигурацию.

    [Unit]
    Description=Domoticz Daemon
    After=network.target

    [Service]
    User=http
    Group=http
    PermissionsStartOnly=true
    ExecStartPre=/usr/bin/install -d -m 0700 -o http -g http /var/run/domoticz
    ExecStart=/opt/domoticz/domoticz -www 8080 -pidfile /var/run/domoticz/domoticz.pid
    PIDFile=/var/run/domoticz/domoticz.pid
    WorkingDirectory=/opt/domoticz
    RestartSec=5
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target


    Останавливаете domoticz и свой демон-наблюдатель. Кладёте сожержимое в /etc/systemd/system/domoticz.service, убираете штатный скрипт из rc.d, Запускаете
    sudo systemctl enable --now domoticz
    Радуетесь жизни! Весь головняк по наблюдению за сервисом и его перезапуском с вас снял systemd, всего двумя строчками в юните (Restart=, RestartSec=).

    • unsignedchar
      /#22486486

      Если падает — это ненормально. Интересно, проверял ли кто-то исходники pvs studio хотя бы.

      • Oxyd
        /#22486616

        Если регулярно падает — да, ненормально, абсолютно согласен!

    • Oxyd
      /#22486982 / +1

      Так… То-то я думаю, чего это директива такая незнакомая(PermissionsStartOnly)… А она оказывается deprecated.
      Её лучше удалить, и отредачить ExecStartPre=:
      ExecStartPre=+/usr/bin/install -d -m 0700 -o http -g http /var/run/domoticz

      • snp
        /#22487354 / +1

        install не требуется. Всё ещё проще:


        [Service]
        …
        RuntimeDirectory=domoticz
        RuntimeDirectoryMode=0700
        …

        И, согласно FHS 3.0, следует использовать /run вместо /var/run. Обычно /var/run это симлинк.


        А если эта тулза может не записывать PID в файл, то всё ещё можно упростить, типа так:


        [Service]
        User=http
        Group=http
        ExecStart=/opt/domoticz/domoticz -www 8080
        WorkingDirectory=/opt/domoticz
        RestartSec=5
        Restart=on-failure

        • mayorovp
          /#22487426

          Тогда уж надо и -www 8080 убрать, а строчку AmbientCapablities=CAP_NET_BIND_SERVICE добавить. Не вижу смысла на порту 8080 висеть когда 80й свободен...

  7. Jack_Vo
    /#22486310

    А зачем его устанавливать руками, когда на официальном сайте есть уже готовая сборка под arm?

    • Daniyar94
      /#22489842

      Зачем его устанавливать, когда есть готовый ARM Docker образ :)

  8. granvi
    /#22486414 / +4

    Какие вы отважные. Строите системы жизнеобеспечения на базе алис, каких то непончтных прошивок, работающих через сторонние приложения или облачные сервисы.

    • sumanai
      /#22486926

      А потом сбой в облачном провайдере и надпись «Стучать» под звонком.

    • bibiw_one
      /#22488344

      ну, справедливости ради, все облачные сервисы и сторонние приложения — лишь дополнение к системе, которая будет оставаться управляемой до тех пор, пока работает локальная сеть

    • SpiderEkb
      /#22489884

      Ну тут особого жизнеобеспечения как-то не просматривается.

      Достаточно долго занимался разработкой системы инженерного оборудования зданий. Там все свое было — все контроллеры сами делали (на STM32). Прошивки под них сами. Микроядро системы (через которое связь между контроллерами верхнего уровня и интерфейсными клиентами была) — тоже сами (этим я занимался). Протоколы обмена все свои, фактически там был один протокол, который одинаково хорошо работал что по RS485 (контроллер нижнего уровня — контроллер верхнего уровня), что по UDP (контроллер верхнего уровня — микроядро), что по TCP (микроядро — интерфейсный клиент).

      Интерфейсные клиенты тоже свои. И никаких облаков.

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

  9. SpiderEkb
    /#22486438

    А есть опыт реализации чего-то полезного?

    Ну, например, энергоэффективное управление отоплением и вентиляцией загородного дома по датчикам температуры, влажности, СО2? В возможностью удаленного мониторинга и корректировки параметров.

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

    Т.е. нормальная автоматизация, а не просто свет по хлопку включать.

    • tmin10
      /#22486476

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

      • SpiderEkb
        /#22486574

        Именно. По уму, все надо выносить на специальные железки, а «верх» только мониторит, контролирует работу железок и позволяет менять их настройки.

        Возможно, я несколько иначе понимаю «умность» дома, но что есть то есть…

    • N0Good
      /#22486560

      Вот как раз в процессе реализации именно такой задачи. Есть котёл на OpenTherm, есть esp8266 с прошивкой и физикой для работы с OpenTherm, теперь есть пара датчиков температуры и влажности. Осталось докупить управляемые электрозаслонки на радиаторы и можно автоматизировать. А с контролем потребления электричества и резервированием уже давно сделано...

      • SpiderEkb
        /#22486748

        Вот это интересно.

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

        Снизить их можно только путем оптимизации по датчикам влажности и СО2. Т.е. вентилировать не по нормативу, а по реальной потребности. Но это потребует отдельной системы мониторинга состояния воздуха в помещениях и управления вентилятором (вытяжкой) как минимум, а возможно, еще и притоком (например, КИВами). Над этим не думали?

        • tmin10
          /#22486760

          А если рекуператор поставить?

          • AmberSP
            /#22487054

            А с ним надо очень считать окупаемость, ибо штука дорогая.

            • tmin10
              /#22487150

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

              • AmberSP
                /#22487780

                Дешевый кривой пластиковый воздуховод двухметровый в леруа стоит 500+ рублей. А надо их много, и крепить надо, и время на это нужно. То есть не рекуператор единый составляет расходы, если мы про дом, а не про квартиру-однушку
                а 15000 — это блауберг шестиваттный. Думаю, кошке его хватит :)

          • SpiderEkb
            /#22488750 / +2

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

            1. Реальную эффективность оценивают где-то процентов в 20.
            2. Стоимость более-менее приличной модели тысяч 50.
            3. Затраты на установку — тут уже не обойдешься простой схемой «приток через комнаты — вытяжка через санузел» — нужна полноценная разводка
            4. В морозы от -20 и ниже многие отмечали обмерзание теплообменника и необходимость его дополнительного подогрева (еще минус в эффективность)
            5. Конденсат, который надо отводить, там в любом случае будет.
            6. Теплобоменник приходится периодически чистить и дезинфицировать.

            В общем, решение спорное.

            Есть более простые — подземный воздуховод достаточной (10-20 метров?) ниже глубины промерзания. Тоже требует разводки по притоку, но приток-вытяжка раздельные что несколько проще. Единственное — воздухозабор нужно выносить вверх, выше 1.5м от земли. Дальше воздух идет под землей где подогревается и потом уже поступает в дом с температурой выше наружной. Менее затратно, но 5-10 процентов эффективности даст.

        • Osnovjansky
          /#22487372

          При этом надо учитывать, какие материалы использованы внутри дома. Например ламинированное ДСП проверяется на фенолы-формальдегиды исходя из единичного воздухообмена (т.е. объем квартиры должен замещаться за 1 час). Какие концентрации будут при меньшей вентиляции — никто не скажет. И так — со всеми строительными материалами.

      • Harwest
        /#22487430

        Электрозаслонки это имеется ввиду головки?
        Закупил Moes (zigbee), идут в комплекте с адаптерами под разную резьбу клапанов, из коробки есть интеграция в НА.

  10. REPISOT
    /#22487032

    Интересно, насколько надежно ставить RPI, учитывая, что он от перегрева страдает?

    • unsignedchar
      /#22487498

      Если не заниматься чем-то тяжёлым типа софтового кодирования видео, то не пострадает.

    • Jack_Vo
      /#22487700

      У меня RPI с питанием через POE работает годами и ничего не перегревается. На нем запущен OpenHAB и TVheadend с несколькими тв тюнерами, который заворачивает DVB-T2 в локальную сеть.

  11. Alecseyyy
    /#22487932

    А почему не использовать majordomo? Он удобнее и проще в настройках, все делается через web интерфейс.
    Если нужна только Алиса то можно просто ESP (можно NodeMCU) с прошивкой EasyEDA + любой MQTT + навык домовёнок Кузя.

  12. barnabyfletcher
    /#22487934

    Есть более удобные решение и более безопасные. Да и правильно отметили, что это уже готовые решения, которые собрали вместе. Потешить себя — норм, прокачать свой скил — сойдет. Повседневное использование — я бы не поставил себе такое.