Volkszaehler mit SMA- SunnyBoy SB 5000TL-21 via Bluetooth mit Raspberry Pi auslesen
Nachdem der erste Versuch mit dem smatool gründlich schief gelaufen ist (siehe hier) und der Setup mit dem SBFspot hervorragend und schnell geklappt hat hier noch kurz das komplette Setup Script, dass ich mir erstellt habe.
2021 Update
Das Projekt stellt seit kurzem einen Autoinsaller bereit, mit dem man nur noch eine Zeile benötigt und die Bluetooth und PlantID als Parameter übernimmt: curl -s https://raw.githubusercontent.com/sbfspot/sbfspot-config/master/sbfspot-config | sudo bash
sudo apt-get update sudo apt-get upgrade sudo apt-get --no-install-recommends install bluetooth libbluetooth-dev sudo apt-get install libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev sudo apt-get install sqlite3 libsqlite3-dev curl -s https://raw.githubusercontent.com/sbfspot/sbfspot-config/master/sbfspot-config | sudo bash # Folge den Anweisungen
Done
Test
/usr/local/bin/sbfspot.3/SBFspot -v -finq -nocsv
1. SBFspot Setup.sh
sudo apt-get update sudo apt-get upgrade sudo apt-get --no-install-recommends install bluetooth libbluetooth-dev sudo apt-get install libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev sudo apt-get install sqlite3 libsqlite3-dev cd /home/pi mkdir smadata mkdir SBFspot sudo mkdir /var/log/sbfspot.3 sudo chown -R pi:pi /var/log/sbfspot.3 wget –N https://github.com/SBFspot/SBFspot/archive/V3.5.0.tar.gz tar -xvf V3.5.0.tar.gz -C SBFspot --strip-components 1 cd ~/SBFspot/SBFspot make sqlite sudo make install_sqlite cd /home/pi/smadata sqlite3 SBFspot.db < /home/pi/SBFspot/SBFspot/CreateSQLiteDB.sql cd /usr/local/bin/sbfspot.3 sudo cp SBFspot.default.cfg SBFspot.cfg sudo nano SBFspot.cfg
Die Konfiguration von Hand anpassen:
BTAddress : "hcitool scan" eintippen um die Adresse zu finden
Password : Password for user – default is 0000
Plantname : Der Name, den deine Anlage haben soll
Done
Test
/usr/local/bin/sbfspot.3/SBFspot -v -finq -nocsv
2 SBFspot Test
/usr/local/bin/sbfspot.3/SBFspot -v -finq -nocsv SBFspot V3.5.0 Yet another tool to read power production of SMA solar inverters (c) 2012-2018, SBF (https://github.com/SBFspot/SBFspot) Compiled for Linux (LE) 32 bit with SQLite support Commandline Args: -v -finq -nocsv Reading config '/usr/local/bin/sbfspot.3/SBFspot.cfg' Tue Aug 14 23:20:39 2018: INFO: Starting... sunrise: 06:16 sunset : 20:40 Connecting to 00:80:25:XX:XX:XX (1/10) Initializing... SUSyID: 123 - SessionID: 8733XXXX (0x350FFFFF) SMA netID=01 Serial Nr: 7EFXXXXX (2130XXXXX) BT Signal=70.2% Logon OK Local Host Time: 14/08/2018 23:20:40 Plant Time : 14/08/2018 23:20:59 (+19 sec) TZ offset : 3600 sec - DST: On Last Time Set : 01/05/2018 14:44:03 Adjusting plant time... New plant time is now 14/08/2018 23:20:40 SUSyID: 123 - SN: 21300XXXXX Device Name: SN: 21300XXXXX Device Class: Solar-Wechselrichter Device Type: SB 5000TL-22 Software Version: 02.50.16.R Serial number: 21300XXXXX SUSyID: 123 - SN: 21300XXXXX Device Status: Ok SUSyID: 123 - SN: 21300XXXXX Device Temperature: 0.0°C SUSyID: 123 - SN: 21300XXXXX GridRelay Status: Information liegt nicht vor SUSyID: 123 - SN: 21300XXXXX Pac max phase 1: 4600W Pac max phase 2: 4600W Pac max phase 3: 4600W SUSyID: 123 - SN: 21300XXXXX Energy Production: EToday: 19.124kWh ETotal: 31309.900kWh Operation Time: 23907.02h Feed-In Time : 23309.19h SUSyID: 123 - SN: 21300XXXXX DC Spot Data: String 1 Pdc: 0.000kW - Udc: 0.00V - Idc: 0.000A String 2 Pdc: 0.000kW - Udc: 0.00V - Idc: 0.000A SUSyID: 123 - SN: 21300XXXXX AC Spot Data: Phase 1 Pac : 0.000kW - Uac: 0.00V - 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.000kW SUSyID: 123 - SN: 21300XXXXX Grid Freq. : 0.00Hz SUSyID: 123 - SN: 21300XXXXX Current Inverter Time: 14/08/2018 23:20:58 Inverter Wake-Up Time: 14/08/2018 06:19:23 Inverter Sleep Time : 14/08/2018 20:46:06 ******************** * ArchiveDayData() * ******************** startTime = 5B71FF60 -> 14/08/2018 00:00:00 ********************** * ArchiveMonthData() * ********************** startTime = 5B6192B0 -> 01/08/2018 13:00:00 Reading events: 2018-Aug-01 Tue Aug 14 23:20:43 2018: INFO: Done
3. SMA SunnyBoy Daten im volkszaehler anzeigen
Weiter geht es mit https://wiki.volkszaehler.org/hardware/channels/solar_inverters/sma
Die Anleitung ist leider auch schon etwas älter und wurde schon länger nicht mehr aktualisiert. Die Anleitung wurde für SMASpot erstellt. SMASpot wurde vor längerem in SBFspot umbenannt. Und SMASpot in Verbindung mit dem SMA SunnyBoy kennen wir ja nun schon.
4. volkszaehler aufrufen
- "Kanal hinzufügen" klicken
- und folgende beiden Konfigurationen anlegen
- und beide UUIDs nach dem Anlegen sichern!
- UUIDs in das folgende Script eintragen
4.1. Kanal El. Energie (Zählerstände) anlegen
- Kanal erstellen
- El. Energie (Zählerstände)
- UUID sichern!
4.2. Kanal El. Energie (Leistungswerte) anlegen
- Kanal erstellen
- El. Energie (Leistungswerte)
- UUID sichern!
- Evtl. wiederholen wenn es mehrere Panels gibt
5. SMA SunnyBoy Daten im volkszaehler anzeigen
Weiter geht es mit https://wiki.volkszaehler.org/hardware/channels/solar_inverters/sma
Die Anleitung ist leider auch schon etwas älter und wurde schon länger nicht mehr aktualisiert. Es ist die Rede von Ubuntu 12.04 LTS inzwischen habne wir Ubuntu 18.04 LTS.... . Die Anleitung wurde zwar für SMASpot erstellt .... SMASpot wurde vor längerem in SBFspot umbenannt. Und SMASpot in Verbindung mit dem SMA SunnyBoy kennen wir ja nun schon. Das Ganze läuft natürlich auch auf dem Raspberry Pi.
Dann wollen wir mal die volkszaehler Middleware mit den Daten des SMA SunnyBoy 5000TL-21 versorgen.
Dazu benötigen wir folgendes Perl Script:
Script mit
nano hg_sma2vz.pl
anlegen und folgendes Script reinkopieren:
#!/usr/bin/perl # Achtung! # Das Script kursiert in duzenden Versionen so oder so ähnlich in diversen Foren und Seiten. Alle halbgar oder veraltet. # Dieses Script habe ich 08.2018 so umgeschrieben, dass es mit den aktuellen Versionen von SMASpot und volkszaehler funktioniert. use LWP::UserAgent; open STATUS, "/usr/local/bin/sbfspot.3/SBFspot -sp0 -v |" or die "can't fork: $!"; while () { if (/ETotal:[ ]*(.*)kWh/){ &submit2vz("fbe2c060-a072-11e8-b85a-9a391ff71220", $1); # <-- die UUID vom ersten Screenshot } if (/String 1 Pdc:[ ]*(.*)kW/){ $value = $1; $value =~ s/\.//g; &submit2vz("9eafe120-a072-11e8-8eca-0df3817fffff", $value); # <-- die UUID vom 2ten Screenshot } if (/String 2 Pdc:[ ]*(.*)kW/){ $value = $1; $value =~ s/\.//g; &submit2vz("5a666390-a075-11e8-8ab5-973200d3a777", $value); # <-- ggf die UUID von weiteren Panels } } close STATUS or die "bad netstat: $! $?"; #------ sub submit2vz { $uuid = $_[0] ; $val = $_[1] ; print $uuid . " : " . $val . "\n"; my $server_endpoint = "http://127.0.0.1/middleware.php/data/${uuid}.json?value=" . $val; # set custom HTTP request header fields my $req = HTTP::Request->new(POST => $server_endpoint); $req->header('content-type' => 'application/json'); $req->header('x-auth-token' => 'kfksj48sdfj4jd9d'); # add POST data to HTTP request body $req->content(" "); my $ua = LWP::UserAgent->new; my $resp = $ua->request($req); if ($resp->is_success) { my $message = $resp->decoded_content; print "Received reply: $message\n"; } else { print "HTTP GET error code: ", $resp->code, "\n"; print "HTTP GET error message: ", $resp->message, "\n"; } }
6. Test sma2vz
- Script mit
perl hg_sma2vz.pl
aufrufen.
- Volkszähler aufrufen und prüfen ob Werte angekommen sind
- Crontab erstellen
crontab -e
* * * * * /usr/bin/perl /home/pi/sma2vz/hg_sma2vz.pl >>/home/pi/smadata/hg_sma2vz.log
- fertig
Das Ganze sollte jetzt so aussehen:
Klicke hier, um Ihren eigenen Text einzufügen