Inhaltsverzeichnis

Fronius Symo & Primo

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

Software

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.

Kanal

Der Kanal in VZ wird als El. Energie (Leistungswerte) angelegt.

Script

/var/www/html/fronius.php:

UUID des Kanals eintragen, bei Bedarf die Hostadresse anpassen.

fronius.php
<?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);
?>

Fronius

PUSH-Dienst am Wechselrichter wie folgt einrichten, dabei die IP-Adresse des Volkszählers eintragen.

Quellen

https://www.photovoltaikforum.com/volkszaehler-org-f131/fronius-symo-mit-vz-auslesen-t118320.html https://www.photovoltaikforum.com/thread/118320-fronius-symo-mit-vz-auslesen/?postID=1827967#post1827967