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.

#!/usr/bin/perl

#########################################################
#                                                       #
#                                                       #
#       www.lets-try-solar.de                           #
#                                                       #
#                                                       #
#########################################################

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);
use XML::Hash;

no warnings "experimental::autoderef";

my $id=1234;

my $hm_ip="111.111.111.111"; # CCU2 IP

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 $xml_converter = XML::Hash->new();
my $ho_xml = qx(curl --silent http://$hm_ip/config/xmlapi/sysvarlist.cgi);
my $xml_hash = $xml_converter->fromXMLStringtoHash($ho_xml);

#print Dumper $xml_hash;

my $id_hash;
my $name;
my $ise_id;
foreach my $item($xml_hash->{systemVariables}{systemVariable}){
#       print Dumper $item;
        foreach my $key (sort keys $item){
                $name = $xml_hash->{systemVariables}{systemVariable}[$key]{name};
                $ise_id = $xml_hash->{systemVariables}{systemVariable}[$key]{ise_id};
                $id_hash->{$name} = $ise_id;
        }
}
#print Dumper $id_hash;

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";
                qx(curl --silent 'http://$hm_ip/config/xmlapi/statechange.cgi?ise_id=$id_hash->{$key}&new_value=$va[0]');
#               sleep 5;
        }

}

Ausgabe:

root@collector:/opt/collectors/homematic# ./homematic_solar.pl
allpower=702.97
capacity=0.735
daypower=0.49
efficiency=2.27
income=189.80
monthpower=6.44
nowpower=0.00
nowpower_=0.00
peakpower=0.74
power=0.00
yearpower=673.25

Und so sieht es dann in der CCU2 aus:

Das Script kann dann per Cronjob alle 5 Minuten laufen.

4 thoughts on “Enverbridge Daten auslesen und in Variablen der CCU2 schreiben

  1. Krinke

    Hallo Hemmi,

    ist ja toll, dass du das Script fertig hast und veröffentlichst!
    Aber ich glaube, jetzt habe ich ein kleines Problem?
    Auf der CCU2 ist meines Wissens nach standardmäßig kein Perl installiert?
    Da ich noch in den Anfängen stecke, weiß ich jetzt nicht, wie ich auf der CCU Perli installiere.
    Für einen Tipp wäre ich dankbar!

    Reply
    1. hemmi Post author

      Hallo,

      das Script kann leider nicht direkt auf der CCU2 laufen. Am einfachsten wäre es einen Raspberry Pi dafür zu benutzen.

      Gruß
      hemmi

      Reply
  2. Patrick

    Hallo.

    Leider funktioniert das Script in der aktuellen Perl Version nicht:
    Experimental keys on scalar is now forbidden at solar.pl line 34 (#1)
    (F) An experimental feature added in Perl 5.14 allowed each, keys,
    push, pop, shift, splice, unshift, and values to be called with a

    Das kommt in der Zeile:
    foreach my $key (sort keys $item){

    Reply
    1. hemmi Post author

      Hallo Patrick,

      Sorry das ich mich jetzt erst melde, habe leider viel Stress auf Arbeit. Kannst du mir ein paar mehr Informationen zu deinem System geben auf dem du Script laufen lassen möchtest. Also welches Betriebssystem und die Perl Version ist 5.14? Sobald ich die Infos habe setze ich mir mal eine VM auf und probiere es nachzustellen.

      Viele Grüße
      hemmi

      Reply

Schreibe einen Kommentar

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.