Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
2.7 kB
1
Indexable
Never
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()
Leave a Comment