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.