Raspberry pi умный дом своими руками
Делаем умный дом с нуля. Часть 5 - установка MajorDoMo на Raspberry pi
В прошлой статье мы с вами установили Web-сервер на микрокомпьютер Raspberry pi, и теперь у нас все готово для установки платформы умного дома - MajorDoMo.
Итак, давайте приступим к установке.
Для начала нам нужно подключить питание к микрокомпьютеру и зайти на него удаленно, при помощи программы Putty.
Так как любая установка начинается с загрузки дистрибутива, то нам нужно загрузить дистрибутив MajorDoMo на наш микрокомпьютер.
Давайте сначала создадим папку (директорию), в которую мы будем загружать этот самый дистрибутив. Для этого в командную строку консоли введем следующую команду:
sudo mkdir /home/majordomo
Здесь mkdir - собственно команда на создание папки, а /home/majordomo - папка (полный путь), которую создает эта команда.
Далее, мы переходим в эту папку при помощи команды:
cd /home/majordomo
Здесь cd - это команда, которая изменяет текущую рабочую папку на ту, которая указана после команды.
Теперь мы можем скачать дистрибутив MajorDoMo c githab (он будет загружен в рабочую папку, в которую мы перешли при помощи предыдущей команды). Для этого давайте введем в командную строку следующую команду:
Команда wget позволяет скачать файл, ссылка на который располагается сразу после команды . Если эта команда у вас не работает, то возможно у вас не установлен wget. Установить его можно командой sudo apt-get install wget -y.
Поскольку дистрибутив заключен в zip архив, нам нужно его разархивировать при помощи команды:
sudo unzip master.zip
Здесь unzip - команда, которая извлекает файлы из архива в текущую рабочую папку, а master.zip - архив с MajorDomo, который мы с вами скачали. Если у вас эта команда не работает, то нужно будет установить ее командой sudo apt-get install unzip -y.
Далее, нам нужно перенести разархивированную систему умного дома MajorDoMo в директорию Web-сервера. Делается это при помощи следующей команды:
sudo cp -rp /home/majordomo/majordomo-master/* /var/www
Здесь cp - команда копирования (сокращение от copy). -rp - опции команды cp, означающие следующее: r - копирует как указанный каталог, так и все входящие в него подкаталоги, т. е. сохраняет исходную форму дерева каталогов; р - сохраняет владельца, временные метки и флаги доступа при копировании. /home/majordomo/majordomo-master/* - файл источник (откуда будет копироваться). /var/www - директория приемник (куда будет копироваться).
Предыдущая команда скопировала нам все, кроме скрытого файла .htaccess. Давайте скопируем и его тоже:
sudo cp -rp /home/majordomo/majordomo-master/.htaccess /var/www
Эта команда аналогична предыдущей, только копирует 1 скрытый файл.
Настройка прав на файлы и директории
Для файлов нам нужно выставить права 0644 (все пользователи имеют право чтения; владелец может редактировать). Сделать это можно следующей командой:
sudo find /var/www/ -type f -exec chmod 0644 <> \;
Здесь, мы с помощью команды find ищем в каталоге /var/www/ и его подкаталогах только файлы (о чем нам говорит -type f, где f означает files или файлы), и ко всем найденным файлам применяем команду chmod 0644 (которую в свою очередь запускает команда -exec). Команда chmod собственно и изменяет существующие права на те, которые следуют за этой командой (в нашем случае - 0644).
Для директорий же, нам надо выставить права 0755 (каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать). Эти права выставляются почти аналогичной командой:
sudo find /var/www/ -type d -exec chmod 0755 <> \;
Данная команда, в отличие от предыдущей, работает только с директориями, о чем нам говорит -type d (где d означает directories или директории).
Теперь давайте проверим установленные права командой:
ls -lh /var/www
Права для директорий в выведенном списке должны иметь вид drwxr-xr-x, а для файлов - -rw-r--r-- (директории подсвечены синим цветом):
Если если у вас по какой-то причине система на моменте начального конфигурирования не работает совсем или не работает частично, то проблемы, в большинстве случаев, связаны с неправильно установленными правами.
Меняем права доступа к файлам по принципу: всем-всё.
sudo find /var/www/ -type f -exec chmod 0666 <> \;
sudo find /var/www/ -type d -exec chmod 0777 <> \;
Проверяем права командой:
ls -lh /var/www
Права для директорий в выведенном списке должны иметь вид drwxrwxrwx , а для файлов - -rw-rw-rw- .
В случае если права по какой-то причине не установились, то можно сделать вариант, в котором устанавливаются полные права для всех рекурсивно по директориям и файлам. Команда выглядит так:
sudo chmod -R 777 /var/www
Необходимо заметить, что данный способ, не самый безопасный, но самый простой.
Установка собственника и группы на файлы и директории
MajorDoMo (а именно сервисы: apache и php) работает от пользователя www-data. Права доступа к каталогу /var/www, где лежат файлы Majordomo по умолчанию принадлежат root. Изменим владельца директории /var/www на www-data при помощи следующей команды:
sudo chown -R www-data:www-data /var/www
Здесь, chown - команда, изменяющая владельца и/или группу для указанных файлов (в нашем случае - это директория /var/www, указанная в конце команды). -R означает рекурсивное изменение владельца указанного каталога и всего его содержимого. www-data:www-data - это новый пользователь/группа.
Проверяем собственника рассмотренной ранее командой:
ls -lh /var/www
Вывод этой команды должен быть примерно таким:
Далее, нам нужно предоставить доступ пользователю www-data к медиа устройствам. Для этого его необходимо добавить в группу audio. Делается это следующей командой:
sudo usermod -a -G audio www-data
Команда usermod изменяет учетную запись пользователя (в нашем случае пользователя www-data). Параметр -а (append) этой команды добавляет пользователя в дополнительную группу (в нашем случае в группу audio). Этот параметр используется только вместе с параметром -G.
Проверить, что пользователь www-data появился в группе audio можно командой:
cat /etc/group | grep audio
Команда cat здесь читает данные из файла /etc/group и выводит их на экран. Однако в нашем случае на экран выводятся не все данные, а только те, которые отфильтровывает команда grep, а отфильтровывает она для показа только строчку audio.
Если пользователь www-data был добавлен в группу audio, то вывод этой команды будет примерно следующий:
Создание базы данных
Поскольку платформа MajorDoMo является Web-приложением, все ее данные будут храниться в базе данных MySQL. Давайте эту базу создадим.
Для начала нам нужно открыть какой-нибудь браузер, например Google Chrome. В адресной строке этого браузера нужно ввести адрес:
После того, как мы ввели адрес и нажали кнопку Enter, мы попадаем на страницу ввода логина и пароля phpMyAdmin:
Теперь нам нужно создать базу данных db_terminal. Чтобы ее создать, нажимаем "Создать БД" в левой части окна:
Затем, в поле Имя базы данных вводим db_terminal и нажимаем кнопку Создать:
Сразу после нажатия кнопки Создать, мы переходим в созданную нами базу данных db_terminal. Если перехода не произошло, то нужно в левой части окна выбрать созданную БД, путём нажатия один раз на её название.
В верхней части окна ищем кнопку Импорт, и нажимаем её (у меня окно браузера не развернуто во весь экран, поэтому кнопка Импорт скрыта за кнопкой Еще):
Я этот архив скачал себе на рабочий стол и разархивировал. В разархивированной папке находится нужный нам файл db_terminal.sql:
Переходим в панель управления PhpMyAdmin, и в загрузившейся странице, в разделе "Импортируемый файл" нажимаем кнопку Выберите файл:
Откроется проводник вашего компьютера, в котором нужно выбрать файл db_terminal.sql, о котором мы только что говорили. После выбора, название файла должно отобразиться рядом с кнопкой Выберите файл:
Произойдет импорт базы данных. После успешного импорта должна отобразится строка с подобным текстом:
Теперь необходимо создать пользователя и предоставить этому пользователю права на созданную базу данных. Для этого в левой части окна phpMyAdmin нажимаем на название БД: db_terminal.
Далее необходимо нажать Привилегии в правой части окна вверху:
Будет отображена страница с уже существующими пользователями, которые имеют доступ к этой БД. Для создания нового пользователя необходимо нажать "Добавить учетную запись пользователя" в разделе "Новый".
Здесь мы заполняем поля: Имя пользователя, Пароль, Подтверждение (обязательно запоминаем или записываем):
Перематываем окно немного вниз и проверяем, чтобы была установлена галочка: "Предоставить все привилегии на базу данных "db_terminal".".
Правка основного конфигурационного файла MajorDoMo
После установки MajorDoMo у нас есть только пример конфигурационного файла config.php.sample. Нам нужно скопировать этот пример в рабочий конфигурационный файл config.php . Чтобы произвести копирование, нужно снова перейти в консоль (программа PuTTY) и ввести в командную строку следующую команду:
sudo cp /var/www/config.php.sample /var/www/config.php
Далее, нам нужно владельцем только что созданного конфигурационного файла config.php сделать пользователя www-data:
sudo chown www-data: /var/www/config.php
Теперь открываем файл config.php в редакторе Nano для редактирования:
sudo nano /var/www/config.php
Здесь нам нужно прописать имя пользователя и пароль пользователя базы данных в следующих строчках:
DB_USER - это пользователь, которого мы создали выше
DB_PASSWORD - пароль от этого пользователя
Сохраняем сделанные изменения комбинацией клавиш Ctrl+O, и выходим из редактора Nano комбинацией Ctrl+X. На этом правка конфигурационного файла считается законченной.
Основной цикл
Сначала нам нужно создать файл описание сервиса для запуска основного цикла системы. Создадим мы его в редакторе Nano следующей командой:
sudo nano /etc/systemd/system/majordomo.service
Когда перед нами откроется пустой, только что созданный файл, введем в него следующие данные:
[Unit]Description=MajorDomo daemon
Requires=network.target
After=dhcpcd.service
[Install]
WantedBy=default.target [Service]
Type=simple
ExecStart=/usr/bin/php /var/www/cycle.php
execStop=/usr/bin/pkill -f cycle_*
User=www-data
Group=www-data KillSignal=SIGKILL
KillMode=control-group
RestartSec=1min
Restart=on-failure
Сохраним изменения в файле комбинацией клавиш Ctrl+O, и выйдем из редактора Nano комбинацией Ctrl+X.
Так же необходимо отключить режим "Strict mode" для MySQL (изначально MajorDoMo писался под прошлые версии PHP, MySQL и без отключения режима "строгого соответствия правилам SQL" получим криво работающую систему) . Для этого создадим конфигурационный файл:
sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf
и введем в него следующие две строки (переноса второй строки, как показано ниже, быть не должно, вторая строка единое целое:
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_
FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Далее нам нужно добавить главный цикл в автозагрузку. Сделаем это при помощи следующей команды:
sudo systemctl enable majordomo
Теперь осталось только запустить основной цикл системы:
sudo systemctl start majordomo
Все, система готова к работе, но желательно все же перезапустить микрокомпьютер командой:
sudo shutdown -r now
Давайте попробуем войти в интерфейс MajorDoMo. Для этого нужно перейти в браузер, и в адресной строке набрать ip вашего микрокомпьютера. В моем случае, я набрал 192.168.1.14.
Помотав вниз я насчитал три таких ошибки, и связаны они похоже с базой данных. Под ошибками, в самом низу окна, я увидел нечто похожее на интерфейс MajorDoMo, через который мы можем войти в панель управления, нажав на кнопку Control Panel. Нажимаем на эту кнопку.
В панели управления нужно найти то место, где можно обновить систему. Для этого нажимаем на кнопочку System:
После нажатия у нас раскрывается список, в котором надо выбрать Check updates:
В открывшемся окне нажимаем на Update to the latest code. Галочку на чекбоксе рядом я не ставил и вам пока не советую (у меня после этого остановились все циклы и поднять я их не смог, пришлось переустанавливать все заново).
После обновления системы вы увидите надпись Updates Installed, и теперь можно попробовать перейти в основной интерфейс MajorDoMo, нажав на кнопку Front End.
Как видим, ошибок теперь нет. Вся система работает нормально, о чем нам сигнализируют зеленые значки (я их выделил красным овалом).
Теперь нам нужно настроить русский язык, выбрать временную зону и цветовое оформление. Проще всего это сделать, набрав в адресной строке браузера следующий адрес: ваш_ip/popup/first_start.html (в моем случае 192.168.1.14/popup/first_start.html). После ввода адреса мы попадаем на страницу первоначальной настройки.
Здесь я думаю все понятно. Выбираем свою временную зону, выбираем язык, выбираем тему (темную или светлую) и жмем Continue. Интерфейс у нас теперь стал на русском языке:
Но, через короткий промежуток времени, у меня остановились циклы (значок циклов стал красным).
Без циклов система работать не будет, вся ее работа завязана на циклы. Запускаем циклы снова через консоль:
sudo systemctl start majordomo
После этой команды циклы снова восстановились, но часто начали падать. Причем запускать их приходилось вручную вышеприведенной командой.
Для предотвращения остановки циклов, я сделал автоматический быстрый их перезапуск, если статус меняется на жёлтый или красный. Чтобы реализовать перезапуск, нам нужно создать сценарий и шаблон поведения. Давайте это сделаем.
До создания сценария и шаблона, нам необходимо создать файл restart.sh. Сделаем это в консоли, при помощи редактора Nano:
sudo nano /var/www/restart.sh
Введем в открывшийся файл следующие строки:
sudo systemctl restart majordomo
Сохраняем произведенные изменения комбинацией клавиш Ctrl+O, и выходим из редактора комбинацией Ctrl+X.
sudo chown www-data:www-data /var/www/restart.sh
и права на этот файл:
sudo chmod 755 /var/www/restart.sh
Для того, чтобы этот файл (restart.sh) запускался от пользователя www-data с правами root нужно внести изменения в файл /etc/sudoers. Давайте откроем его в редакторе Nano:
sudo nano /etc/sudoers
перейдем в самый конец документа и вставим следующую строчку:
www-data ALL=(root) NOPASSWD: /var/www/restart.sh
Сохраним произведенные изменения комбинацией клавиш Ctrl+O, и выйдем из редактора комбинацией Ctrl+X.
Далее, нам нужно создать шаблон поведения и сценарий. Сначала мы создадим сценарий. Для этого переходим в панель управления MajorDoMo, нажимаем на кнопку Объекты , в раскрывшемся списке выбираем Сценарии, и в открывшемся окне нажимаем кнопку Добавить новый сценарий:
В открывшемся окне заполняем следующие данные. Название - restart_md. Категория - выбираем Режимы работы. Нажимаем кнопку Добавить.
После нажатия кнопки нам для заполнения открывается еще несколько полей. Выбираем Код - РНР, и в открывшемся поле вводим следующие строчки:
echo shell_exec( 'sudo /var/www/restart.sh' );
say ("Произошло падение системы, произвожу рестарт циклов!", 2);
и внизу страницы нажимаем кнопку Сохранить.
Далее мы создадим шаблон поведения. Для этого переходим в панель управления MajorDoMo, нажимаем на кнопку Объекты, в раскрывшемся списке выбираем Шаблоны поведения, и в открывшемся окне нажимаем кнопку Добавить новую запись:
После этого нам открывается для заполнения еще несколько полей. Ставим галочку в чекбоксе не проверять другие шаблоны при совпадении. В поле Шаблон прописываем: main цикл остановлен. Выбираем Сценарий в разделе Выполнить при совпадении, и в раскрывающемся списке выбираем ранее созданный сценарий restart_md. Далее, нажимаем Сохранить.
После всех проведенных манипуляций мы получаем рабочую систему умного дома Majordomo, которая автоматически восстанавливается в случае падения циклов.
Подключив наушники к микрокомпьютеру, я хотел послушать голосовые оповещения MajorDoMo (а он должен говорить), но ничего не услышал. Решением этой проблемы мы и займемся в следующей статье.
Умный Дом — голосовое управление в три шага. Raspberry + HomeKit
Мы решили поделиться с Вами бюджетным готовым решением, надеемся Вы оцените наши старания. Решение проверенное, рабочее. Во вложении можно скачать все файлы программ и настройки. Отдаем все бесплатно.
Умный дом для заказчика в основном «игрушка» которым можно похвастаться перед друзьями, но эти игры стоят не малых усилий интеграторам!
Речь пойдет о некоторых проблемах и решениях, связанных именно с освещением в доме, как о неотъемлемом блоке «умного дома».
Проблема 1: Если система централизованная, то в случае сбоя центрального контроллера программа не может управлять реле включения света.
Решение: Использовать распределенные модули управления с внутренней логикой, по нашему опыту одним из самых зарекомендовавших себя устройств в этом — программируемое реле ПР200 производства компании ОВЕН. Советуем использовать версию 220в, т.к. бытовые выключатели рассчитаны именно на это напряжение и будет меньше проблем с логической «единицей» на дискретном входе.
Это устройство имеет 8 каналов (реле) которые можно запрограммировать с использованием внутренней логики (как распределенную систему), дополнительно подключаются еще модули расширения 2шт. по 8 каналов, но тут есть риск остаться без большего количество управляемых светильников при выходе из строя самого ПР200 (8 каналов против 24), если соберетесь экономить, подумайте!
Несмотря на то, что программу выглядит просто, к ней мы шли несколько лет не по своей вине, компания Овен относительно недавно (после появления ПР200) добавила возможность управлять сетевой переменной как с наружи, так и изнутри.
Подробнее о программе:
I8 – это дискретный вход с 8 выключателя в доме или комнате
RTRIG – детектор переднего, необходим для формирования единичного (на один цикл программы) импульса
TO INT – преобразования Bool в INT можно было бы и обойтись, но Slave сетевая переменная в Owen Logic не поддерживает bool.
XOR – исключающее или, если на одном входе 1, то и выход 1, если на оба входа подать 1 выход обнулится, основной элемент программы, который решает по нажатию на выключатель включить или выключить свет.
Реле8 – входная и выходная сетевая переменная, как я и говорил выше с недавнего времени можно использовать эти две переменные с одним регистром (адресом) Modbus, это нам дает возможность сохранить в нее необходимое нам состояние как снаружи, так и внутри без использования различных триггеров. Эти сетевые переменные имеют энергонезависимую память, поэтому при скачке напряжения освещение вернется в последнее состояние.
TO BOOL – конвертируем INT в BOOL значение, потому как реле на выходе имеет состояние False/True.
Шаг 1: программу для 8 каналов можно скачать по ссылке в конце статьи и залить в программируемое реле, не забудьте сменить целевую платформу для своей версии ПР200/110 иначе прошить устройство не удастся!
Проблема 2: стандартные бытовые выключатели имеют состояния включен либо выключен, что в корне противоречит логике управления освещением в умном доме, нам нужны кнопки без фиксации (с пружинками).
Решение 1: Использовать готовые кнопки без фиксации, которые есть у большинства производителей выключателей таких как Shneider, Biticino, ABB и др. (рекомендованное решение, хоть кнопки в одном положении и включенных и выключенных ламп это выглядит эстетически красиво)
Решение 2: Отлавливать в ПР200/110 изменение состояния входа при использование типичного бытового выключателя с фиксацией и дальше посылать импульс программе которую скачали выше, если свет был включен то он погаснет и наоборот (не рекомендуется, т.к. через некоторое время все кнопки будут перепутаны верх и низ)
Проблема 3: верхний уровень у большинства производителей систем умного дома не дотягивает до эстетического и функционального совершенства.
Решение: используем HomeKit от Apple, которое: функционально, удобно и есть голосовое управление.
Шаг 2: стыкуем ПР200/110 с HomeKit
Для этого необходимы следующие инструменты:
Решение рекомендованное для демонстраций:
Raspberry Pi 2/3/4 и к нему usb конвертер rs485 (например с Alliexpress)
Решение рекомендованное для инсталляций на базе модуля Raspberry CM3+ в промышленном исполнении c 2 двумя встроенными RS485 портами:
Подключите Ваше устройство на базе Raspberry к питанию и домашней сети желательно патчкордом, а не по wifi.
Соедините RS485 порт Вашего устройства и ПР200/110.
Далее определите IP адрес который выдал Ваш роутер и подключитесь по SSh например через программу PUTTY (по умолчанию логин pi пароль raspberry)
Установите программный продукт node-red для стыковки протокола HomeKit на верхнем уровне и Modbus Rtu на нижнем, смотри инструкцию по установке тут.
Не забудьте сделать Ваш node-red сервисом для автозагрузки.
Установите пакет HomeKit и modbus для node-red
Ждем перезагрузки и переходим в браузер «ВАШ IP»:1880 (например 192.168.1.110:1880)
Копируем следующий поток (код в конце статьи) и вставляем в веб интерфейс «движка» правил node-red
Заходим в Menu -> import -> вставляем код потока
Необходимо применить поток нажав на кнопку Deploy
В случае неудачи советуем правильно указать RS485 порт в настройках Modbus плагина «Запрос модбас» и «Write Reset FC6» (пример /dev/ttyUSB0).
Для достоверности перезагрузите Ваше устройство SSH à sudo reboot
Шаг 3. Настройка приложения на Вашем Apple устройстве довольно простая.
Даем имя нашему дому по желанию, в нашем примере ПР200
Добавляем и соглашаемся использовать несертифицированный аксессуар
Вводим код доступа, в нашем случае 111 11 111, его можно заменить в настройках Node-red в каждом из аксессуаров HomeKit
Добавляем все наши лампы в комнаты, это можно сделать позже.
Желаем Вам приятного использования такой недорогой, но очень удобной системы.
Мы не агитируем к коммерческому использованию протокол HomeKit, любые действия противоречащие лицензионному соглашению APPLE по использованию протокола HomeKit разработчик берет на себя!
Программу для ОВЕН ПР200 и скрипт для NodeRed можно бесплатно скачать тут.
Безумный дом
Мы часто думаем о том, как автоматизировать свое жилище, но часто этот вопрос упирается в то, что готовые системы слишком негибки и дороги, а разбираться, как сделать что-нибудь самому совершенно нет времени.
Под катом - подробный гайд по настройке системы умного дома: сделаем возможным работу устройств ZWave и кастомных MQTT-устройств на базе ESP8266, настроим управление домом при помощи HomeKit и Яндекс Алисы.
Первоначальная настройка Raspberry PI
Установка системы
Headless
Если не хотим подключать монитор
В boot разделе создаем файл с именем ssh(это одноразовый способ: при наличии файла с именем ssh в разделе при старте raspberry sshd запускается и удаляется этот файл, поэтому не забываем в sudo raspi-config включить ssh насовсем)
Теперь при первом запуске у нас будет возможность подключиться к системе по ssh.
Если необходимо подключение к локальной сети посредством wifi, создаем в boot разделе файл wpa_supplicant.conf
Содержимое файла wpa_supplicant.conf
Первый запуск
Вставляем флешку в малину, подключаем ее по ethernet к сети, если не настроили wifi, подаем питание по microUSB, используя блок питания с предельным током как минимум 2 ампера.
Raspberry PI должна загрузить систему, а также подключиться к сети.
Попробуем получить к ней доступ по ssh.
Для этого нам необходимо узнать, какой ip-адрес получила raspberry pi в нашей локальной сети. Вы можете зайти в веб интерфейс маршрутизатора и посмотреть список активных хостов, но я предпочитаю использовать nmap. Выполняю сканирование сети посредством пингования всех ip адресов подсети.
Здесь можно заметить, что кроме самого роутера(192.168.0.1) и моего ПК(192.168.0.105) появился еще один хост 192.168.0.120 - многовероятно, что это и есть наша малина.
Попробуем подключиться. Стандартная пара логин/пароль: pi/raspberry.
Мы успешно вошли по ssh на raspberry pi и теперь можем приступать к дальнейшей настройке системы.
Установка Domoticz
Domoticz - программная система для управления умным домом с открытым исходным кодом. Написана на C++. На хабре я видел статьи про аналоги этой системы, такие как openhub и home assistant, но мой выбор пал на domoticz вследствие того, что эта платформа максимально проста для конфигурирования, а кроме того, написана на C++, что делает ее гораздо менее требовательной к вычислительным мощностям для работы, чем аналоги, использующие java и python. Кроме того, подкупила простая система написания сценариев на Lua или python.
Итак, установим domoticz на наш одноплатник. Установка максимально простая, за что личный респект разработчикам.
После окончания установки и, на всякий случай, ребута, проверяем, что демон domoticz поднялся:
В процессе эксплуатации я заметил, что Domoticz иногда падает с ошибкой. Чтобы поднимать его автоматически, напишу watchdog с помощью cron.
Теперь каждые 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-брокер
Установим свободный MQTT-брокер Mosquitto.
Теперь Mosquitto установлен и работает. Мы можем подключиться к нему без аутентификации по адресу 0.0.0.0:1883. Таких настроек нам хватит на первое время.
Domoticz - MQTT клиент
Подключим domoticz к MQTT-брокеру. В web-интерфейсе Domoticz - Setup -> Hardware.
Type - MQTT Client Gateway with LAN interface.
Remote address - localhost
Data Timeout - disabled
Username и password - оставляем пустыми до лучших времен
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. Нажимаем ее, вводим параметры
Sensor type - Switch
Сохраняем и переходим в меню Switches. Теперь здесь можно увидеть новый переключатель:
Теперь мы можем посмотреть, как изменение переключателя отражается в топике MQTT.
$ mosquitto_sub -h localhost -v -t "domoticz/out"
Мы использовали клиент MQTT, который установили вместе с брокером, и подписались на топик, куда domoticz публикует свои обновления. Нажмем на лампочку в веб-интерфейсе
Программируем собственные IoT устройства на базе Arduino-like контроллеров.
Для реализации данного функционала я использую клон 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 свободных байт, но стало понятно, что модифицировать и усложнять программу, добавлять дополнительную логику в случае этой платы будет затруднительно.
Программировать ESP8266 оказалось сильно проще, так как оперативной памяти здесь на порядок больше.
Отлично! Оба устройства отслеживают изменения значения переключателя в интерфейсе Domoticz, и переключают светодиод соответственно значению переключателя!
Для себя в данный момент я сделал вывод, что гораздо разумнее использовать платы на основе ESP8266, потому что:
нет давящего ограничения по оперативной памяти
цена за комплект Arduino UNO + Ethernet Shield - 1100 руб, а на плату с работающим из коробки WiFi - 400
Таким образом, мы научились управлять собственным WiFi устройством прямо из интерфейса Domoticz, что открывает перед нами гигантские перспективы для автоматизации
Управляем всем через Яндекс Алису
Domoticz как таковой не поддерживает интеграцию с Алисой, потому что для этого необходим работающий навык Алисы и какой-то облачный интерфейс. Поэтому, для работы с Алисой предлагается следующий костыль: к mqtt брокеру, куда domoticz публикует изменения своих статусов, подключить homebridge - средство для подключения умного дома Apple, и передавать команды от Алисе к domoticz через него.
Поставим все необходимое ПО:
Для подключения Homebridge к Алисе я использовал g-on плагин. По ссылке - исчерпывающее описание настройки.
После окончания настройки мы имеем возможность управлять устройствами Domoticz, используя приложение Дом или Алису
Результатом моей работы стала система, обладающая приемлемой стабильностью, способная управлять IoT устройствами без необходимости подключения к интернету, позволяющая интегрировать собственные IoT устройства, работающие в сети WiFi, а также управлять этими устройствами голосовыми командами через Алису, или же с помощью облачного сервиса Apple
Демонстрация работы системы. Торшер подключен к самодельной "умной розетке", состоящей из реле, которым управляет ESP8266. Розетка по MQTT общается с Domoticz
В комментариях к статье развернулось интересное обсуждение, из которого я вынес несколько ценных рекомендаций и решил дополнить статью ссылками на них.
Исправление костыля с watchdog'ом
Большое спасибо автору этой статьи, который показал на примере из моей статьи, что в данном случае более подходящим инструментом для контроля работы domoticz будет systemd. И действительно, systemd снимает с нас необходимость следить за работой демонов, предоставляя гибкий интерфейс для настройки управления ими
Tasmota
Использование готовой прошивки для ESP8266 позволит не писать свой код для нее. Я проверил работоспособность этой прошивки на плате Wemos D1 R32.
Можем посмотреть логи tasmota через монитор последовательного порта
Вводим данные wifi сети и ждем, пока esp8266 не подключится к ней.
Теперь смотрим в логах, какой ip адрес получила esp8266, и снова открываем веб интерфейс, уже используя новый адрес.
Сначала настраиваем MQTT: все оставляем стандартно, кроме логопассов и IP адреса MQTT брокера. После этого настраиваем модуль: выбираем порты, которыми хотим управлять, указываем, что за устройство на них висит: реле, кнопка или что-то еще. После этого настраиваем Domoticz - смотрим, какое idx у dummy device, и записываем его в соответствующее поле. Теперь мы можем управлять этим устройством при помощи domoticz
Делаем умный дом с нуля. Часть 2 - Начальная настройка Raspbian, включение удаленного доступа к Raspberry pi.
Итак, продолжаем создание нашей системы домашней автоматизации.
Сегодня я произведу начальную настройку операционной системы Raspbian, включу SSH и получу удаленный доступ к миникомпьютеру Raspberry pi.
Для решения обозначенных выше задач нужно подключить Raspberry pi к телевизору или монитору при помощи HDMI кабеля, включить телевизор и запитать миниПК от обычного зарядного устройства для смартфонов. Как это сделать я рассказывал в предыдущей статье. Кроме этого, потребуется подключить клавиатуру к любому из четырех USB портов.
Как я уже говорил ранее, удаленно подключиться к Raspberry пока не получится, так как в операционной системе Raspbian по умолчанию отключен SSH.
После подачи питания на плату произойдет загрузка операционной системы, по окончании которой нам будет предложено ввести логин и пароль. Вводим логин - pi, и пароль raspberry (они заданы по умолчанию). Теперь можно вводить команды в командную строку Raspbian.
Для настройки операционной системы нам нужно вывести окно конфигурации. Чтобы его вывести, в командной строке Raspbian надо набрать команду:
После набора команды нажимаем клавишу Enter, и перед нами предстает окно конфигурации:
При помощи первого пункта данного окна можно сменить пароль пользователя.
Также в этом окне я настрою Wi-fi (на Raspberry pi 3 model B+ есть встроенный Wi-fi), локализацию (язык) консоли операционной системы, временную зону, выберу страну для Wi-fi, увеличу размер основного раздела на всю карту памяти, и включу удаленный доступ к миникомпьютеру (включу SSH).
Настройка Wi-fi
Стрелками клавиатуры выбираем пункт 2 Network Options главного окна конфигурации:
В открывшемся окне выбираем пункт N2 Wi-fi:
Далее вводим идентификатор беспроводной сети (переход на кнопку Ok после ввода происходит путем нажатия клавиши Tab на клавиатуре) :
И пароль от выбранной беспроводной сети:
После нажатия кнопки Ok в последнем окне, нас автоматически перебрасывает на главную страницу окна конфигурации. Настройка Wi-fi на этом заканчивается.
Настройка локализации (языка) консоли операционной системы
Стрелками клавиатуры выбираем пункт 4 Localisation Options главного окна конфигурации:
В открывшемся окне выбираем пункт I1 Change Locale:
В следующем окне, нажимая стрелочку вниз на клавиатуре, находим строчку ru_RU.UTF-8 UTF-8. Выбираем ее, нажав пробел на клавиатуре (в скобочках должна появиться звездочка). Затем нажимаем Tab на клавиатуре для перехода к нижним кнопкам, и нажимаем Оk.
Далее, выбираем локализацию по умолчанию. Я выбрал русскую: ru_RU.UTF-8
После применения настроек, нас автоматически перебрасывает на главную страницу окна конфигурации. Теперь русская локализация консоли у нас настроена.
Настройка временной зоны
Стрелками клавиатуры мы снова выбираем пункт 4 Localisation Options главного окна конфигурации:
В открывшемся окне выбираем пункт I2 Change Timezone:
Далее выбираем свой регион
После применения настроек нас перебросит на главную страницу окна конфигурации. Временная зона настроена.
Выбор страны для Wi-fi
Стрелками клавиатуры опять выбираем пункт 4 Localisation Options главного окна конфигурации:
В открывшемся окне выбираем пункт I4 Change Wi-fi Country:
Далее выбираем страну RU Russia:
И подтверждаем свой выбор:
После подтверждения выбора происходит автоматическое возвращение на главную страницу окна конфигурации.
Увеличение размера основного раздела на всю катру памяти
Стрелками клавиатуры выбираем пункт 7 Advanced Options главного окна конфигурации:
В открывшемся окне выбираем пункт A1 Expand Filesystem:
И подтверждаем свой выбор:
Основной раздел увеличен.
Включение удаленного доступа к Raspberry pi (Включение SSH)
Стрелками клавиатуры выбираем пункт 5 Interfacing Options главного окна конфигурации:
В открывшемся окне выбираем пункт P2 SSH:
Далее выбираем Yes или Да:
И подтверждаем свой выбор:
После подтверждения происходит возврат на главную страницу окна конфигурации. Теперь SSH у нас включен.
На этом начальную настройку операционной системы Raspbian можно считать законченной, и можно выйти из окна конфигурации. Для этого мы нажимаем клавишу Tab на клавиатуре, чтобы перейти к нижним кнопкам, и выбираем Finish.
Нам будет предложено перезагрузить систему, что мы и сделаем, нажав кнопку Yes или Да.
После перезагрузки может потребоваться выключить, а потом включить питание платы, иначе удаленный доступ может не заработать (по крайней мере так было у меня, после перезагрузки все работает отлично).
Теперь мы можем удаленно зайти на Raspberry pi с другого компьютера или ноутбука.
Как это сделать, а так же как настроить статический ip адрес, я расскажу в следующей статье.
Прогрессивная система Raspberry Pi 3 умный дом своими руками: особенности, достоинства и недостатки
Перечень достижений человека постоянно пополняется новыми разработками. Выдающейся можно назвать разработанную человеком популярную сегодня опцию «Умный дом» на мини-компьютере Raspberry Pi.
Перечень достижений человека постоянно пополняется новыми разработками. Выдающейся можно назвать разработанную человеком популярную сегодня опцию «Умный дом» на мини-компьютере Raspberry Pi.
Упоминаемая система после своего выхода на рынок практически сразу влюбила в себя многих владельцев домов. Именно поэтому спрос на систему «умный дом» на Raspberry pi стал активно возрастать с каждым годом. Хотите выяснить, чем так уникален Raspberry pi 3 умный дом и почему именно эту систему сегодня во многих домах устанавливают? Изучите нижеизложенный материал.
Что представляют собой проекты Raspberry pi 3 для дома и зачем они нужны?
Система «умный дом», которую изобрела компания Raspberry Pi, позволяет контролировать абсолютно все в доме: начиная от включения света и отопительной системы и заканчивая активацией систем, которые имитируют присутствие в доме человека.
Слаженная работа всех звеньев системы базируется на датчиках и спецконтроллерах, которые реагируют на движения, шум, а также энергию.
Система умный дом от известной многим компании «Raspberry Pi» столь востребована сегодня благодаря тому, что она может легко собираться, как простой конструктор. Функционировать он может при этом на разных ядрах. Одной из наиболее покупаемых сегодня является система, функционирующая на базе мини-компьютера Raspberry.
Изначально компания предложила две комплектации мини-компьютеров – модель А и модель В. Модель А располагала объемом памяти в 256 Мб, а модель В могла сохранять в два раза больше информации. Но модель с небольшим объемом памяти не сняли с производства потому, что она позволяла пользователю выходить в Интернет. Позже была обновлена модель В. Новый её вариант отличался более компактным дизайном и располагал 4 USB-портами.
Как система функционирует?
Структура системы может быть разной. Но обычно построение её происходит по такому принципу: главным является центральное вычислительное устройство (его еще называют сервером). В качестве центрального системного сервера выступает Raspberry Pi, на который устанавливается WEB-интерфейс. Последний может легко связываться с ноутбуком, планшетом либо же смартфоном.
Сервер связывается с периферийными спецмодулями посредством RS485 – интерфейса. Чтобы система слаженно работала, в каждом ключевом помещении домовладения всегда устанавливают спецконтроллер, задача которого – интерпретировать поступающие сигналы и отправлять их на устройства бытовой техники, которые в этой связи являются устройствами-исполнителями.
Обычно модуль Raspberry Pi связывается с контроллерами через порт UART. К последнему следует подключать такое согласующее устройство, как спецпереходник на интерфейс RS485 (следует подчеркнуть, что последние модели устройства уже располагают этим интерфейсом, так как его подразумевает базовая комплектация).
«Операционкой» является Raspberry, спутником которой может быть расширение, например, Pimatic. Совсем несложно собрать спецсистему «умный дом» на «открытой платформе», к примеру, openHAB, Fhem, SHC. Также популярной продолжает оставаться платформа wiButler.
Модули, которые можно выбрать для выстраиваемой своими руками системы «умный дом»
Чтобы выстроить спецсистему и сделать ее максимально функциональной, потребуются особые модули. Для тех, кто любит мастерить и хочет создать Raspberry pi 3 умный дом своими руками, предлагаются сегодня такие модули, как:
Читайте также: