Untitled
unknown
plain_text
2 years ago
2.7 kB
7
Indexable
import telegram
import paho.mqtt.client as mqtt
from telegram.ext import CommandHandler, MessageHandler, Filters, Updater
TELEGRAM_BOT_TOKEN = 'TG_BOT_TOKEN_ПОМЕНЯТЬ'
MQTT_BROKER_IP = '127.0.0.1'
MQTT_BROKER_PORT = 1883
MQTT_TOPIC_1 = '/mypersnal/humidity'
MQTT_TOPIC_2 = '/mypersnal/temperature'
MQTT_TOPIC_3 = '/mypersnal/mode'
bot = telegram.Bot(token=TELEGRAM_BOT_TOKEN)
def start(update, context):
update.message.reply_text('Привет! Этот бот подписан на топик MQTT и отправляет сообщения.(поставьте 40)')
def on_message(client, userdata, message):
global bot
# Приписка
prefix = "Влажность =" if message.topic == MQTT_TOPIC_1 else "Температура ="
# Отправка сообщения с припиской
bot.send_message(chat_id=Твой чат айди тг, text=f"{prefix} {message.payload.decode()}")
def send_user_input(update, context):
# Читаем ввод любого регистра
user_input = update.message.text.lower()
# Защищаем топик от спама любими словами
if user_input == "авто" or user_input == "auto":
mqtt_client.publish(MQTT_TOPIC_3, user_input)
# Сообщение об установке авто режима
update.message.reply_text("Установлен автоматический режим работы.")
elif user_input == "ручной" or user_input == "manual":
mqtt_client.publish(MQTT_TOPIC_3, user_input)
# Сообщение об установке ручного режима работы
update.message.reply_text("Установлен ручной режим работы.")
else:
# Если сообщение не проходит проверку
update.message.reply_text("Я хочу всего лишь 40, поэтому реагирую только на сообщения: 'Авто', 'Ручной', 'Auto', 'Manual'.")
updater = Updater(token=TELEGRAM_BOT_TOKEN, use_context=True)
dispatcher = updater.dispatcher
start_handler = CommandHandler('start', start)
dispatcher.add_handler(start_handler)
user_input_handler = MessageHandler(Filters.text & ~Filters.command, send_user_input)
dispatcher.add_handler(user_input_handler)
# MQTT движуха
mqtt_client = mqtt.Client()
mqtt_client.on_message = on_message
mqtt_client.connect(MQTT_BROKER_IP, MQTT_BROKER_PORT, 60)
mqtt_client.subscribe(MQTT_TOPIC_1)
mqtt_client.subscribe(MQTT_TOPIC_2)
mqtt_client.loop_start()
updater.start_polling()
updater.idle()Editor is loading...
Leave a Comment