на главную
Карта сайта
English version
Вы читаете:

Telegram для электроприборов

Разное
6 лет назад

Telegram управляет электроприборами


Предлагаемый программно-аппаратный комплекс реализует функцию контроля и управления бытовыми и промышленными электронными устройствами и потребителями электроэнергии посредством распространённого интернет-мессенджера Telegram. Аппаратной основой комплекса служит одноплатный мини-компьютер Raspberry Pi или его клон Orange Pi (Banana Pi и другие).

В авторском варианте использован мини-компьютер Orange Pi PC Plus 3, однако программное обеспечение полностью совместимо с любой аналогичной платформой. Решение использовать Orange Pi обусловлено его существенно меньшей стоимостью при равноценных функциональной насыщенности и производительности. Следует признать, что клоны более капризны в установке и настройке операционной системы, однако на деле всё сводится к выбору правильного дистрибутива Linux.

Программная часть построена на технологии Telegrambot API с использованием языка программирования Си. Мессенджер Telegram предоставляет программный интерфейс разработчика, что позволяет воплощать интересные решения на его основе. При этом обеспечивается высокий уровень информационной безопасности.

Порядок разработки следующий. Сначала следует создать собственного бота Telegram. Делают это с помощью специального сервиса @BotFather - "родителя" всех ботов Telegram. Запустив его, заходите в меню Newbot, задавайте название бота (Firstname) и имя пользователя (Username_bot), которое обязательно должно заканчиваться словом bot. После регистрации будет сообщено значение параметра <ID:токен API>, который будет служить системным идентификатором. Проверьте по адресу https://api. telegram.org/bot<ID:token>/getMe доступность зарегистрированного бота, о чём будет свидетельствовать ответ вида

Далее рассмотрим особенности установки и настройки ОС на Orange Pi. Из всего многообразия дистрибутивов, не взирая на личные предпочтения, рекомендуется выбрать Armbian Linux, соответствующий конкретной аппаратной платформе [1]. Иной выбор с большой вероятностью приведёт к программным сбоям в работе отдельных аппаратных модулей или всего устройства в целом.

Образ системы переносится на SD-карту, имеющую объём не менее 8 Гб и класс не ниже 4, с помощью утилиты Win32 DiskImager [2], предназначенной для пользователей Windows, кроссплатформенной Etcher [3] или консольной командой dd в Linux. Работа с интерфейсом первых двух специальных пояснений не требует и сводится к выбору образа ОС и съёмного диска (SD-карты), на который он будет перенесён.

Команда dd выполняется от имени главного администратора root (используя префиксную инструкцию sudo либо непосредственно под учётной записью root) и имеет следующий синтаксис:

dd bs=4M if=/<path>/<os>.img of=/dev/<sdx>,

где <path> - абсолютный системный путь к каталогу, содержащему файл <os>.img (.iso) с исходным образом операционной системы; <sdx> - системное имя съёмного диска. Его можно узнать с помощью графического приложения "Управление дисками" в разделе системного меню "Конфигурация компьютера" или с помощью команд df -h или fdisk -l , выводящих список всех подключённых к системе дисков. Команду выполняют дважды: без подключения съёмного диска и с ним. Новое устройство в списке и будет искомым именем. Номер раздела после имени не указывают, поскольку в общем случае образ содержит несколько разделов и занимает весь объём целевого диска.

Запись образа занимает много времени (десятки минут) и не сопровождается выводом информации о ходе процесса. При желании визуально наблюдать за статусом копирования можно установить утилиту dcfldd [4]. По окончании записи образа рекомендуется выполнить команду sync для сброса кэша записи и размонтирования носителя.

Подготовленную загрузочную SD-карту поместите в слот мини-компьютера и включите его. Если при старте системы происходит сбой загрузки графической оболочки, наиболее вероятная его причина - неспособность применённой SD-карты выполнять запись в файловой системе ext3/4. В этом случае следует заменить её картой другого типа, желательно известного производителя.

Процесс настройки операционной системы с небольшими интуитивно понятными отличиями аналогичен описанному в [5], поэтому подробно на нём не останавливаемся. Для Orange Pi Armbian имя пользователя и пароль по умолчанию одинаковы: opi.

Программная часть устройства реализована с использованием библиотек telebot C Library for Telegrambot API [6], wiringPi [7]. Кроме того, для поддержки Telegram API необходимо установить пакеты json-c и libcurl. Для сборки приложения потребуется CMake версии не ниже 2.6. Установка необходимых пакетов выполняется от имени root последовательностью команд:

Установите также wiringPi в соответствии с инструкциями, имеющимися в [7]. Для этого необходимо наличие в системе пакета git-core. Для Orange Pi SoC h3 последовательность команд для установки wiringPi следующая:

Здесь <url> - путь к библиотеке wiringOP в депозитарии Github:

https://github.com/zhaolei/wi ringop.git

Проверить работоспособность установленной библиотеки можно командой gpio readall.

В результате будет выведен список выводов 40-контактного разъёма миникомпьютера с их наименованиями, соответствием индексам wiringPi и действующими на них логических уровнях напряжения (рис. 1). Затем под учётной записью root нужно скопировать содержимое архива trdc2.zip в каталог /etc. В результате появится каталог /etc/trdc2.

Список выводов

Рис. 1. Список выводов

 

Отметим, что перечисленные далее действия необходимо производить в случае применения "чистой" библиотеки telebot или при желании изменить имя проекта для его дальнейшей модификации. В прилагаемом к статье архиве все необходимые изменения уже внесены. В качестве шаблона <имя_проекта> используется TRDC2.

Для работы удобно пользоваться утилитой mc (Midnight Commander), аналогом Norton Commander для Linux, дополненным необходимыми средствами выполнения функций, специфичных для этой ОС, например, установку прав доступа.

Директорию trdc2 и файл *.pc.in необходимо переименовать в соответствии с именем проекта (<имя_ проекта>.pc.in). Затем скопируйте файлы wiringPi.h в поддиректорию ./include, а wiringPi.c - в ./src

В файле ./CMakeLists.txt произведите следующие изменения:

- укажите параметры проекта в строках

- в секции

добавьте строку   scr/wiringPi.c

- в секции

после последней инструкции include добавьте строку    include/wiringPi.h   и измените параметр DESTINATION в соответствии с именем проекта;

- в файле ./test/CMakeLists.txt измените наименование бота

SET (TEST_NAME <имя_проекта>_bоt) 

SET (TEST_SRC <имя_npoeKTa>_bot.c)

Далее командами 

разместите в директории проекта поддиректорию Build, скомпилируйте и соберите проект под учётной записью root в соответствии с инструкциями, содержащимися в файле README.md из библиотеки. Файл с токеном .token потребуется разместить в директории /etc/<имя_проекта>/Build/test/ перед запуском. Запустите исполняемый файл <имя_проекта>_bot в директории /etc/<имя_проекта>/Build/test командой ./<имя_проекта>_bot.

После запуска приложения (естественно, при наличии подключения к Интернету) снова вызовите @BotFather. Затем перейдите в пункт меню mybots-<BotName>-Edit Commands и в соответствии с секцией проверки условий в процедуре update_cb в файле <имя_проекта>_ bot.c создайте список команд, который имеет формат

Команда1 - Описание 1

Команда2 - Описание 2

...

и должен быть введён в одном сеансе полностью. В рассматриваемом случае список должен выглядеть, как показано в таблице. Описания команд допустимо изменять.

Таблица

Первые три команды предназначены для включения соответствующих исполнительных устройств, следующие три - для их выключения, седьмой командой выключают все устройства одновременно, а командами с восьмой по десятую запрашивают информацию о состоянии управляющих исполнительными устройствами выходов (включён или выключен). Последние три команды служат для получения информации о текущем состоянии контрольных входов.

Следует отметить, что обновление списка команд и появление кнопки "/" в строке ввода мессенджера занимает некоторое время, хотя ручной ввод команд с префиксом "/" и их обработка ботом становятся доступными сразу после их загрузки. После команды /START бот активируется, сообщает об этом и ожидает дальнейших инструкций.

С помощью сервиса @BotFather можно командами меню EditName, EditDescription, EditAbout, EditBotpic соответственно изменить имя бота, его описание, информацию о программе и установить изображение. По адресу t.me/<имя_проекта>_bot можно найти созданный бот и подключиться к нему. Типичный вид интерфейса работающего приложения с выводом сообщений о выполнении команд показан на рис. 2.

Вид интерфейса приложения

Рис. 2. Вид интерфейса приложения

 

Кратко рассмотрим принцип действия программы бота, а также принципы технической реализации устройства. В приложенном к статье файле TRDC2_ bot.c находится исходный текст программы. Комментарии в его начале описывают соответствие индексов wiringPi физическим адресам выводов микроконтроллера. В процедуре main происходит инициализация wiringPi и установка режимов выводов (pinMode). Выводы с индексами 0-2 и 6 назначаются выходами, а с индексами 3-5 - входами. Инструкция pullUpDnControl соединяет входы встроенными в микроконтроллер резисторами с общим проводом или с плюсом питания.

Затем программа считывает токен, инициализирует библиотеку telebot и подаёт напряжение питания на выходные буферы. После этого она переходит в режим ожидания асинхронного вызова (callback).

Асинхронные вызовы обрабатывает процедура update_cb. Её основное назначение - проверка синтаксиса поступившей команды и выполнение соответствующих функций (установки и считывания состояния разрядов портов digitalWrite и digitalRead).

На дисплее, подключённом к Orange Pi, можно наблюдать служебные сообщения и ход обработки запросов (рис. 3). Прекращают выполнение программы бота нажатием сочетания клавиш Ctrl+C.

Служебные сообщения и ход обработки запросов

Рис. 3. Служебные сообщения и ход обработки запросов

 

Выводы мини-компьютера должны быть соединены с исполнительными устройствами и датчиками через узлы гальванической развязки в соответствии со стандартными решениями АСУТП. Развязку по входам реализуют, как правило, с помощью электромагнитных реле, а по выходам - с помощью буферных транзисторных ступеней, си-мисторных оптронов, а при необходимости управления мощной нагрузкой - дополнительных симисторов. На рис. 4 показана схема узла гальванической развязки, содержащего только один входной канал контроля и один выходной канал управления (транзистор VT1, симисторный оптрон U1, мощный симистор VS1 с сопутствующими элементами).

Рис. 4. Схема узла гальванической развязки

 

Наличие буферных узлов обусловлено требованием ограничить суммарный ток, протекающий через выходы GPIO мини-компьютера, значением не более 50 мА. Узел управления питанием (транзистор VT2, резистор R6 и электронное реле U2) может быть общим для всех выходных каналов. Программное управление питанием позволяет предотвратить возможное кратковременное включение исполнительных устройств при подаче питания на компьютер, когда состояние его выходов в общем случае непредсказуемо. Для этого же предназначена цепь R1C1, обеспечивающая дополнительную аппаратную задержку включения питания. Для защиты входа мини-компьютера рекомендуется установка резистора R3.

Одноплатный мини-компьютер помещён в штатный корпус, а реле и оптроны находятся на дополнительной монтажной плате. Весь узел управления и контроля может быть собран в общем корпусе, обеспечивающем необходимую степень защиты от внешних условий.

Особенность клонов мини-компьютера Raspberry Pi - повышенное тепловыделение и отсутствие стандартных средств, предотвращающих их возможное повреждение в результате перегрева. О решении этого вопроса нужно позаботиться самостоятельно. В продаже имеется множество различных теплоотводов, следует заранее приобрести подходящий либо использовать теплоотводы от процессоров старых компьютеров.

Реле могут быть использованы любые малогабаритные с напряжением и током срабатывания, соответствующими параметрам контролируемых цепей. Например, миниатюрные реле РЭС60 исполнения РС4.569.435-02 с рабочим напряжением катушки 12 В и током срабатывания 22 мА. Для контроля цепей переменного тока можно применять реле серии MY4 фирмы Omron.

Для коммутации тока до 1 А при напряжении до 400 В постоянного или до 600 В переменного тока можно пользоваться симисторными оптронами MOC3061, MOC3062, MOC3063 с детектором перехода через ноль или аналогичными. Из них минимальный ток управления (5 мА) имеет оптрон MOC3063. При большой коммутируемой мощности необходимо применять симисторы серии BTA140 или аналогичные с коммутируемым током до 25 А.

Все резисторы - МЛТ или С2-33Н соответствующей мощности. Резисторы входных цепей контроля (на схеме это R3) могут иметь сопротивление 1...3 кОм.

Мини-компьютер питают от любого стабилизированного блока питания напряжением 5 В с допустимым током нагрузки не менее 1 А. Узел коммутации питают от отдельного нестабилизированного блока питания напряжением 5...12 В, который на схеме не показан.

Сопротивление токоограничительных резисторов в цепях излучающих диодов оптронов (R6, R7) указано для напряжения питания 5 В. При другом напряжении их сопротивления следует пересчитать исходя из значений минимального открывающего тока излучающего диода используемых оптронов.

Программа бота находится здесь.

Литература

1. Linux for ARM development boards. - URL: https://www.armbian.com/download/(27.02.2018).

2. Win32 Disk Imager. - URL: https:// sourceforge.net/projects/win32diskimager/(27.02.2018).

3. Etcher. - URL:https://etcher.io/(27.02.2018).

4. Defense Computer Forensics Laboratory Dataset Definition. - URL: http://dcfldd. sourceforge.net/ (27.02.2018).

5. Кутепов И. Микрокомпьютер Rasp-berryPi. - Радио, 2014, № 1, с. 17-21.

6. Telebot C Library for Telegram bot API (telebot-master.zip). - URL: https://yadi.sk/ d/r -DtkA3ST6CL (07.03.2018).

7. WiringOP Library на Orange Pi. GPIO с использованием языка C^ - URL: http:// pcminipro.ru/orangepi/wiringop-wiringpi-na-orange-pi/ (07.03.2018).

От редакции. Программа бота находится по адресу ftp://ftp.radio/ru/pub/2018/ 05/trdc2.zip на нашем FTP-сервере.

На момент подготовки статьи к публикации вопрос о блокировании мессенджера Telegram ещё не был решён.

Автор: Д. Панкратьев, г. Ташкент, Узбекистан