Мой "умный дом" с мониторингом через Telegram бота

Мониторинг и управление различными домашними устройствами в рамках концепции "умного дома" - одна из "модных" нынче тем. Я опишу свой простейший прототип "умного дома".

В настоящее время в моем "умном доме" реализованы такие функции:

  • мониторинг температуры;
  • получение снимков с веб-камеры.

В качестве центра управления "умным домом" можно использовать нетбук или ноутбук под управление ОС Windows.

Общение с "умным домом" производится через Telegram бота (требуется наличие интернет-подключения, например, через 3G-модем).

Измерение температуры

Для измерения температуры я использую цифровой датчик DS18S20.
Интерфейс этого датчика - однопроводная шина 1-Wire:
DS1820 DS18S20 DS18B20
VCC - + 5 В
GND - земля
DQ - данные

Датчик DS1820 позволяет измерять температуру в пределах - 50...+ 125 °C.

Существуют три разновидности таких датчиков:

Тип Описание
DS1820 устаревший вариант в удлиненном корпусе, маркируется DS1820;
напряжение питания 4,3 - 5,5 В
DS18S20 программно совместим с DS1820, маркируется DS1820, но корпус короче (стандартный TO-92, высота около 5 мм), чем у DS1820;
напряжение питания 3 - 5,5 В
DS18B20 маркируется DS18B20, корпус TO-92; максимальная разрядность значения температуры расширена с 9 до 12 бит;
напряжение питания 3 - 5,5 В

Я подключаю датчик к компьютеру через переходник USB-UART (на микросхеме CP2101):
подключение DS1820 UART

Схема подключения:
подключение 1-Wire к USB

Для снятия показаний датчика я использую программу digitemp.exe (версия 1.7) от Brian C. Lane (сайт проекта).

Сначала необходимо инициализация посредством команды:

digitemp.exe -i -s2 -q -cdigitemp.cfg ,

где 2 - номер COM-порта, к которому подключен USB-UART переходник;
digitemp.cfg - имя создаваемого файла конфигурации

Номер COM-порта можно посмотреть в "Диспетчере устройств":
номер COM порта

При этом производится поиск доступных устройств на шине 1-Wire и отображаются их идентификаторы:
digitemp идентификация

Для снятия показаний датчика температуры я использую команду:

digitemp.exe -a -q -cdigitemp.cfg -o"%%.2C" ,

а результатом ее работы будет текущая температура в градусах Цельсия:
digitemp считывание температуры

Работа с веб-камерой

Для наблюдения за обстановкой в доме можно использовать веб-камеру (встроенную в нетбук/ноутбук или внешнюю, подключаемую через USB).

Для получения снимков с веб-камеры я использую программу RobotEyez.exe от Ted Burke (проект доступен на GitHub).

Для вывода списка камер используется команда:

RobotEyez.exe /devlist ,

результатом которой служит список доступных веб-камер:
RobotEyez список камер

Для сохранения снимка в файл применяется команда

RobotEyez /delay 1 /width 640 /height 480 /bmp /devnum 1

 1 - задержка;
640 - ширина кадра в пикселях;
480 - высота кадра в пикселях;
1 - номер устройства (веб-камеры)

При выполнении этой команды кадр с выбранной веб-камеры сохраняется в файле frame.bmp:
RobotEyez захват с камеры

Telegram бот

Я написал бота на языке программирования Go (golang).

i like golang

Проект доступен на GitHub: https://github.com/Dreamy16101976/home_bot

Предварительно необходимо скачать и установить:

  • компилятор для языка Go, соответствующий разрядности Вашей системы (386 или amd64) - проверено на версии Go 1.9 (страница для скачивания - https://golang.org/dl)
  • пакет Git, соответствующий разрядности Вашей системы (32-bit или 64-bit) - страница для скачивания - https://git-scm.com/download/win

Перед компиляцией проекта необходимо установить дополнительные Go-библиотеки, выполнив команды:

go get github.com/Syfaro/telegram-bot-api
go get golang.org/x/image/bmp

Для компиляции бота необходимо запустить командный файл build.cmd или выполнить команду

go build home_bot.go

При успешном завершении компиляции будет создан файл home_bot.exe  с разрядностью, соответсвующей разрядности установленного компилятора.

Перед запуском бота необходимо запустить команду

digitemp.exe -i -sx -q -cdigitemp.cfg

(x - номер COM-порта, к которому подключен преобразователь UART-COM с датчиком температуры)

для создания файла конфигурации digitemp.cfg следующего вида:

TTY 2
READ_TIME 1000
LOG_TYPE 1
LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F"
SENSORS 1
ROM 0 16 88 11 163 0 8 0 83 

Для запуска бота следует использовать команду:

home_bot -bot XXX:YYY -god ZZZ -cam W,

где XXX:YYY - токен бота;
ZZZ - идентификатор пользователя, которому разрешено общение с ботом;
W - номер используемой камеры.

Для получения токена необходимо обратиться к боту BotFather с командой /newbot, затем задать имя бота (name), а затем имя пользователя для бота (username), заканчивающееся на bot. В результате получаем токен для созданного бота:
создание бота Telegram

Команды бота:

/start - начало общения с ботом:
управление домом через бота

/help - список команд бота:
команды умного дома

/about - информация о боте:
бот умного дома

/temp - получение сведений от температуре:
измерение температуры умного дома
Для получения значения температуры бот запускает командный файл temp.cmd:

digitemp.exe -a -q -cdigitemp.cfg -o"%%.2C"

/cam - получение снимка с камеры:
снимок камеры умного дома
Для получения снимка бот запускает командный файл spy.cmd:

del frame.bmp /Q
del frame.jpg /Q
RobotEyez /delay 1 /width 640 /height 480 /bmp /devnum %1

с параметром, соответствующим номеру используемой камеры.

Продолжение следует

Яндекс.Метрика