Андрей Хожемпо

Котодверь (CatDoor)

Ограничение доступа посторонних домашних животных в дом за счет блокирования двери при отсутствии BLE метки.

catdoor

Реализация

Серверная часть программы осуществляет поиск bluetooth-меток и с учетом силы сигнала (близости) дает сигнал на открытие/блокирование двери.

Функционал разделен на следующие горутины:

  • Bluetooth сканер (tinygo.org/x/bluetooth)
  • Модуль управления дверью. Отработка команда с учетом силы сигнала, mac адреса метки в списке, команд от вебсервера. Учет задержки на закрытие.
  • Модуль взаимодействия с NodeMCU. Прием команд по каналу. Обновление статуса от сенсоров в глобальной переменной (с использование mutex).
  • Веб-сервер. Использование html шаблона (gin-gonic) с условиями. Json выдача статуса.
  • API sender. Периодическая (ticker) передача статуса в формате json на сторонний api сервер. Авторизация по ключу.

Логирование средствами glg (github.com/kpango/glg) и чтение конфиг файла (github.com/kkyr/fig) в формате YAML. Управляемое закрытие критичных горутин по нажатию Ctrl-C (bool канал и sync.WaitGroup). Покрыто тестами в разумных пределах. Mock'и где необходимо. Запушено в виде сервиса.

В железе

Server. Компьютер (raspberry pi или x86 500MHz+) с установленным linux (debian 11 x32 в моем случае) и bluetooth адаптером с поддержкой BLE (low-energy).

NodeMCU. Механизация запора двери и контроль направления прохода реализовано с применением платы nodemcu. Плата подключена к компьютеру через USB, по которому отправляет информацию о статусе сенсоров и работе привода запорного устройства, а также принимает команды на открытие/закрытие.

BLE метка в виде брелка на ошейнике.

Стэк

PET
GO
HTML
CSS
GIT
Arduino (NodeMCU)