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

  1. "Kanal hinzufügen" klicken
  2. und folgende beiden Konfigurationen anlegen
  3. und beide UUIDs nach dem Anlegen sichern!
  4. UUIDs in das folgende Script eintragen

4.1. Kanal El. Energie (Zählerstände) anlegen

  1. Kanal erstellen
  2. El. Energie (Zählerstände)
  3. UUID sichern!

4.2. Kanal El. Energie (Leistungswerte) anlegen

  1. Kanal erstellen
  2. El. Energie (Leistungswerte)
  3. UUID sichern!
  4. 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

  1. Script mit
    perl hg_sma2vz.pl

    aufrufen.

  2. Volkszähler aufrufen und prüfen ob Werte angekommen sind
  3. Crontab erstellen
    crontab -e
    * * * * * /usr/bin/perl /home/pi/sma2vz/hg_sma2vz.pl >>/home/pi/smadata/hg_sma2vz.log
  4.  fertig

Das Ganze sollte jetzt so aussehen:

Klicke hier, um Ihren eigenen Text einzufügen