Bot simple de Telegram para recibir información a través de MQTT

Este bot fue diseñado para ver información sobre el servidor mqtt dentro de la red local. Puede funcionar en la misma computadora con el servidor mqtt (incluido Raspberry PI o similar) o por separado. No se estableció la tarea del control remoto, solo la provisión de acceso a los datos.





El protocolo MQTT está diseñado específicamente para su uso en varios dispositivos de automatización, es muy fácil organizar la telemetría y la recopilación de datos en él. Este protocolo es compatible tanto con dispositivos domésticos inteligentes como con muchos controladores industriales. También hay muchos proyectos en ESP8266, ESP32 o plataformas similares.





Los datos de telemetría de varios sensores se publican en el servidor mqtt; por ejemplo, se trata de una estación meteorológica y termómetros en invernaderos. Para verlos en un escritorio, solía hacer un 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"





Opción de diálogo

.





En principio, un bot de este tipo se puede usar para controlar algo, por ejemplo, publicando comandos en los mismos temas de mqtt; esto está limitado solo por su imaginación. Pero luego deberá agregar una autorización y una lista de contactos. Código de bot completo en GitHub








All Articles