Ankündigung

Einklappen
Keine Ankündigung bisher.

universeller PV Datenloger

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] universeller PV Datenloger

    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.

    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;
    Anbei noch ein Bild aus der Visu.
    Leider gibt es kein Status, der wird (unverständlicherweise) nicht zu Verfügung gestellt.
    Angehängte Dateien
    --
    Gruß
    Lothar

    #2
    Hallo uns sorry das ich das hier noch mal aufwärmen muss. Ich komm mit dem Script nicht ganz klar. Ich versuche eine Verbindung vom Wiregate zum Rechner mit der SolarView Software herzustellen. Ich verstehe nur nicht wie so ich im Script dann die IP und Port vom Seriell Adapter brauch???

    Kommentar


      #3
      Kann mir da keiner weiterhelfen?

      Kommentar


        #4
        Hallo ist es möglich das Plugin nur in einem Bestimmten Zeitfenster laufenlassen kann? Würde gerne oben am Plugin start so eine Art Zeitschaltuhr reinprogrammieren daß das Plugin Z.B. nur von 5-22 Uhr läuft. Ist das Möglich? Falls ja wie würde die Befehlszeile aussehen?

        Kommentar

        Lädt...
        X