Мониторинг и управление различными домашними устройствами в рамках концепции "умного дома" - одна из "модных" нынче тем. Я опишу свой простейший прототип "умного дома".
В настоящее время в моем "умном доме" реализованы такие функции:
- мониторинг температуры;
- получение снимков с веб-камеры.
В качестве центра управления "умным домом" можно использовать нетбук или ноутбук под управление ОС Windows.
Общение с "умным домом" производится через Telegram бота (требуется наличие интернет-подключения, например, через 3G-модем).
Измерение температуры
Для измерения температуры я использую цифровой датчик DS18S20.
Интерфейс этого датчика - однопроводная шина 1-Wire:
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):
Схема подключения:
Для снятия показаний датчика я использую программу digitemp.exe (версия 1.7) от Brian C. Lane (сайт проекта).
Сначала необходимо инициализация посредством команды:
digitemp.exe -i -s2 -q -cdigitemp.cfg ,
где 2 - номер COM-порта, к которому подключен USB-UART переходник;
digitemp.cfg - имя создаваемого файла конфигурации
Номер COM-порта можно посмотреть в "Диспетчере устройств":
При этом производится поиск доступных устройств на шине 1-Wire и отображаются их идентификаторы:
Для снятия показаний датчика температуры я использую команду:
digitemp.exe -a -q -cdigitemp.cfg -o"%%.2C" ,
а результатом ее работы будет текущая температура в градусах Цельсия:
Работа с веб-камерой
Для наблюдения за обстановкой в доме можно использовать веб-камеру (встроенную в нетбук/ноутбук или внешнюю, подключаемую через USB).
Для получения снимков с веб-камеры я использую программу RobotEyez.exe от Ted Burke (проект доступен на GitHub).
Для вывода списка камер используется команда:
RobotEyez.exe /devlist ,
результатом которой служит список доступных веб-камер:
Для сохранения снимка в файл применяется команда
RobotEyez /delay 1 /width 640 /height 480 /bmp /devnum 1
1 - задержка;
640 - ширина кадра в пикселях;
480 - высота кадра в пикселях;
1 - номер устройства (веб-камеры)
При выполнении этой команды кадр с выбранной веб-камеры сохраняется в файле frame.bmp:
Telegram бот
Я написал бота на языке программирования Go (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. В результате получаем токен для созданного бота:
Команды бота:
/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
с параметром, соответствующим номеру используемой камеры.
Продолжение следует