- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Postate qui domande o segnalate problemi / bug che riscontrate,
SWPI Plugins
Praticamente troverete una sottocartella in più ("plugins") nella quale potere mettere i vostri moduli personalizzati che verranno caricati da SWPI.
Nella sotto-cartella troverete anche un esempio ( che non viene caricato ) . L'uso è molto banale :
Seguendo l'esigenza di Sandro con le tende da sole supponiamo di averle collegate al pin GPIO 4. Ogni 5 minuti il pluging controllerà l'intensità del vento e alzerà o abbasserà le tende di conseguenza.
E' solo un esempio e ovviamente và ottimizzato ma spero dia una idea dell'uso dei plugin:
class swpi_plugin(threading.Thread): # do not change the name of the class
def __init__(self,cfg):
self.cfg = cfg
threading.Thread.__init__(self)
###################### Plugin Initialization ################
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4, GPIO.OUT)
GPIO.output(4, 0)
###################### End Initialization ##################
def run(self):
log("Starting plugin : %s" % sys.modules[__name__])
while 1:
###################### Plugin run
if globalvars.meteo_data.wind_ave > 15:
GPIO.output(4, 1)
else:
GPIO.output(4, 0)
###################### end of Plugin run
time.sleep(300)
Python è un linguaggio molto semplice da imparare ( non lo conoscevo prima di iniziare a lavorare su SWPI ) .
Per iniziare fatevi una copia del file di esempio chiamandolo per esempio tende.py e a quel punto verrà caricato
Modificate il codice tra le righe con i cancelletti per inizializzare e per gestire il loop principale
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
Utilizzando il plugin spiegato sopra ...invece di controllare il vento , o altro evento ...non si pottrebbe controllare "l'avvenuto scatto della Cam" , e far scattare un qualsiasi gpio?? .
Che interrogazione dovrei fare per sapere che lo "scatto " e' appena avvenuto ??.(mi riallaccio alla mia richiesta fatta qualche tempo fa' )
Grazie Tony ...
Stefano
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Non con questa versione che è asincrona rispetto al ciclo di scatto. Dovresti implementare un pooling.
Vedo magari di aggiungerne uno fisso ma di tipo sincrono.
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
aspettero' fiducioso il tuo intervento...
Ciao ciao
Stefano
ps:quando hai 5 minuti di relax pensa anche a come implementare la possibilita' di mandare i dati al CWOP
byeeee
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Nella cartella pugins c'è il file di esempio :
sync_plugin.py.example
per attivarlo basta rinomnarlo in sync_plugin.py eliminando example :
mv sync_plugin.py.example sync_plugin.py
A quel punto verrà caricato. Per personalizzarlo al solito và modificato il codice tra i cancelletti in tre punti:
Il primo per inizializzare eventuali variabili
il secondo è il codice che viene eseguito prima dell'inizio de ciclo principale
Il terzo viene eseguito dopo il ciclo principale
###################### Plugin Initialization ################
log("Intitializing sync_plug-in " )
# GPIO.setmode(GPIO.BCM)
# GPIO.setwarnings(False)
# GPIO.setup(4, GPIO.OUT)
# GPIO.output(4, 0)
###################### End Initialization ##################
def run_before(self):
log("Running sync plugin [run_before]..")
###################### Plugin run
# if globalvars.meteo_data.wind_ave > 15:
# GPIO.output(4, 1)
# else:
# GPIO.output(4, 0)
###################### end of Plugin run
def run_after(self):
log("Running sync plugin [run_after]..")
###################### Plugin run
# if globalvars.meteo_data.wind_ave > 15:
# GPIO.output(4, 0)
# else:
# GPIO.output(4, 1)
###################### end of Plugin run
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
appena rientro in italia (sabato/domenica)provero' immediatamente
il plugin ...entro la prossima settimana riferiro' .
grazie ancora
stefano
Si prega Accedi a partecipare alla conversazione.
sei stato velocissimo.
Non resta che provare
Grazie mille
Sandro
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
Non ho resistito e ho provato subito il plugin ..
purtroppo a me' blocca l'esecuzione sia dell'invio dati , sia lo scatto cam.
Disattivato il plugin tutto e' ritornato ok , ho notato che nella cartella Plugin c'e' il file __init__.py che e' vuoto , valore 0 (zero) e' giusto cosi' ???
Dai Tony ..che se funzionera' questa cosa ...aprira' un mondo di giochi !!
Ciao Stefano
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Per la stazione in montagna avevo la necessità di svincolare l'invio dei dati a WeatherUndergraund dagli scatti della camera. Volevo l'aggiornamento dei dati a 1 minuto ma non volevo scattare foto ogni minuto per non bruciare prematuramente il CCD. Ecco il plugin. Sono solo 2 righe di codice da inserire tra i cancelletti dell'esempio fornito.
time.sleep(60-datetime.datetime.now().second)
logDataToWunderground(self.cfg.WeatherUnderground_ID,self.cfg.WeatherUnderground_password)
Sotto il file completo
Allegato wunderground.rar non trovato
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
Io ho attivato il plugin modificando solamente questo :
###########################################################################
# Sint Wind PI
# Copyright 2012 by Tonino Tarsi <tony.tarsi@gmail.com>
#
# USB comunication based pywws by 'Jim Easterbrook' <jim@jim-easterbrook.me.uk>
# Please refer to the LICENSE file for conditions
# Visit https://www.vololiberomontecucco.it
#
##########################################################################
"""example plugin."""
import threading
import random
import datetime
import sqlite3
import sys
import subprocess
import sys
import os
import thread
import time
import globalvars
import meteodata
from TTLib import *
import RPi.GPIO as GPIO
class swpi_sync_plugin(object): # do not change the name of the class
def __init__(self,cfg):
self.cfg = cfg
###################### Plugin Initialization ################
log("Intitializing sync_plug-in " )
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4, GPIO.OUT)
GPIO.output(4, 0)
T =0.5
###################### End Initialization ##################
def run_before(self):
log("Running sync plugin [run_before]..")
###################### Plugin run
# if globalvars.meteo_data.wind_ave > 15:
# GPIO.output(4, 1)
# else:
# GPIO.output(4, 0)
###################### end of Plugin run
def run_after(self):
log("Running sync plugin [run_after]..")
###################### Plugin run
# if globalvars.meteo_data.wind_ave > 15:
# GPIO.output(4, 0)
# else:
# GPIO.output(4, 1)
GPIO.output(4, 1)
time.sleep(T)
GPIO.output(4, 0)
###################### end of Plugin run
in pratica dopo il def run_after(self):
mi dovrebbe attivare il gpio 4 per mezzo secondo .
Comunque nel pomeriggio lo riprovo di nuovo , perche' mi sembra di non aver fatto nulla di strano.
Buon pranzo Tony ..alla prossima
Stefano
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
Riprovando il plugin e controllando da terminale esce questo errore :
10.....9.....8.....7.....6.....5.....4.....3.....2.....1.....
[28/04/2013-15:36:42] Checking internet connetion ...
[28/04/2013-15:36:42] Starting sensor reading - Sensor type is : WM918
[28/04/2013-15:36:42] Thread started
[28/04/2013-15:36:42] Opening serial port
[28/04/2013-15:36:42] Serial port open
[28/04/2013-15:36:42] Internet ok
[28/04/2013-15:36:42] Checking internet connetion ...
[28/04/2013-15:36:42] Internet ok
[28/04/2013-15:36:43] Connected with IP : 2.32.18.128
[28/04/2013-15:36:43] Local IP :192.168.1.99 Public IP : 2.32.18.128
[28/04/2013-15:36:43] Config Server running on port 80
[28/04/2013-15:36:43] Starting General WatchDog
dom 28 apr 2013, 15.36.43, CEST
[28/04/2013-15:36:43] System time adjusted from NPT server : europe.pool.ntp.org
[28/04/2013-15:36:46] Mail sent to :tetotex@gmail.com
[28/04/2013-15:36:46] Calculating Meteo data and statistics
[28/04/2013-15:36:48] Deleting file from Canon PowerShot S45 (normal mode)
[28/04/2013-15:36:49] loading plugins
[28/04/2013-15:36:49] Loading sync plugin
Traceback (most recent call last):
File "swpi.py", line 662, in <module>
import plugins.sync_plugin as pls
File "/home/pi/swpi/plugins/sync_plugin.py", line 48
def run_before(self):
^
IndentationError: unexpected indent
alla linea 48 c'e' questo:
def run_before(self):
log("Running sync plugin [run_before]..")
Per ora e' tutto..
Stefano
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Python non ha parentesi o altro per delimitare i blocchi di codice ma usa l'indentazione che deve sempre esser la stessa su tutto il modulo.
Il codice corretto è :
###########################################################################
# Sint Wind PI
# Copyright 2012 by Tonino Tarsi <tony.tarsi@gmail.com>
#
# USB comunication based pywws by 'Jim Easterbrook' <jim@jim-easterbrook.me.uk>
# Please refer to the LICENSE file for conditions
# Visit https://www.vololiberomontecucco.it
#
##########################################################################
"""example plugin."""
import threading
import random
import datetime
import sqlite3
import sys
import subprocess
import sys
import os
import thread
import time
import globalvars
import meteodata
from TTLib import *
import RPi.GPIO as GPIO
class swpi_sync_plugin(object): # do not change the name of the class
def __init__(self,cfg):
self.cfg = cfg
###################### Plugin Initialization ################
log("Intitializing sync_plug-in " )
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4, GPIO.OUT)
GPIO.output(4, 0)
selt.T = 0.5
###################### End Initialization ##################
def run_before(self):
log("Running sync plugin [run_before]..")
def run_after(self):
log("Running sync plugin [run_after]..")
GPIO.output(4, 1)
time.sleep(self.T)
GPIO.output(4, 0)
###################### end of Plugin run
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
Non gli e' piaciuto neanche questa volta !!
[28/04/2013-18:42:37] Calculating Meteo data and statistics
[28/04/2013-18:42:38] Deleting file from Canon PowerShot S45 (normal mode)
[28/04/2013-18:42:39] loading plugins
[28/04/2013-18:42:39] Loading sync plugin
[28/04/2013-18:42:39] Intitializing sync_plug-in
Traceback (most recent call last):
File "swpi.py", line 663, in <module>
plugin_sync = pls.swpi_sync_plugin(cfg)
File "/home/pi/swpi/plugins/sync_plugin.py", line 41, in __init__
selt.T = 0.5
NameError: global name 'selt' is not defined
[28/04/2013-18:42:42] Logging data to Database
[28/04/2013-18:42:42] Dir: E - Spd: 7.92 - Gst: 9.36 - T: 22.6 - P: 1013.4 - U: 27 - R: 0 - CB: 2494
^C^C
logicamente questa prova l'ho fatta con l'ultimo codice postato da te.
Bye
Stefano
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
ho rimediato ....a modo mio ..sic!!!
ho tolto selt.T = 0.5
e ho messo direttamente time.sleep(0.5)
lo so' che e' poco elegante maa funzionaaa!!
Tony ..mettiti in posa ...che ti facciamo un monumento ..
grazie grazie
Stefano
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
- tetox
- Visitatori
Sto' cercando di aggiungere al sync_plugin (che funziona alla perfezione !!)
questo ulteriore comando
def run(self):
log("Starting plugin : %s" % sys.modules[__name__])
while 1:
###################### Plugin run
if globalvars.meteo_data.temp_in > 20:
SendMail(self.cfg, "Temperatura", "La temperatura ha superato i 20 gradi", None):
###################### end of Plugin run
..ma dove sara' questo errore ??
Grazie Tony ..
Stefano
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
C'è un ":" di troppo alla fine dell'istruzione SendMail.
I ":" vanno solo messi alla fine delle istruzioni di controllo (if,else,while,for....)
Si prega Accedi a partecipare alla conversazione.
- tetox
- Visitatori
Solo che' tolti i ":" l'errore e' sparito , pero' lo script sembra non funzionare .io ho provato a fare cosi' :
cut....
cut...
def run_after(self):
log("Running sync plugin [run_after]..")
###################### Plugin run
GPIO.output(4, 1)
time.sleep(0.5)
GPIO.output(4, 0)
time.sleep(10)
def run(self):
log("Starting plugin : %s" % sys.modules[__name__])
while 1:
if globalvars.meteo_data.temp_in > 18:
SendMail(self.cfg, "Temperatura", "La temperatura ha superato i 18 gradi", None)
###################### end of Plugin run
def run_after(self):
log("Running sync plugin [run_after]..")
###################### Plugin run
GPIO.output(4, 1)
time.sleep(0.5)
GPIO.output(4, 0)
time.sleep(10)
if globalvars.meteo_data.temp_in > 18:
SendMail(self.cfg, "Temperatura", "La temperatura ha superato i 18 gradi", None)
###################### end of Plugin run
[04/05/2013-16:40:59] ERROR sending mail
Exeption coercing to Unicode: need string or buffer, NoneType found
Quale e' la giusta sequenza??
Stefano
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
il comando corretto è :
SendMail(self.cfg, "Temperatura", "La temperatura ha superato i 18 gradi", "")
Togli io None metti una stringa vuota come attachment ""
Si prega Accedi a partecipare alla conversazione.
- Mario201303
- Visitatori
Volevo sapere se si può fare un plugins che ad una certa velocità del vento e direzione chiama un numero di cellulare, grazie
Si prega Accedi a partecipare alla conversazione.
- Roberto Vaccaro
- Offline
- Moderatore
sto provando questo plugin:
###########################################################################
# Sint Wind PI
# Copyright 2012 by Tonino Tarsi <tony.tarsi@gmail.com>
#
# USB comunication based pywws by 'Jim Easterbrook' <jim@jim-easterbrook.me.uk>
# Please refer to the LICENSE file for conditions
# Visit https://www.vololiberomontecucco.it
#
##########################################################################
"""example plugin."""
import threading
import random
import datetime
import sqlite3
import sys
import subprocess
import sys
import os
import thread
import time
import globalvars
import meteodata
from TTLib import *
import RPi.GPIO as GPIO
class swpi_sync_plugin(object): # do not change the name of the class
def __init__(self,cfg):
self.cfg = cfg
###################### Plugin Initialization ################
log("Intitializing sync_plug-in " )
# GPIO.setmode(GPIO.BCM)
# GPIO.setwarnings(False)
# GPIO.setup(4, GPIO.OUT)
# GPIO.output(4, 0)
###################### End Initialization ##################
def run_before(self):
log("Running sync plugin [run_before]..")
###################### Plugin run
# if globalvars.meteo_data.wind_ave > 15:
# GPIO.output(4, 1)
# else:
# GPIO.output(4, 0)
###################### end of Plugin run
def run_after(self):
log("Running sync plugin [run_after]..")
###################### Plugin run
# if globalvars.meteo_data.wind_ave > 15:
# GPIO.output(4, 0)
# else:
# GPIO.output(4, 1)
if globalvars.meteo_data.temp_in > 18:
SendMail(self.cfg, "Temperatura", "La temperatura ha superato i 18 gradi","")
###################### end of Plugin run
Un'altra domanda il tuo plugin "AllLogger" funziona solo su wunderground o anche sull'invio del file meteo.txt ?
Si prega Accedi a partecipare alla conversazione.
- Roberto Vaccaro
- Offline
- Moderatore
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Postalo come allegato ( ho abilitato l'upload dei .py ) . Un pluging che invia mail al superamento di una certa temperatura può essere utile ad altri.
Si prega Accedi a partecipare alla conversazione.
- Roberto Vaccaro
- Offline
- Moderatore
Si prega Accedi a partecipare alla conversazione.
- Messaggi: 1523
- Karma: 9
- Ringraziamenti ricevuti 240
Si prega Accedi a partecipare alla conversazione.
Si prega Accedi a partecipare alla conversazione.
- Roberto Vaccaro
- Offline
- Moderatore
Ovviamente il plugin deve essere scritto correttamente.
Si prega Accedi a partecipare alla conversazione.
[10/07/2013-22:22:31] Trying to get time from WH1080. Please wait ...
Exception happened during processing of request from ('78.13.144.194', 50045)
mer 10 lug 2013, 22.23.00, CEST
Si prega Accedi a partecipare alla conversazione.
Si prega Accedi a partecipare alla conversazione.