es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi bot de telegram no puede responder?

Me gustaría utilizar mi Raspberry Pi como estación meteorológica. Por lo tanto, compré un “Debo Sen Rain” y un “Debo Sens BME680”. Como nunca había trabajado con Python antes, copié dos scripts de Internet. Ambos funcionan muy bien. Ayer creé un bot de telegram, que debería enviarme los datos medidos actuales, al enviar “/data” o “/rain”. Así que copié los scripts originales en un nuevo script de Python e inserté el bot. Desafortunadamente, no funciona, pero no puedo encontrar el error.

Aquí está mi código:


#!/usr/bin/python3 # coding: utf8 # telegram import import time, datetime import telepot from telepot.loop import MessageLoop # import os # bme680 import import board from busio import I2C import adafruit_bme680 i2c = I2C(board.SCL, board.SDA) bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug=False) bme680.sea_level_pressure = 971.91 temperature_offset = 0 temperatur = "Temperatur: %0.1f C" % (bme680.temperature + temperature_offset) gas = "Gas: %d ohm" % bme680.gas luftfeuchtigkeit = "Luftfeuchtigkeit: %0.1f %%" % bme680.relative_humidity luftdruck = "Luftdruck: %0.3f hPa" % bme680.pressure messdaten = temperatur + "\n" + gas + "\n" + luftfeuchtigkeit + "\n" + luftdruck # rain import from time import sleep from gpiozero import InputDevice rain = InputDevice(18) while True: if rain.is_active: regen = "Es regnet. Fenster zu!" else: regen = "Es regnet nicht" now = datetime.datetime.now() def action(msg): chat_id=msg['chat']['id'] command = msg['text'] print('Received: %s' % command) if command == '/hi': telegram_bot.sendMessage(chat_id, str("Kuckuck")) elif command == '/data': telegram_bot.sendMessage(chat_id, str(messdaten)) elif command == '/rain': telegram_bot.sendMessage(chat_id, str(regen)) telegram_bot = telepot.Bot('XXX:XXXXXXX') print(telegram_bot.getMe()) MessageLoop(telegram_bot, action).run_as_thread() print('Up and Running...') # Keep the program running. while 1: time.sleep(10)

(Intenté ejecutar el script con el editor de Python “Mu”.)

Muchas gracias por su ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunas cosas que pueden estar causando problemas en el código:

    1. La variable regen en el bucle while para el sensor de lluvia no se está actualizando dentro de la función action donde se verifica /rain. Será mejor mover la verificación del sensor de lluvia dentro de la función action.
    2. Las variables temperatur, gas, luftfeuchtigkeit y luftdruck se establecen una vez fuera de la función action, por lo que los valores no se actualizarán cuando se envíe /data. Estas variables deberían establecerse dentro de la función action.

    Aquí hay una versión actualizada del código que debería funcionar:

    #!/usr/bin/python3
    #coding: utf8
    
    # Importar Telegram
    import time, datetime
    import telepot
    from telepot.loop import MessageLoop
    
    # Importar BME680
    import board
    from busio import I2C
    import adafruit_bme680
    
    i2c = I2C(board.SCL, board.SDA)
    bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug = False)
    bme680.sea_level_pressure = 971.91
    temperature_offset = 0
    
    # Importar sensor de lluvia
    from time import sleep
    from gpiozero import InputDevice
    
    def get_data():
        temperatur = "Temperatura: %0.1f C" % (bme680.temperature + temperature_offset)
        gas = "Gas: %d ohm" % bme680.gas
        luftfeuchtigkeit = "Humedad: %0.1f %%" % bme680.relative_humidity
        luftdruck = "Presión: %0.3f hPa" % bme680.pressure
    
        messdaten = temperatur + "\n" + gas + "\n" + luftfeuchtigkeit + "\n" +  luftdruck
    
        return messdaten
    
    def get_regen():
        rain = InputDevice(18)
        if rain.is_active:
            return "Está lloviendo. ¡Cierra las ventanas!"
        else:
            return "No está lloviendo"
    
    def action(msg):
        chat_id=msg['chat']['id']
        command = msg['text']
    
        print ('Recibido: %s' % command)
    
        if command == '/hi':
            telegram_bot.sendMessage (chat_id, str("¡Hola!"))
    
        elif command == '/data':
            messdaten = get_data()
            telegram_bot.sendMessage (chat_id, str(messdaten))
    
        elif command == '/rain':
            regen = get_regen()
            telegram_bot.sendMessage(chat_id, str(regen))
    
    telegram_bot = telepot.Bot('XXX:XXXXXXX')
    print (telegram_bot.getMe())
    
    MessageLoop(telegram_bot, action).run_as_thread()
    print ('Listo y funcionando...')
    
    # Mantener el programa en ejecución.
    while 1:
        time.sleep(10)
    

    ¡Espero que esto ayude!

Comments are closed.