Bot simples do Telegram para receber informações via MQTT

Este bot foi projetado para visualizar informações no servidor mqtt dentro da rede local. Ele pode funcionar no mesmo computador com o servidor mqtt (incluindo Raspberry PI ou similar) ou separadamente. A tarefa de controle remoto não foi definida, apenas o fornecimento de acesso aos dados.





O protocolo MQTT é projetado especificamente para uso em vários dispositivos de automação, é muito fácil organizar telemetria e coleta de dados nele. Este protocolo é compatível com dispositivos domésticos inteligentes e muitos controladores industriais. Existem também muitos projetos em ESP8266, ESP32 ou plataformas semelhantes.





Os dados de telemetria de vários sensores são publicados no servidor mqtt - por exemplo, esta é uma estação meteorológica e termômetros em estufas. Para visualizá-los em uma área de trabalho, costumava fazer um widget, -, . , , . - ICQ , ICQRemote AutoIt Winamp . , - . . , -, .





, -. Python. Windows, - python-telegram-bot paho-mqtt .





ini . TELEGRAM , MQTT / mqtt , ( - , ). mqtt . . alldata, :





{
'greenhouse/1/temp': '24.76',
'greenhouse/1/upd': '22.04 18:20:30',
'greenhouse/2/temp': '22.95',
'greenhouse/3/temp': '28.91',
'air/outdoor/1/temp': '17.32',
'air/outdoor/1/upd': '22.04 18:21:25',
'air/outdoor/1/pressure': '739',
'air/outdoor/1/humidity': '58.3'
}
      
      



tree - . maketree.





def maketree(group, items, path):
    def sep(s):
        return s.split('/', 1)

    head = [i for i in items if len(sep(i)) == 2]
    tail = [i for i in items if len(sep(i)) == 1]
    if len(tail) == 1:
        return group, tail[0]
    gv = groupby(sorted(head), lambda i: sep(i)[0])
    return group, dict([(i, path) for i in tail] + [maketree(g, [sep(i)[1] for i in v], '') for g, v in gv])

      
      



:





{
    "air": {
        "outdoor": {
            "1": {
                "humidity": "58.3",
                "pressure": "739",
                "temp": "17.32",
                "upd": "22.04 18:21:25"
            }
        }
    },
    "greenhouse": {
        "1": {
            "temp": "24.76",
            "upd": "22.04 18:20:30"
        },
        "2": {
            "temp": "22.95"
        },
        "3": {
            "temp": "28.91"
        }
    }
}

      
      



. , 1 tree[greenhouse][1][temp]. , , . .





. - , Long Polling . python-telegram-bot 12.8, 13 - . pip3 install python-telegram-bot==12.8





: , . , get_keyb:





def get_keyb():
    return [[InlineKeyboardButton('', callback_data='1'),
            InlineKeyboardButton('', callback_data='2')]]
 
      
      



, :





keys = {'': '1', '': '2', '': '3'}
      
      



"" , "40"





Opção de diálogo

.





Em princípio, tal bot pode ser usado para controlar algo, por exemplo, publicando comandos nos mesmos tópicos mqtt - isso é limitado apenas pela sua imaginação. Mas então você precisará adicionar autorização e uma lista de contatos. Código de bot completo no GitHub








All Articles