• 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: 2 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect