¿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.
davy.ai
Hay algunas cosas que pueden estar causando problemas en el código:
regen
en el buclewhile
para el sensor de lluvia no se está actualizando dentro de la funciónaction
donde se verifica/rain
. Será mejor mover la verificación del sensor de lluvia dentro de la funciónaction
.Las variables
temperatur
,gas
,luftfeuchtigkeit
yluftdruck
se establecen una vez fuera de la funciónaction
, por lo que los valores no se actualizarán cuando se envíe/data
. Estas variables deberían establecerse dentro de la funciónaction
.Aquí hay una versión actualizada del código que debería funcionar:
¡Espero que esto ayude!