Questo articolo riporta una guida che ho voluto tradurre dall’originale in inglese per tutti coloro che non “masticano” inglese.

Per chi non lo conoscesse, SBFspot è un programma che potremo utilizzare sui nostri Raspberry per scaricare i dati dai nostri inverter SMA ed inviare i dati sul sito pvoutput.org . Buona lettura.


 

Preparare RaspBerry Pi per installare SBFspot

La prima operazione da svolgere è quella di inizializzare l’interfaccia di rete configurandola con un indirizzo Statico. Per fare questo dovremo eseguire il comando :

sudo nano /etc/network/interfaces

e nel file appena aperto dovremo inserire:

auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1

salvare il file con CONTROL + O ed uscire con CONTROL + X.

Ora si tratta di abilitare la nostra interfaccia, per cui potremo fare un reboot del sistema con il comando : sudo shutdown –r now oppure usando i tasti CTRL + ALT + CANC.

Adesso se la nostra Raspberry è connessa al router via cavo, potremo verificare che veda il router con un semplice comando: ping –c 10 192.168.1.1
Se il risultato sarà simile a:
ping -c 10 192.168.1.1

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=2.57 ms 64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=1.86 ms 64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=2.88 ms 64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=3.16 ms 64 bytes from 192.168.1.1: icmp_req=5 ttl=64 time=2.46 ms 64 bytes from 192.168.1.1: icmp_req=6 ttl=64 time=2.53 ms 64 bytes from 192.168.1.1: icmp_req=7 ttl=64 time=2.59 ms 64 bytes from 192.168.1.1: icmp_req=8 ttl=64 time=2.73 ms 64 bytes from 192.168.1.1: icmp_req=9 ttl=64 time=2.67 ms 64 bytes from 192.168.1.1: icmp_req=10 ttl=64 time=2.88 ms

— 192.168.1.1 ping statistics —
10 packets transmitted, 10 received, 0% packet loss, time 9014ms rtt min/avg/max/mdev = 1.861/2.638/3.168/0.328 ms [email protected] ~ $

allora la nostra rete è configurata a dovere e potremo procedere con le varie installazioni.

La nostra Raspberry non ha un orologio interno, per cui ogni volta che riparte, perde i settaggi di data e ora. Per ovviare a questo problema potremo far ricorso ad i server internet che ci forniscono data e ora precisi. Quindi a questo punto dobbiamo installare un programma che scarichi dalla rete la data e l’ora correnti. Eseguire i l commando:

sudo apt-get install ntpdate
e dopo l’installazione, dare il commando:

sudo ntpdate –u ntp.ubuntu.com

In questa maniera, ad ogni avvio della Raspberry, verrà lanciato il Daemon che scarica da internet la data e l’ora correnti.

Fatto questo dovremo scaricarci dalla rete i compilatori che ci permetteranno di compilare i nostri driver. Nello specifico, ci permetteranno di compilare il nostro programma SBFspot partendo dai sorgenti.
Quindi daremo il comando:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential

Installati i compilatori potremo installare i driver per la nostra interfaccia Bluetooth che si collegherà all’inverter SMA. Il comando seguente eviterà di installare anche i driver per stampanti ed altri dispositivi non richiesti.

sudo apt-get install –no-install-recommends bluetooth libbluetooth-dev

Fatto questo potremo verificare il collegamento fra la nostra interfaccia bluetooth e l’inverter con il comando : hcitool scan , che dovrebbe darci un risultato simile:

Scanning …
00:80:25:19:DB:9D BlueCN+003 D-19DB9D

Prendiamo nota dell’indirizzo MAC del nostro Dongle Bluetooth (00:80:25:19:DB:9D ) che ci servirà in seguito per le varie configurazioni.

Ora dobbiamo installare alcune librerie e il server SQLite. Diamo il comando:

sudo apt-get install libboost-all-dev
sudo apt-get install sqlite3 libsqlite3-dev
sudo apt-get install libcurl3-dev

Installazione di SBFspot

Per prima cosa dobbiamo creare le directory sulle quali andranno i file di database, log e sorgenti:

cd /home/pi
mkdir sbfspot.3
mkdir smadata
mkdir smadata/logs
mkdir scripts

cd sbfspot.3

Ora dobbiamo copiare in questa directory il file sorgente : SBFspot_SRC_303_Linux_Win32.tar.gz e scompattarlo con

tar –xvf SBFspot_SRC_303_Linux_Win32.tar.gz
Adesso è arrivato il momento di compilare i nostri sorgenti per farli funzionare sul nostro sistema:

cd /home/pi/sbfspot.3/SBFspot

sudo make install_sqlite
che ci dovrebbe restituire come segue:

test -d bin/Release_SQlite || mkdir -p bin/Release_SQLite test -d obj/Release_SQlite || mkdir -p obj/Release_SQLite g++ -Wall -O2 -DUSE_SQLITE -c boost_ext.cpp -o obj/Release_SQLite/boost_ext.o

g++ -Wall -O2 -DUSE_SQLITE -c db_SQLite.cpp -o obj/Release_SQLite/db_SQlite.o
g++ -Wall -O2 -DUSE_SQLITE -c db_SQLite_Export.cpp -o obj/Release_SQLite/db_SQLite_Export.o
g++ -Wall -O2 -DUSE_SQLITE -c misc.cpp -o obj/Release_SQLite/misc.o
g++ -Wall -O2 -DUSE_SQLITE -c strptime.cpp -o obj/Release_SQLite/strptime.o
g++ -Wall -O2 -DUSE_SQLITE -c sunrise_sunset.cpp -o obj/Release_SQLite/sunrise_sunset.o
g++ -Wall -O2 -DUSE_SQLITE -c SBFNet.cpp -o obj/Release_SQLite/SBFNet.o
g++ -Wall -O2 -DUSE_SQLITE -c Bluetooth.cpp -o obj/Release_SQLite/Bluetooth.o
g++ -Wall -O2 -DUSE_SQLITE -c CSVexport.cpp -o obj/Release_SQLite/CSVexport.o
g++ -Wall -O2 -DUSE_SQLITE -c Ethernet.cpp -o obj/Release_SQLite/Ethernet.o
g++ -Wall -O2 -DUSE_SQLITE -c Eventdata.cpp -o obj/Release_SQLite/Eventdata.o
g++ -Wall -O2 -DUSE_SQLITE -c Archdata.cpp -o obj/Release_SQLite/Archdata.o
g++ -Wall -O2 -DUSE_SQLITE -c SBFspot.cpp -o obj/Release_SQLite/SBFspot.o
/tmp/ccmAjspk.s:32096: Warning: swp{b} use is deprecated for ARMv6 and ARMv7
** this warning is shown a lot of times **
g++ -Wall -O2 -DUSE_SQLITE -c TagDefs.cpp -o obj/Release_SQLite/TagDefs.o
g++ -o bin/Release_SQLite/SBFspot obj/Release_SQLite/boost_ext.o obj/Release_SQLite/db_SQLite.o obj/Release_SQLite/db_SQLite_Export.o obj/Release_SQLite/misc.o obj/Release_SQLite/strptime.o obj/Release_SQLite/sunrise_sunset.o obj/Release_SQLite/SBFNet.o
obj/Release_SQLite/Bluetooth.o obj/Release_SQLite/CSVexport.o obj/Release_SQLite/Ethernet.o obj/Release_SQLite/EventData.o obj/Release_SQLite/ArchData.o obj/Release_SQLite/SBFspot.o obj/Release_SQLite/TagDefs.o -s -lbluetooth – lboost_date_time -lsqlite3

cp TagList*.txt bin/Release_SQLite
cp date_time_zonespec.csv bin/Release_SQLite
test -d /usr/local/bin/sbfspot.3 || mkdir -p /usr/local/bin/sbfspot.3
test -f /usr/local/bin/sbfspot.3/SBFspot.cfg || cp SBFspot.cfg
/usr/local/bin/sbfspot.3/
cp -R bin/Release_SQLite/* /usr/local/bin/sbfspot.3/

Ora compiliamo il Daemon che si occuperà di inviare i dati su pvoutput.org ogni 5 minuti:

cd /home/pi/sbfspot.3/SBFUploadDaemon
sudo make install_sqlite

che ci restituirà :

test -d bin/Release_SQLite || mkdir -p bin/Release_SQLite
test -d obj/Release_SQLite/SBFspot || mkdir -p obj/Release_SQLite/SBFspot
test -d obj/Release_SQLite || mkdir -p obj/Release_SQLite
test -d obj/Release_SQLite/SBFspotUploadCommon || mkdir -p obj/Release_SQLite/SBFspotUploadCommon
g++ -Wall -DUSE_SQLITE -I../SBFspot -c ../SBFspot/db_SQLite.cpp -o obj/Release_SQLite/SBFspot/db_SQLite.o
g++ -Wall -DUSE_SQLITE -I../SBFspot -c main.cpp -o obj/Release_SQLite/main.o
g++ -Wall -DUSE_SQLITE -I../SBFspot -c ../SBFspotUploadCommon/Configuration.cpp -o obj/Release_SQLite/SBFspotUploadCommon/Configuration.o
g++ -Wall -DUSE_SQLITE -I../SBFspot -c ../SBFspotUploadCommon/PVOutput.cpp -o obj/Release_SQLite/SBFspotUploadCommon/PVOutput.o
g++ -Wall -DUSE_SQLITE -I../SBFspot -c ../SBFspotUploadCommon/CommonServiceCode.cpp -o obj/Release_SQLite/SBFspotUploadCommon/CommonServiceCode.o
g++ -o bin/Release_SQLite/SBFspotUploadDaemon obj/Release_SQLite/SBFspot/db_SQLite.o obj/Release_SQLite/main.o obj/Release_SQLite/SBFspotUploadCommon/Configuration.o obj/Release_SQLite/SBFspotUploadCommon/PVOutput.o obj/Release_SQLite/SBFspotUploadCommon/CommonServiceCode.o -s -lcurl
-lsqlite3
test -d /usr/local/bin/sbfspot.3 || mkdir -p /usr/local/bin/sbfspot.3
test -f /usr/local/bin/sbfspot.3/SBFspotUpload.cfg || cp SBFspotUpload.cfg /usr/local/bin/sbfspot.3/
cp -R bin/Release_SQLite/* /usr/local/bin/sbfspot.3/
Se tutto è andato come dovrebbe, ora dovremo editare i file di configurazione dei due eseguibili:

sudo nano /usr/local/bin/sbfspot.3/SBFspot.cfg

e

sudo nano /usr/local/bin/sbfspot.3/SBFspotUploadDaemon.cfg

ed inserire i nostri dati nei file di configurazione.

Fatto questo non ci resta altro da fare che creare il database:

cd /home/pi/smadata

sqlite3 SBFspot.db < /home/pi/sbfspot.3/SBFspot/CreateSQLiteDB.sql

avremo così creato il database e le relative tabelle. Possiamo subito testarlo:

sqlite3 SBFspot.db

dovrebbe comparirci una riga tipo

sqlite>

sulla quale daremo il comando: select* from config;

che ci dovrebbe restituire la riga: SchemaVersion|1 e riportarci al prompt dei comandi sqlite> al quale daremo il comando .quit per uscire.

Ora abbiamo il nostro database ed i nostri eseguibili pronti all’uso e quindi non ci resta altro da fare che testarli per vedere se tutto è andato a buon fine. Daremo il comando:

/usr/local/bin/sbfspot.3/SBFspot –v –finq –nocsv

e se otteniamo una cosa del genere:

SBFspot V3.0.1
Yet another tool to read power production of SMA solar inverters (c) 2012-2014, SBF (https://sbfspot.codeplex.com)
Compiled for Linux 32 bit
Commandline Args: -v
Reading config ‘/usr/local/bin/sbfspot.3/SBFspot.cfg’
Tue Sep 23 13:51:33 2014: INFO: Starting…
sunrise: 05:31
sunset : 17:38
Connecting to 00:80:25:24:9B:1B (1/10)
Initializing…
SUSyID: 125 – SN: 852675450 (0x32D2CB7A)
SMA netID=01
Serial Nr: 7756B1F6 (2002170358)
BT Signal=69%
Logon OK
Local Time: 23/09/2014 13:51:35 TZ offset (s): 0 – DST: Off SUSyID: 99 – SN: 2002170358
Device Name:
Device Class:
Device Type:
Software Version: 12.12.208.R Serial number: 2002170358 SUSyID: 99 – SN: 2002170358 Device Status: Ok

SUSyID: 99 – SN: 2002170358 Device Temperature: 0.0°C SUSyID: 99 – SN: 2002170358 GridRelay Status: ? SUSyID: 99 – SN: 2002170358 Pac max phase 1: 1600W

Pac max phase 2: 0W
Pac max phase 3: 0W SUSyID: 99 – SN: 2002170358 Energy Production:

EToday: 2.050kWh ETotal: 3585.376kWh Operation Time: 10319.38h Feed-In Time : 8355.91h

SUSyID: 99 – SN: 2002170358 DC Spot Data:

String 1 Pdc: 0.296kW – Udc: 175.00V – Idc: 1.695A

String 2 Pdc: 0.000kW – Udc: 0.00V – Idc: 0.000A SUSyID: 99 – SN: 2002170358
AC Spot Data:

Phase 1 Pac : 0.000kW – Uac: 234.30V – Iac: 0.000A Phase 2 Pac : 0.000kW – Uac: 0.00V – Iac: 0.000A Phase 3 Pac : 0.000kW – Uac: 0.00V – Iac: 0.000A Total Pac : 0.272kW

SUSyID: 99 – SN: 2002170358
Grid Freq. : 49.96Hz
SUSyID: 99 – SN: 2002170358
Current Inverter Time: 23/09/2014 13:51:54 Inverter Wake-Up Time: 23/09/2014 13:51:54 Inverter Sleep Time : 23/09/2014 13:51:55 ExportSpotDataToCSV() ********************

* ArchiveDayData() * ********************
startTime = 5420B800 -> 23/09/2014 00:00:00 ExportDayDataToCSV()
SN: 2002170358 Solar Inverters
SB 1600TL-10
**********************
* ArchiveMonthData() * **********************
startTime = 54045FC0 -> 01/09/2014 12:00:00 ExportMonthDataToCSV()

Reading events: 2014-Sep-01 ExportEventsToCSV()
Tue Sep 23 13:51:37 2014: INFO: Done.

Vorrà dire che tutto è andato a buon fine e possiamo iniziare ad utilizzare il nostro sistema. Iniziamo col creare alcuni script di lancio dei vari programmi.
cd /home/pi/scripts
nano SBFspot.sh

ed inseriamo quanto segue.

#!/bin/bash
/usr/local/bin/sbfspot.3/SBFspot –v –finq
#

Salviamo il file con CRTL + O ed usciamo dall’editor con CTRL +X.

Cambiamo i permessi al file appena creato con:

sudo chmod 755 SBFspot.sh

Ora faremo in modo che questo nostro script venga eseguito ogni 5 minuti dalle 6 alle 23 di ogni giorno. Diamo il comando: crontab –e

Ed aggiungiamo questa riga:

*/5 6-23 * * * /home/pi/scripts/SBFspot.sh > /dev/null

al solito salviamo con CTRL + O ed usciamo con CTRL + X.

Ora è arrivato il momento di far eseguire il Daemon, che vi ricordo che altri non è che un programma che viene eseguito in background costantemente in base alle impostazioni del suo file di configurazione. Per cui non ci resta altro da fare che dare il comando:

sudo nano /etc/rc.local

ed inserire la seguente riga prima della riga “exit 0” .

sudo /usr/local/bin/sbfspot.3/SBFspotUploadDaemon
salviamo il file con CTRL + O ed usciamo dall’editor con CTRL + X .

I nostri eseguibili appena creati andranno a scrivere i dati scaricati dall’inverter all’interno del database ma faranno anche una copia come file csv all’interno della nostra directory

/home/pi/smadata/%Y    dove %Y stà per l’anno in corso, quindi se siamo nell’anno 2015 vedremo la directory /home/pi/smadata/2015 e così via.

Ultima operazione è quella di mantenere pulito il sistema creando uno script che faccia il lavoro per noi.

cd /home/pi/scripts
nano cleanup.sh

e scriviamo quanto segue:
#!/bin/bash
cd /home/pi/smatada/2015
sudo rm *Spot*

e salvare con CTRL + O ed uscire con CTRL + X

Anche a questo file cambieremo i permessi con

sudo chmod 755 cleanup.sh

Proviamo a farlo funzionare dando il comando ./cleanup.sh
Potrebbe restituirci l’errore che non trova il file Spot in quanto ancora non è stato creato dal sistema.
Ora inseriamo il comando nel nostro crontab che si occupa di eseguire i comandi per noi dando il comando:
crontab –e
ed inserendo quanto segue:
30 23 * * * /home/pi/scripts/cleanup.sh > /dev/null

Salviamo con CTRL + O ed usciamo con CTRL +X.
Ora siamo pronti a far riavviare il nostro Raspberry e testare se tutto il lavoro fatto sinora è andato a buon frutto. Diamo il comando: sudo shutdown –r now ed attendiamo che il sistema sia ripartito. Se tutto funziona a dovere, dovremo vedere il nostro Dongle Bluetooth che ogni 5 minuti si connette all’inverter e sul sito http://pvoutput.org/ , dovremo vedere i dati LIVE del nostro impianto.

3 Thoughts on “Guida SBFspot in italiano

  1. Ciao, sto cercando di installare SBFSpot per monitorare il mio inverter SMA tramite Raspberry ma ho problemi con l’installazione della libreria libboost .
    The following packages will be upgraded:
    libboost1.55-dev
    1 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
    1 not fully installed or removed.
    Need to get 587 kB/6,397 kB of archives.
    After this operation, 94.9 MB of additional disk space will be used.
    Do you want to continue? [Y/n] Y
    Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libsqlite3-dev armhf 3.8.7.1-1+deb8u1 [488 kB]
    Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main sqlite3 armhf 3.8.7.1-1+deb8u1 [99.5 kB]
    Fetched 587 kB in 1s (308 kB/s)
    (Reading database … 127755 files and directories currently installed.)
    Preparing to unpack …/libboost1.55-dev_1.55.0+dfsg-3_armhf.deb …
    Unpacking libboost1.55-dev:armhf (1.55.0+dfsg-3) over (1.55.0+dfsg-3) …

    Da qui in poi si ferma … ho atteso 20 minuti poi ho stoppato l’installazione e non riesco ad andare avanti .

    Riesci ad aiutarmi ?

    Grazie mille

    • Il problema è la versione di Raspbian installata. Ci ho provato anch’io ed avevo lo stesso errore. Ti consiglio di scaricare Wheezy ed installare quella versione.
      Purtroppo Noobs è già nella versione con Jessie che mi ha dato svariati problemi.
      Con Jessie non sono riuscito a far funzionare il compilatore di SBFspot che forse è stato fatto con le librerie per wheezy.
      Spero di esserti stato d’aiuto.

  2. Grazie mille. CI PRO.

Post Navigation