Настройка системы умного дома на базе ESP8266
Статья еще редактируется
SSH В boot разделе создаем файл с именем 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
# nano /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"
}
доступ по ssh.
сканирование сети посредством пингования всех ip адресов подсети.
# nmap -sn 192.168.0.1/24
Попробуем подключиться. Стандартная пара логин/пароль
# ssh Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
успешно вошли по ssh на raspberry pi и теперь можем приступать к дальнейшей настройке системы.
Установка Domoticz установим domoticz на наш одноплатник. Установка максимально простая
sudo curl -L install.domoticz.com | sudo bash
появится псевдографический диалог установки, в котором будет возможно выбрать порты и протоколы для веб интерфейса, директорию для установки. Лично я оставил исключительно HTTP на 80 порту проверяем, что демон domoticz поднялся:
sudo service domoticz status
проверим, что web интерфейс доступен: http://192.168.0.120/
sudo service domoticz status
Watchdog
Чтобы поднимать его автоматически, напишу 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
sudo crontab -e -u root
каждые 5 минут будет запускаться скрипт, который проверит, работает ли Domoticz и перезапустит его, если это необходимо
Настройка domoticz для работы с устройствами
Теперь, когда система работает и готова к продолжению конфигурирования, можно настроить какие нибудь устройства.
IP-камера
Самое простое, что можно настроить в Domoticz - это камера. Для этого зайдем в web-интерфейсе в Setup -> More options -> Cameras -> Add camera. Вводим данные о своей камере.
У меня возникли сложности с определением picture url, но они решились вот этим сервисом.
После того, как мы сохранили новую камеру, у нас появилась строка в таблице с кнопками, чтобы посмотреть изображение или видео. https://skjm.com/icam/mjpeg_test.php MQTT-брокер собираюсь использовать Arduino с подключением к локальной сети.
В рамках данной сети общепринятым стандартом общения между устройствами является MQTT - протокол, ориентированный для обмена сообщениями по принципу издатель-подписчик.
Для передачи сообщений посредством данного протокола нам необходим MQTT-брокер - своеобразный хаб для сообщений.
Domoticz и IoT устройства выступят в качестве клиентов сети, подключившись к брокеру. Установим свободный MQTT-брокер Mosquitto.
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 которых совпадает с названием, захардкоженым в программу, и выполняя переключения встроенного светодиода в зависимости от нового состояния из сообщения.
Впоследствии переключаться будет не встроенный светодиод, а реле, управляя каким-либо процессом.
https://m.habr.com/ru/post/535838/
pi@raspberrypi:~ $ mosquitto_sub -h localhost -v -t "domoticz/out"