аукцион / FPR / donate / услуги / RSS / распечатать / вход 
Мой мир
Вконтакте
Одноклассники

[14 сентября 2018 | 17 сентября 2018 | 4 октября 2018]

Бот для Телеги с Далласом и Малиновым пирогом

После подключения Dallas DS18B20 к Raspberry я хотел опубликовать данные на своём сайте. Но так как у меня датчик установлен в комнате, то нет смысла публиковать эти данные на моём сайте. Я это сделаю только поле того как у меня в лапах окажется датчик в герметичном корпусе. Тогда я его смогу закрепить на штативе за окном. Пока не пришёл новый датчик руки чесались сделать что-нибудь в в чём был бы замешан температурный датчик и Raspberry. В итоге я натолкнулся на пару статей в которых описывалось создание бота для Телеграма, который работает с датчиками температуры. Но он слишком уж заумный и не поворотливый. Я хотел всё уместить в одном файле и ограничить его только ответом на вопрос о температуре. Без проверок, без прав доступа, бот должен отдавать информацию любому кто это попросит. Можно даже натравить этот бот на групповой чат в котором любой пользователь может узнать температуру. Теоретически можно сделать несколько устройств и раскидать по разным городам. Так же можно сделать тригеры которые будут срабатывать на какие-либо происшествия и самостоятельно писать оповещения в общий чат.

И так, пойдём по порядку. Чтобы написать такой бот понадобится не так много. Во-первых, сама плата Raspberry Pi. Во-вторых, датчик DS18b20 с обвязкой. В-третьих, экаунт Телеги. О том как физически всё соеденить написано в статье Подключение DS18B20 к Raspberry.

В начале требуется создать бота. Для этого ищем другого, зарегистрированного бота с именем @BotFather и нажимаем на кнопку Start.

@BotFather.

После нажатия на кнопку 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.

@SlyCat.

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

Желаю успехов в экспериментах.

Тэги: ИТ, программирование, Raspberry, Питон

Отредактировано:2020-09-07 06:41:26




12 комментариев
Имя: Алексей 🖉
Прикольно. А подсоединить малинку с датчиком к какой-нибудь существующей сети метео-мониторинга?
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Orcinus Orca 🖉
Алексей, да, например, можно подключить к Народному мониторингу.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Алексей 🖉
Вот ещё интересный проект энтузиастов:

http://en.blitzortung.org/cover_your_area.php

Детектирование гроз и ударов молний. Железо, правда, дороговато — ок. 300 евро.
В России покрытие сенсорами только в столичном регионе приемлемое.

А когда через Европу или Штаты проходит грозовой фронт, то по карте очень интересно наблюдать динамику.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Orcinus Orca 🖉
Алексей, да видел такое, но мне это сложно у себя установить.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Алексей 🖉
Много подобных проектов. Они на любой вкус и цвет. Хоть молнии, хоть метео, хоть флайтрадар... Где-то в 50 баксов и несколько кликов уложиться можно. Где-то — надо серьёзно ботанить и с паяльником дружить.

Вообще, конечно, в интересное время живём. Студентам раздолье в плане самоделок и учебных проектов. В моё время покондовее всё обстояло.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Orcinus Orca 🖉
Алексей, с ФлайтРадаром я баловался, мой SDR под него отлично подходит. Но с ним куда интереснее было бы в соседнем городе.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Алексей 🖉
В соседнем — это в каком? В Сибири плотность коммерческого авиатрафика сравнительно небольшая. Тем более, рейсы заточены "под Москву" — с утра вал рейсов на Москву-Питер и обратно, а потом затишье.

А вообще, сигналы ADS-B на обычный штырь принимаются на большом расстоянии. Я ловил самолёты и за 200 км.

ПС. Ты бы включил напоминалку на мыло о новых сообщениях?
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Orcinus Orca 🖉
Алексей, мы в кратере находимся, по этому сложно нормально "увидеть" самолёт. А город рядом — это Емельяново, там аэродром находится и там у нас до недавнего времени стоял нормальный ADS-B подключенный к ФлайтРадару.

Я почту вечером читаю реже чем комменты на сайте.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Алексей 🖉
ИМХО, в Красноярске должны хорошо ловиться сигналы из Емельяново, и со всех бортов, что летят в радиусе сотни км. Это так, навскидку.

Просто бортов там летает не так уж и много в обычное время. Если ловить часов в 6-9 утра, когда прибывают и вылетают московские рейсы, то всю эту толкотню вполне можно отслеживать.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Orcinus Orca 🖉
Алексей, у меня получалось так, что в Емельяново ловилось много, а из дома вообще ничего не ловится. Просто сигнал на частоте 1090 не проходит сквозь гранит, вот их и не слышно из дома.
Комментарий оставлен: 2018-09-17 00:00:00


Имя: Алексей 🖉
Понятно.
Комментарий оставлен: 2018-09-18 00:00:00


Имя: Orcinus Orca 🖉
Алексей, как-то так. Всё, подключил второй датчик и теперь можно мониторить сразу две температуры через бот.
Комментарий оставлен: 2018-09-18 00:00:00



Этот сайт использует файлы cookies, чтобы упростить вашу навигацию по сайту, предлагать только интересную информацию и упростить заполнение форм. Я предполагаю, что, если вы продолжаете использовать мой сайт, то вы согласны с использованием мной файлов cookies. Вы в любое время можете удалить и/или запретить их использование изменив настройки своего интернет-браузера.

Сообщайте мне о замеченных ошибках на: web@orcinus.ru. Все пожелания и советы будут учтены при дальнейшем проектировании сайта. Я готов сотрудничать со всеми желающими. В некоторых случаях, мнение автора может не совпадать с мнением автора! Phone: +7-902-924-70-49.

Top.Mail.Ru
Top.Mail.Ru LiveInternet Rambler's Top100 Яндекс.Метрика