Бот для Телеги с Далласом и Малиновым пирогом
После подключения Dallas DS18B20 к Raspberry я хотел опубликовать данные на своём сайте. Но так как у меня датчик установлен в комнате, то нет смысла публиковать эти данные на моём сайте. Я это сделаю только поле того как у меня в лапах окажется датчик в герметичном корпусе. Тогда я его смогу закрепить на штативе за окном. Пока не пришёл новый датчик руки чесались сделать что-нибудь в в чём был бы замешан температурный датчик и Raspberry. В итоге я натолкнулся на пару статей в которых описывалось создание бота для Телеграма, который работает с датчиками температуры. Но он слишком уж заумный и не поворотливый. Я хотел всё уместить в одном файле и ограничить его только ответом на вопрос о температуре. Без проверок, без прав доступа, бот должен отдавать информацию любому кто это попросит. Можно даже натравить этот бот на групповой чат в котором любой пользователь может узнать температуру. Теоретически можно сделать несколько устройств и раскидать по разным городам. Так же можно сделать тригеры которые будут срабатывать на какие-либо происшествия и самостоятельно писать оповещения в общий чат.
И так, пойдём по порядку. Чтобы написать такой бот понадобится не так много. Во-первых, сама плата Raspberry Pi. Во-вторых, датчик DS18b20 с обвязкой. В-третьих, экаунт Телеги. О том как физически всё соеденить написано в статье Подключение DS18B20 к Raspberry.
В начале требуется создать бота. Для этого ищем другого, зарегистрированного бота с именем @BotFather и нажимаем на кнопку Start.
После нажатия на кнопку Start будет выведен список поддерживаемых команд. Нас интересует всего пара. Для начала нужно создать бот. Для этого даётся команда /newbot.
/newbot
После этого BotFather спросит имя создаваемого бота, которое будет отображаться у пользователей. Вы просто впечатаете ответ и отправляете сообщение. После этого будет запрошено уникальное имя для подключения и общения с ботом. После этого будет выдан результат с вашим токеном для HTTP API. Код состоит из цифр, двоеточия и набора символов. Запишите их и никому не давайте.
Теперь перейдём к Raspberry, подключимся к терминалу и установим Telepot для Пайтона.
pip install telepot pip install telepot --upgrade
Дожидаемся установки и обновления. Судя по отзывам у некоторых людей в этом месте начинаются танцы на граблях. Но у меня проблем не возникло и всё заработало с полтычка. Далее начинается творческий процесс написания бота. Прошу обратить внимание на то, что в Пайтоне отступы имеют значение. Перед написанием скрипта и дальнейшим изучением Пайтона очень рекомендую прочитать книжку или пособие по синтаксису этого языка.
Мой скрипт выглядит следующим образом:
#!/usr/bin/python # -*- coding: utf-8 -*- #project: orcinus.ru import sys import time import telepot import os import glob import time from telepot.loop import MessageLoop # load one wire communication device kernel modules os.system('modprobe w1-gpio') os.system('modprobe w1-therm') device_file = '/sys/bus/w1/devices/28-0113163a2b7f/w1_slave' # домашний датчик def read_temp(): f = open(device_file, 'r') temp_raw = f.readlines() f.close() lines = temp_raw equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = int(temp_string) // 1000 return 'Температура ' + str(temp_c) + ' град. Цельсия.' else: temp_c = 'FAULT TEMPERATURE' return temp_c # MAIN PROGRAM def handle(msg): content_type, chat_type, chat_id = telepot.glance(msg) print(content_type, chat_type, chat_id) if content_type != 'text': bot.sendMessage(chat_id, 'Я понимаю только текст.') command = '/none' return else: command = msg['text'].lower() print(command) if command == '/start': bot.sendMessage(chat_id, 'Чтобы узнать температуру набери /temp.') elif command == '/temp' or command == u'/температура': bot.sendMessage(chat_id, read_temp()) TOKEN = 'XXXXXXXXX:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' bot = telepot.Bot(TOKEN) MessageLoop(bot, handle).run_as_thread() print ('Starting module ...') # Keep the program running. while 1: time.sleep(10)
Копируем скрипт на Raspberry в домашний каталог, или куда хотите. Даём права на исполнение и запускаем. Если всё запустилось без ошибок, то в терминале можно будет наблюдить получение ботом сообщений. В этих сообщениях будут мелькать уникальные номера чатов пользователей. При желании их можно сохранить для анализа. Опять же вы никак не сможете увидеть общение вашего бота с пользователями в других местах. По этому рекомендую записывать логи, чтобы их потом анализировать и не оказаться взломанным.
Если вам интресны подобные темы, то задавайте вопросы. Так же я могу расказать как бот себя ведёт в групповых чатах.
Если вы не хотите писать свой, но хотите посмотреть результаты работы реально действующего бота, то добавляйте моего бота к себе в контакты и общайтесь с ним. Моего бота зовут @SlyCatBot.
В реальном же исполнении скрипт для работы бота значительно сложнее, так как в процессе написания и дотачивания всё-же приходится увеличивать сложность.
Желаю успехов в экспериментах.
Тэги: ИТ, программирование, Raspberry, Питон
Отредактировано:2020-09-07 06:41:26
Прикольно. А подсоединить малинку с датчиком к какой-нибудь существующей сети метео-мониторинга?