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"
.
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