Energy monitor

1,930 views
Skip to first unread message

Marco Fabbri

unread,
Sep 19, 2013, 5:18:30 AM9/19/13
to sou...@googlegroups.com
Qualcuno ha esperienza di lettura potenza istantanea ecc?
Ho visto che è possibile farlo leggendo il led del contatore

Ho comprato questo (mi deve arrivare)
e qui c'è una guida su come usarlo con già del codice pronto

Appena realizzo qualcosa di concreto vi aggiorno


Di Maio, Dario

unread,
Sep 19, 2013, 5:41:05 AM9/19/13
to sou...@googlegroups.com

Ciao Marco,

Leggendo la corrente istantanea puoi stimare la potenza massima assorbita, ma non é una vera misura.

Open energy monitor si può integrare facilmente, perché ormai gestiamo i floating point senza problemi.

Hai capito se in quel progetto ricavano l'energia (non solo la potenza)? Io non l'ho capito ed ho molti dubbi riguardo l'affidabilità della misura.

Leggere gli impulsi é la soluzione migliore.

Saluti,
Dario.

From mobile.

Marco Fabbri

unread,
Sep 19, 2013, 11:17:49 AM9/19/13
to sou...@googlegroups.com
Ero in vena di spese su aliexpress e l'ho comprato senza documentarmi.
Si per misurare kwh è meglio leggere i lampeggi del contatore:ogni lampeggio è un wh.

Di Maio, Dario

unread,
Sep 19, 2013, 1:09:09 PM9/19/13
to sou...@googlegroups.com
Non è una spesa sbagliata, perché monitorare il consumo istantaneo stimato può comunque essere utile, ad esempio per spegnere un elettrodomestico prima che il contatore salti.


Saluti,
Dario.


2013/9/19 Marco Fabbri <marc...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Antonino Fazio

unread,
Oct 12, 2013, 12:55:27 PM10/12/13
to sou...@googlegroups.com
...anch'io qualche giorno fa ero in vena di spese ed in preda ad "astinenza da acquisto elettronico" ho comprato, direttamente su http://shop.openenergymonitor.com/, il sensore di corrente ed il trasformatore AC/AC.
Ieri sera/notte ho montato il sensore ed il trasformatore, col circuito adattatore proposto sulle pagine di openenergymonitor. Poi l'ho integrato in Souliss e, devo dire, con qualche operazione di adattamento non è stato difficile. Perdonatemi se per il momento non vi do più dettagli ma sono fuori e, visto che la cosa mi ha gasato, ero ansioso di condividere.

Stasera o al massimo domani posto qualche foto, lo schema ed il codice.
===============================
Alessandro ho inserito il nuovo tipico 57 Power Sensor. Da la misura in Watt e l'icona che hai predisposto è veramente carina. Vorrei fare il commit delle modifiche. Non so se ho fatto bene, poi vedrai tu. Non mi piace molto ricopiare intere porzioni di codice, come in realtà ho fatto, ma ho raggiunto velocemente l'obiettivo. :)
Credo di non avere capito bene come usare GIT su Eclipse.... vado a tentativi e spesso faccio "casini".
===============================
Tonino

Di Maio, Dario

unread,
Oct 12, 2013, 1:16:45 PM10/12/13
to sou...@googlegroups.com

Ma cosa sei riuscito a misurare con il loro codice?  kW o kWh?

É interessante capire anche la configurazione hardware, per capire RAM rimane.

Dario.

From mobile.

Antonino Fazio

unread,
Oct 12, 2013, 1:38:57 PM10/12/13
to sou...@googlegroups.com
Non è specificato ma la misura si riferisce alla potenza istantanea, quindi KWh.

In altri post leggevo la discussione sul calcolo dell'integrale per calcolare il consumo "storico".
Non credo sia fattibile perchè il risultato si discosterebbe sempre (chissà forse anche sensibilmente) da quello calcolato dal contatore.

Il loro codice - io ho visto solo quello del nodo che effettua la lettura -  fornisce potenza apparente, potenza effettiva, tensione, corrente, (ed un altro fattore che mi sfugge)

Tonino


Di Maio, Dario

unread,
Oct 12, 2013, 2:37:20 PM10/12/13
to sou...@googlegroups.com

Due misure saranno sempre diverse, ma un integrale senza RTC ed una gestione deterministica del codice non é fattibile, sono d'accordo.

Ero curioso di capire se loro l'avessero fatto, ma sembra proprio di no.

L'altro parametro sarà lo sfasamento.

Dario.

From mobile.

Alessandro

unread,
Oct 13, 2013, 6:40:58 AM10/13/13
to sou...@googlegroups.com

ricordo che era ben funzionante, a parte il discorso dello "stoccaggio" dei valori che come state dicendo si discosterebbe pronbabilmente molto dal valore reale. Per questo con Dario avevamo lasciato in sospeso il discorso...Ora i tempi sono maturi?

Per quanto riguarda le commit, sono ben lieto se continui a fare push sul tuo branch, antonino. Dovresti usare sempre e solo quello, facendo merge dal master delle nuove push. In questo modo sarebbe semplice per me 'importare' le tue modifiche rilevanti per tutti, utilizzando a mia volta altri branch per gli sviluppi in corso (zozzariello, threadpool, ecc.) In genere faccio merge sul master solo quando sono pronto. Il branch master ovviamente rappresenta la testa del progetto, committo direttamente li solo i bugfix o gli sviluppi gia` concordati con Dario.

Se merge e push ti spaventano, possiamo valutare l'opzione di clonare il progetto. Su github questa cosa funziona benissimo ("fork") e permette di 'sincronizzare' i progetti con pull automatiche tra il master ed i cloni. Non avendo mai clonato su google code, pero`, non conosco i risvolti e possibili drawbacks.

Alessandro

Di Maio, Dario

unread,
Oct 13, 2013, 7:21:20 AM10/13/13
to sou...@googlegroups.com
Aiutatemi a comprendere, a cosa serve un tipico nuovo?

A memoria ricordo che sono stati recentemente aggiunti da Alessandro due tipici nuovi nella famiglia 5x per corrente e potenza, funzionano in floating point e sono praticamente identici al tipico base.
I nuovi 5x ed i vecchi 6x usano lo stesso numero di slot, con il vantaggio che in floating point si possono rappresentare numeri su scale molto grandi.

Per usarli, una volta disponibile nello sketch un floating point, basta convertirlo in half-precision (con i metodi presenti in Souliss) e copiarlo negli slot di uscita, a quel punto SoulissApp dovrebbe mostrare i valori senza problemi di scaling alcuno. Cambiando il tipico assegnato, cambiano i fondo scala e l'unità di misura, utili per i grafici.

Per quanto riguarda il calcolo dell'energia, tecnicamente ci sono due problemi:
1) Serve un RTC,
2) Serve uno scheduler deterministico.

Ero convinto che in OpenEnergyMonitor fossero riusciti a trovare una soluzione al problema, quindi curiosando tra i loro codice ho scoperto che non fanno misura dell'energia, ma solo della potenza. E' un bel lavoro, perché calcolano i fattori di sfasamento e tirano fuori potenza reale ed apparente.

Per l'energia, l'unico modo è una pezzotta lettura dal contatore.

Saluti,
Dario.

Antonino Fazio

unread,
Oct 13, 2013, 5:56:13 PM10/13/13
to sou...@googlegroups.com
Sarò prolisso....

Le librerie che ho usato sono queste: https://github.com/openenergymonitor/EmonLib

Questi sono i valori calcolati con EmonLib
  float realPower           ...//extract Real Power
  float apparentPower  ...//extract Apparent Power
  float powerFactor     ...//extract Power Factor
  float supplyVoltage   ...//extract Vrms
  float Irms                 ...//extract Irms

Il sensore è il SCT013 (YHDC SCT-013-000 CT) ed il trasformatore AC/AC a 9V ha il codice mod.DE-06-09.
---------
Vi spiego cosa ho fatto per i miei test.
Qui c'è tutta la teoria: http://openenergymonitor.org/emon/buildingblocks
Io, da buon smanettone, l'ho saltata quasi a piè pari, passando alla parte pratica.

Qui http://openenergymonitor.org/emon/buildingblocks/ct-sensors-interface
ci sono le istruzioni per il collegamento del Current Sensor.
Per R1 ed R2 ho usato delle resistenze da 10K, mentre per il burden resistor (resistenza di carico applicata al sensore) ho utilizzato due resistenze in serie da 100 ohms. Valore semplice da trovare, che consente di avere il fondoscala a 17.7 A (circa 4000 W)

Qui http://openenergymonitor.org/emon/buildingblocks/measuring-voltage-with-an-acac-power-adapter
ci sono le istruzioni per il collegamento del trasformatore AC/AC 9V (è un trasformatore che fornisce in uscita 9 V in alternata).
Non ho usato R3 ed R4 perchè servono solo per creare il "midpoint" (vedere schemi), quindi ho usato lo stesso midpoint creato con le resistenze R1 ed R2 di cui sopra.
----

Si nel codice di Soulissapp ho visto il tipico "CurrentSensor" ma io volevo leggere solo la potenza ed avevo bisogno del tipico corrispondente "Souliss_Logic_T57".
Soulissapp rilevava il tipico come "Dispositivo sconosciuto", così ho usato quello della temperatura ed ho visto che funzionava. Non ho fatto altro che copiare tutto il codice, rinominare in "SoulissTypical57PowerSensor.java", cambiare l'unità di misura e fare qualche altra piccolissima modifica negli altri file per "avvisare" della presenza di un tipico nuovo.

----

Poco fa ho provato anche i tipici:
- Souliss_Logic_T55 - Voltage (0, 400) V
- Souliss_Logic_T56 - Current (0, 25)

ma ottengo "Dispositivo sconosciuto".
Forse c'è qualche modifica da fare, oppure sbaglio tipico lato arduino.

----
Per quanto riguarda l'affidabilità delle misure... più o meno ci siamo.
La tensione rilevata è esatta, mentre per la potenza ho fatto vari tentativi in modo da avvicinarmi a ciò che indica il contatore di casa. Non sono ancora soddisfatto, voglio assicurami che i valori siano esatti su tutta la scala (da 0 a 3000W). Dovrò provare meglio ed essere più sicuro. Non ho un misuratore di potenza da usare come calibratore quindi ho risolto "a spanne". Per il momento ottengo buoni risultati con queste righe di setup:
emon1.voltage(15, 224, 1.7);  // Voltage: input pin, calibration, phase_shift
emon1.current(14, 10);       // Current: input pin, calibration.


Phase_shift è il valore di default, non l'ho cambiato.
----
Allego lo sketch usato per i test.
Dimensione del file binario dello sketch: 13.414 bytes (su un massimo di 30.720 bytes)



Screenshot_2013-10-13-22-45-56.png
Arduino AC current input A.png
Arduino AC voltage input_1.png
PA130134.JPG
PA130135.JPG
PA130136.JPG
PA130137.JPG
PA130138.JPG
Souliss_CHIBI_Consumo.zip

Jbllea

unread,
Oct 13, 2013, 6:05:34 PM10/13/13
to sou...@googlegroups.com
ciao Antonino

é molto interessante il tuo progetto, pure io sono un ottimo smanettone :-)! 
Dove posso acquistare tutto il necessario?? 

Jbllea

unread,
Oct 13, 2013, 6:08:18 PM10/13/13
to sou...@googlegroups.com

Antonino Fazio

unread,
Oct 13, 2013, 6:28:02 PM10/13/13
to sou...@googlegroups.com
Si tutto da loro.
Per sensore e trasformatore ho speso (spese di spedizione e VAT inclusa)
Importo in sterline £26,75 GBP
Tasso di cambio: 1 EUR = 0,806091 GBP
Importo finale €33,19 EUR

Tonino


Di Maio, Dario

unread,
Oct 14, 2013, 1:47:37 AM10/14/13
to sou...@googlegroups.com

I tipici 5x sono tutti uguali a meno di unità di misura e fondo scala, per questo i valori sono letti con qualunque 5x.

Alessandro é molto affeziinato al suo vecchio tipico, forse per questo non aveva ancora implementato gli altri della 5x :)

Dario.

From mobile.

Marco Fabbri

unread,
Oct 14, 2013, 4:10:40 AM10/14/13
to sou...@googlegroups.com
Bello sono contento che qualcuno è andato avanti in questo discorso!
Io ho il secondo arduino, il bridge wifi e il sensore di corrente.Mi mancano i componenti passivi che devo comprare in un negozio di elettronica.
Il trasformatore da 9v volevo recuperarlo da qualcosa di rotto.
Antonino hai provato a misurare qualche carico per capire se i risoltati sono piu o meno attendibili?













Tonino Fazio

unread,
Oct 14, 2013, 5:18:30 AM10/14/13
to sou...@googlegroups.com
Si i risultati sono attendibili ma bisogna perdere un po' di tempo (ma
non più di tanto) per i test e per la taratura.

Leggi con attenzione la pagina su openenergymonitor relativa all'uso
del trasformatore, perchè non sono tuti uguali.
Il software calcola la tensione di rete in base al livello di tensione
portata sul pin di arduino.

La tensione di uscita del trasformatore deve essere conosciuta (sarà
poco più di 11 V senza carico). Il partitore abbassa la tensione,
quella che viene applicata al pin di arduino, a circa 1 V, e la
funzione di calcolo dovrà essere tarata in base al rapporto
primario/secondario del trasformatore.
Comunque questa parte è facile, basta misurare la tensione di rete col
tester e fare in modo che arduino la misuri correttamente.

Per quanto riguarda la misura della corrente, leggevo proprio ieri, è
prevedibile un errore massimo (ma proprio massimo) di misura del 30%,
in base a vari fattori, tra cui la tolleranza del burden resistor (io
per adesso ho montato resistori classici con tolleranza 5%), ed in
ogni caso la misurazione sotto i 300W risente molto di più degli
errori di misura.
Questo è ciò che scrivono.
Proviamo :)

Tonino Fazio


2013/10/14 Marco Fabbri <marc...@gmail.com>:
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "souliss" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Antonino Fazio

unread,
Oct 14, 2013, 3:54:51 PM10/14/13
to sou...@googlegroups.com
Ho scaricato ed installato TortoiseGit.
Tutta un'altra cosa. Credo che usare GIT così sia molto più semplice ed intuitivo rispetto a GIT integrato su Eclipse. (meglio sarebbe da linea di comando, ma visto che siamo pigri!)

Poco fa ho fatto il push delle modifiche per i tipici , 55, 56, 57.
Tonino

Antonino Fazio

unread,
Oct 14, 2013, 4:06:10 PM10/14/13
to sou...@googlegroups.com
Ecco i risultati di questa sera. (foto)
La tensione è esatta. Era proprio 217 V

Tonino
Foto 1 Screenshot.png
Foto 1.JPG
Foto 2 Screenshot.png
Foto 2.JPG

Di Maio, Dario

unread,
Oct 14, 2013, 5:21:33 PM10/14/13
to sou...@googlegroups.com
Cosa misurerai nell'installazione finale?

Dario.


--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

Tonino Fazio

unread,
Oct 14, 2013, 5:32:42 PM10/14/13
to sou...@googlegroups.com
Probabilmente li userò tutti e tre.
E' un nodo che ficcherò direttamente nella cassetta dei magnetotermici.
6 slot saranno usati con i tre tipici degli 55, 56, 57 , mentre i due
slot che rimangono liberi li userò con il DHT22 con 3 metri di cavo
per portare il sensore al punto giusto, perchè ho la centralina giusto
sopra un termosifone.
Funzionerà con 3 metri di cavo? Il DHT comunica in digitale. Secondo me si.

Poi, dipende da quello che mi viene in mente.
Dipende dagli slot liberi :)
Sicuramente rimarrà la misura della potenza.

Non escludo l'inserimento in automatico di alcuni pannelli solari
collegati ad un piccolo Inverter Grid Tie. Quelli vanno staccati
quando la potenza consumata è minore di quella prodotta, altrimenti la
corrente prodotta in più viene conteggiata dal contatore come se fosse
consumata.
Tonino Fazio


2013/10/14 Di Maio, Dario <dario....@souliss.net>:
> You received this message because you are subscribed to a topic in the
> Google Groups "souliss" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Di Maio, Dario

unread,
Oct 14, 2013, 5:38:27 PM10/14/13
to sou...@googlegroups.com
Non credo che 3 metri siano problematici, al limite il problema può derivare da disturbi indotti, visto che passa in prossimità della 220V.




Alessandro Del Pex

unread,
Oct 14, 2013, 6:24:11 PM10/14/13
to sou...@googlegroups.com
Il phon per i test spacca :) carico resistivo quasi puro, energyMon da` il meglio di se
mi ricorda gli screen che facevo ormai due anni fa...Ammetto che il tipico currentSensor era da rifattorizzare, poi gli mancava l'half precision....Pero` non sono d'accordo nel utilizzare tre tipici separati. Sono 6 SLOT ragazzi, sicuri di volerli impiegare tutti per lo stesso scopo? Alla fine quello che interessa l'utente e` la potenza...Conoscere i tre valori separati non credo incrementi di molto il valore aggiunto, a fronte di tutti quegli slot impiegati. Ad ogni modo uno e` libero di utilizzare solo il 57, giusto?

Ottimo lavoro con git, vedo che hai gia` fatto merge degli ultimi sviluppi, bravissimo :)

La questione  spinosa riguarda come al solito la storicizzazione del valore, che NON puo` avvenire lato Android. Almeno non in maniera diretta...Dario ed io ne parliamo da un anno :)
quando risolviamo questo problema secondo me avra` veramente senso includere il tutto nella distribuzione e vantarci del risultato raggiunto :)

tonino hai modo di fare due test con i programmi posizionali?

Alessandro

Alessandro Del Pex

unread,
Oct 14, 2013, 6:30:43 PM10/14/13
to sou...@googlegroups.com
Ottimo! Il tuo prossimo obbiettivo e` convincere Dario a fare lo stesso :D

Ale

Tonino Fazio

unread,
Oct 14, 2013, 6:37:50 PM10/14/13
to sou...@googlegroups.com
Ad usare GIT in generale o proprio TortoiseGIT? :)



Tonino Fazio


Il 15 ottobre 2013 00:30, Alessandro Del Pex <shinea...@gmail.com>
ha scritto:
> You received this message because you are subscribed to a topic in the
> Google Groups "souliss" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Tonino Fazio

unread,
Oct 14, 2013, 6:40:22 PM10/14/13
to sou...@googlegroups.com
Infatti il valore significativo è solo quello del tipico 57, cioè i
Watt. Conoscere gli altri ha poco senso.

In queste misure ho notato un problema che invece con la misurazione
della temperatura non si nota.
Giusto per essere pignoli.... se il nodo oppure Soulissapp per qualche
motivo va offline oppure perde la comunicazione (nodo spento, mancanza
rete) i tipici 55, 56, 57 continuano ad indicare l'ultima misura
letta, come se stessero leggendo un consumo costante. Questo si
riflette anche sui grafici. L'unico modo per capire che qualcosa si è
bloccato e notare che la "salute" del nodo si abbassa.
Come si potrebbe ovviare?

Tonino
Tonino Fazio


Il 15 ottobre 2013 00:24, Alessandro Del Pex <shinea...@gmail.com>
ha scritto:

Lorenzo Leali

unread,
Oct 14, 2013, 7:17:21 PM10/14/13
to sou...@googlegroups.com

Ciao tonino

Ti posso confermare che il dht non ha nessun problema con la distanza, io ne uso 4 su distanze differenti il max che ho e di 15mt circa e lemletture sono perfette, testate con un termometro digitale , l'unica cosa alla quale devi stare attento e la sezione del cavo se troppo grosso potrebbe causare qualche problema, ma in 3 mt non credo.

You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

Tonino Fazio

unread,
Oct 14, 2013, 7:20:01 PM10/14/13
to sou...@googlegroups.com
Ohh, perfetto. Addirittura 15 metri! Benissimo.
Con due cavettini intrecciati (tipo doppino telefonico) non dovrebbero
esserci problemi di disturbi.

Tonino Fazio

Lorenzo Leali

unread,
Oct 14, 2013, 7:25:04 PM10/14/13
to sou...@googlegroups.com

No direi che non dovrebbe avere problemi, io ho utilizzato i cavi di rete (avevo una bobina da 300mt che mi avanzava!!) Tanto la tensione che passa e minima

Di Maio, Dario

unread,
Oct 15, 2013, 1:10:14 AM10/15/13
to sou...@googlegroups.com

Se interessa solo la potenza, si porta dwntro solo quel valore, in questo modo é discrezionale.

La questione del logging ha come sola strada l'uso di un terminale Android fisso in casa, da usare come server.
Per avere un idea, la versione A4 (8 slot, 10 nodi) usa dal 60% al 90% di RAM in base alla configurazione, non c'é spazio per fare logging.
Le cose migliorano con la A5 che a parità di RAM lavora con 35 slot e 30 nodi, ma ne resta in generale poca.

Sarà l'evoluzione di SoulissApp a determinare cosa poter fare, sui nodi la birra é finita. In questa ottica, il logging su Android andrebbe abilitato come per Zozzariello, in modo da averlo solo su un dispositivo centrale.

Dario

From mobile.

> --
> You received this message because you are subscribed to the Google Groups "souliss" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

Marco Fabbri

unread,
Oct 15, 2013, 3:09:11 AM10/15/13
to sou...@googlegroups.com
Antonino e possibile vedere il codice che hai usato con souliss?

Antonino Fazio

unread,
Oct 15, 2013, 6:13:43 AM10/15/13
to sou...@googlegroups.com
Si. E' allegato al mio post del 13 ottobre. Quello che inizia per "Sarò prolisso....".

Dario Di Maio

unread,
Oct 15, 2013, 2:49:45 PM10/15/13
to sou...@googlegroups.com
Sei in home page :)

Tonino Fazio

unread,
Oct 15, 2013, 3:19:49 PM10/15/13
to sou...@googlegroups.com
Evvvvai :D
Tonino Fazio


2013/10/15 Dario Di Maio <dario....@souliss.net>:
> Sei in home page :)
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "souliss" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Alessandro Del Pex

unread,
Oct 15, 2013, 5:44:54 PM10/15/13
to sou...@googlegroups.com
Antonino ho fatto merge del tuo branch. Ancora non ho testato, ma mi pare ok. Troverai un po di spostamenti dei .gitignore, spero di non averti creato casini.
Per sicurezza, ti pregherei di aggiungere alla lista 'assume-unchanged' i seguenti files:

.classpath
.project
.project.properties


Ciao e grazie di tutto
Alessandro

Tonino Fazio

unread,
Oct 15, 2013, 5:59:05 PM10/15/13
to sou...@googlegroups.com
Grazie.
Fatto. Ho aggiunto quei file alla lista ignore.
Tonino Fazio


Il 15 ottobre 2013 23:44, Alessandro Del Pex <shinea...@gmail.com>
ha scritto:

Marco Fabbri

unread,
Oct 17, 2013, 2:32:01 AM10/17/13
to sou...@googlegroups.com
Dato che monti l'arduino nella scatola del contatore( misembra di aver capito) ...
Montare anche una foto resistenza sul led del contatore?
Così potresti leggere anche l'energia consumata.
L'unico problema è che quel valore va letto regolarmente per essere interessante.
Bisognerebbe avere un tablet sempre acceso in casa oppure una penna hdmi android.

Tonino Fazio

unread,
Oct 17, 2013, 2:45:44 AM10/17/13
to sou...@googlegroups.com

No lo monterò nella scatola della centralina ma li non ho il contatore. Non sarebbe una brutta idea sai? Il nodo dovrebbe solo contare i lampeggi e trasmetterli ogni unità di tempo (una qualsiasi, magari una o più volte al giorno)  a Souliss, che si occuperebbe si fare la somma della cifra più alta, e solo di quella, rilevata tra le 00 e le 24. Chissà potrebbe funzionare?

Tonino Fazio

unread,
Oct 17, 2013, 2:52:17 AM10/17/13
to sou...@googlegroups.com
Ma sai che mi hai messo la pulcettina nell'orecchio? Quasi quasi
cambio strategia. Sposto il nodo al piano di sotto, dove ho il
contatore, sperando che il segnale della CHIBI arrivi al bridge, e
lavoro un po' su questa idea!
Secondo me è più importante il consumo istantaneo ma avere quello
totale tutto sommato sarebbe carino.
Tonino Fazio

Di Maio, Dario

unread,
Oct 17, 2013, 3:20:30 AM10/17/13
to sou...@googlegroups.com
Certo che funziona, in quel caso non è un integrale, ma una sommatoria. Non ci sono vincoli di tempo e con i floating point si possono memorizzare valori grandi a sufficienza.

Se ogni impulso corrisponde ad un certo quantitativo di kWh, allora la somma sono i kWh consumati, in questo caso anche se SoulissApp non è collegata sei a posto.

Dario.

Flavio P.

unread,
Oct 17, 2013, 3:37:29 AM10/17/13
to sou...@googlegroups.com
Questo mi piace, se viene fatto, poi lo adattatiamo anche per lettura contatore gas....
Basterà cambiare la costante di somma per impulso.... :) 


--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.



--
P ********* Consideriamo l'ambiente prima di stampare questa e-mail *** Think about environment before printing *********
Il contenuto di questo messaggio e-mail è privato e riservato al solo destinatario. L'utilizzo non autorizzato può costituire reato. Se ricevuto erroneamente siete pregati di cancellarlo e comunicarci via e-mail l'errata ricezione.

Di Maio, Dario

unread,
Oct 17, 2013, 3:41:08 AM10/17/13
to sou...@googlegroups.com
Gli impulsi sono per i kWh vero? Non ne sono sicuro.


2013/10/17 Flavio P. <>

Tonino Fazio

unread,
Oct 17, 2013, 3:43:28 AM10/17/13
to sou...@googlegroups.com
Un impulso dovrebbe corrispondere ad un KW e la frequenza dei lampeggi
ai KWh (consumo istantaneo).

Tonino Fazio
> You received this message because you are subscribed to a topic in the
> Google Groups "souliss" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to

Tonino Fazio

unread,
Oct 17, 2013, 3:45:20 AM10/17/13
to sou...@googlegroups.com
Ma mi sa che sbaglio!!! Ripensandoci non può essere che un lampeggio
corrisponda ad un KW.
Mi informo......
Tonino Fazio

christian cantarelli

unread,
Oct 17, 2013, 4:09:50 AM10/17/13
to sou...@googlegroups.com
ciao
a me risulta che il contatore lampeggia 1000 volte ogni kw , ma non ho mai verificato...
alcuni gg fa io ho acquistato un attiny85, proprio per poter leggere i lampeggi del contatore e inviare via radio la frequenza dei lampeggi
ciao
christian

Marco Fabbri

unread,
Oct 17, 2013, 4:14:13 AM10/17/13
to sou...@googlegroups.com
1 impulso è 1wh ora 
1000 impulsi 1kwh
bisognerebbe secondo me contare gli impulsi ogni minuto, oppure meglio ogni ora pero' sempre ogni ora

Io sto saldando la schedina da montare sopra arduino come hai fatto tu per il sensore di corrente:
In ritardo e piano piano ma prima o poi arrivo anch'io !:)

Di Maio, Dario

unread,
Oct 17, 2013, 4:23:05 AM10/17/13
to sou...@googlegroups.com
Se è cos', si crea una piccola routine di interrupt che ad ogni impulso incrementa un contatore, il cui valore sarà il consumo in Wh. E' necessario usare due variabili, una int 2 byte per contare gli impulsi ed un floating point su cui trasferire i parziali in kWh.

Se c'è l'hardware per leggere gli impulsi, scrivere il codice è cosa da 10 min :)

Dario.


2013/10/17 Marco Fabbri <>

christian cantarelli

unread,
Oct 17, 2013, 5:08:22 AM10/17/13
to sou...@googlegroups.com
ciao per leggere gli impulsi io pensavo di collegare una fotoresistenza attaccata al contatore con un po' di colla a caldo, collegata ad un ingresso di attiny85.
collegando il attiny85 ad un trasmettitore radio es 433mhz o a 2,4 ghz , inviare via radio il numero dei lampeggi letti dal contatore una volta ogni 30 sec o 1 minuto, dando così il consumo istantaneo
ogni 1000 lampeggi inviare sempre via radio un altro segnale codificato, per conoscere il valore di Kw usati totali
ciao
christian

Tonino Fazio

unread,
Oct 17, 2013, 5:35:05 AM10/17/13
to sou...@googlegroups.com
Eccolo... è arrivato. Tutto facile semplice e veloce.
Vedi che noi non ci mettiamo 10 minuti. Ne abbiamo bisogno almeno di 20. :D

Tonino Fazio

Tonino Fazio

unread,
Oct 17, 2013, 5:57:46 AM10/17/13
to sou...@googlegroups.com
In rete si trova già il codice ad hoc, quindi la lettura degli impulsi
a livello software non dovrebbe essere un problema.
Per integrarlo con Souliss in 10 minuti (quelli di Dario) si fa.
Oggi pomeriggio / notte - bimbi e compagna permettendo - andrò a
rovistare nella cassettina dei componenti, una fotoresistenza dovrei
averla... qualche transistor pure....

Tonino Fazio


Il 17 ottobre 2013 11:08, christian cantarelli <catop...@gmail.com>
ha scritto:

Di Maio, Dario

unread,
Oct 17, 2013, 6:04:48 AM10/17/13
to sou...@googlegroups.com
Magari ci metto tutta la notte, poi però dico 10 minuti per darmi arie :D


2013/10/17 Tonino Fazio >

Flavio P.

unread,
Oct 17, 2013, 6:06:25 AM10/17/13
to sou...@googlegroups.com

Dai che con il codice pronto,copia e incolla,ci metti meno di Dario.... Stavolta lo freghi..... ;)

From Mobile Nexus

You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

Tonino Fazio

unread,
Oct 17, 2013, 6:10:09 AM10/17/13
to sou...@googlegroups.com
Allora non sono l'unico che 'vive' di notte in questo modo....
per montare e testare quanto sopra ho iniziato alle dieci e sono
andato a dormire alle 4 di notte. La mattina alle 6.30 sono andato al
lavoro che ero uno straccio... ma felice e soddisfatto. :D
Tonino Fazio

Marco Fabbri

unread,
Oct 17, 2013, 10:52:24 AM10/17/13
to sou...@googlegroups.com
Urca nel negozio di elettronica mi han dato resistenze da 330ohm invece che da 33ohm!
che sfortuna

stavo pensando di mettere in parallelo 10 resistenze da 330 ohm per fare quella da 33! 
va be ci torno



Di Maio, Dario

unread,
Oct 17, 2013, 10:57:10 AM10/17/13
to sou...@googlegroups.com
:D

Dario Di Maio

unread,
Oct 17, 2013, 1:11:23 PM10/17/13
to sou...@googlegroups.com
Su OEM c'è il codice che usa gli interrupt per contare gli impulsi (link di seguito) usando quel codice, basta utilizzare un qualsiasi tipico analogico per associargli il valore.

L'unica pecca è che questo rappresenterebbe un contatore continuo, quindi lato SoulissApp si dovrebbero prevedere delle soluzioni sui grafici per mostrare i consumi giornalieri, perché il nodo restituirebbe solo i consumi cumulati dall'attivazione. Servirà anche un tasto di reset e la scelta di come gestire i reset lato SoulissApp.

Dite la vostra.

http://openenergymonitor.org/emon/buildingblocks/interrupt-based-pulse-counter

Dario.

Marco Fabbri

unread,
Oct 17, 2013, 1:53:54 PM10/17/13
to sou...@googlegroups.com
Il totale non e un gran che utile secondo me. Più interessante e prendere il dato ogni mezzora o un ora e poi portare a 0 il contatore per vedere il consumo nella vari momenti della giornata. Non e neanche necessario il reset manuale

Di Maio, Dario

unread,
Oct 17, 2013, 2:03:31 PM10/17/13
to sou...@googlegroups.com
Il problema di fondo è che i nodi non hanno un RTC e diventa difficile stabile con precisione quando fermare il conteggio, perché fermarlo prima o dopo ha influenza sul valore misurato.

La soluzione è creare lato scheda un semplice totalizzatore, quindi svincolato dal tempo, che riporta a SoulissApp il valore totalizzato ad intervalli irregolari, definiti dalla deadband in uso (da cui dipenderà la precisione della misura e l'utilizzo di banda). A questo punto in SoulissApp ci sarà un log con la variazione nel tempo (il time stamping lo fa SoulissApp) del totale di energia consumata.

Creando delle "viste" apposite sui grafici, si può visualizzare il consumo per gruppi. Ad esempio, per calcolare il consumo giornaliero, SoulissApp dovrà prendere i campioni di fine giornata e sottrarli a quelli di inizio giornata, analogamente per i mesi. La complessità è nell'individuare correttamente i campioni, perchè la rete Souliss è asincrona e quindi SoulissApp avrà un campione ad inizio giornata, ma non è specificato a che ora.

Essendo kWh, basterà fare sottrazioni ed addizioni, utilizzando il tempo solo per discriminare quali campioni utilizzare. Su archi temporali lunghi (>4h) la precisione complessiva dovrebbe essere buona, inoltre non ci sarebbero fenomeni di deriva.

Dario.


On Thu, Oct 17, 2013 at 7:53 PM, Marco Fabbri <> wrote:
Il totale non e un gran che utile secondo me. Più interessante e prendere il dato ogni mezzora o un ora e poi portare a 0 il contatore per vedere il consumo nella vari momenti della giornata. Non e neanche necessario il reset manuale

Marco Fabbri

unread,
Oct 17, 2013, 2:15:09 PM10/17/13
to sou...@googlegroups.com
Non può essere Lato android, il servizio che si può impostare a intervalli regolari ecc a fare la lettura?

Di Maio, Dario

unread,
Oct 17, 2013, 2:19:51 PM10/17/13
to sou...@googlegroups.com
La comunicazione è su eventi, il dato viene inviato quando la scheda riceve un impulso ed incrementa il contatore (compatibilmente con la deadband). Essendo tutta la rete ad eventi, fare polling, resituisce sempre lo stesso valore (in A4) mentre genera un burst di dati su rete (in A5 con passthough).

In generale non dovrebbe essere complesso, nel senso, scelto il giorno, SoulissApp deve scorrere tutti i log per trovare il primo e l'ultimo della giornata.

Dario.


On Thu, Oct 17, 2013 at 8:15 PM, Marco Fabbri <> wrote:
Non può essere Lato android, il servizio che si può impostare a intervalli regolari ecc a fare la lettura?

Marco Fabbri

unread,
Oct 18, 2013, 6:46:05 AM10/18/13
to sou...@googlegroups.com
Antonino senza un amperometro a pinza come potrei fare a tarare il sensore di corrente?

Flavio P.

unread,
Oct 18, 2013, 7:06:12 AM10/18/13
to sou...@googlegroups.com
Phon o equivalente con wattaggio dichiarato....
Oppure un TA su analogica di arduino....
Sicuramente non spaccherai il watt, ma una taratura grossolana la fai....

Flavio


2013/10/18 Marco Fabbri <marc...@gmail.com>
Antonino senza un amperometro a pinza come potrei fare a tarare il sensore di corrente?

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Antonino Fazio

unread,
Oct 18, 2013, 11:26:24 AM10/18/13
to sou...@googlegroups.com
Puoi misurare la corrente anche con un tester normale, ma in questo caso devi interrompere il cavo ed interporre il tester.
Attento alle scosse :)

Di Maio, Dario

unread,
Oct 18, 2013, 12:48:30 PM10/18/13
to sou...@googlegroups.com

Mi raccomando, già siamo in pochi... :)

Dario.

From mobile.

Marco Fabbri

unread,
Oct 18, 2013, 2:10:42 PM10/18/13
to sou...@googlegroups.com
Si cosi lo usavo per dimensionare batteria per i brushless di aerei radiocomandati... 12v per massimo 10a... Pero far passare nel mio tester 220v per 1000w della stufetta un po mi strizza!

Di Maio, Dario

unread,
Oct 18, 2013, 2:14:08 PM10/18/13
to sou...@googlegroups.com

In effetti é un po tanto :/

From mobile.

On Oct 18, 2013 8:10 PM, "Marco Fabbri" <marc...@gmail.com> wrote:
Si cosi lo usavo per dimensionare batteria per i brushless di aerei radiocomandati... 12v per massimo 10a... Pero far passare  nel mio tester 220v per 1000w  della stufetta un po mi strizza!

Tonino Fazio

unread,
Oct 18, 2013, 2:21:22 PM10/18/13
to sou...@googlegroups.com

Perché ti spaventa? Sono poco meno di 5 ampere. (1000/230) Il tester ne sopporta 20 in genere.  Con 1000W mica lo bruci, al massimo si intiepidisce un po' il puntale. Roba di poco.
Certo prima assicurati di aver selezionato corrente alternata ed il plug corretto.

Il 18/ott/2013 20:10 "Marco Fabbri" <marc...@gmail.com> ha scritto:
Si cosi lo usavo per dimensionare batteria per i brushless di aerei radiocomandati... 12v per massimo 10a... Pero far passare  nel mio tester 220v per 1000w  della stufetta un po mi strizza!

--
You received this message because you are subscribed to a topic in the Google Groups "souliss" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to souliss+u...@googlegroups.com.

Marco Fabbri

unread,
Oct 21, 2013, 2:51:30 AM10/21/13
to sou...@googlegroups.com

Ok sono a buon punto! E ho trovato un'amico che mi presta anche una pinza amperometrica! 
Nella schedina che ho fatto ho predisposto per poter montare in maniera comoda:
1)schedina con 4 relè (digitali 0 1 2 3)
2)un sensore dht (digitale 5)
3)trasformatore 9vac con sensore di corrente (analogici 1 e 2)
4)foto resistenza per andare a leggere contatore(analogico 0)
+5V ---PhotoResistor-------.-----Resistenza 10K--- GND
                                      |
Pin 0 ----------------------------- 

Seguendo questo link sto tarando i sensori di tensione e corrente








Flavio P.

unread,
Oct 21, 2013, 3:02:39 AM10/21/13
to sou...@googlegroups.com
Grande!! ;)


--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.

Di Maio, Dario

unread,
Oct 21, 2013, 3:07:06 AM10/21/13
to sou...@googlegroups.com
Notti insonni :D

Tonino Fazio

unread,
Oct 21, 2013, 4:46:34 AM10/21/13
to sou...@googlegroups.com

Che bellezza!
Bene bene :-)

--
You received this message because you are subscribed to a topic in the Google Groups "souliss" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to souliss+u...@googlegroups.com.

Mattia Rossi

unread,
Oct 23, 2013, 9:09:38 AM10/23/13
to sou...@googlegroups.com
Ciao, mi inserisco tardi nella conversazione ma solo in questi giorni sono venuto a conoscenza del progetto Souliss.
Ho invece da qualche mese installato due nodi emontx comprati da openenergymonitor, e ho pasticciato un pò con le varie configurazioni di sensori e con EmonCMS, il software che openenergymonitor usa per raccogliere i dati dai vari sensori, e volevo se possibile contribuire alla conversazione per far capire la logica di funzionamento del sistema openenergymonitor.

Come da post precedenti la combinazione pinza amperometrica e trasformatore AC-AC, soprattutto con il CT da 100A e il circuito di OEM (OpenEnergyMonitor) hanno un margine di errore elevato quando i consumi sono sotto i 300W  (nell'ordine del 10%) e ancor di più quando si scende sotto i 100W (oltre il 30%). 

La scheda emontx ha anche la possibilità di usare un sensore ottico per contare gli impulsi del contatore (uno ogni Wh, 1000 impulsi=1KWh come già dettto nei post precedentemente), io ho avuto scarso successo con il sensore ottico, non so se l'ho fritto mentre l'ho collegato (col saldatore sono un pessimo soggetto) o se il tipo di sensore ottico dello shop non va bene per i contatori italiani .. se controllo con il tester i voltaggi sembrano a posto, e se lo tengo al buio non segna niente come dovrebbe, ma appena lo espongo a un minimo di luce mi genera interrupt in continuazione ... non ho idea se sia un problema mio, o del fatto che nonostante lo abbia attaccato al vetro del contatore con abbondante pasta tipo pongo continui a essere disturbato dalla luce dell'ambiente .... per stare dalla parte della ragione ho comprato un paio di contatori monofase con uscita open collector, che fanno la stessa cosa del contatore (un impulso ogni Wh di corrente che lo attraversa) ma generano l'impulso su due contatti collegabili direttamente a un pin di arduino.
Su questo post c'è la descrizione del setup ed il codice che ho usato per gli esperimenti: http://blog.mrossi.com/2013/10/arduino-pulse-counting-with-multiple.html )
 
Per calcolare la potenza su un dato periodo l'emontx 'bara' nel senso che non fa il calcolo, ma invia le misure istantanee ad un'istanza EmonCMS, che è un applicazione basata su php+mysql (e nell'ultima versione anche su Timestore ) e a cui è demandata la funzione di storicizzazione dei dati e di presentazione di detti dati tramite interfaccia web. Una funzionalità di Emoncms è la possibilità di processare i dati in arrivo per calcolare valori accumulati nel tempo, con particolare attenzione al consumo energetico (quindi KWh, KWh/giorno), ma anche valori differenti come temperature o livelli.
EmonCMS è un sistema orientato all'accumulo e visualizzazione di dati, non ha internamente il concetto di controllo o automazione, ha solamente la possibilità di generare determinati eventi configurabili come invio di notifiche/email/http get all'accadere di certe situazioni 

Direi quindi che l'approccio OEM (un server che colleziona dati basato su DB+storage, nessuna possibilità di controllo e gestione degli eventi macchinosa) è diametralmente opposto all'approccio Souliss (sistema distribuito/comunicazione peer to peer/funzionamento indipendente dei singoli nodi) e che i due sistemi svolgono funzioni diverse.


Nei prossimi giorni cercherò di studiare un pò il funzionamento di Souliss per cercare di dare qualche suggerimento costruttivo (al momento sparerei solo cagate, temo) su come eventualmente implementare la funzionalità di storicizzazione dei dati in modo da non stravolgere l'approccio distribuito/peer to peer.

Di Maio, Dario

unread,
Oct 23, 2013, 1:07:25 PM10/23/13
to sou...@googlegroups.com
Ciao Mattia,

anche noi dubitavamo su come realizzare la misura dei kWh partendo dalle misure di tensione, corrente e sfasamento, lato scheda il problema principale è nell'assenza di un RTC, senza il quale la misura nel tempo andrebbe a divergere.
Inoltre sono da considerare gli errori di misura di tensione e corrente, che integrati possono divergere. Per questi motivi sono d'accordo nell'utilizzare un misuratore esterno e riportare la misura contando gli impulsi.

Sono del parere che provare ad utilizzare emonCMS come strumento di visualizzazione dei dati, integrato con Souliss, sia un passo interessante.

Parlando di architettura, Souliss è effettivamente p2p ma esistono dei collettori. Principalmente SoulissApp su Android è un collettore dati, con funzioni simili (ma meno sofisticate) di storicizzazione e presentazione su grafici.
L'idea su cui stiamo orientando lo sviluppo è quella di introdurre in SoulissApp funzionalità (con abilitazione) da server, con l'obiettivo di ridurre l'hardware da installare in casa. Quando parlo di server, mi riferisco alla possibilità di collettare dati, eseguire logiche su eventi e presentarli verso l'esterno.
Resta sotto una rete p2p,dove è possibile costruire logiche con interazione diretta tra i nodi.

Nei prossimi sviluppi è previsto il supporto per i moduli radio NRLF, ho dubbi relativi all'utilizzo con batteria, perché le schede che orbitano attorno Arduino non sono propriamente parche in termini di consumi. Probabilmente con qualche accorgimento (come ad esempio escludere il regolatore di tensione) si può ottenere qualche risultato, ma è da vedere.
Lato softwarei driver radio funzionano su interrupt, lo stesso dovrà essere fatto per l'NRLF.

Per quanto riguarda Raspberry o Beagle board, possono essere pensate come hardware supportato in termini di collettore dati (come avviene in OEM) mentre vedo difficile giustificare l'uso di queste tipologie di schede come terminali diretti di attuazione.
In generale, la linea principale del progetto è quella di costruire funzionalità server attraverso SoulissApp, ma sarebbe assolutamente interessante introdurre altre interfacce in parallelo (interessanti sono openHAB e Lagardo SWAP), se si trovano persone con tempo a sufficenza si può tranquillamente aprire una nuova linea di sviluppo.

Parlando dell'integrazione tra il tuo sistema OEM e Souliss, dobbiamo capire cose/come integrare e dove inserirci. Sul tuo blog ho letto che hai già realizzato un'integrazione tra i dati metereologici e l'attivazione delle pompe, sarebbe interessante capire con quali strumenti.

Ti ho aggiunto nel progetto, adesso puoi modificare wiki issue ed altro.
http://code.google.com/p/souliss/people/list

Saluti,
Dario.


2013/10/23 Mattia Rossi <>

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

Marco Fabbri

unread,
Oct 23, 2013, 4:35:40 PM10/23/13
to sou...@googlegroups.com
Bello vedere che la comunità si allarga
Mattia ogni consiglio è bene accetto.
Ora non ho ancora la pinza amperometrica in mano ma ho provato a misurare la potenza di un phon da 2200W  e solo tarando con valori teorici il sensore di corrente mi dava 2140w. (Già mi sembra un gran risultato.
ora stavo cercando di aggiungere il secondo nodo ma qualcosa non funziona....
non è che mi date una mano a capire cosa sbaglio nel codice?

primo nodo
/**************************************************************************
Souliss - Temperature and Humidity Measure
The temperature and humidity are acquired from a DHT11/21/22 sensor
and available at user interface as half-precision floating point.
If any in-between calculation would be performed, the values shall
be converted in single precision floating point and then back in
half-precision.
The Device has
- An DHT11/21/22 sensor on PIN 2
 
CONFIGURATION IS MANDATORY BEFORE COMPILING
Before compiling this code, is mandatory the configuration of the framework
this ensure the use of proper drivers based functionalities and requested
communication interface.
Configuration files are located on /conf folder, is suggested to use this 
code on one of the boards listed below, the code can also compile on other
boards but may require modification on I/O definitions.
Run this code on one of the following boards:
Board Conf Code Board Model
        0x03         Arduino Ethernet (W5100) 
0x04 Arduino with Ethernet Shield (W5100)
0x05 Arduino with ENC28J60 Ethernet Shield

Sensor Conf
0x01 Temperature and humidity DHT11, DHT21, DHT22
******************** Configuration Parameters *********************
Configuration file Parameter
QuickCfg.h #define QC_ENABLE 0x01
QuickCfg.h #define QC_BOARDTYPE 0x03, 0x04, 0x05
QuickCfg.h #define DHT_SENSOR 0x01
Is required an additional IP configuration using the following parameters
QuickCfg.h const uint8_t DEFAULT_BASEIPADDRESS[] = {...}
QuickCfg.h const uint8_t DEFAULT_SUBMASK[]       = {...}
QuickCfg.h const uint8_t DEFAULT_GATEWAY[]       = {...}
***************************************************************************/
#include "Souliss.h"
#include "Typicals.h"
#include <SPI.h>

#define network_address_1 0x00FD
#define network_address_2 0x00FC
#define network_my_subnet 0xFF00
#define network_my_supern 0x0000

#define DHT_id1 1 // Identify the sensor, in case of more than one used on the same board

#define PORT                2                       // portone  
#define CANC                3                       // cancello
#define TEMPERATURE 4 // This is the memory slot used for the execution of the logic in network_address1
#define HUMIDITY 6 // This is the memory slot used for the execution of the logic
#define DEADBAND 0.05 // Deadband value 5%  

// define the shared memory map
U8 memory_map[MaCaco_MEMMAP];

// flag 
U8 data_changed = 0;

#define time_base_fast 10 // Time cycle in milliseconds
#define time_base_slow 10000 // Time cycle in milliseconds
#define num_phases 255 // Number of phases

U8 phase_speedy=0, phase_fast=0, phase_slow=0;
unsigned long tmr_fast=0, tmr_slow=0;  

// Setup the DHT sensor
ssDHT22_Init(5, DHT_id1);

void setup()
{
// Setup the network configuration
//
// The vNet address is 11(hex) that is 17(dec), so the IP address is
// the base IP address with 17 as last octect (ex. 192.168.0.17)
Souliss_SetAddress(network_address_1, network_my_subnet, network_my_supern);

// Load the address also in the memory_map
Souliss_SetLocalAddress(memory_map, network_address_1);
        Souliss_SetRemoteAddress(memory_map, network_address_2, 1);
// Set the typical to use
        Souliss_SetT14(memory_map, CANC);
        Souliss_SetT14 (memory_map, PORT);
Souliss_SetT52(memory_map, TEMPERATURE);
Souliss_SetT53(memory_map, HUMIDITY);

            pinMode(2, OUTPUT); //CANC
            pinMode(3, OUTPUT); //PORT
ssDHT_Begin(DHT_id1);
}

void loop()
if(abs(millis()-tmr_fast) > time_base_fast)
{
tmr_fast = millis();
phase_fast = (phase_fast + 1) % num_phases;

// Execute the code every 5 time_base_fast  
if (!(phase_fast % 10))
{   
// Retreive data from the MaCaco communication channel
Souliss_CommunicationData(memory_map, &data_changed);

                        Souliss_Logic_T14(memory_map, CANC, &data_changed);
                        Souliss_Logic_T14(memory_map, PORT, &data_changed);
Souliss_DigOut(2, Souliss_T1n_Coil, memory_map, CANC);
Souliss_DigOut(3, Souliss_T1n_Coil, memory_map, PORT);
                        Souliss_CommunicationData(memory_map, &data_changed);
}

                if (!(phase_fast % 31))
                {   
                // Get logic typicals once and at every refresh
                Souliss_GetTypicals(memory_map, 1);
                }
// Execute the code every 101 time_base_fast  
if (!(phase_fast % 101))
{
// Compare the acquired input with the stored one, send the new value to the
// user interface if the difference is greater than the deadband
Souliss_Logic_T52(memory_map, TEMPERATURE, DEADBAND, &data_changed);
Souliss_Logic_T53(memory_map, HUMIDITY, DEADBAND, &data_changed);
}
}
else if(abs(millis()-tmr_slow) > time_base_slow)
{
tmr_slow = millis();
phase_slow = (phase_slow + 1) % num_phases;


                // Execute the code every 7 time_base_slow   
                if (!(phase_slow % 7))
                {
                        // Refresh logic typicals
                        Souliss_RefreshTypicals();
                 }
                 
// Execute the code every 11 time_base_slow
if (!(phase_slow % 11))
{                 
// Read temperature value from DHT sensor and convert from single-precision to half-precision
float temperature = ssDHT_readTemperature(DHT_id1);
Souliss_ImportAnalog(memory_map, TEMPERATURE, &temperature);
// Read humidity value from DHT sensor and convert from single-precision to half-precision
float humidity = ssDHT_readHumidity(DHT_id1);
Souliss_ImportAnalog(memory_map, HUMIDITY, &humidity);
}  
}

secondo nodo

/**************************************************************************
Souliss - Temperature and Humidity Measure
The temperature and humidity are acquired from a DHT11/21/22 sensor
and available at user interface as half-precision floating point.
If any in-between calculation would be performed, the values shall
be converted in single precision floating point and then back in
half-precision.
The Device has
- An DHT11/21/22 sensor on PIN 2
 
CONFIGURATION IS MANDATORY BEFORE COMPILING
Before compiling this code, is mandatory the configuration of the framework
this ensure the use of proper drivers based functionalities and requested
communication interface.
Configuration files are located on /conf folder, is suggested to use this 
code on one of the boards listed below, the code can also compile on other
boards but may require modification on I/O definitions.
Run this code on one of the following boards:
Board Conf Code Board Model
        0x03         Arduino Ethernet (W5100) 
0x04 Arduino with Ethernet Shield (W5100)
0x05 Arduino with ENC28J60 Ethernet Shield

Sensor Conf
0x01 Temperature and humidity DHT11, DHT21, DHT22
******************** Configuration Parameters *********************
Configuration file Parameter
QuickCfg.h #define QC_ENABLE 0x01
QuickCfg.h #define QC_BOARDTYPE 0x03, 0x04, 0x05
QuickCfg.h #define DHT_SENSOR 0x01
Is required an additional IP configuration using the following parameters
QuickCfg.h const uint8_t DEFAULT_BASEIPADDRESS[] = {...}
QuickCfg.h const uint8_t DEFAULT_SUBMASK[]       = {...}
QuickCfg.h const uint8_t DEFAULT_GATEWAY[]       = {...}
***************************************************************************/
#include "Souliss.h"
#include "Typicals.h"
#include <SPI.h>
#include "EmonLib.h"             // Include Emon Library
EnergyMonitor emon1;             // Create an instance

#define network_address_1 0x00FD
#define network_address_2 0x00FC
#define network_my_subnet 0xFF00
#define network_my_supern 0x00FD

#define DHT_id1 1 // Identify the sensor, in case of more than one used on the same board

#define SLOT_Watt 0 // This is the memory slot
#define TEMPERATURE 2 // This is the memory slot used for the execution of the logic in network_address1
#define HUMIDITY 4 // This is the memory slot used for the execution of the logic
#define DEADBAND 0.05 // Deadband value 5%  

// define the shared memory map
U8 memory_map[MaCaco_MEMMAP];

// flag 
U8 data_changed = 0;

#define time_base_fast 10 // Time cycle in milliseconds
#define time_base_slow 10000 // Time cycle in milliseconds
#define num_phases 255 // Number of phases

U8 phase_speedy=0, phase_fast=0, phase_slow=0;
unsigned long tmr_fast=0, tmr_slow=0;  

// Setup the DHT sensor
ssDHT11_Init(5, DHT_id1);

void setup()
{
// Setup the network configuration
//
// The vNet address is 11(hex) that is 17(dec), so the IP address is
// the base IP address with 17 as last octect (ex. 192.168.0.17)
Souliss_SetAddress(network_address_2, network_my_subnet, network_my_supern);

// Load the address also in the memory_map
Souliss_SetLocalAddress(memory_map, network_address_2);
// Set the typical to use
Souliss_SetT57(memory_map, SLOT_Watt);
Souliss_SetT52(memory_map, TEMPERATURE);
Souliss_SetT53(memory_map, HUMIDITY);
emon1.voltage(1, 239.40, 1.7);  // Voltage: input pin, calibration, phase_shift
emon1.current(2, 59.9);       // Current: input pin, calibration.
ssDHT_Begin(DHT_id1);
}

float fVal;

void loop()
if(abs(millis()-tmr_fast) > time_base_fast)
{
tmr_fast = millis();
phase_fast = (phase_fast + 1) % num_phases;

// Execute the code every 101 time_base_fast  
if (!(phase_fast % 101))
{
// Compare the acquired input with the stored one, send the new value to the
// user interface if the difference is greater than the deadband
Souliss_Logic_T52(memory_map, TEMPERATURE, DEADBAND, &data_changed);
Souliss_Logic_T53(memory_map, HUMIDITY, DEADBAND, &data_changed);
// Compare the acquired input with the stored one, send the new value to the
// user interface if the difference is greater than the deadband
Souliss_Logic_T57(memory_map, SLOT_Watt, DEADBAND, &data_changed);
// Acquire data from the microcontroller ADC
emon1.calcVI(20,2000); 
fVal =emon1.realPower;
if(abs(fVal)<0.99) fVal=0.01; //...per evitare fluttuazioni del valore ad utenze spente. Pongo a 0.01 perch� a 0.00 Android non aggiorna pi�, forse � un bug.
Souliss_ImportAnalog(memory_map, SLOT_Watt, &fVal);
}
}
else if(abs(millis()-tmr_slow) > time_base_slow)
{
tmr_slow = millis();
phase_slow = (phase_slow + 1) % num_phases;

// Execute the code every 11 time_base_slow
if (!(phase_slow % 11))
{                 
// Read temperature value from DHT sensor and convert from single-precision to half-precision
float temperature = ssDHT_readTemperature(DHT_id1);
Souliss_ImportAnalog(memory_map, TEMPERATURE, &temperature);
// Read humidity value from DHT sensor and convert from single-precision to half-precision
float humidity = ssDHT_readHumidity(DHT_id1);
Souliss_ImportAnalog(memory_map, HUMIDITY, &humidity);
}  
}

solo il primo nodo è impostato come gateway


Marco Fabbri

unread,
Oct 23, 2013, 4:39:16 PM10/23/13
to sou...@googlegroups.com
il primo nodo funziona correttamente
il secondo pinga da shell
soulissapp vede 2 nodi e solo i dispositivi del primo nodo

Di Maio, Dario

unread,
Oct 23, 2013, 5:01:09 PM10/23/13
to sou...@googlegroups.com
Nel primo nodo ti manca Souliss_CommunicationChannels, mentre hai due volte Souliss_CommunicationData. Per il resto dovrebbe andare.

Dario.


Di Maio, Dario

unread,
Oct 23, 2013, 5:06:06 PM10/23/13
to sou...@googlegroups.com
Il numero dei nodi è hard-coded con la funzione Souliss_SetRemoteAddress, quindi vedi sempre (anche se non c'è comunicazione) il numero corretto di nodi impostati nella rete.

In runtime c'è la raccolta dei dati con Souliss_CommunicationChannels (che manca nel tuo sketch) e Souliss_GetTypicals. E' la prima volta che usi più di un nodo? Se si, considera che al primo giro ci vuole un poco di tempo affinché vengano letti i tipici, perché avviene su richieste periodiche che dipendono dai tempi di esecuzione di GetTypicals e RefreshTypicals.

Dalla release A5, questo problema non c'è più.

Fammi sapere,
Dario.


--

Marco Fabbri

unread,
Oct 23, 2013, 5:11:57 PM10/23/13
to sou...@googlegroups.com
Si prima volta che uso più di in nodo.
Appena posso provo e ti faccio sapere,
Grazie delle sempre veloci risposte.

Di Maio, Dario

unread,
Oct 23, 2013, 5:14:54 PM10/23/13
to sou...@googlegroups.com
Se hai bisogno chiedi pure :)

Dario.

Mattia Rossi

unread,
Oct 23, 2013, 5:32:45 PM10/23/13
to sou...@googlegroups.com


On Wednesday, October 23, 2013 7:07:25 PM UTC+2, Dario Di Maio wrote:
Ciao Mattia,

anche noi dubitavamo su come realizzare la misura dei kWh partendo dalle misure di tensione, corrente e sfasamento, lato scheda il problema principale è nell'assenza di un RTC, senza il quale la misura nel tempo andrebbe a divergere.
Inoltre sono da considerare gli errori di misura di tensione e corrente, che integrati possono divergere. Per questi motivi sono d'accordo nell'utilizzare un misuratore esterno e riportare la misura contando gli impulsi.

Sono del parere che provare ad utilizzare emonCMS come strumento di visualizzazione dei dati, integrato con Souliss, sia un passo interessante.

Parlando di architettura, Souliss è effettivamente p2p ma esistono dei collettori. Principalmente SoulissApp su Android è un collettore dati, con funzioni simili (ma meno sofisticate) di storicizzazione e presentazione su grafici.

Spingere verso il minor numero di periferiche che potenzialmente si possono rompere mi sembra una buona idea , sono pero' un po' dubbioso che una periferica android (e in generale una periferica che usa una sd come storage) sia adatta a storicizzare dati nel medio e lungo periodo.
Per poter storicizzare non ci sono molte scelte se non un database (su android immagino sqlite) o qualcosa tipo timestore, che utilizza file binari e se si parla di storicizzazione di consumo di energia con una precisione decente si parla di una misura (che diventano almeno tre quando si aggiunge il calcolo KWh e KWh/d) ogni 5 secondi ... questo vuol dire un sacco di dati (il mio db Emoncms che memorizza circa 60 valori occupera' circa 500 mega/anno con mysql e 200 mega utilizzando timestore) e un sacco di scritture sul supporto di memorizzazione. Per esperienze dal forum di emoncms una sd di un raspberry con mysql che memorizza dati si corrompe in un tempo che va da qualche giorno a qualche mese ....

 
L'idea su cui stiamo orientando lo sviluppo è quella di introdurre in SoulissApp funzionalità (con abilitazione) da server, con l'obiettivo di ridurre l'hardware da installare in casa. Quando parlo di server, mi riferisco alla possibilità di collettare dati, eseguire logiche su eventi e presentarli verso l'esterno.

Questo emoncms lo fa di suo, di contro richiede uno stack apache/php/mysql
 
Resta sotto una rete p2p,dove è possibile costruire logiche con interazione diretta tra i nodi.
 
Nei prossimi sviluppi è previsto il supporto per i moduli radio NRLF, ho dubbi relativi all'utilizzo con batteria, perché le schede che orbitano attorno Arduino non sono propriamente parche in termini di consumi. Probabilmente con qualche accorgimento (come ad esempio escludere il regolatore di tensione) si può ottenere qualche risultato, ma è da vedere.

Nella mia idea di nodo a batteria con radio nrlf pensavo a una cosa come questa http://harizanov.com/2013/05/new-atmega32u4-board-to-use-with-nrf24l01/ con dei sensori attaccati .. naturalmente non avrebbe senso cercare di pilotare dei rele' o altra roba che richiede un sacco di corrente, ma andrebbe bene per raccogliere dati ... una scheda alimentata con 5V o12V la vedrei bene nel caso di installazioni dove portare il cavo di rete e' improbabile e dove si voglia spendere poco per la parte radio ....
 
Lato softwarei driver radio funzionano su interrupt, lo stesso dovrà essere fatto per l'NRLF.

Io sto studiando questa libreria https://github.com/maniacbug/RF24/ , che dovrebbe supportare una gestione del chip via interrupt (https://github.com/maniacbug/RF24/blob/master/examples/pingpair_irq/pingpair_irq.pde) eche ha anche un'implementazione di comunicazione distribuita tra piu' nodi (non peer to perr ma organizzati ad albero): http://maniacbug.github.io/RF24Network/
 
Per quanto riguarda Raspberry o Beagle board, possono essere pensate come hardware supportato in termini di collettore dati (come avviene in OEM) mentre vedo difficile giustificare l'uso di queste tipologie di schede come terminali diretti di attuazione.

D'accordissimo, al massimo anche in questo caso vedrei un raspberry/beagle come punto di raccolta dati da vari sensori dato che si trova codice per ricevere dati da un sacco di stazioni meteo
 
In generale, la linea principale del progetto è quella di costruire funzionalità server attraverso SoulissApp, ma sarebbe assolutamente interessante introdurre altre interfacce in parallelo (interessanti sono openHAB e Lagardo SWAP), se si trovano persone con tempo a sufficenza si può tranquillamente aprire una nuova linea di sviluppo. 

Parlando dell'integrazione tra il tuo sistema OEM e Souliss, dobbiamo capire cose/come integrare e dove inserirci. Sul tuo blog ho letto che hai già realizzato un'integrazione tra i dati metereologici e l'attivazione delle pompe, sarebbe interessante capire con quali strumenti.

Uso il raspberry per ricevere dati sia dagli emontx (che usano un chip radio diverso, un RFM12b) che da dei sensori di una stazione metereologica con un ricevitore RFM01, della stessa famiglia del RFM12 ma inizializzato con parametri diversi per capire il protocollo dei sensori, e li carico in emoncms dove ci faccio dei ragionamenti e eventualmente faccio delle segnalazioni (pompe accese, pioggia oltre un certo limite, consumo corrente oltre un certo limite)
Uno degli emontx e' collegato su bus I2C con la scheda che monitora e controlla i contattori ai quali sono collegate le pompe, e contemporaneamente misura la corrente consumata solo dallle linee delle pompe. In questo modo posso monitorare lo stato dei galleggianti, l'avvenuta accensione delle pompe e l'effettivo funzionamento tramite la misurazione di corrente (se la pompa non parte la misurazione e' zero, se la pompa si intasa consuma meno watt di quando gira bene e posso generare un warning)
Uso il raspberry anche per la gestione di emoncms, ma memorizzo i dati su un nas per non schiantare la sd card del raspebrry 

 
Ti ho aggiunto nel progetto, adesso puoi modificare wiki issue ed altro.
http://code.google.com/p/souliss/people/list

Grazie, cerco di organizzare le idee, poi faccio delle proposte .. se intanto hai delle pagine in cui vorresti che l'inglese fosse 'aggiustato' mandami pure un elenco e mi metto al lavoro ....

Di Maio, Dario

unread,
Oct 23, 2013, 6:22:19 PM10/23/13
to sou...@googlegroups.com
Ti rispondo in linea



Spingere verso il minor numero di periferiche che potenzialmente si possono rompere mi sembra una buona idea , sono pero' un po' dubbioso che una periferica android (e in generale una periferica che usa una sd come storage) sia adatta a storicizzare dati nel medio e lungo periodo.
Per poter storicizzare non ci sono molte scelte se non un database (su android immagino sqlite) o qualcosa tipo timestore, che utilizza file binari e se si parla di storicizzazione di consumo di energia con una precisione decente si parla di una misura (che diventano almeno tre quando si aggiunge il calcolo KWh e KWh/d) ogni 5 secondi ... questo vuol dire un sacco di dati (il mio db Emoncms che memorizza circa 60 valori occupera' circa 500 mega/anno con mysql e 200 mega utilizzando timestore) e un sacco di scritture sul supporto di memorizzazione. Per esperienze dal forum di emoncms una sd di un raspberry con mysql che memorizza dati si corrompe in un tempo che va da qualche giorno a qualche mese ....

 

E' un aspetto interessante, come nota posso dire che nel caso nostro non c'è un polling ma una trasmissione su evento. Quindi i valori sono comunicati in base ad una deadband, riducendo il quantitativo di informazioni da immagazzinare.
Il database gira su SQLite e non è su SD card, però lascio ad Alessandro (autore di SoulissApp) la risposta con maggiori dettagli.

Di sicuro utilizzare dispositivi Android ha diverse controindicazioni, questa è potenzialmente una. In base allo scopo dell'installazione può valere la candela o meno usare Android con funzioni da server.


 
Nella mia idea di nodo a batteria con radio nrlf pensavo a una cosa come questa http://harizanov.com/2013/05/new-atmega32u4-board-to-use-with-nrf24l01/ con dei sensori attaccati .. naturalmente non avrebbe senso cercare di pilotare dei rele' o altra roba che richiede un sacco di corrente, ma andrebbe bene per raccogliere dati ... una scheda alimentata con 5V o12V la vedrei bene nel caso di installazioni dove portare il cavo di rete e' improbabile e dove si voglia spendere poco per la parte radio ....

E' una scheda interessante, anche perché nasce direttamente per l'uso con batteria. Se il lavoro è fatto bene, dovrebbe avere un bootloader con le funzioni non necessarie disabilitate. Molto comunque dipende dai sensori collegati e dall'energia richiesta.

Per un nodo del genere, andrebbe introdotta la modalità sleep, in modo da spegnerlo periodicamente ed accenderlo per effettuare la misura ed inviare i dati su variazione (non periodicamente). Questo approccio (non periodico) funziona bene con Souliss, mentre non so se emonCMS richieda dati ad intervalli regolari.
 
Io sto studiando questa libreria https://github.com/maniacbug/RF24/ , che dovrebbe supportare una gestione del chip via interrupt (https://github.com/maniacbug/RF24/blob/master/examples/pingpair_irq/pingpair_irq.pde) eche ha anche un'implementazione di comunicazione distribuita tra piu' nodi (non peer to perr ma organizzati ad albero): http://maniacbug.github.io/RF24Network/

 
Anche io pensavo di utilizzare quella, estraendo la sola parte SPI<->Radio, il resto è già dentro Souliss e quindi funzionarebbe direttamente in p2p.

 
Per quanto riguarda Raspberry o Beagle board, possono essere pensate come hardware supportato in termini di collettore dati (come avviene in OEM) mentre vedo difficile giustificare l'uso di queste tipologie di schede come terminali diretti di attuazione.

D'accordissimo, al massimo anche in questo caso vedrei un raspberry/beagle come punto di raccolta dati da vari sensori dato che si trova codice per ricevere dati da un sacco di stazioni meteo
 
Uso il raspberry per ricevere dati sia dagli emontx (che usano un chip radio diverso, un RFM12b) che da dei sensori di una stazione metereologica con un ricevitore RFM01, della stessa famiglia del RFM12 ma inizializzato con parametri diversi per capire il protocollo dei sensori, e li carico in emoncms dove ci faccio dei ragionamenti e eventualmente faccio delle segnalazioni (pompe accese, pioggia oltre un certo limite, consumo corrente oltre un certo limite)
Uno degli emontx e' collegato su bus I2C con la scheda che monitora e controlla i contattori ai quali sono collegate le pompe, e contemporaneamente misura la corrente consumata solo dallle linee delle pompe. In questo modo posso monitorare lo stato dei galleggianti, l'avvenuta accensione delle pompe e l'effettivo funzionamento tramite la misurazione di corrente (se la pompa non parte la misurazione e' zero, se la pompa si intasa consuma meno watt di quando gira bene e posso generare un warning)
Uso il raspberry anche per la gestione di emoncms, ma memorizzo i dati su un nas per non schiantare la sd card del raspebrry 

Per capire, come leghi i due applicativi? emonCMS e quello meteo intendo
 
Grazie, cerco di organizzare le idee, poi faccio delle proposte .. se intanto hai delle pagine in cui vorresti che l'inglese fosse 'aggiustato' mandami pure un elenco e mi metto al lavoro ....


Quelle che ho scritto io hanno tutte un'inglese da sistemare, ma più che la grammatica mi interessa il tuo contributo nell'integrazione tra Souliss ed emonCMS ;)


 
Saluti,
Dario.


2013/10/23 Mattia Rossi <>
Ciao, mi inserisco tardi nella conversazione ma solo in questi giorni sono venuto a conoscenza del progetto Souliss.
Ho invece da qualche mese installato due nodi emontx comprati da openenergymonitor, e ho pasticciato un pò con le varie configurazioni di sensori e con EmonCMS, il software che openenergymonitor usa per raccogliere i dati dai vari sensori, e volevo se possibile contribuire alla conversazione per far capire la logica di funzionamento del sistema openenergymonitor.

Come da post precedenti la combinazione pinza amperometrica e trasformatore AC-AC, soprattutto con il CT da 100A e il circuito di OEM (OpenEnergyMonitor) hanno un margine di errore elevato quando i consumi sono sotto i 300W  (nell'ordine del 10%) e ancor di più quando si scende sotto i 100W (oltre il 30%). 

La scheda emontx ha anche la possibilità di usare un sensore ottico per contare gli impulsi del contatore (uno ogni Wh, 1000 impulsi=1KWh come già dettto nei post precedentemente), io ho avuto scarso successo con il sensore ottico, non so se l'ho fritto mentre l'ho collegato (col saldatore sono un pessimo soggetto) o se il tipo di sensore ottico dello shop non va bene per i contatori italiani .. se controllo con il tester i voltaggi sembrano a posto, e se lo tengo al buio non segna niente come dovrebbe, ma appena lo espongo a un minimo di luce mi genera interrupt in continuazione ... non ho idea se sia un problema mio, o del fatto che nonostante lo abbia attaccato al vetro del contatore con abbondante pasta tipo pongo continui a essere disturbato dalla luce dell'ambiente .... per stare dalla parte della ragione ho comprato un paio di contatori monofase con uscita open collector, che fanno la stessa cosa del contatore (un impulso ogni Wh di corrente che lo attraversa) ma generano l'impulso su due contatti collegabili direttamente a un pin di arduino.
Su questo post c'è la descrizione del setup ed il codice che ho usato per gli esperimenti: http://blog.mrossi.com/2013/10/arduino-pulse-counting-with-multiple.html )
 
Per calcolare la potenza su un dato periodo l'emontx 'bara' nel senso che non fa il calcolo, ma invia le misure istantanee ad un'istanza EmonCMS, che è un applicazione basata su php+mysql (e nell'ultima versione anche su Timestore ) e a cui è demandata la funzione di storicizzazione dei dati e di presentazione di detti dati tramite interfaccia web. Una funzionalità di Emoncms è la possibilità di processare i dati in arrivo per calcolare valori accumulati nel tempo, con particolare attenzione al consumo energetico (quindi KWh, KWh/giorno), ma anche valori differenti come temperature o livelli.
EmonCMS è un sistema orientato all'accumulo e visualizzazione di dati, non ha internamente il concetto di controllo o automazione, ha solamente la possibilità di generare determinati eventi configurabili come invio di notifiche/email/http get all'accadere di certe situazioni 

Direi quindi che l'approccio OEM (un server che colleziona dati basato su DB+storage, nessuna possibilità di controllo e gestione degli eventi macchinosa) è diametralmente opposto all'approccio Souliss (sistema distribuito/comunicazione peer to peer/funzionamento indipendente dei singoli nodi) e che i due sistemi svolgono funzioni diverse.


Nei prossimi giorni cercherò di studiare un pò il funzionamento di Souliss per cercare di dare qualche suggerimento costruttivo (al momento sparerei solo cagate, temo) su come eventualmente implementare la funzionalità di storicizzazione dei dati in modo da non stravolgere l'approccio distribuito/peer to peer.

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Alessandro Del Pex

unread,
Oct 23, 2013, 7:05:22 PM10/23/13
to sou...@googlegroups.com
Ciao Mattia, benvenuto.

L'app usa il Db sqlite standard per android e iOS. Naturalmente non e` pensato per scopi scientifici ne` per uso massivo.
Le prestazioni con l'app sono tutto sommato buone, anche perche` sono costretto a serializzare le scritture per evitare corruzioni e altre rogne. Originariamente, il logging dei dispositivi doveva essere una feature secondaria, pensata piu che altro per temperatura, luce, umidita` e robe cosi. E` evidente che la visualizzazione di grafici e la storicizzazione dei valori non puo` essere affidata all'app nel caso della misurazione di corrente, soprattutto considerando l'ubiquita` del dispositivo e della connettivita` non permanente. Oltre a cio`, ci sono i prevedibili problemi di scalabilita` nel caso di misurazioni a lungo termine...Se e` vero che si corrompe un mySql su RB, figurati un DB nosql...Inoltre, il logging dei dispositivi avviene quando viene eseguito il servizio in backg ovvero mediamente ogni 15 minuti. Lanciarlo ogni 5 secondi avrebbe un impatto notevole sulla batteria, non e` ipotizzabile.

Alessandro

Di Maio, Dario

unread,
Oct 24, 2013, 12:33:38 AM10/24/13
to sou...@googlegroups.com

So che Alessandro non é tanto affezionato all'idea, ma i problemi di connettività e batteria si risolvono con un dispositivo dedicato ed installato nella LAN.

Il discorso della frequenza dei dati é un punto interessante, Mattia potresti allegare un csv dei tuoi consumi? Da li possiamo facilmente stimare la quantità di dati da immagazzinare con una variazione al 5%.

@Alessandro, una cosa che non mi é chiara é sull'uso del servizio periodico di background.
A SoulissApp arrivano e sono visualizzate correttamente le variazioni dei valori analogici, senza dover usare il polling.
Nel database, questi valori sono utilizzati o sono memorizzati solo i valori acquisiti in polling?

A memoria io avevo un nodo con il polling di background a 45 minuti e riusciva a loggare correttamente i valori di temperatura. Non mi sembrava lo facesse ogni 45min, ma su variazione. Mi sbaglio?

Dario.

From mobile.

Tomas Falcone

unread,
Oct 24, 2013, 4:51:32 AM10/24/13
to sou...@googlegroups.com
mi aggiungo anche io alla discussione per portare la mia esperienza negli energy monitor.
Attualmente nel mio impianto fotovoltaico ho installato 3 logger.
Il primo è un datalogger NOVAPROJECT che legge i dati dall'inverter di energia e potenza prodotta e li trasmette su un portale.
Il secondo è un multimetro/analizzatore di rete Lovato DMK52, che con una pinza amperometrica, mi legge i dati del contatore di scambio ed collegato via MODBUS al datalogger NOVAPROJECT, in modo da vaere i dati letti sul portale.
li terzo è un elios4you che ha 2 pinze amperometriche e legge direttamente dati dai 2 contatori produzione e scambio, e mi visualizza i dati stoici in locale sul mio tablet.

Il multimetro DMK5a ha una pinza Amperometrica da 100/5A ovvero con una corrente di 100Ampere in ingresso, mi da una uscita di corrente proporzioanle a 5A.....
siccome sono 100 A, e nel mio caso sono troppi, e leggendomi un po di forum in giro, ho scoperto che è possibile fare "n" spire, in modo da trasformarla in una pinza piu piccola ovvero con n=4 abbiiamo una pinza da 25/A.
Il mio multimetro di rete ha una corrente minima misuarabile di 0,05A e una corrente massima di 5A, che con una pinza da 100/5A, si tramuta in una lettura di potenza massima di potenza di 27,5kw, e minima di 220W.
Mentre facendo 4 spire mi si trasforma in una 25/5A, e ottengo una lettura di potenza massima di 6,8Kw e una potenza minima di 55W
Mentre facendo 5 spire mi si trasforma in una 20/5A, e ottengo una lettura di potenza massima di 5,5Kw e una potenza minima di 44W. 

Quindi se volete diminuire il range di utilizzo della pinza amperometrica, non vi resta altro che fare delle spire, e in automatico avrete piu precisone nel campo di correnti domestiche.




Il giorno giovedì 24 ottobre 2013 06:33:38 UTC+2, Dario Di Maio ha scrodottaitto:

Mattia Rossi

unread,
Oct 24, 2013, 5:20:19 AM10/24/13
to sou...@googlegroups.com


On Thursday, October 24, 2013 12:22:19 AM UTC+2, Dario Di Maio wrote:

E' un aspetto interessante, come nota posso dire che nel caso nostro non c'è un polling ma una trasmissione su evento. Quindi i valori sono comunicati in base ad una deadband, riducendo il quantitativo di informazioni da immagazzinare.
Il database gira su SQLite e non è su SD card, però lascio ad Alessandro (autore di SoulissApp) la risposta con maggiori dettagli.


Se non su SD card sulla flash dell'appliance, ma sempre uno storage con un numero di write prima di fallire limitato e non adatto a sopportare write costanti (e soprattutto update costanti sulle stesse tabelle)

 
Di sicuro utilizzare dispositivi Android ha diverse controindicazioni, questa è potenzialmente una. In base allo scopo dell'installazione può valere la candela o meno usare Android con funzioni da server.
 
Per contro, visto che inizia a diffondersi anche come s.o su piattaforme embedded (udoo, odroid) potrebbe permettere sviluppi interessanti (funzionalità server abilitata solo su certe piattaforme), l'ideale sarebbe cercare di scorporare il più possibile il lato funzionalità (server, comunicazioni) dal lato presentazione del dato e gestione input per poter riutilizzare eventualmente parte del codice su piattaforme diverse

 
E' una scheda interessante, anche perché nasce direttamente per l'uso con batteria. Se il lavoro è fatto bene, dovrebbe avere un bootloader con le funzioni non necessarie disabilitate. Molto comunque dipende dai sensori collegati e dall'energia richiesta.


Eh, l'applicazione tipica di un nodo di quel tipo sarebbe e' un sensore pressione/temperatura che viene alimentato solo il tempo necessario per effettuare la misura
 
Per un nodo del genere, andrebbe introdotta la modalità sleep, in modo da spegnerlo periodicamente ed accenderlo per effettuare la misura ed inviare i dati su variazione (non periodicamente). Questo approccio (non periodico) funziona bene con Souliss, mentre non so se emonCMS richieda dati ad intervalli regolari.
 

emonCMS 'bara' di nuovo, nel senso che non richiede mai dati a nessuno, sono i vari nodi che devono in qualche modo trasmettere l'informazione al sistema centrale. Nel caso degli emontx questo avviene tramite radio RFM12, e c'è bisogno di un gateway RFM12-Emoncms che si preoccupi di ricevere i dati e di inviarli a EmonCMS in un formato comprensibile (di solito un post HTTP)
 
Anche io pensavo di utilizzare quella, estraendo la sola parte SPI<->Radio, il resto è già dentro Souliss e quindi funzionarebbe direttamente in p2p.

Eh .. dovrei smetterla di pontificare e usare congiuntivi e iniziare a dare un'occhiata al codice ....
 
 
Per capire, come leghi i due applicativi? emonCMS e quello meteo intendo
 

Il sistema meteo è questo: https://github.com/ToninoTarsi/swpi
E' un applicativo python che gira sul raspberry: gestisce la ricezione dei dati dai sensori e li memorizza in un suo database (sqlite), io ho poi scritto un plugin che estrae i dati che mi interessano e li manda su emonCMS. 
Per la visualizzazione dei dati meteo uso anche un terzo applicativo: http://pocasi.hovnet.cz/wxwug.php che utilizza un database mysql (o weather underground) come repository dei dati
Emoncms permette di creare delle 'dashboard' dove si possono inserire elementi preconfigurati che recuperano dati dal database interno (grafici, dial, gauges) ma anche html generico con cui si possono includere elementi esterni al sistema
Un esempio:

In questa dasboard ho una parte di elementi emoncms (a destra) e un iframe che include una pagina esterna (sempre sullo stesso web server) che visualizza i grafici dei dati meteo. Ho scelto questa strada perchè i grafici di Emoncms sono molto orientati al consumo energetico, e implementare le visualizzazioni come in wxwugraphs avrebbe richiesto secoli

Questo invece è uno screenshot di una dashboard con elementi di emoncms:

In quasi tutti i grafici è possibile fare uno zoom/drill down per isolare intervalli specifici di tempo

Questo invece è un esempio di grafico che confronta tre sensori di temperatura (interno a Emoncms):




Quelle che ho scritto io hanno tutte un'inglese da sistemare, ma più che la grammatica mi interessa il tuo contributo nell'integrazione tra Souliss ed emonCMS ;)


Eh, ho capito, direi che un primo studio da parte mia potrebbe riguardare la possibilità di scrivere un collettore Souliss che giri su un sistema linux, e che eventualmente inserisca dati su Emoncms (ma a quel punto anche su altri sistemi tipo PVoutput o Pachube/Xively), o in alternativa lavorare solo lato Souliss/Arduino e pensare di scrivere qualcosa ad hoc per Emoncms che faccia il forward di alcuni tipi di dati da un nodo che abbia una scheda ethernet



 

Mattia Rossi

unread,
Oct 24, 2013, 5:45:23 AM10/24/13
to sou...@googlegroups.com


On Thursday, October 24, 2013 6:33:38 AM UTC+2, Dario Di Maio wrote:

So che Alessandro non é tanto affezionato all'idea, ma i problemi di connettività e batteria si risolvono con un dispositivo dedicato ed installato nella LAN.

Eh, il problema è che mi rendo conto che poche persone sono disposte ad aggiungere un dispositivo sempre acceso (dando per scontato che siano già dotate di switch/router), magari con uno storage, e di mantenerlo funzionante, ma l'alternativa è utilizzare un servizio esterno che può funzionare o meno a seconda dell'affidabilità di una connessione internet ... io ultimamente a chi ha esigenza di avere una periferica always on, magari da usare anche come sistema di backup per foto/telefoni/dati consiglio prodotti tipo questo:
che oltre ad essere facile da usare ha anche uno stack apache/php/mysql installato di default e permette di utilizzare il nas anche come mini web server interno, con consumi ragionevoli. I costi .. circa 500 euro con 2 hd sono altini, ma alla lunga meno di utilizzare un servizio a pagamento online per qualche anno, e senza tenere conto del costo di recupero di dati da un hd fottuto con sopra tutte le foto degli ultimi 4-5 anni ...

Il raspberry o la beagleboard vanno bene per gli smanettoni, costano niente, consumano poco-neinte, ma hanno i loro limiti (scheda rete 10/100, no storage) che devono essere capiti.
 

Il discorso della frequenza dei dati é un punto interessante, Mattia potresti allegare un csv dei tuoi consumi? Da li possiamo facilmente stimare la quantità di dati da immagazzinare con una variazione al 5%.

Eccolo ....


result.csv

Flavio P.

unread,
Oct 24, 2013, 5:51:48 AM10/24/13
to sou...@googlegroups.com
Al posto di usare quel costoso sistema, si potrebbe optare per sw e hw open,come da filosofia Souliss...
Freenas ne può essere un'esempio,presumo si possa anche adattare ad hw low cost e open come raspberry/beagle...


--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--

Mattia Rossi

unread,
Oct 24, 2013, 7:07:31 AM10/24/13
to sou...@googlegroups.com


On Thursday, October 24, 2013 11:51:48 AM UTC+2, Flavio wrote:
Al posto di usare quel costoso sistema, si potrebbe optare per sw e hw open,come da filosofia Souliss...
Freenas ne può essere un'esempio,presumo si possa anche adattare ad hw low cost e open come raspberry/beagle...

Eh, presumi male, a meno che tu non voglia ottenere un sistema che ha un throughput massimo di 5-6MB/s - raspberry et similia comunicano con periferiche di rete e storage via bus usb (condiviso). Inoltre raspberry non supporta freebsd .. dovresti usare openmediavault.

Se invece vuoi avere un sistema con prestazioni simili (e consumi simili) il costo della soluzione assemblata non è che sia così diverso (di 500 euro il costo del nas è circa 350 .. una motherboard low power ti costa 130, 40 di memoria, 40 di case e 40 di alimentatore ... fai in fretta ad andarci vicino ...)

Comunque io parlavo di cosa consiglio a non informatici che hanno esigenze di questo tipo (raccogliere ed archiviare dati, con magari la possibilità di avere un mini web server) e ai quali do consigli (gratis) e non voglio dover dare supporto (gratis) per i quali 500 euro è un costo irrisorio al confronto del tempo (infinito) che dovrebbero spendere per mettere in piedi un sistema fai da te dove devono imparare a gestire package, capire la differenza tra RAID 0 e 1 e magari essere in grado di aprire un case e collegarci roba.

Flavio P.

unread,
Oct 24, 2013, 7:38:25 AM10/24/13
to sou...@googlegroups.com
Eh, presumi male, a meno che tu non voglia ottenere un sistema che ha un throughput massimo di 5-6MB/s - raspberry et similia comunicano con periferiche di rete e storage via bus usb (condiviso). Inoltre raspberry non supporta freebsd .. dovresti usare openmediavault.

Se invece vuoi avere un sistema con prestazioni simili (e consumi simili) il costo della soluzione assemblata non è che sia così diverso (di 500 euro il costo del nas è circa 350 .. una motherboard low power ti costa 130, 40 di memoria, 40 di case e 40 di alimentatore ... fai in fretta ad andarci vicino ...)

Comunque io parlavo di cosa consiglio a non informatici che hanno esigenze di questo tipo (raccogliere ed archiviare dati, con magari la possibilità di avere un mini web server) e ai quali do consigli (gratis) e non voglio dover dare supporto (gratis) per i quali 500 euro è un costo irrisorio al confronto del tempo (infinito) che dovrebbero spendere per mettere in piedi un sistema fai da te dove devono imparare a gestire package, capire la differenza tra RAID 0 e 1 e magari essere in grado di aprire un case e collegarci roba.

Certo,ovvio che non tutti possono essere in grado/avere tempo di mettere in piedi un sistema NAS, ed in questo concordo con te e fai bene a consigliare la soluzione già "cucinata" commerciale :)
Per i costi non sono poi così alti, una mobo atom like(75€)+ram 2gb(15€)+case con ali(40€).....Restando su bassi consumi,come ha senso per un NAS....Per chi ci vuole smanettare(come noi smanettoni ;-) ), FreeNas si adatta bene al recupero di hw vecchio ed obsoleto che altrimenti si butterebbe(un vecchio pc che dismetti ad es.)....


Ho scritto tutto ciò non per darti contro, ma per permettere a chi ci legge, in caso necessiti un sistema simile,di avere un "metro" di confronto.



Il giorno 24 ottobre 2013 13:07, Mattia Rossi <mattia...@gmail.com> ha scritto:

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Di Maio, Dario

unread,
Oct 24, 2013, 11:08:09 AM10/24/13
to sou...@googlegroups.com
Stasera analizzo il tuo CSV e calcolo la frequenza di scritture sul database, considerando una trasmissione su eventi con deadband al 5% e costruisco per confronto il grafico con le letture in polling con quella ad eventi, così abbiamo dei numeri per ragionare sul problema.

In linea generale, Souliss (o meglio MaCaco) ha due modalità di funzionamento. Una (quella usata comunemente) è su sottoscrizione dei dati, quindi il nodo che vuole raccogliere informazioni effettua una sottoscrizione e riceve aggiornamento solo su variazione. Questo meccanismo è associato ad un polling ad intensità variabile, utilizzato con il solo scopo di verificare che il canale di comunicazione sia attivo.
Una seconda modalità è in push, dove il nodo che possiede i dati li invia al nodo che li vuole raccogliere. Questa modalità non è runtime (ma hardcoded) e non ha meccanismi di verifica sullo stato del canale di comunicazione.
Un nodo che entra in sleep deve usare questa seconda modalità.

Come hai intuito, la scelta di puntare su Android è legata ad alcuni fattori chiave. Il primo è che nessuno usa Android come server, essere diversi è un vantaggio che possiamo permetterci. L'altro aspetto fondamentale è nella diffusione di Android (è anche sulle autoradio), il che lo rende una piattaforma obbligatoria, questo unito al tempo limitato a disposizione ha portato a questa scelta.
Devo ammettere che ci sono stati diversi mal di pancia e non so fino a che punto siano stati superati.

Il mio parere è che sia necessario avere più soluzioni (se possibile) in modo da scegliere in base alle esigenze, dove sono da privilegiare le scelte che richiedono poco hardware e bassa difficoltà d'utilizzo. Avere un server su Android rende il tutto banale se confrontato con l'installazione su Linux dei componenti necessari.
Questo non esclude che possano esistere piattaforme alternative, dove poter ottenere risultati più interessanti.

Fino ad oggi non siamo partiti con lo sviluppo lato Linux perché non abbiamo materialmente il tempo di gestirlo, ma averlo a disposizione sarebbe molto interessante.

Se guardi nel forum trovi alcune discussioni sull'architettura di SoulissApp, ci sono alcuni aspetti molto interessanti, non tutti verranno tradotti in realtà, ma è una visione (l'integrazione orizzontale tra applicazioni) che a me piace tanto.

Tornando al discorso di Linux, faccio una verifica per capire sul carico sul database, da li si può capire quanto sia fattibile gestire il logging di dati fortemente variabili, come lo è il consumo di corrente. Sono però sicuro che la gestione su eventi riduca il carico sul database in modo notevole.
Non c'è purtroppo margine di manovra lato schede, perché la RAM e poca. Il consumo medio di Souliss si attesta al 65%, un buon valore per dare spazio a personalizzazioni degli sketch, ma può raggiungere facilmente valori prossimi all'80%.

Saluti,
Dario.

 

Tonino Fazio

unread,
Oct 24, 2013, 12:22:18 PM10/24/13
to sou...@googlegroups.com

Io sto lavorando ad un'applicazione apk separata che faccia da collettore dati da Soulisapp e li invii.... da qualche parte. Ho deciso di iniziare da xively, per il quale esiste già una demo su Android. (solo scheletro per xively)
Non prometto nulla sui tempi, ma piano piano ci arrivo.

Di Maio, Dario

unread,
Oct 24, 2013, 5:14:34 PM10/24/13
to sou...@googlegroups.com
Si, questo approccio rientra a pieno nella linea di sviluppo di SoulissApp :)


2013/10/24 Tonino Fazio <>

Io sto lavorando ad un'applicazione apk separata che faccia da collettore dati da Soulisapp e li invii.... da qualche parte. Ho deciso di iniziare da xively, per il quale esiste già una demo su Android. (solo scheletro per xively)
Non prometto nulla sui tempi, ma piano piano ci arrivo.

--

Di Maio, Dario

unread,
Oct 24, 2013, 5:38:11 PM10/24/13
to sou...@googlegroups.com
Ho preso il file con i consumi di Mattia e ne ho fatto una piccola analisi con Scilab.

Il log di partenza contiene 23433 campioni e copre un arco temporale di 48h, con un campionamento a cadenza media di 7.3 secondi. Riportato su un grafico il risultato è quello del file p.png

Inline image 3
Considerando questa sorgente dati, in Souliss i dati verranno trasferiti su variazione. Impostando una deadband al 10% del valore corrente, si ottiene questo grafico (pf.png)

Inline image 4
Il grafico è stato costruito con 1517 campioni effettivi, contro i 23433 della sorgente. Fino a quando non viene fornito un nuovo valore, viene assunto che il consumo sia costante.L'effetto è quello di un filtro, si perdono le variazioni attorno ai valori medi, ma sostanzialmente è possibile individuare tutte le variazioni ed i picchi.

Al fine di valutare i consumi energetici nella giornata, il grafico filtrato al 10% è valido. Non lo è se da questo grafico si vuole tirare fuori una stima dei kWh, dove però va consideranto che anche la sorgente non ha un time-stamping con un clock real-time, introducendo un errore di calcolo.

Il risultato direi che è buono, va capito se 1517 campioni sia un valore sostenibile per un dispositivo embedded che non nasce per gestire un elevato numero di accessi in scrittura ai supporti di memoria. Su un arco temporale di 48h, 1517 campioni corrispondono ad una frequenza media di 113 secondi.
A questo punto penso sia necessario l'intervento di Alessandro, il database lavora con una cache interna e la ricezione di un dato non necessariamente corrisponde ad una scrittura sul database, questo riduce ulteriormente il numero di accessi

Il valore assoluto è comunque elevato ed a mio avviso suggerirebbe la necessità (se ne era già parlato) di disabilitare il logging sul database interno dei valori analogici. La soluzione più interessante sarebbe quella di disabilitare sia completamente, sia per dispositivo, il logging.

Consideriamo i seguenti scenari:
1) Misura del consumo instantaneo senza logging. Utile se si vuole monitorare "dal vivo" le variazioni di consumo al variare dei dispostivi usati.
2) Misura del consumo instanteneo con logging per alcuni giorni. Utile se si vuole fare una valutazione sui consumi, magari a scadenze periodiche, senza la necessità di mantenere uno storico per tempi lunghi.
3) Misura del consumo instantaneo con logging per periodi lunghi. Utile per fare confronti temporali tra periodi diversi.

I primi due casi rientrano nelle possibilità di nodi con memorie flash, mentre il terzo richiede un hard disk classico (o in generale un NAS, se si vuol preverire la perdita dei dati).

Aspetto le vostre considerazioni.

Dario.













pf.png
p.png

Mattia Rossi

unread,
Oct 24, 2013, 6:01:29 PM10/24/13
to sou...@googlegroups.com
Io sono un pò indietro .. per ora ho fatto un clone del repository e ho iniziato con gli esempi base ... non ho avuto grossi problemi tranne che credo ci sia il file Typicals.cpp a una versione diversa rispetto al resto.
Il file su repository è questo:
/**************************************************************************
Souliss
    Copyright (C) 2011  Veseo

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Originally developed by Dario Di Maio and Alessandro DelPex
***************************************************************************/
/*!
    \file 
    \ingroup

*/

#include "frame/MaCaco/MaCaco.h"
#include "Souliss.h"
#include "Arduino.h"

#include "Typicals.h"

// In order to keep the typical file more readable, the code is split in
// different files located as per following path.
#include "typicals/T1n.cpp"
#include "typicals/T2n.cpp"
#include "typicals/T3n.cpp"
#include "typicals/T4n.cpp"
#include "typicals/T5n.cpp"


ma non è presente la directory typicals, e gli esempi non compilano lamentando l'assenza delle funzioni
Ho riportato il file alla versione precedente e ho compilato senza problemi gli esempi

Per gli esperimenti sto usando una Itead studio Iboard, con chip ethernet Wiznet5100, e impostando in quickcfg 
# define QC_BOARDTYPE 0x03

Ha funzionato al primo colpo (dopo che ho letto i commenti sui valori ammissibili di BASEIPADDRESS :) )

Domani mi metto a guardare il codice di un collettore lato android, e inizio a fare dei pensieri su come eventualmente impostarlo in un linguaggio che giri su piattaforma linux senza grosse evoluzioni lato sistemistico

PS:
I led accesi da android sono una figata :)

PPS:
Per quanto riguarda NRLF, il fatto che le librerie ammettano una lunghezza massima del singolo pacchetto trasmesso di 32 byte potrebbe creare problemi per come è strutturato il protocollo vNet ?



2013/10/24 Di Maio, Dario <dario....@souliss.net>

--
You received this message because you are subscribed to a topic in the Google Groups "souliss" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/souliss/65P88NassUY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to souliss+u...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.



--
-M
p.png
pf.png

Di Maio, Dario

unread,
Oct 24, 2013, 6:31:57 PM10/24/13
to sou...@googlegroups.com
Ciao Mattia,

evidentemente è scappata la cartella con Git, recuperiamo :D. C'è qualche tipico nuovo e qualche bugfix nella A4.5.1, ma puoi tranquillamente lavorare anche con la A4.5. In alternativa il codice è disponibile anche come download.

Per quanto riguarda gli indirizzi IP, c'è una pagine del wiki che tenta di spiegare cosa sia passato per la testa nel fare quelle cose immonde. Fondamentalmente vNet fa collassare i livelli 2 e 3 della ISO/OSI senza doversi portare necessariamente dentro IP e le sue regole di routing.
http://code.google.com/p/souliss/wiki/SupportedNetworkArchitecture

Per gli NRFL non sono entrato nel dettaglio, con 32 bytes siamo al limite. Si può fare, ma limiterà il numero di "slot" disponibili per ogni nodo, perché i pacchetti sono frammentati a livello di nodo e non di slot. Per essere più chiaro, ogni pacchetto rappresenta sempre per intero lo stato del nodo.

Saluti,
Dario.

2013/10/25 Mattia Rossi <>

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.
pf.png
p.png

Di Maio, Dario

unread,
Oct 25, 2013, 3:04:39 AM10/25/13
to sou...@googlegroups.com

Pensando al nrfl, basta inserire un taglio nel driver oltre il 32byte e riempirlo in ricezione con tutti zero.

Complessivamente ci sono 15 byte di header, gli altri 15 saranno stati. Il risultato sarà che sui nodi con nrfl non sarà possibile usare più di 15 slot, ma sarà trasparente per gli altri nodi, che vedranno tali slot come inutilizzati.

Dario.

From mobile.

Marco Fabbri

unread,
Oct 25, 2013, 7:03:16 AM10/25/13
to sou...@googlegroups.com

La considerazione di Dario ha senso,
Il fatto di loggare le misure di potenza istantanea dipende dalle esigenze.
Se devi monitorare quanto produce un'impianto fotovoltaico è importante loggare per capire tante cose, se sono sporchi,se nel tempo si stanno deteriorando confronto produzione tra annate differenti ecc. Nel mio caso voglio avere facilmente leggibile la potenza istantanea per sapere se posso accende un'ulteriore carico. Per me non è importante loggare questo dato con estrema precisione. Quello che mi piacerebbe tenere sottocchio è  l'energia consumata attraverso il led del contatore.
Forse sto pomeriggio ho qualche ora libera e faccio delle prove con la fotoresistenza.
Antonino la tua idea di loggare attraverso xively mi piace un sacco! aspetto tue nuove.

Per Dario ora vedo anche il secondo nodo, la salute rimane al 50% circa sia con nodo acceso o spento, e i sensori visualizzano gli ultimi valori letti.

Di Maio, Dario

unread,
Oct 25, 2013, 7:31:38 AM10/25/13
to sou...@googlegroups.com
Signfica che non sta funzionando qualcosa, quella è un'indicazione dello stato del canale. Se hai problemi allega il codice.

Che versione utilizzi?

Dario.


2013/10/25 Marco Fabbri <>

--
You received this message because you are subscribed to the Google Groups "souliss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to souliss+u...@googlegroups.com.

Marco Fabbri

unread,
Oct 26, 2013, 7:25:13 AM10/26/13
to sou...@googlegroups.com
adesso 4.5.1
eseguivo Souliss_CommunicationData ogni 50 phase_fast credo che i problemi di salute del canale erano legati a quello

il tipico 57 da not implemented in android quindi sono passato al 51 SLOT_watt

per quanto riguarda il contatore sto facendo delle prove a campionare i flash ogni minuto circa per vedere cosa salta fuori.



/**************************************************************************
Souliss - Temperature and Humidity Measure
The temperature and humidity are acquired from a DHT11/21/22 sensor
and available at user interface as half-precision floating point.
If any in-between calculation would be performed, the values shall
be converted in single precision floating point and then back in
half-precision.
The Device has
- An DHT11/21/22 sensor on PIN 2
 
CONFIGURATION IS MANDATORY BEFORE COMPILING
Before compiling this code, is mandatory the configuration of the framework
this ensure the use of proper drivers based functionalities and requested
communication interface.
Configuration files are located on /conf folder, is suggested to use this 
#define network_my_supern 0x0000

#define DHT_id1 1 // Identify the sensor, in case of more than one used on the same board

#define SLOT_Watt 0 // This is the memory slot
#define FLASH_Cont 2 // This is the memory slot
#define TEMPERATURE 4 // This is the memory slot used for the execution of the logic in network_address1
#define HUMIDITY 6 // This is the memory slot used for the execution of the logic
#define DEADBAND 0.05 // Deadband value 5%  
#define DEADBAND1 0.10 // Deadband value 10%  
// define the shared memory map
U8 memory_map[MaCaco_MEMMAP];

// flag 
U8 data_changed = 0;

#define time_base_fast 10 // Time cycle in milliseconds
#define time_base_slow 10000 // Time cycle in milliseconds
#define num_phases 255 // Number of phases

U8 phase_speedy=0, phase_fast=0, phase_slow=0;
unsigned long tmr_fast=0, tmr_slow=0;  

// Setup the DHT sensor
ssDHT11_Init(5, DHT_id1);

//                                                                           for flash contatore
#define PHOTO_IN  0 
int threshold=450;     // If photoresistor read more than this value, it count a flash 
float light=0;
float flash=0;

void setup()
{
// Setup the network configuration
//
// The vNet address is 11(hex) that is 17(dec), so the IP address is
// the base IP address with 17 as last octect (ex. 192.168.0.17)
Souliss_SetAddress(network_address_2, network_my_subnet, network_my_supern);

// Load the address also in the memory_map
Souliss_SetLocalAddress(memory_map, network_address_2);
// Set the typical to use
Souliss_SetT51(memory_map, SLOT_Watt);
Souliss_SetT51(memory_map, FLASH_Cont);
Souliss_SetT52(memory_map, TEMPERATURE);
Souliss_SetT53(memory_map, HUMIDITY);
emon1.voltage(1, 239.40, 1.7);  // Voltage: input pin, calibration, phase_shift
emon1.current(2, 59.9);       // Current: input pin, calibration.
ssDHT_Begin(DHT_id1);
// Setup for photoresistor                                             for flash contatore
pinMode(PHOTO_IN,INPUT); 
}

float fVal;

void loop()
if(abs(millis()-tmr_fast) > time_base_fast)
{
tmr_fast = millis();
phase_fast = (phase_fast + 1) % num_phases;

// Execute the code every 101 time_base_fast  
if (!(phase_fast % 101))
{
// Compare the acquired input with the stored one, send the new value to the
// user interface if the difference is greater than the deadband
Souliss_Logic_T52(memory_map, TEMPERATURE, DEADBAND, &data_changed);
Souliss_Logic_T53(memory_map, HUMIDITY, DEADBAND, &data_changed);
// Compare the acquired input with the stored one, send the new value to the
// user interface if the difference is greater than the deadband
Souliss_Logic_T51(memory_map, SLOT_Watt, DEADBAND, &data_changed);
                        
                       // light=analogRead(PHOTO_IN);
      // Souliss_ImportAnalog(memory_map, FLASH_Cont, &light);

// Acquire data from the microcontroller ADC
emon1.calcVI(20,2000); 
fVal =emon1.realPower;
if(abs(fVal)<0.99) fVal=0.01; //...per evitare fluttuazioni del valore ad utenze spente. Pongo a 0.01 perch� a 0.00 Android non aggiorna pi�, forse � un bug.
Souliss_ImportAnalog(memory_map, SLOT_Watt, &fVal);
}
                             
       if (!(phase_fast % 3))
{   
// Read the photo sensor value 
if (analogRead(PHOTO_IN) > threshold) 
while (analogRead(PHOTO_IN) > threshold) 
// Just wait the flash to turn off (to avoid multiple counts)    
}
flash++; 
}
                          
}
                            
              // Execute the code every 5 time_base_fast  
     if (!(phase_fast % 5))
{   
// Retreive data from the communication channel
Souliss_CommunicationData(memory_map, &data_changed);
}
}
else if(abs(millis()-tmr_slow) > time_base_slow)
{
tmr_slow = millis();
phase_slow = (phase_slow + 1) % num_phases;

// Execute the code every 11 time_base_slow
if (!(phase_slow % 11))
{                 
// Read temperature value from DHT sensor and convert from single-precision to half-precision
float temperature = ssDHT_readTemperature(DHT_id1);
Souliss_ImportAnalog(memory_map, TEMPERATURE, &temperature);
// Read humidity value from DHT sensor and convert from single-precision to half-precision
float humidity = ssDHT_readHumidity(DHT_id1);
Souliss_ImportAnalog(memory_map, HUMIDITY, &humidity);

                // Execute the code every 6 time_base_slow
if (!(phase_slow % 6))
{                 
                Souliss_ImportAnalog(memory_map, FLASH_Cont, &flash);
                Souliss_Logic_T51(memory_map, FLASH_Cont,DEADBAND1, &data_changed);
                flash=0;
}

}

Di Maio, Dario

unread,
Oct 26, 2013, 7:27:58 AM10/26/13
to sou...@googlegroups.com
Per il flash non puoi usare il campionamento, ma gli interrupt, se cerchi ho inserito il link ad Open Energy Monitor. Il codice è molto semplice e ti garantisce che tu non perda impulsi.

Non ho capito se sei riuscito a risolvere i tuoi problemi, in generale, SoulissApp aggiorna i valori di HEALTY solo quando apri e chiudi le schermate.

Dario.


--
It is loading more messages.
0 new messages