• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
nidificare ciclo

[Risolto] nidificare ciclo
#1
Buonasera a tutti, sto cercando di mettere in piedi uno script che tramite un bot telegram risponda a diversi comandi e invii a seconda del comando una temperatura piuttosto che un grado di umidità.
Per controllare chi interroga il bot ho messo un botSendmessage che ogni volta mi invia l'id chat di chi invia il comando.
Ora che conosco le idchat di diversi utenti a cui ho dato il permesso di usarlo, vorrei che al posto della idchat mi inviasse il nome del proprietario della id chat.
In poche parole:

Claudio da il comando /temp
nello script la id chat di claudio è stata assegnata ad una variabile 
la funzione individua prima la id chat, poi riconosce il comando inviato e poi invia il risultato a Claudio e a me il messaggio "Claudio ha richiesto la temperatura"
 
Qui un pezzo di codice che mi da errore di sintassi...


Codice:
import os                                                  # import os module import glob                                                # import glob module import time                                                # import time module import telepot import telepot.api import RPi.GPIO as GPIO import subprocess Luca = 398574042 Claudio = 38766353 bot = telepot.Bot('TOKEN DEL BOT') bot.sendMessage(398574042, "Avvio Bot su METEOEPI109 " + "\n" + time.strftime("%a %d %B %Y %H:%M:%S")) MSG = "temperatura" def handle(msg):         chat_id = msg['chat']['id']         if chat_id == str("398574042")                 RIC = "Luca"         text = msg['text']                  if text == '/cpu':                 bot.sendMessage(398574042,chat_id)         elif text == '/temp':                 bot.sendMessage(chat_id, MSG)                 bot.sendMessage(Luca,RIC)         else:                 bot.sendMessage(chat_id, 'Benvenuto! per conoscere la temperatura ad Epinel in questo momento digitare "/temp"')                 bot.sendMessage(398574042,chat_id) bot.message_loop(handle) while 1:         time.sleep(500)
Grazie per l'aiuto!
Risposta
#2
alla riga
Codice:
       if chat_id == str("398574042")
non mancano i due punti finali? { : }

posta l'errore di sintassi, Python è abbastanza chiaro, ti dice la riga interessata e a volte anche il punto, indicandolo con un ^
Risposta
#3
confermo i : mancanti.

in ogni caso, un paio di anni fa anche io usavo telepot ma capitava - poco ma capitava - che mi crashasse anche se inattivo.
non ricordo più l'errore purtroppo.
spero abbiamo fixato qualche bug e adesso sia stabile.



Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
#4
(08/01/2019, 22:44)Zzed Ha scritto: alla riga
Codice:
       if chat_id == str("398574042")
non mancano i due punti finali? { : }

posta l'errore di sintassi, Python è abbastanza chiaro, ti dice la riga interessata e a volte anche il punto, indicandolo con un ^

Un passo avanti! ora l'errore è nella riga sucessiva...


Codice:
  File "botcputempident.py", line 15     RIC= Luca       ^

Lo script è così modificato:
Codice:
import os                                                  # import os module import glob                                                # import glob module import time                                                # import time module import telepot import telepot.api import RPi.GPIO as GPIO import subprocess Luca = 398574042 bot = telepot.Bot('TOKEN') bot.sendMessage(398574042, "Avvio Bot su METEOEPI109 " + "\n" + time.strftime("%a %d %B %Y %H:%M:%S")) MSG = "temperatura" def handle(msg): chat_id = msg['chat']['id'] if chat_id == str("398574042"): RIC= Luca text = msg['text'] if text == '/cpu': bot.sendMessage(398574042,chat_id)   elif text == '/temp':                 bot.sendMessage(chat_id, MSG) bot.sendMessage(Luca,RIC) else: bot.sendMessage(chat_id, 'Benvenuto! per conoscere la temperatura ad Epinel in questo momento digitare "/temp"') bot.sendMessage(398574042,chat_id) bot.message_loop(handle) while 1:         time.sleep(500)

Grazie per la disponibilità!
Risposta
#5
te lo segna il ^
errore di identazione: dopo l'if devi rientrare (identare) le righe della condizione if
stessa cosa la riga
Citazione:bot.sendMessage(398574042,chat_id)

(sempre che non sia l'impaginazione del post a mangiarsele)!
Risposta
#6
(10/01/2019, 14:44)Zzed Ha scritto: te lo segna il ^
errore di identazione: dopo l'if devi rientrare (identare) le righe della condizione if  
stessa cosa la riga  
Citazione:bot.sendMessage(398574042,chat_id)

(sempre che non sia l'impaginazione del post a mangiarsele)!

Strano perché di solito se c'è un errore di identazione lo specifica...
Ora provo
Grazie intanto
Risposta
#7
Buongiorno a tutti, ora lo script funziona perfettamente, c'erano diversi errori ma.... Sbagliando si impara!
Posto il codice per chi, come me, volesse prendere degli spunti.


Codice:
#Avvio di un bot telegram su raspberry #comando /cpu restituisce temperatura cpu #comando /temp restituisce temperatura di un sensore ds18b20 #Controllo errore comando con invio id # OGNI VOLTA CHE QUALCUNO DA UN COMANDO IL BOT INVIA ALLA MIA CHAT ID CHI L'HA MANDATO #L. Charruaz Gennaio 2019 V 2.01 #START import os                                                  # import os module import glob                                                # import glob module import time                                                # import time module import telepot import telepot.api import RPi.GPIO as GPIO import subprocess RIC = "Sconosciuto" Luca = ******* #AL POSTO DEGLI ASTERISCHI METTERE LE CHAT ID Claudia = ******* Gilbert = ******* Joelle = ********* bot = telepot.Bot('[i]TOKEN BOT[/i]') os.system('modprobe w1-gpio')                              # load one wire communication device kernel modules os.system('modprobe w1-therm') base_dir = '/sys/bus/w1/devices/'                          # point to the address device_folder = glob.glob(base_dir + '28-0000056a65ba')[0]             # find device with address starting from 28* device_file = device_folder + '/w1_slave'                  # store the details GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) '''______________________________________________________________________''' time.sleep(240) bot.sendMessage(*MIACHATID*****, "Avvio Bot su METEOEPI109 " + "\n" + time.strftime("%a %d %B %Y %H:%M:%S")) def read_temp_raw():    f = open(device_file, 'r')    lines = f.readlines()                                   # read the device details    f.close()    return lines def read_temp():    lines = read_temp_raw()    while lines[0].strip()[-3:] != 'YES':                   # ignore first line       time.sleep(0.2)       lines = read_temp_raw()    equals_pos = lines[1].find('t=')                        # find temperature in the details    if equals_pos != -1:       temp_string = lines[1][equals_pos+2:]       temp_c = float(temp_string) / 1000.0 -0.5                # convert to Celsius       #temp_f = temp_c * 9.0 / 5.0 + 32.0                   # convert to Fahrenheit       return temp_c#, temp_f def handle(msg):         t =subprocess.check_output(["/opt/vc/bin/vcgencmd","measure_temp"])         chat_id = msg['chat']['id']         text = msg['text']         if text == '/cpu':                 bot.sendMessage(chat_id,t)                 bot.sendMessage(*MIACHATID****,chat_id)         elif text == '/temp':                 globals()['RIC']                 if chat_id == Joelle:                         RIC = "Joelle"                 elif chat_id == Claudia:                         RIC = "Claudia"                 elif chat_id == Gilbert:                         RIC = "Gilbert"                 elif chat_id == Luca:                         RIC = "Luca"                 bot.sendMessage(chat_id, read_temp())                 bot.sendMessage(*MIACHATID***,RIC)                 return(RIC)         else:                 bot.sendMessage(chat_id, 'Benvenuto! per conoscere la temperatura ad Epinel in questo momento digitare "/temp"')                 bot.sendMessage(*MIACHATID**,chat_id) bot.message_loop(handle) while 1:         time.sleep(500)


Buona giornata a tutti
Risposta
#8
utile!
grazie Smile



Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect