• 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
messaggi pir troppi

PIR, troppi messaggi
#1
Ho implementato uno script semplice semplice, in caso di rilevamento da parte del pir, mi accende un led che un giorno diventerà altro, contemporaneamente manda un msg tramite telegram.
Lo script in python funziona, solo che ad ogni rilevamento manda 4-5 messaggi (print compresi), come faccio a limitarlo ad uno solo ? Forse posso filtrare l'ingresso del pin ? E' un opzione dello stesso ? Grazie x l'aiuto

#!/usr/bin/python
import requests
import time
import RPi.GPIO as GPIO
import bluetooth
from signal import pause
from gpiozero import MotionSensor
from gpiozero import LED
GPIO.setmode(GPIO.BCM)

sensore = MotionSensor(4)
led5 = LED(5)

token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # token personale
testonoti="ALLARME"

print"Pronto!"

while 1:

        sensore.wait_for_motion()
        print"Motion detected!"
       requests.get('http://api.rpinotify.it/notification/{}/text/{}'.format(token, testonoti)) #invio msg telegram
        led5.on()
        time.sleep(1)
        led5.off()
Risposta
#2
ma while 1 è un loop infinito
Heart Libro  | Blog EnricoSartori.it | Idea YouTube
Se un utente ti è stato utile, aumenta la sua reputazione! premi il Pollicione! 
Risposta
#3
Le righe
Codice:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
Non servono a nulla, usi già gpiozero per il GPIO.
Così come altre librerie che importi ma non usi.
Non serve nemmeno il ciclo while, se usi gpiozero con wait for motion.
È indispensabile leggere la documentazione per imparare a usarlo al meglio.
Risposta
#4
(02/10/2017, 17:26)Zzed Ha scritto: Le righe
Codice:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
Non servono a nulla, usi già gpiozero per il GPIO.
(Adesso l'ho capito, grazie)

Così come altre librerie che importi ma non usi.
(quelle perchè ho copiato il file da un altro mio progetto e le ho lasciate x l'ampliamento futuro)

Non serve nemmeno il ciclo while, se usi gpiozero  con wait for motion.
(grazie)

È indispensabile leggere la documentazione per imparare a usarlo al meglio.
(essendo in Inglese ho un pò di difficoltà in certi passaggi)

Se tolgo il ciclo While poi il programma esce ... quindi ci vuole

Forse non mi sono spiegato bene, a me serve il ciclo while, non mi serve un solo allarme, è solo che ogni volta che ho un rilevamento mi partono 4 print consecutivi, perchè ?
Risposta
#5
ti sei spiegato bene, ma.. per fare una citazione:
"ogni volta che vedo un ciclo while infinito, un programmatore si suicida.."
importi signal, ma poi non lo usi.

prova qualcosa tipo questo
Codice:
#!/usr/bin/python
import requests, time, bluetooth
from gpiozero import MotionSensor, LED
from signal import pause

sensore = MotionSensor(4)
led5 = LED(5)
token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # token personale
testonoti="ALLARME"

print"Pronto!"

#main
sensore.when_motion():
   print"Motion detected!"
   requests.get('http://api.rpinotify.it/notification/{}/text/{}'.format(token, testonoti)) #invio msg telegram
   led5.on()
   time.sleep(1)
   led5.off()

signal(pause)
scritto al volo e non testato..

se dovessi avere false segnalazioni, i valori di default della libreria potrebbero non essere adatti a tutti i sensori.
Gli esempi vanno bene, ma ogni cosa va studiata. Come dicevo prima, dalla documentazione di GpioZero, ecco i parametri per la classe MotionSensor:
class gpiozero.MotionSensor(pin, *, queue_len=1, sample_rate=10, threshold=0.5, partial=False, pin_factory=None)
Prova a impostare queque len a 10, ad esempio.
Risposta
#6
Così funziona meglio e senza rimbalzi di msg:
-----------------------------------------------------

#!/usr/bin/python
import requests
import time
from signal import pause
from gpiozero import MotionSensor,LED

sensore = MotionSensor(4)
led5 = LED(5)

token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # token personale di Telegram
testonoti="ALLARME MOTION"

print"Pronto!"

def allarme():
        print"Motion detected!"
        requests.get('http://api.rpinotify.it/notification/{}/text/{}'.format(token, testonoti)) #invio msg telegram
        led5.on()

def no_allarme():
        led5.off()

sensore.when_motion = allarme
sensore.when_no_motion = no_allarme

pause()

----------------------------------------

Poi al led devo sostituire altro, grazieeeeeeeeeeeeeee
Maurizio
Risposta
  


Vai al forum:


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