Настройка системы умного дома на базе 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"