TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Fri May 29, 2020 10:05 am

Concordo con il fatto che al momento l'obbiettivo è quello di far funzionare lo script a oltranza anche in caso di errore.
Poi vedremo come trattare i pacchetti persi, anche perchè non è che stiamo parlando di informazioni di vitale importanza.
Anche se dovessi perdere un paio di pacchetti al giorno non è un problema.

Le indentazioni mi sembrano tutte corrette.

Nella gestione dell'errore avevo già tolto il raise (vedi EDIT nel post) e inserito l'istruzione per la cancellazione dell'errore e il pass (non so se sia proprio necessario).

Quello che non ho capito nemmeno dalla documentazione per quanto riguarda la gestione degli errori è se una volta che l'errore è catturato dalla except, il ciclo riprende a lavorare oppure no.
Da quello che ho visto non sembra...

macca
Posts: 151
Joined: Tue Oct 16, 2012 9:14 am

Re: Problema script python stazione meteo

Fri May 29, 2020 10:33 am

TizianoL wrote:
Fri May 29, 2020 10:05 am
Nella gestione dell'errore avevo già tolto il raise (vedi EDIT nel post) e inserito l'istruzione per la cancellazione dell'errore e il pass (non so se sia proprio necessario).
Si beh, non editare post precedenti dopo che sono arrivate le risposte, non è che mi rileggo tutto dall'inizio ogni volta!
Quello che non ho capito nemmeno dalla documentazione per quanto riguarda la gestione degli errori è se una volta che l'errore è catturato dalla except, il ciclo riprende a lavorare oppure no.
Da quello che ho visto non sembra...
Ti ho messo un esempio pratico proprio per dimostrarti che il loop continua a funzionare, se il tuo script non funziona la causa è un'altra. Il consiglio di nicola di non provare cose a caso lette su internet è sempre valido. Bisogna documentarsi e provare.

A questo proposito, visto che mi sembra stiamo girando a vuoto, butta via tutto e ricomincia da capo. Una cosa alla volta, documentandoti e capendo quello che stai facendo. Comincia con il loop, leggi un sensore e scrivi l'output su console, aggiungi un altro sensore, e così via. Per ultimo la connessione al server e il log (se necessario).

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Fri May 29, 2020 10:51 am

macca wrote: Si beh, non editare post precedenti dopo che sono arrivate le risposte, non è che mi rileggo tutto dall'inizio ogni volta!
Si infatti lo avevo editato subito dopo e non c'erano risposte ma evidentemente ci sono dei tempi di pubblicazione che non fanno vedere subito i post.
Ti ho messo un esempio pratico proprio per dimostrarti che il loop continua a funzionare, se il tuo script non funziona la causa è un'altra. Il consiglio di nicola di non provare cose a caso lette su internet è sempre valido. Bisogna documentarsi e provare.

A questo proposito, visto che mi sembra stiamo girando a vuoto, butta via tutto e ricomincia da capo. Una cosa alla volta, documentandoti e capendo quello che stai facendo. Comincia con il loop, leggi un sensore e scrivi l'output su console, aggiungi un altro sensore, e così via. Per ultimo la connessione al server e il log (se necessario).
Mi sono documentato ma alcune cose non le ho trovate e quindi chiedo qui proprio per avere aiuti da persone che hanno esperienza in ambito python e linux.
Sviluppo software da anni, è il mio lavoro, ma so per esperienza che ambienti diversi e linguaggi di programmazione diversi hanno comportamenti che si imparano solo con l'esperienza.

Io penso che il codice di per se sia funzionante. Il problema è che l'host o il provider resettano qualcosa durante la giornata e quindi il problema nasce proprio quando spedisco il pacchetto in quel momento.
Se la gestione dell'errore, così come è stata fatta, permette il proseguimento dello script, avremo risolto il problema a livello codice.

Poi ci sarà da risolvere il problema a livello linux, cioè il fatto che non sempre il batch partiva al reboot. Vedremo successivamente inserendo l'esecuzione in rc.local.

Abbiate pazienza, sembra che non vi ascolto ma non è così.
Grazie ancora
Tiziano.

nicolap8
Posts: 569
Joined: Mon Mar 13, 2017 9:45 pm

Re: Problema script python stazione meteo

Fri May 29, 2020 10:54 am

TizianoL wrote:
Fri May 29, 2020 10:05 am
Anche se dovessi perdere un paio di pacchetti al giorno non è un problema.
Tieni comunque conto che l'errore sulla temporizzazione significa un errore su tutti i valori che da essa dipendono.
Quello che non ho capito nemmeno dalla documentazione per quanto riguarda la gestione degli errori è se una volta che l'errore è catturato dalla except, il ciclo riprende a lavorare oppure no.
Da quello che ho visto non sembra...
La gestione delle eccezioni (handling) serve proprio a garantire che il programma prosegua comunque (o esca ma in maniera pulita). Questa non è una mia opinione ma la regola.

Un esempio, in pseudocodice:

Code: Select all

  prove = 3
  successo = false
  while (prove > 0) :
    try
      x = requests.post(url, data = myobj)
      successo = true
    except Exception as e:
        logger.error(e)
        prove -= 1;
        time.sleep(2)
        
  if (not successo) :
    #fa quel che serve...
Come scrivevo in un precedente messaggio sarebbe meglio usare diversy try/except: uno per l'acquisizione (anche uno per ogni sensore...) e uno per la comunicazione.

Tieni conto che gli errori do comunicazione sono la norma: è strano che non avvengano :D
N

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Fri May 29, 2020 11:07 am

nicolap8 wrote: Tieni comunque conto che l'errore sulla temporizzazione significa un errore su tutti i valori che da essa dipendono.
Le letture dei dati anche se ritardano qualche minuto non è fondamentale.
Generalmente vengono poi raggruppate per ore o addirittura giorni.
Come scrivevo in un precedente messaggio sarebbe meglio usare diversy try/except: uno per l'acquisizione (anche uno per ogni sensore...) e uno per la comunicazione.

Tieni conto che gli errori do comunicazione sono la norma: è strano che non avvengano :D
N
Giusto.
Inizio a scrivere la modifica per la gestione degli errori sui singoli sensori che poi integrerò.

macca
Posts: 151
Joined: Tue Oct 16, 2012 9:14 am

Re: Problema script python stazione meteo

Fri May 29, 2020 11:08 am

TizianoL wrote:
Fri May 29, 2020 10:51 am
Io penso che il codice di per se sia funzionante.
Tu pensi che il codice sia funzionante ma lo hai preso da un tutorial senza, a mio avviso, capire molto di quello che fa, di conseguenza quando si presenta un problema non sai che cosa fare. Usare un tutorial può andare bene per provare velocemente qualcosa ma prima o poi (meglio prima che poi) è necessario capire cosa si sta facendo. Ripeto, butta via tutto e ricomincia dall'inizio un passo alla volta! Sarebbe opportuno provare il codice nei casi di errore (sensore non funzionante, dati sballati, ecc.). Non so se esistono framework per unit test in Python (tipo JUnit per Java per intenderci) ma sarebbe opportuno usarli, anche per piccole cose.
Il problema è che l'host o il provider resettano qualcosa durante la giornata e quindi il problema nasce proprio quando spedisco il pacchetto in quel momento.
Se la gestione dell'errore, così come è stata fatta, permette il proseguimento dello script, avremo risolto il problema a livello codice.
Facile da provare: usa un url fasullo che generi sempre un errore (come quello che ho usato io) e vedi subito.

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Fri May 29, 2020 12:21 pm

macca rispetto le tue opinioni, magari sarebbero le stesso che potrei avere io a parti inverse.
Il codice prima di usarlo a scatola chiusa l'ho studiato per comprenderlo nel suo insieme.
Come premesso, però, nel post iniziale sono alle prime armi sia con il linguaggio che con il sistema operativo e questo mi limita nella comprensione delle eccezioni che si verificano e soprattutto nel modo di gestirle.
Come dicevo prima, vengo dallo sviluppo in ambienti diversi. Ambienti in cui esistono anche molti strumenti in più per il controllo del codice. Forse esistono anche per python e linux ma io non li conosco e quindi chiedo qui, a voi.
Sono pronto a imparare, ma (mi ripeto ancora una volta) molte cose sono dettate dall'esperienza e non si trovano nella documentazione.
Per questo vi ringrazio ancora per supporto che continuate a darmi.

Tornando a noi, il programma è riandato in errore.
Ha scritto in console il semplice messaggio "ERRORE" e nel log l'errore specifico ma lo script si è fermato li.
Nel log scrivo anche la stringa che spedisco alla pagina php (prima di fare la request) e questo è quello che trovo ora nel log:

Code: Select all

2020-05-29 14:00:24,798 INFO __main__ 2020-05-29;14:00:24;16.7388671875;81.24139689513503;101.75816995303754;NW;315;4.512;0.0
2020-05-29 14:00:24,803 ERROR __main__ HTTPConnectionPool(host='meteotiziano.altervista.org', port=80): Max retries exceeded with url: /********.php (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xb4f06190>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
Quindi alle 14:00 è andato in errore e da quel momento non ha fatto più nulla. :cry:

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Fri May 29, 2020 1:29 pm

nicolap8 sulla base del tuo esempio di codice, che effettivamente proseguiva l'esecuzione dello script in caso di errore, ho limitato il try alla sola request e adesso funziona.
Quando intercetta l'errore logga e prosegue.
Giustamente con il try fuori dal loop quando usciva dalla gestione dell'errore proseguiva ma non c'era più nulla da fare perchè era finito fuori dal loop stesso.
Con il try all'interno del loop invece riprende e continua.
Grazie per l'aiuto.
Metto sotto try dedicati anche la lettura dei sensori e poi configuro rc.local per l'esecuzione dello script e vediamo che succede.
Inserirò anche qualche riga di log in più nel codice (che poi toglierò a regime magari).

Vi terrò aggiornati, so che siete curiosi! :D

macca
Posts: 151
Joined: Tue Oct 16, 2012 9:14 am

Re: Problema script python stazione meteo

Fri May 29, 2020 1:42 pm

TizianoL wrote:
Fri May 29, 2020 1:29 pm
Giustamente con il try fuori dal loop quando usciva dalla gestione dell'errore proseguiva ma non c'era più nulla da fare perchè era finito fuori dal loop stesso.
Con il try all'interno del loop invece riprende e continua.
Come sarebbe "con il try fuori dal loop" ?

Il codice che hai postato aveva il try dentro al loop:

Code: Select all

while True:
    try:
        time.sleep(interval)

        #Pull temperature from BME280
        ....

    except Exception as e:
        logger.error(e)
Questo deve funzionare, a meno di errori di indentazione.

Hai cambiato il codice ?

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Fri May 29, 2020 2:13 pm

Oggi, tra una prova e l'altra, si....e non ve l'ho detto. Mi sono dimenticato. :oops:
Ma credo che ci sia stato anche qualche errore di indentazione che probabilmente ho sistemato nelle varie prove che ho fatto.

Scusatemi se sono stato confusionario a tratti ma ancora non mi sono abituato alla sintassi del python, e su listati "lunghi" mantenere l'indentazione non è scontato.

Alla fine nel codice c'erano una serie di errori concettuali che avete individuato ma che io non vedevo nemmeno.

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Sun May 31, 2020 7:00 am

Buongiorno,
grazie a voi sembra che abbia risolto i problemi a livello di codice.
Ho fatto girare lo script per un pò lanciandolo dall'ambiente di sviluppo e si è comportato come volevo:
- Ha loggato tutto il necessario
- Ha gestito gli errori in modo opportuno riprendendo l'esecuzione correttamente
- Ha scritto il file di backup in caso di errore e ha re-inviato i pacchetti persi

Ora ho configurato il file /etc/rc.local inserendo il comando "python3 /home/pi/meteo_sensori.py &" e lo script sta girando ma non sta più scrivendo il log. Precedentemente ho provato anche a usare lo stesso comando ma con sudo.
La libreria usata è quella consigliata, la "logging".
Vi chiedo, è normale che non scriva più il file di log?

Grazie a tutti
Tiziano

nicolap8
Posts: 569
Joined: Mon Mar 13, 2017 9:45 pm

Re: Problema script python stazione meteo

Sun May 31, 2020 9:50 am

TizianoL wrote:
Sun May 31, 2020 7:00 am
Buongiorno,
grazie a voi sembra che abbia risolto i problemi a livello di codice.
Ho fatto girare lo script per un pò lanciandolo dall'ambiente di sviluppo e si è comportato come volevo:
- Ha loggato tutto il necessario
- Ha gestito gli errori in modo opportuno riprendendo l'esecuzione correttamente
- Ha scritto il file di backup in caso di errore e ha re-inviato i pacchetti persi

Ora ho configurato il file /etc/rc.local inserendo il comando "python3 /home/pi/meteo_sensori.py &" e lo script sta girando ma non sta più scrivendo il log. Precedentemente ho provato anche a usare lo stesso comando ma con sudo.
La libreria usata è quella consigliata, la "logging".
Vi chiedo, è normale che non scriva più il file di log?
Dipende!
Da dove glielo fai scrivere... e, se esiste già, dai diritti dei file.

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Sun May 31, 2020 12:58 pm

nicolap8 wrote: Dipende!
Da dove glielo fai scrivere... e, se esiste già, dai diritti dei file.
Ciao e grazie della risposta.
Il log lo scrivo in home/pi e i permessi sono:
-rw-r--r-- 1 pi pi

Devo cambiarli secondo te? Provo ad assegnare permessi completi a tutti gli utenti?

Grazie
Tiziano

nicolap8
Posts: 569
Joined: Mon Mar 13, 2017 9:45 pm

Re: Problema script python stazione meteo

Sun May 31, 2020 1:03 pm

TizianoL wrote:
Sun May 31, 2020 12:58 pm
Il log lo scrivo in home/pi e i permessi sono:
-rw-r--r-- 1 pi pi

Devo cambiarli secondo te? Provo ad assegnare permessi completi a tutti gli utenti?
Ma... almeno le basi di Linux dovresti studiarle.,..
Il motivo probabile per il quale il programma se non parte come root te lo ho scritto in uno dei primi post (e poi un'altra volta ancora)...

Ovviamente senze vedere il sorgente non si possono fare diagnosi certe ma credo che il programma esca PRIMA del loop, a causa di un errore di sicurezza, causato dal tentativo di accesso all'hardware.
N

TizianoL
Posts: 19
Joined: Tue May 26, 2020 8:11 am

Re: Problema script python stazione meteo

Sun May 31, 2020 3:37 pm

nicolap8 wrote: Ma... almeno le basi di Linux dovresti studiarle.,..
Il motivo probabile per il quale il programma se non parte come root te lo ho scritto in uno dei primi post (e poi un'altra volta ancora)...

Ovviamente senze vedere il sorgente non si possono fare diagnosi certe ma credo che il programma esca PRIMA del loop, a causa di un errore di sicurezza, causato dal tentativo di accesso all'hardware.
Non ho detto che il programma non parte come root.
Ho detto il programma gira ma non scrive il log.
Fa tutto tranne scrivere il log.
Quando mi hai chiesto
Da dove glielo fai scrivere... e, se esiste già, dai diritti dei file.
credo ti riferissi al log, giusto?
Le info che ti ho dato sono relative al log.
Lo script è nella stessa cartella del log ed ha i seguenti permessi: -rwxrwxrwx 1 root root

Return to “Italiano”