• 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
#1
Buongiorno a tutti
premesso che:
  • ho provato a cercare nel forum con esito negativo (chiave Timer o Timer Luci)
  • il mio RP3 è privo di schede RTC ma è sempre connesso a internet
  • ho provato diverse soluzioni prese anche da altri siti con esito negativo
  • il gpio ha cui ho collegato la scheda relè di default è acceso/high
vengo a chiedere aiuto per la fornitura/stesura di un file python che mi consenta di cambiare lo stato di un gpio (in specifico il 24 a cui collegato una scheda relè sulla cui uscita è collegata una lampadina) definendolo con dettaglio di ora,minuti e secondo di attivazione e ora,minuti e secondo di disattivazione

Sono riuscito a fare cose più complicate ma questa proprio non mi riesce  Angry  Angry
Ringrazio fin da ora chi potrà/vorrà aiutarmi
Saluti GP
Saluti
GP

Smile
Risposta
#2
Alla fine, è come fare un led lampeggiante, solo che invece del led avrai un relè, e invece di accenderlo e spegnerlo ogni tot secondi, lo accendi e spegni a una determinata ora.
Ti consiglio, per comodità e modernità, di usare GPIO Zero per comandare i GPIO.
Ne parliamo anche qui
Risposta
#3
Zzed
grazie per la risposta ma ancora nulla di fatto.
avviando lo script di esempio del led lampeggiante, lo stesso funziona e mi fa blinkare un led, se modifico lo script utilizzandone uno, vedi sotto, che include la libreria DateTime e TimeOfDay non succede nulla.
Ci sono alternative che qualcuno ha già utilizzato e che mi consentano di gestire anche minuti e secondi ?
grazie


from datetime import time
from gpiozero import TimeOfDay, LED
from signal import pause

led = LED(24)
morning = TimeOfDay(time(16,55), time(17,05)
morning.when_activated = led.on
morning.when_deactivated = led.off
pause()
Saluti
GP

Smile
Risposta
#4
ciao!

riguardo il quesito non so aiutarti perchè python non è il mio campo però ti devo chiedere gentilmente di inserire il codice nel tag apposito [ code] [/code ] per migliorare la leggibilità.



Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
#5
mm
una cosa tipo
Codice:
import time,datetime,gpiozero       # importo le librerie
led = LED(24)                                          # numero di pin GPIO in uso
on = "16:55"                                              # orario di accensione
off = "17:05"                                             # orario di spegnimento
while True:
    time.sleep(10)                                    #tempo di attesa - controlla l'ora ogni tot 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.on()                                             # accendi il led/relè
    else:
       led.off()                                            # spegni il led/relè
parte tanto brutta?
Risposta
#6
Big Grin 
Zzed
grazie per la dritta, ho dovuto modificare un paio di stringhe poichè così come messa a me non funzionava ma il Tuo aiuto è stato comunque determinante per raggiungere il risultato.
Per chi interessato posto qui sotto il codice funzionante che ho utilizzato.
grazie ancora.

Painbrain
scusa per il post precedente ma non sono molto pratico di messaggi nei forum, ora ho imparato ad usare anche il tag codice  Big Grin  Big Grin

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
on  =   "19:40"                                       # orario di spegnimento
off =   "07:40"                                        # orario di accensione
while True:
   time.sleep(5)                                   #tempo di attesa - controlla l'ora ogni tot 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()                                    # spegni il led/relè


PS: poichè opero con le schede relay il cui principio di funzionamento è invertito (GPIO acceso = rele spento, GPIO spento = rele acceso) ho modificato la stringa inizialmente proposta da

Codice:
if t >= on and t <off:                          #se compreso tra accensione e spegnimento..
      led.on()                                     # accendi il led/relè
   else:
      led.off()                                    # spegni il led/relè
a
Codice:
if t >= on and t <off:                          #se compreso tra accensione e spegnimento..
      led.off()                                     # accendi il led/relè
   else:
      led.on()                                    # spegni il led/relè
Saluti
GP

Smile
Risposta
#7
Incollandolo sul forum, forse l'identazione (rientro) di qualche riga è andata a pallino, però son contento ti sia stato utile.
Risposta
#8
Buonasera a tutti
avevo cantato vittoria troppo presto  Rolleyes  Rolleyes
il time set funziona solo se la fascia oraria rientra nella stessa giornata 00:00-23:59, se la fascia oraria, come mi necessita, scavalla la giornata lo script rimane attivo pe ril controllo ma non attiva l'output.
Ho provato a modificare il parametro gestendo gli orari con AM e PM ma la situazione non cambia, qualcuno ha qualche idea ?
grazie

Quì sotto il codice da me utilizzato
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
on  =   "07:30 PM"                                    # orario di spegnimento
off =   "07:30 AM"                                    # orario di accensione
while True:
   time.sleep(5)                                     # tempo di attesa, controlla l'ora ogni 5 secondi
   t = datetime.datetime.now().strftime("%I:%M %p")  # 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()    
Saluti
GP

Smile
Risposta
#9
Si, certamente se si va a cavallo tra un giorno e l'altro, non si può considerare solo ora e minuti, visto che a mezzanotte si azzerano. Non serve, in questo caso vedere AM e PM (il programma non può sapere che AM viene prima di PM se non lo istruisci). Meglio controllare anche il giorno.
prova così:
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                                    

#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
     on = "00:00"
     oggi = giorno
  if t >= on and t <off:                            # se compreso tra accensione e spegnimento..
     led.off()                                # accendi il led/relè
  else:
     led.on()                                 # spegni il led/relè

Ho messo il tempo a 60 secondi perchè è inutile controllare ogni 5 secondi se è scattato il minuto..
Risposta
#10
@Zzed: non puo fuzionre, on viene impostato a "00:00" al primo ciclo e quindi i accede solo la fascia mattutina.
Io farei il semplice confronto dell'ora in funzione allo stato di "led", cioè se è on aspetto off e viceversa

Mandi

Barbezuan
Risposta
  


Vai al forum:


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