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.
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.