• 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
non flag funziona che

[Risolto] flag che non funziona
#1
Ciao,
avrei bisogno di "settare" una "flag" da Telegram per poi usarla in un if per spegnere o accendere una parte dello script,
in questo caso voglio che funzioni il PIR ma voglio poter decidere se far scattare o meno una sirena che nell' esempio è un LED:

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

sensore = MotionSensor(4)
led5 = LED(5)
bot = telepot.Bot('xxxxxxxxxxxxxxxxxxxxx')  # token creato dal bot
chat_id = 'xxxxxxxxxxx'                     # chat_id creato dal bot
flag = 0
print"Pronto!"

def allarme():
        print"Motion detected!"
        bot.sendMessage(chat_id,"Allarme PIR")
        if flag == 0:                       # Sirena ON
           led5.on()                             
           time.sleep(2)
           led5.off()
           print"Sirena accesa"
        else:
           print"Sirena spenta"             # Sirena OFF

def no_allarme():
        print"Riposo"
        led5.off()

def handle(msg):
   chat_id = msg['chat']['id']
   command = msg['text']
   print ('Got command: %s' % command)

   if command == '/Ciao':
       bot.sendMessage(chat_id,"Sono attivo!")
   elif command == 'Sirena ON':
       flag = '0'                          # Sirena abilitata
   elif command == 'Sirena OFF':
       flag = '1'                          # Sirena disabilitata
  
bot.message_loop(handle)
print ('Sto ascoltando ...')
bot.sendMessage(chat_id,"Sorveglianza attivata")

sensore.when_motion = allarme
sensore.when_no_motion = no_allarme

while 1:


la "flag" non funziona, la sirena risulta sempre attivata, da ulteriori test ho scoperto che quando mando il comando 'Sirena OFF', entro correttamente nel command corrispondente ma la flag non va a '1'. Ho provato anche con True e False, dove sbaglio ?
Grazie
Maurizio
Risposta
#2
e come vuoi fare per "...voglio poter decidere se far scattare..."?
Heart Libro  | Blog EnricoSartori.it | Idea YouTube
Se un utente ti è stato utile, aumenta la sua reputazione! premi il Pollicione! 
Risposta
#3
sbagli nel considerare la variabile flag come universale. le variabili, all' interno delle funzioni, vivono solo all'interno della funzione stessa, e non sono globali.
In sostanza perchè non passi il valore di flag alla funzione? Esattamente come fai con msg nella funzione handle.
Risposta
#4
(24/11/2017, 13:21)Zzed Ha scritto: sbagli nel considerare la variabile flag come universale. le variabili, all' interno delle funzioni, vivono solo all'interno della funzione stessa, e non sono globali.
In sostanza perchè non passi il valore di flag alla funzione? Esattamente come fai con msg nella funzione handle.

grazie per la dritta, effettivamente la variabile flag và definita come "global", basta aggiungere dopo la riga
Codice:
print ('Got command: %s' % command)


la riga

Codice:
global flag

in questo modo quando la richiamo nella funzione "allarme" l'IF funziona abilitando o meno la sirena

Grazie
Maurizio
Risposta
  


Vai al forum:


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