[SCRIPT] www.envertertecportal.com V2 – Daten auslesen

Hier nun mein Script angepasst an die neue Software auf www.envertecportal.com. Es fehlt nur noch die Funktion damit die ID automatisch erkannt wird. Daran arbeite ich aber noch.

#!/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=XXXX;				# ID from the Solarsystem
my $dbcon="192.168.0.40:8086";		# InfluxDB connection details
my $database="enverbridge";		# InfluxDB Database name
my $influxtag="enverbridge";		# InfluxDB tag
my $username="email\@email.de";	        # Envertech portal username
my $password="PASSWORD";		# Envertech portal password

# mapping hash as the variable names have changed
my %mapping = (
	Power => 'power',
	StrIncome => 'income',
	UnitEMonth => 'monthpower',
	UnitEToday => 'daypower',
	UnitETotal => 'allpower',
	UnitEYear => 'yearpower',
);

my $cookie = qx(curl --silent --cookie-jar /tmp/cookies -o /dev/null -X POST -H "Content-Type: application/json" -X "Content-Length: 1000" 'http://www.envertecportal.com/apiaccount/login?username=$username&pwd=$password');
my $response = qx(curl --silent --cookie /tmp/cookies -X POST -d "" 'http://www.envertecportal.com/ApiStations/getStationInfo?stationId=$id');

my $ref_hash = decode_json($response);

my $value;
foreach my $item($ref_hash->{'Data'}){
	delete $item->{'CreateYear'};
	delete $item->{'CreateMonth'};
	delete $item->{'Lng'};
	delete $item->{'TimeZone'};
	delete $item->{'UnitCapacity'};
	delete $item->{'Installer'};
	delete $item->{'CreateTime'};
	delete $item->{'PwImg'};
	delete $item->{'Lat'};
	delete $item->{'StationName'};
	delete $item->{'StrTrees'};
	delete $item->{'StrCO2'};
	foreach my $key (sort keys %{$item}) {
		$item->{$key} =~ s/[^\d\.]//g;
		$value = encode('UTF-8',$item->{$key});
		if ( exists $mapping{$key} ) {
			$key = $mapping{$key};
		}
		print "$key: $value\n";
		system "curl --output /dev/null --silent -i -XPOST 'http://$dbcon/write?db=$database' --data-binary '$key,tag=$influxtag value=$value'";
	}
}

Ausgabe:

root@collector:/opt/collectors/enverbridge# ./get_solar.pl
Capacity: 0.7
Etoday: 0
InvTotal: 3
power: 0
PowerStr: 0
income: 197.28
StrPeakPower: 615.75
monthpower: 0.2
daypower: 0
allpower: 730.65
yearpower: 23.68

10 thoughts on “[SCRIPT] www.envertertecportal.com V2 – Daten auslesen

  1. Patrick

    Hallo.
    Bei mir bringt das Array immer bei Data „undef“
    Und im ref_hash stehten nur 6 zahlen.
    Was mache ich falsch?
    Will es in die CCU importieren. Aber die API Auswertung ist ja im Prinzip die selbe.

    Lg
    Patrick

    Reply
    1. hemmi Post author

      Hallo Patrick,

      Hast du die richtige ID deiner Solaranlage vom Portal?

      Füge mal bitte nach folgender Zeile „print Dumper $response;“ ein.

      my $response = qx(curl –silent –cookie /tmp/cookies -X POST -d „“ ‚http://www.envertecportal.com/ApiStations/getStationInfo?stationId=$id‘);

      Sollte dann so aussehen:

      my $response = qx(curl –silent –cookie /tmp/cookies -X POST -d „“ ‚http://www.envertecportal.com/ApiStations/getStationInfo?stationId=$id‘);
      print Dumper $response;

      Und poste mal bitte den Output.

      Für den Import in die CCU hab auch ein Script aber das muss ich noch an die neuen URLs und Variablen anpassen.

      https://www.lets-try-solar.de/index.php/2018/12/16/enverbridge-daten-auslesen-und-in-variablen-der-ccu2-schreiben/

      Gruß
      hemmi

      Reply
      1. Patrick

        Hallo Hemmi.

        Die Ausgabe ist:
        $VAR1 = {
        ‚Data‘ => undef,
        ‚Status‘ => ‚1‘,
        ‚Result‘ => ‚No items found‘
        };
        Als ID hab ich meine EnverbridgeID verwendet.
        Hab allerdings wegen des Wetters die Solarpanele noch nicht mit dem Wechselrichter verbunden, und ich glaube das der Wechselrichter seinen Strom rein über PV bezieht.
        Also hat meine EnverBridge momentan noch keine Verbindung zum System, führt das zu dieser Ausgabe?

        lg
        Patrick

        Reply
        1. Patrick

          Habs gefunden!
          Mann muss im Portal im Portal-Quellcode nach dieser Zeile suchen:
          var stationId = ‚XXXXXXXXXXXXXXXXXXXXXXXXX‘;
          Und dieser Lange Code ist die ID.

          Lg
          Patrick

          Reply
  2. Casi Wienekamp

    Vielen dank für deine arbeit. Zur zeit hab ich durchs Studium kaum Zeit. Nun freu ich mich wieder das ich weiter loggen kann 😀

    Reply
    1. hemmi Post author

      Hi Sven,

      ja das sollte möglich sein. Das wäre einfach ein weiterer Curl Befehl der die Daten an diese API schickt. Man muss sich nur vorher mal das Format anschauen und ein entsprechendes Mapping aufbauen.

      Gruß
      hemmi

      Reply
  3. Thomas

    Hallo Hemmi,

    prima Script. Ich habe es noch ein wenig angepasst und sende mir die Daten per MQTT an meinen Broker.
    Klappt soweit einwandfrei.

    Wie komme ich denn an die Daten der einzelnen Module, welche man auf dem Portal unter Data-Realtime einsehen kann.
    Z.B. DC-Input, Temperatur, AC-Output, ect.)
    Gruß
    Thomas

    Reply
    1. hemmi Post author

      Hallo Thomas,

      wenn du möchtest kannst du dein Script auch gern hier teilen. MQTT dürfte auch für andere interessant sein.

      Gruß
      hemmi

      Reply

Schreibe einen Kommentar zu Sven Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.