Hallo,
inspiriert durch das WG/CG und die tollen Plugins habe ich für den SolarView eine Plugin geschrieben.
[INFORMATION]SolarView unterstützt folgende Wechselrichter:
Kaco, Solarmax, SMA , Solarfabrik Convert, Danfoss, Carlo Gavazzi, IBC, Servermaster, Ever-Solar, Effekta, Steaca, Eaton, Phonix, Sunville, Kostal, Schüco, Aurora, Power-one und Fronius[/INFORMATION]
Es ist mein erstes Perl Programm seit Jahren.
Daher freue ich mich über Kritik und Verbesserungsvorschläge.
Anbei noch ein Bild aus der Visu.
Leider gibt es kein Status, der wird (unverständlicherweise) nicht zu Verfügung gestellt.
inspiriert durch das WG/CG und die tollen Plugins habe ich für den SolarView eine Plugin geschrieben.
[INFORMATION]SolarView unterstützt folgende Wechselrichter:
Kaco, Solarmax, SMA , Solarfabrik Convert, Danfoss, Carlo Gavazzi, IBC, Servermaster, Ever-Solar, Effekta, Steaca, Eaton, Phonix, Sunville, Kostal, Schüco, Aurora, Power-one und Fronius[/INFORMATION]
Es ist mein erstes Perl Programm seit Jahren.
Daher freue ich mich über Kritik und Verbesserungsvorschläge.
Code:
################################################################### # # Version 0.5 # License: GPL v2 # # solarview_read nutzt die Möglichkeit per tcp die gleichnamige Software abzufragen # ##### package main; use strict; use warnings; use IO::Socket::INET; $plugin_info{$plugname.'_cycle'} = 30; #### User Konfiguration ####### my $DEBUG = 1; #Einschalten von Log Informationen # je Wechselrichter eine Zeile. Immer gleiche Länge. KNX0 ist das Gesamtsystem KNX1 bis KNXn sind die einzelne Umrichter # Überall wo "na" steht wird nichts auf den Bus geschrieben # Es werden für jeden Eintrag RDD geschrieben my @KNX0 = ("14/4/0", "14/4/1", "14/4/2", "14/4/3", "14/4/4", "na", "na", "na", "na", "na", "na", "na", "na", "na", "na"); my @KNX1 = ("14/4/20", "14/4/21", "14/4/22", "14/4/23", "14/4/24", "14/4/25", "14/4/26", "na", "na", "na", "na", "14/4/31", "14/4/32", "14/4/33", "14/4/34"); my @KNX2 = ("14/4/40", "14/4/41", "14/4/42", "14/4/43", "14/4/44", "14/4/45", "14/4/46", "na", "na", "na", "na", "14/4/51", "14/4/52", "14/4/53", "14/4/54"); my @KNX3 = ("14/4/60", "14/4/61", "14/4/62", "14/4/63", "14/4/64", "14/4/65", "14/4/66", "na", "na", "na", "na", "14/4/71", "14/4/72", "14/4/73", "14/4/74"); my @KNX4 = ("14/4/80", "14/4/81", "14/4/82", "14/4/83", "14/4/84", "14/4/85", "14/4/86", "na", "na", "na", "na", "14/4/91", "14/4/92", "14/4/93", "14/4/94"); # das SVarray muss immer alle KNXn Einträge enthalten, abhängig von $WR my @SVarray = ( \@KNX0, \@KNX1, \@KNX2 , \@KNX3, \@KNX4); my $IP = "192.168.255.94"; #IP-Adresse vom Serielladapter my $PORT = 15000; # Port vom Serielladapter my $WR = 4; #Anzahl der Wechselrichter my @DPT = ("9.024","13.013","13.013","13.013","14.056","14.027","14.019","14.027","14.027","14.019","14.019","14.027","14.019","9.001"); my @MESSART = ("TAGESERTRAG", "MONATSERTRAG", "JAHRESERTRAG", "GESAMTERTRAG", "PAC", "UDCPANNEL", "IDCPANNEL", "UDCB", "UDCC", "IDCB", "IDCC", "UL1", "IL1", "TEMP"); my @EINHEIT = ("kWh", "kWh", "kWh","kWh", "W", "V", "A", "V", "V", "A", "A", "V", "A", "°C"); ####### ### User Konfiguration Ende my @SVANTWORT; # Start Programm ######### for (my $i=0;$i<=$WR;$i++){ @SVANTWORT = &solarviewread($i); for (my $y=0;$y<=13;$y++){ &knxwrite( $MESSART[$y], $SVANTWORT[$y + 6], $SVarray[$i]->[$y], $DPT[$y], $EINHEIT[$y], $i , $DEBUG); } print "\n\n"; } ######### # Ende Programm #SUB Beginn ##### sub knxwrite { #$_[0] = Name des Messwertes #$_[1] = Ergebnisse vom Messwert #$_[2] = GA #$_[3] = DPT #$_[4] = Einheit #$_[5] = Wechselrichter-Nr #$_[6] = Debug = Schreiben ins LOG => 1 on my $RWERT = sprintf("%.2f", $_[1]); update_rrd ( 'PV_' . $_[5], $_[0], $RWERT ); if ( $_[2] ne "na" ){ knx_write( $_[2], $RWERT, $_[3] ); }; if ( $_[6] == 1 ){ plugin_log($plugname, $_[0]. ':' . $RWERT . ' GA:' . $_[2] . ' DPT: ' . $_[3] . ' WR: ' . $_[5] . ' *Ende' ); } } sub solarviewread { my $v = $_[0]; #Wechselrichters (0 = gesamt System) my $SVIEW = IO::Socket::INET->new (Proto => 'tcp', PeerAddr => $IP, PeerPort => $PORT, Timeout => 5,) or die "CRITICAL - cannat connect to Port $PORT at $IP"; $SVIEW->autoflush(1); print $SVIEW "0".$v."*"; #Sendet 00* bis 0n* je nach Wert $v my $WERT2 = <$SVIEW>; chomp $WERT2; $WERT2=~ s/.*\{(.*?)\}.*/$1/; my @SVANTWORT2=split(/,/,$WERT2); chomp @SVANTWORT2; return @SVANTWORT2; } ###### #SUB Ende return 0;
Leider gibt es kein Status, der wird (unverständlicherweise) nicht zu Verfügung gestellt.
Kommentar