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.

Name Description Variable type
allpower Solar Gesamt Erzeugt Number
capacity Solar Capacity Number
daypower Solar daypower Number
efficiency Solar efficiency Number
income Solar income Number
monthpower Solar monthpower Number
nowpower Solar nowpower Number
nowpower_ Solar _nowpower Number
peakpower Solar Peakpower Number
power Solar power Number
yearpower Solar yearpower Number

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.