Ce bot a été conçu pour afficher des informations sur le serveur mqtt à l'intérieur du réseau local. Il peut fonctionner sur le même ordinateur avec le serveur mqtt (y compris Raspberry PI ou similaire) ou séparément. La tâche de contrôle à distance n'a pas été définie, seulement la fourniture d'un accès aux données.
Le protocole MQTT est spécialement conçu pour être utilisé dans divers appareils d'automatisation, il est très facile d'organiser la télémétrie et la collecte de données dessus. Ce protocole est pris en charge à la fois par les appareils domestiques intelligents et par de nombreux contrôleurs industriels. Il existe également de nombreux projets sur ESP8266, ESP32 ou des plateformes similaires.
Les données de télémétrie de divers capteurs sont publiées sur le serveur mqtt - par exemple, il s'agit d'une station météo et de thermomètres dans les serres. Pour les visualiser sur un bureau, j'avais l'habitude de créer 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 principe, un tel bot peut être utilisé pour contrôler quelque chose, par exemple en publiant des commandes dans les mêmes rubriques mqtt - cela n'est limité que par votre imagination. Mais ensuite, vous devrez ajouter une autorisation et une liste de contacts. Code bot complet sur GitHub