- Posts: 1523
- Karma: 9
- Thank you received: 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
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
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.
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
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
Please Log in to join the conversation.
- tetox
- Visitor
appena rientro in italia (sabato/domenica)provero' immediatamente
il plugin ...entro la prossima settimana riferiro' .
grazie ancora
stefano
Please Log in to join the conversation.
sei stato velocissimo.
Non resta che provare
Grazie mille
Sandro
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
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
Attachment wunderground.rar not found
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
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
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
C'è un ":" di troppo alla fine dell'istruzione SendMail.
I ":" vanno solo messi alla fine delle istruzioni di controllo (if,else,while,for....)
Please Log in to join the conversation.
- tetox
- Visitor
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
Please Log in to join the conversation.
il comando corretto è :
SendMail(self.cfg, "Temperatura", "La temperatura ha superato i 18 gradi", "")
Togli io None metti una stringa vuota come attachment ""
Please Log in to join the conversation.
- Mario201303
- Visitor
Volevo sapere se si può fare un plugins che ad una certa velocità del vento e direzione chiama un numero di cellulare, grazie
Please Log in to join the conversation.
- 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 ?
Please Log in to join the conversation.
- Roberto Vaccaro
- Offline
- Moderatore
Please Log in to join the conversation.
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.
Please Log in to join the conversation.
- Roberto Vaccaro
- Offline
- Moderatore
Please Log in to join the conversation.
Please Log in to join the conversation.
Please Log in to join the conversation.
- Roberto Vaccaro
- Offline
- Moderatore
Ovviamente il plugin deve essere scritto correttamente.
Please Log in to join the conversation.
[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
Please Log in to join the conversation.