• 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
timer luci

Timer Luci
#11
Infatti ho copiato una versione che non era quella finita, pardon.. Il sonno gioca brutti scherzi ?
Codice:
#!/usr/bin/python from gpiozero import LED # importo le librerie import time # importo le librerie import datetime # importo le librerie #impostazioni led = LED(24) # numero di pin GPIO in uso on = "19:30" # orario di accensione off = "07:30" # orario di spegnimento oggi = 000 acc = on #cilco while True: time.sleep(60) # tempo di attesa, controlla l'ora ogni 60 secondi giorno = datetime.datetime.now().strftime("%j") # prendi il giorno t = datetime.datetime.now().strftime("%H:%M") # prendi ora e min correnti if giorno != oggi: # se cambia il giorno acc = "00:00" oggi = giorno if t >= acc and t <off: # se compreso tra accensione e spegnimento.. led.off() # accendi il led/relè else: led.on() acc = on

Però diventa un po' troppo macchinoso.
Ha ragione barbezuan: è più comodo dire
Se è acceso, e se l'ora è > di quella di spegnimento, allora, spegni
Altrimenti è già spento, e se l'ora è >= a quella di accensione, accendi
Risposta
#12
Buongiorno a tutti
ringrazio per la pazienza ma questa cosa proprio non mi entra in testa.
Da quello che ho compreso ho modificato il codice come sotto ma non funziona, potete "aggiustarmelo" ?
grazie

Codice:
#!/usr/bin/python from gpiozero import LED                              # importo le librerie import time                                           # importo le librerie import datetime                                       # importo le librerie #impostazioni led = LED(24)                                         # numero di pin GPIO in uso on  = "23:58"                                         # orario di accensione off = "00:02"                                         # orario di spegnimento #ciclo while True:  time.sleep(30)                               # tempo di attesa, controlla l'ora ogni 30 secondi  t = datetime.datetime.now().strftime("%H:%M")  # prendi ora e min correnti  if t >= on and t <off:                            # se compreso tra accensione e spegnimento..     led.off()                                # accendi il led/relè  else:     led.on()  if t <= off and t >on:                            # se compreso tra accensione e spegnimento..     led.on()                                # accendi il led/relè  else:     led.off()
Saluti
GP

Smile
Risposta
#13
Allora, potremmo certamente scriverti il codice ma non è proprio lo scopo dei Forum, lo scopo è farti arrivare alla soluzione capendo quello che stai scrivendo.
Ora provo a metterti giu un "pseudocodice" per farti capire.
Codice:
if led.stato == acceso: # controllo se led acceso if adesso == ora_off: # è acceso e adesso è l'ora di spegnere led.spegni() # spengo else: # il led è spento if adesso == ora_on: # se adesso è l'ora di accendere led.accendi() # accendo
Spero ti sia d'aiuto per capire, scrivi il codice e postalo se non ti funziona che cerchiamo di capire perchè.

Mandi

Barbezuan
Risposta
#14
buonasera a tutti
ho provato diverse "formule" ma presentavano errore nella definizione di "adesso".
Con questo codice non mi vengono eveidenziati errori ma non funziona, dove sbaglio ?

Codice:
#!/usr/bin/python from gpiozero import LED                                # importo le librerie import time                                             # importo le librerie import datetime                                         # importo le librerie led = LED(24)                                           # numero di pin GPIO in uso ora_on  =   "17:27"                                     # orario di spegnimento ora_off =   "17:29"                                     # orario di accensione while True:    time.sleep(60)                                      #tempo di attesa - controlla l'ora ogni tot secondi    adesso = datetime.datetime.now().strftime("%H:%M")  # prendi ora e min correnti    if led == led.off():                                  # controllo se led acceso        if adesso == ora_off:                           # è acceso e adesso è l'ora di spegnere            led.on()                                    # spengo    else:                                               # il led è spento        if adesso == ora_on:                            # se adesso è l'ora di accendere            led.off()                                   # accendo
Saluti
GP

Smile
Risposta
#15
In questa linea prima di controllare accendi.

Codice:
if led == led.off():

Premetto che non conosco la libreria gpiozero perchè non la uso.
Ma quando tu fai il confronto con una chiamata a funzione, viene eseguita la funzione ed effettuto il confronto con il dato che restituisce.
Detto questo tu fai un confronto di un'oggetto(led) con il ritorno di una sua funzione(led.off()).
Con uno sguardo veloce alla documentazione e con l'interpretazione del mio inglese   Confused  l'oggetto led ha una proprietà che fa al caso tuo "led.is_lit" è True se attivo

PS: https://gpiozero.readthedocs.io/en/v1.3....utput.html

Mandi

Barbezuan
Risposta
#16
Barbezuan
Niente da fare non funziona neanche così.
Concordo sul fatto che si debba capire quello che si sta facendo ma abbiamo entrambe buttato via una giornata che sarebbe stata più proficua se avessi capito traendone le conclusioni da una soluzione funzionante, a mio avviso uno degli scopi di un forum, oltre alla comprensione/formazione, è la condivisione di conoscenza.
Premesso che ho quasi cinquantanni e, seppur di estrazione tecnica, mi sto approcciando ora da completo neofita alla domotica e alla programmazione web, puoi vedere i miei sviluppi guardando il progetto che, partendo da zero, ho sviluppato (facendolo progredire in totale autonomia leggendo e documentandomi sui vari siti di corsi di HTML,etc..),pubblicato e "condiviso" con la community.
Già con la risposta di ZZed ho avuto modo di esplorare tutte le possibilità offerte dal comando strftime (comando prima a me sconosciuto) e provare ad applicarle su codice funzionante verificandone eventuali errori sulle modifiche, questo è, per me, comunque un "insegnamento" che mi ha portato a generare frutti.
Prima di chiedere aiuto sul forum, ho cercato, come per altro, di documentarmi pensando che una funzione così "banale" fosse stata già messa in atto dai più, poiché risulta evidente che il tema non mi entra in testa, una soluzione testata e funzionante puoi renderla disponibile per trasmettere conoscenza ?
grazie
Saluti
GP

Smile
Risposta
#17
Neanche così come?
Hai provato così?

Codice:
#!/usr/bin/python from gpiozero import LED                                # importo le librerie import time                                             # importo le librerie import datetime                                         # importo le librerie led = LED(24)                                           # numero di pin GPIO in uso ora_on  =   "17:27"                                     # orario di spegnimento ora_off =   "17:29"                                     # orario di accensione while True:   time.sleep(60)                                      #tempo di attesa - controlla l'ora ogni tot secondi   adesso = datetime.datetime.now().strftime("%H:%M")  # prendi ora e min correnti   if led.is_lit:                                  # controllo se led acceso       if adesso == ora_off:                           # è acceso e adesso è l'ora di spegnere           led.on()                                    # spengo   else:                                               # il led è spento       if adesso == ora_on:                            # se adesso è l'ora di accendere           led.off()                                   # accendo

Mandi

Barbezuan
Risposta
#18
Ciao
qui sotto il codice da me utilizzato prima e che non funzionava poichè avevo scritto   if led == is_lit: anzichè  if led.is_lit:  


Utilizzando il codice da te proposto modificato solo nella parte relativa all'orario di accensione e sepgnimento, appena avvio il programma il led che ho collegato sul gpio 24 si spegne (nella collocazione definitiva sarebbe luce accesa) e non succede più nulla, stante questa situazione mi rimarrebbe sempre accesa.
Nella shell non mi vengono presentati errori ma non accade nulla ne nella fascia tra i due orari e nemmeno al raggiungimento dei due orari.
La soluzione dell'accensione entro una fascia oraria mi sarebbe funzionale anche a poter gestire degli apparati per un tempo stabilito a un orario stabilito (apertura tapparelle in automatico ad un dato orario e viceversa, se questa opzione dell'accensione in una fascia oraria diventa troppo difficoltosa, un altra opzione che avevo in mente era quella, anche per non gravare troppo sui relè delle schede, dell'utilizzo di un relè passo-passo.
In questo caso necessiterei di attivare per uno/due secondi il GPIO all'orario di accensione e per  uno/due secondi il GPIO all'orario di spegnimento della lampada.



Codice:
#!/usr/bin/python from gpiozero import LED                                # importo le librerie import time                                             # importo le librerie import datetime                                         # importo le librerie led = LED(24) led.on()                                           # numero di pin GPIO in uso ora_on  =   "19:43:30"                                     # orario di spegnimento ora_off =   "19:44:31"                                     # orario di accensione while True:    time.sleep(60)                                      #tempo di attesa - controlla l'ora ogni tot secondi    adesso = datetime.datetime.now().strftime("%H:%M:%S")  # prendi ora e min correnti    if led == is_lit:                                  # controllo se led acceso        if adesso == ora_on:                            # se adesso è l'ora di accendere            led.off()    else:                                               # il led è spento        if adesso == ora_off:                           # è acceso e adesso è l'ora di spegnere            led.on()                                    # spengo                                 # accendo
Saluti
GP

Smile
Risposta
#19
Hai provato così?
Codice:
#!/usr/bin/python from gpiozero import LED                                # importo le librerie import time                                             # importo le librerie import datetime                                         # importo le librerie led = LED(24,False)                                           # numero di pin GPIO in uso ora_on  =   "17:27"                                     # orario di spegnimento ora_off =   "17:29"                                     # orario di accensione while True:   time.sleep(60)                                      #tempo di attesa - controlla l'ora ogni tot secondi   adesso = datetime.datetime.now().strftime("%H:%M")  # prendi ora e min correnti   if led.is_lit:                                  # controllo se led acceso       if adesso == ora_off:                           # è acceso e adesso è l'ora di spegnere           led.off()                                    # spengo   else:                                               # il led è spento       if adesso == ora_on:                            # se adesso è l'ora di accendere           led.on()                                   # accendo

Mandi

Barbezuan
Risposta
#20
Si
Utilizzando il codice da te proposto modificato solo nella parte relativa all'orario di accensione e sepgnimento, appena avvio il programma il led che ho collegato sul gpio 24 si spegne e non succede più nulla, stante questa situazione mi rimarrebbe sempre accesa.
Saluti
GP

Smile
Risposta
  


Vai al forum:


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