В данной публикации рассмотрено пошаговое решение небольшой задачи: контроль за состоянием замка входной двери.
Решение основано на системе домашней автоматизации MajorDoMo, с использованием беспроводного протокола zigbee и Open Source проекта zigbee2mqtt.
Используемое оборудование: одноплатный компьютер Rasberry Pi 3b, USB стик Sonoff Zigbee 3.0 USB Dongle Plus с заводской прошивкой, датчик открытия дверей и окон Xiaomi MiJia Door and Window Sensor.
Статью постарался сделать максимально простой и доступной для понимания и повторения, вмешательство в конструкцию двери и датчика постарался минимизировать, насколько это получилось оставляйте мнение в комментариях.
Для чего сделано решение – во-первых, контроль самого себя. Возможно, решение пригодится для людей проживающих или с небольшими, но уже самостоятельными детьми или с пожилыми родственниками, и те и другие могут страдать некоторой забывчивостью.
Кстати, второе применение, ради чего я это затеял: скоро лето, каникулы, потом новый учебный год, мой младший сын 8 лет, пойдёт учится во вторую смену, что б контролировать состояние замка и в случае забывчивости, Умный Дом, напомнил б ему звонком на телефон, что стоит вернуться и закрыть дверь.
Установка Операционной Системы Raspberry OS на мини компьютер
С сайта разработчика Raspberry Pi www.raspberrypi.com/software скачиваем и устанавливаем программу для установки образа ОС на карту памяти Raspberry Pi Imager. Запускаем выбираем тип ОС: Choose OS -> раздел меню Raspberry Pi OS Other -> Raspberry Pi OS Lite 32bit (версия операционной системы без графического интерфейса); выбираем хранилище (карту памяти) и переходим в настройки (значок шестеренки).
Необходимые установки: Enable SSH (включить доступ по SSH), Set username and password (Рекомендую использовать имя пользователя, стандартное для одноплатных компьютеров – pi) , по необходимости указываем беспроводную точку доступа и пароль к ней, страну и временную зону.
Записываем образ на карту памяти.
После записи, устанавливаем карту памяти и включаем малинку. Входим через SSH доступ используя указанные ранее логин (pi) и пароль. Обновляем ОС:
sudo apt-get update && sudo apt-get upgrade -y
Установка скриптом системы домашней автоматизации MajorDoMo и сервиса zigbee2mqtt
Для установки MajorDoMo на Raspberry Pi существует довольно много способов. Я предлагаю, воспользоваться скриптом от автора, ссылка на скрипт установки для RPi.
По ссылке доступно описание установки, устанавливаемые сервисы и программное обеспечение.
Скрипт устанавливает как саму систему автоматизации, так и ряд сервисов. Для решения задачи нам необходим zigbee2mqtt.
Выполняем команду запуска скрипта и выбираем необходимые опции установки:
sudo curl -s https://raw.githubusercontent.com/sergejey/majordomo-rpi-install/main/install.sh | bash && bash ~/majordomo-rpi-install/install.sh
Значения по умолчанию можно подставить клавишей enter.
Краткий перечень опций:
Установка модуля ab-log RPI4Poe, у меня нет этого оборудования, этот пункт пропускаю.
Ввод пароля для Базы Данных (по умолчанию пользователь root, пароль rootpsw)
Установка Master или Alfa версии, мастер версия – более стабильная и надежная, альфа – гораздо чаще происходят обновления и добавление новых функций.
Установка работы БД в ОЗУ, для оптимизация ресурсов карты памяти, при этом База Данных сохраняется один раз в 15 минут на карту памяти.
Homebridge – устройств Apple у меня нет, пропускаю.
Установка сервер баз данных Redis.
Установка сервиса синтезатора речи RHVoice, может занять очень длительное время, если он вам не нужен, то можно его не устанавливать.
Установка сервиса zigbee2mqtt – в нашем случае необходимый пункт.
Сервис zigbee2mqtt позволяет взаимодействовать серверу с установленной системой домашней автоматизации, с устройствами zigbee разных производителей и без необходимости использования родных шлюзов от производителей устройств УД. В качестве шлюза выступает USB стик Sonoff ZBDongle USB Zigbee 3.0 Dongle Plus-P.
Ссылка на сайт проекта zigbee2mqtt
После окончания отработки скрипта и установки всех пакетов не спешим перегружаться.
Если у вас не подключен USB-zigbee стик, подключаем его к USB порту RPi и определяем на каком порту он появится (пример запроса и вывода):
ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Feb 21 04:24 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_2a3eef417dc9eb11a0c98f4f1d69213e-if00-port0 -> ../../ttyUSB0
Переходим к редактированию конфигурационного файла сервиса zigbee2mqtt:
nano /opt/zigbee2mqtt/data/configuration.yaml
В секции serial устанавливаем наш порт, определённый ранее, и сохраняем файл. Сейчас можно перегрузить малинку.
Sudo reboot
После перезапуска заходим в веб интерфейс zigbee2mqtt набрав IP адрес мини компьютера и порт 8080.
IP_address:8080/
Проведём сопряжение первого устройства домашней сети. Разрешим подключение устройств в веб интерфейсе и с помощью тонкого инструмента (например иголки) нажмём на скрытую кнопку сопряжения датчика.
Через непродолжительное время у нас появляется первое устройство в сети zigbee:
Можем зайти на страницу устройства и посмотреть сведения о нём и его параметры:
Немного о датчике открытия/закрытия Xiaomi MiJia Door and Window Sensor
Датчик состоит из двух частей, собственно, сам датчик и магнитная часть.
Размеры: Основная часть имеет 4 см в длину и 2см в ширину, глубина — 1,1 см.
Магнитная часть — 2,6 см с длину и 1 см ширина
На одной из узких сторон основного датчика имеется отверстие кнопки сопряжения, и выемка для открытия датчика. Для совмещения датчика и магнита, на длинной боковой части каждого, имеется риска. Для работы, их необходимо разместить этими сторонами друг к другу.
Принцип работы датчика довольно простой: датчик реагирует на состояние контактов — разомкнуто/замкнуто. По умолчанию, для этого служит нормально открытый геркон. При приближении магнита — геркон замыкается.
На странице устройства в zigbee2mqtt мы можем увидеть состояние датчика. В первую очередь нас интересует состояние контакта устройства: contact = true закрыт, false – открыт.
Поэкспериментировав, выясняем опытным путем, максимальное расстояние от магнита, на котором замыкаются контакты геркона — около 2 см.
Разборка датчика и замена элемента питания CR1632 — сложности не составляет.
Небольшая модернизация датчика
Эта часть задачи была наиболее сложной для меня. Извиняюсь за терминологию и сумбурное изложение, но от теоретической механики и конструкторской деятельности я очень далёк.
Напомню габариты датчика основной блок — 21×41×11 мм.
У меня стандартная, немного устаревшая металлическая входная дверь с двумя замками – сувальдный (верхний) и цилиндрический врезной (нижний) с классическим прямоугольным засовом (ригелем). Сувальдным в основном пользуется, когда все уходят из дома, если дома кто то есть, то обычно запираем на нижний замок.
Решил, датчик и система автоматизации будут контролировать нижний замок.
Ход засова около 20 мм, его размеры: 12 мм – ширина, и 35 мм высота. Размеры прямоугольного выреза в торце коробки 13×40 мм.
Напрямую датчик несколько великоват по длине, однако если его немного наклонить под углом, то он свободно проходит в отверстие для засова в дверной коробке.
Из подручного материала сделал небольшую конструкцию для установки.
Принцип действия я б назвал – «маятник». Датчик размещается в полости дверной коробки и свободно висит на креплении, к ближней к замку металлической стенки коробки устанавливается вторая (меньшая) часть датчика – магнит. Для удобства я вынул магнитный цилиндр из корпуса. При закрывании замка ригель физически отодвигает (толкает) датчик от магнита и состояние датчика становится true, при открытии, датчик возвращается в исходное положение и значение меняется на противоположное.
В дверной коробке чуть выше отверстия под засов просверливаем сквозное отверстие для крепежа конструкции.
Для крепления датчика я решил использовать небольшую пластиковую стяжку. Выбор стяжки обусловлен двумя факторами: эластичность и рифлёная поверхность, которая достаточно крепко удерживает датчик. Отверстие для замка стяжки использую для крепления на болт, саму стяжку острым концом чуть прихватил клеем, и при закрытии пластикового корпуса датчика получилась довольно надежная фиксация стяжки корпусом. Для удобства замены батареек и обслуживания дополнительно сделал типа «страховку от падения», в корпусе датчика имеется два маленьких отверстия, к ней привязал прочную нитку и сделал кольцо.
Регулируя расположение или заменив сам магнит, можем настроить срабатывание датчика на один или два оборота.
В итоге, у меня получилась такая конструкция (корпус магнитной части я решил не использовать, только магнит):
Настройка и добавление устройства zigbee в MajorDoMo
Открываем страницу системы домашней автоматизации MajorDoMo, набрав в строке браузера адрес своего мини компьютера: IP_address_RPi.
После первоначальной установки настроек языка и временной зоны переходим на главное окно системы MJDM. Имеется несколько устройств по умолчанию, сейчас они нам не нужно, в будущем их можно безболезненно удалить.
Переходим в панель управления.
При наличии обновлений обновляем систему MajorDoMo.
Далее подготавливаем нашу систему к добавлению датчика открытия замка.
Открываем следующий раздел: Панель управления – Устройства – Простые устройства и добавляем новое простое устройство (ПУ):
Придумываем ему название (я обозвал просто — Замок), для отображения в нашей системе автоматизации, выбираем тип – датчик открытия/закрытия, Связанный объект (создаётся автоматически) и выбираем местоположение (несколько комнат, в т.ч. и коридор есть в системе по умолчанию).
После сохранения появляются дополнительные настройки простого устройства:
Основное — установить тип устройства\сенсора, возможные варианты normal close и normal open.
Также во вкладке интерфейс можем вывести отображение нашего устройства на главную сцену.
Обращаем внимание, иконка изображения датчика не меняется.
MajorDoMo – модульная система, для взаимодействия с разным оборудованием требуется установить соответствующий модуль. Для связи с zigbee устройствами есть два модуля zigbeeDev и zigbee2mqtt. Я буду использовать модуль zigbeeDev, при установке системы и сервиса Zigbee скриптом, он должен установиться автоматически, ели вдруг у вас он не установлен, то добавляем вручную модуль zigbeedev использую путь: Панель управления – дополнения – Zigbeedev.
Перейдём к настройке модуля ZigbeeDev: меню управления – устройства -устройства ZigbeeDev.
В первую очередь нужно указать в настройках модуля правильный путь получения данных:
В строке MQTT topics устанавливаем значение zigbee2mqtt/#.
Сохраняем, и переходим на главное окно модуля, спустя непродолжительное время, видим наши устройства zigbee сети:
Перейдём к нашем датчику замка, открываем вкладку Данные:
Выделяем поле данных contact и в правом окне привязываем физическое устройство к ранее созданному нами логическому простому устройству Openclose01 – Замок. В поле свойство выбираем Status, сохраняем.
После этого можем перейти на главную страницу нашей системы MajorDoMo, если при настройке простого устройства (датчика открытия), вы добавляли устройства на сцену, можно увидеть срабатывания датчика и изменения его статуса.
На этом эту часть заканчиваю, отмечу время на установку и настройку системы составило менее двух часов.