• 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