Die Solarwechselrichter Symo und Primo der Firma Fronius bieten die Möglichkeit über Ethernet die Betriebsdaten auszulesen. Eine Lösung für VZ ist dabei den PUSH-Dienst des Umrichters zu nutzen. Dieser sendet dann in regelmäßigen Abständen ein JSON das von einem php-Script mittels curl-Aufruf zur Middleware weitergereicht wird.
Fronius(Push) –> fronius.php –> middleware.php
PHP-Curl ist Vorausetzung.
sudo apt-get install php-curl
Für den Webserver ist php-fpm erorderlich.
sudo apt-get install php-fpm
Der Webserver nginx muss für eigene Scripte umkonfiguriert werde
sudo nano /etc/nginx/sites-available/volkszaehler
Die Zeilen am Ende auskommentieren (oder anfügen)
# Konfigurationsbeispiel für eigene PHP-Scripte, # von nginx unter http://127.0.0.1/addapp/ bereitgestellt, lokal unter /var/www/html/ abgelegt. location /addapp/ { alias /var/www/html/; index index.nginx-debian.html; location ~ \.php { include snippets/fastcgi-php.conf; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; } } }
Danach den Webserver neu starten:
sudo systemctl restart nginx
Ob der Webserver korrekt arbeitet kann mit Aufruf von http://IP-Adresse-des-Rpi/addapp/info.php
getestet werden. Es sollte eine Seite mit den PHP Einstellungen zu sehen sein.
Der Kanal in VZ wird als El. Energie (Leistungswerte) angelegt.
/var/www/html/fronius.php
:
UUID des Kanals eintragen, bei Bedarf die Hostadresse anpassen.
<?php //Config: $HOST = 'http://127.0.0.1/api/data/'; $UUID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'; // Fronius-UUID (El. Energie (Leistungswerte) $froniusdata = file_get_contents('php://input'); $json = json_decode($froniusdata, true); $timestamp = $json['Head']['Timestamp']; $unixtimestamp = strtotime($timestamp)*1000; $power_current = $json['Body']['PAC']['Values'][1]; //$power_day = $json['Body']['DAY_ENERGY']['Values'][1]; //$power_year = $json['Body']['YEAR_ENERGY']['Values'][1]; //$power_total = $json['Body']['TOTAL_ENERGY']['Values'][1]; // in case the inverters sends an empty message if($power_current =='') exit(); $Link = "{$HOST}{$UUID}.json?operation=add&ts={$unixtimestamp}&value={$power_current}"; // create curl resource $ch = curl_init(); // set url curl_setopt($ch, CURLOPT_URL, $Link); //return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec($ch); // close curl resource to free up system resources curl_close($ch); ?>
PUSH-Dienst am Wechselrichter wie folgt einrichten, dabei die IP-Adresse des Volkszählers eintragen.