Enverbridge Daten auslesen

Die Enverbridge bietet leider keine einfache Möglichkeit direkt die Daten der Solaranlage abzugreifen. Im FHEM Forum gibt es Versuche einen Proxy zwischen die Enverbridge und das Envertech Portal zu schalten. Leider funktioniert das bisher nicht zuverlässig. Von daher habe ich nach einer Alternative gesucht wie ich die Daten in meine InfluxDB bekomme um sie mit Grafana auswerten zu können.

Durch Zufall habe ich herausgefunden das viele Solar Hardware Anbieter die gleiche Portalsoftware einsetzen. Auf Github gibt es Beispiel Scripte wie man die Daten für die eigene Anlage vom Portal auslesen kann.

Sanderjo Solarmanpv

Die URLs muss man auf das Envertech Portal anpassen und seine eigene PID angeben. Die PID steht oben in der URL wenn man sich am Portal angemeldet hat.

http://www.envertecportal.com/Terminal/TerminalMain.aspx?pid=1234

PID = 1234

Beispiel (alles in einer Zeile):

curl --silent --cookie-jar /tmp/cookies -o /dev/null 'http://www.envertecportal.com/Terminal/T
erminalMain.aspx?pid=1234' && curl --silent --cookie "ASP.NET_SessionId=`awk ' END { print \$NF }' /tmp/cookies`
"  'http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1234'

Hier mein Perl Script was die Daten ausliest und in die InfluxDB schreibt:

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;
use LWP::Simple;                # From CPAN
use JSON qw( decode_json );     # From CPAN
use Data::Dumper;               # Perl core module
use JSON::Parse 'parse_json';
use Encode qw(decode encode);

my $id=1234;
my $database="enverbridge";

my $response = qx(curl --silent --cookie-jar /tmp/cookies -o /dev/null 'http://www.envertecportal.com/Terminal/TerminalMain.aspx?pid=$id' && curl --silent --cookie "ASP.NET_SessionId=`awk ' END { print \$NF }' /tmp/cookies`"  'http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=$id');

my $ref_hash = decode_json($response);

my $value;
foreach my $item(@{$ref_hash}){
	delete @{$item}{'co2', 'treesplanted', 'installer', 'commissioned', 'lasttime'};
	foreach my $key ( sort keys %{$item} ) {
		$value = encode('UTF-8',$item->{$key});
                $value =~ s/[^\x00-\x7f]//g;
		my @va = split ' ', $value;
		print "$key=$va[0]\n";
		system "curl --output /dev/null --silent -i -XPOST 'http://localhost:8086/write?db=$database' --data-binary '$key,tag=enverbrige value=$va[0]'";
	}

}

Diese Lösung funktioniert erstmal zuverlässig, ich werde aber weiter an der Proxy Lösung arbeiten da diese die Möglichkeit bietet auf die Cloud Anbindung zu verzichten.

Und so sieht es in Grafana aktuell aus: