Enverbridge Daten auslesen und in Variablen der CCU2 schreiben

Hier jetzt eine Version meines Scriptes was die Daten nicht in eine InfluxDB schreibt sondern in Variablen der CCU2.

Originaler Beitrag

Die Daten werden wie in meinem originalen Beitrag vom Envertec Portal ausgelesen. Danach werden die Werte in System Variablen gespeichert.

Voraussetzungen:

XML-API CCU Addon https://github.com/hobbyquaker/XML-API

Folgende System Variablen müssen angelegt werden.

NameDescriptionVariable type
allpowerSolar Gesamt ErzeugtNumber
capacitySolar CapacityNumber
daypowerSolar daypowerNumber
efficiencySolar efficiencyNumber
incomeSolar incomeNumber
monthpowerSolar monthpowerNumber
nowpowerSolar nowpowerNumber
nowpower_Solar _nowpowerNumber
peakpowerSolar PeakpowerNumber
powerSolar powerNumber
yearpowerSolar yearpowerNumber

Das neue Script liest per XML API die Variablen ID’s aus. Diese werden benötigt um die richtige Variable aktualisieren zu können.

Im Script muss wieder die ID (siehe Original Beitrag) vom Envertec Portal und die IP der CCU2 angepasst werden.

 1#!/usr/bin/perl
 2
 3#########################################################
 4#                                                       #
 5#                                                       #
 6#       www.lets-try-solar.de                           #
 7#                                                       #
 8#                                                       #
 9#########################################################
10
11use strict;
12use warnings;
13use diagnostics;
14use LWP::Simple;                # From CPAN
15use JSON qw( decode_json );     # From CPAN
16use Data::Dumper;               # Perl core module
17use JSON::Parse 'parse_json';
18use Encode qw(decode encode);
19use XML::Hash;
20
21no warnings "experimental::autoderef";
22
23my $id=1234;
24
25my $hm_ip="111.111.111.111"; # CCU2 IP
26
27my $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');
28
29my $xml_converter = XML::Hash->new();
30my $ho_xml = qx(curl --silent http://$hm_ip/config/xmlapi/sysvarlist.cgi);
31my $xml_hash = $xml_converter->fromXMLStringtoHash($ho_xml);
32
33#print Dumper $xml_hash;
34
35my $id_hash;
36my $name;
37my $ise_id;
38foreach my $item($xml_hash->{systemVariables}{systemVariable}){
39#       print Dumper $item;
40        foreach my $key (sort keys $item){
41                $name = $xml_hash->{systemVariables}{systemVariable}[$key]{name};
42                $ise_id = $xml_hash->{systemVariables}{systemVariable}[$key]{ise_id};
43                $id_hash->{$name} = $ise_id;
44        }
45}
46#print Dumper $id_hash;
47
48my $ref_hash = decode_json($response);
49
50my $value;
51foreach my $item(@{$ref_hash}){
52        delete @{$item}{'co2', 'treesplanted', 'installer', 'commissioned', 'lasttime'};
53        foreach my $key ( sort keys %{$item} ) {
54                $value = encode('UTF-8',$item->{$key});
55                $value =~ s/[^\x00-\x7f]//g;
56                my @va = split ' ', $value;
57                print "$key=$va[0]\n";
58                qx(curl --silent 'http://$hm_ip/config/xmlapi/statechange.cgi?ise_id=$id_hash->{$key}&new_value=$va[0]');
59#               sleep 5;
60        }
61
62}

Ausgabe:

 1root@collector:/opt/collectors/homematic# ./homematic_solar.pl
 2allpower=702.97
 3capacity=0.735
 4daypower=0.49
 5efficiency=2.27
 6income=189.80
 7monthpower=6.44
 8nowpower=0.00
 9nowpower_=0.00
10peakpower=0.74
11power=0.00
12yearpower=673.25

Und so sieht es dann in der CCU2 aus:

Das Script kann dann per Cronjob alle 5 Minuten laufen.