Ankündigung

Einklappen
Keine Ankündigung bisher.

Solarlog 500PM+ aktuelle Werte auf den Bus / ins rrd schreiben

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Solarlog 500PM+ aktuelle Werte auf den Bus / ins rrd schreiben

    Als Auflösung für mein hier: https://knx-user-forum.de/wiregate/2...schrieben.html angesprochenen Versuch den Solarlog 500PM+ auszulesen ein kleines Quick and dirty Plugin:
    Code:
    $plugin_info{$plugname.'_cycle'} = 120;
    my $WR1; my $WR2;
    my $aktuelle_leistung =  `curl 192.168.178.xxx/min_cur.js | grep Pac | sed -e "s/var Pac=//g"`;
    my $wr1_summe_ga = '14/1/2'; #kwh
    my $wr2_summe_ga = '14/1/3'; #kwh
    my $wr_gesamt_summe_ga = '14/1/4'; #kwh
    my $ertrag_tag_ga ='14/1/1';
    my $month_summary_ga = '14/1/5';
    my $month_ertrag_ga = '14/1/6';
    my $year_summary_ga = '14/1/7';
    my $year_ertrag_ga = '14/1/8';
    
    my $verguetung = "0.195";
    my $ertrag_tag;
    my $date; 
    my $wr1; 
    my $wr2; 
    my $sum1; 
    my $sum2; 
    my $sum; 
    my $max1; 
    my $max2; 
    my $max;
    my $month1;
    my $month2;
    my $month_all;
    my $year1;
    my $year2;
    my $year_all;
    
    system ( 'curl 192.168.178.xx/days.js > /tmp/days.js' );
    system ( 'curl 192.168.178.xx/months.js > /tmp/months.js' );
    system ( 'curl 192.168.178.xx/years.js > /tmp/years.js' );
    open(DAT,'</tmp/days.js') or die "couldnt open file";
    while (<DAT>) {
        chomp;
        ($date, $wr1, $wr2) = split(/\|/);
        ($sum1, $max1) = split(/\;/, $wr1);
        ($sum2, $max2) = split(/\;/, $wr2);
    ($sum1, $sum2, $max2) =~ s/[^0-9]//;
    }
    close(DAT);
    open (MONTH,'/tmp/months.js') or die "couldnt open months";
    while (<MONTH>) {
        chomp;
        ($date, $month1, $month2) = split (/\|/);
        ($month1, $month2) =~ s/[^0-9]//;
         }
    close (MONTH);
    
    open (YEAR,'/tmp/years.js') or die "couldnt open year";
    while (<YEAR>) {
      chomp;
        ($date, $year1, $year2) = split (/\|/);
        ($year1, $year2) =~ s/[^0-9]//;
         }
    close (YEAR);
    
    my $max21 = int($max2);
    my $summary1 = (int($sum1))/1000;
    my $summary2 = (int($sum2))/1000;
    my $summary = ($summary1 + $summary2);
    
    my $max_gesamt = $max21 + $max1;
    my $leistung = int($aktuelle_leistung);
    update_rrd("Aktuelle_Leistung","",$leistung);
    update_rrd("WR_gesamt_max","",$max_gesamt);
    update_rrd("WR2_Summe","",$summary2);
    update_rrd("WR1_Summe","",$summary1);
    update_rrd("WR_gesamt","",$summary);
    update_rrd("WR1_max","",$max1);
    update_rrd("WR2_max","",$max21);
    
    my $ertrag_tag = ($summary * $verguetung);
    knx_write($ertrag_tag_ga,$ertrag_tag,9);
    
    my $month_summary = int($month1) + int($month2);
    
    update_rrd("Monat_Summe","",$month_summary);
    my $month_summary_ertrag = ($month_summary * $verguetung)/1000;
    
    update_rrd("Monat_Summe_Euro","",$month_summary_ertrag);
    knx_write($month_ertrag_ga,$month_summary_ertrag,9);
    
    
    my $year_summary = int($year1) + int($year2);
    
    update_rrd("Jahr_Summe","",$year_summary);
    my $year_summary_ertrag = $year_summary * $verguetung/1000;
    knx_write($year_ertrag_ga,$year_summary_ertrag,9);
    
    update_rrd("Jahr_Summe_Euro","",$year_summary_ertrag);
    return ;
    Ausführungsdauer ca 2,9sek. Kann ich die Verbessern? Der Solarlog reagiert eigentlich recht zügig.
    Bei Gelegenheit werde ich das in ein "vernünftiges" Plugin verwandeln und ins svn stellen.


    Gruß

    #2
    Die Frage ist was daran 2,9s dauert..
    Sicherlich das abholen, nicht das parsen, wäre also in der crontab besser als im Plugin.

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      Habe den selben SolarLog und wollte mir das bei Gelegenheit auch mal ansehen (hat aber bisher keine Prio bei mir). Wenn du das in Vernünftig hast würde es mich allerdings umso mehr freuen, wenn ich das einfach ausm SVN laden kann
      Mit freundlichen Grüßen
      Niko Will

      Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
      - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

      Kommentar


        #4
        Weißt du ob das auch mit nem Solarlog400e funktioniert?

        Kommentar


          #5
          Laut der solarlog HP denke ich schon. Aber wenn du in dein ftp Verzeichnis schaust und min_cur.js days.js months.js und years.js findest dann sollte das gehen.
          Ich hab das jetzt mal umgestellt und lasse mir die Dateien von cron abholen und schon geht das auch in 1,2sek
          Das größte Problem ist das sich der solarlog irgendwann in der Nacht auf hängt wenn das plugin ins leere läuft. Daten werden geloggt aber die SL Web Oberfläche ist nicht mehr erreichbar. Meine derzeitige Lösung: ich Kappe den Strom von 22 bis 5 Uhr. (steh eh nicht auf Geräte die sinnlos laufen) nicht schön aber derzeit die einzige Lösung die funktioniert.

          achja FW vom 15.8. am sl.

          Gruß

          Kommentar


            #6
            OK, dann probier ich das mal.

            Ich lass den Solarlog die Daten immer auf nen externen FTP laden, somit sollte der Solarlog selber bei mir eigentlich nicht abstürzen.

            Kommentar


              #7
              Also die Daten schick ich auch auf nen externen ftp. aber die Daten werden nur alle 30 min aktualisiert. Für die Monats und Jahres werte ok aber nicht für die aktuellen werte der min_cur.js, die hol ich aus dem solarlog das killt ihn in der Nacht gegen 4 Uhr.

              Gruß

              Gesendet von meinem HTC Sensation mit Tapatalk 2

              Kommentar


                #8
                Man könnte das Plugin ja einfach abschalten wenn auf der Diagnose-Seite in der Tabelle mit den gan´zen Stati "255-Offline" gemeldet wird, und morgens um 5 oder so wieder loslegen lassen.
                Vlt. sollte man mal bei den Solarlog fritzen anfragen ob die da was machen können um den Absturz zu verhindern

                Aber noch ne andere Frage, bei mir sieht das so aus wie im Anhang, ist das normal?
                Liegt vermutlich daran dass ich die Daten vom FTP hol.
                Angehängte Dateien

                Kommentar


                  #9
                  Ja in der früh wird der aktuelle Stand resettet. Aber bei mir fehlen die Werte schon in der Nacht wenn ich den solarlog abschalte. Ich versuch auch mal die Werte vom ftp zu holen.

                  Gruss

                  Gesendet von meinem HTC Sensation mit Tapatalk 2

                  Kommentar


                    #10
                    Hallo Daviid,

                    kleine Korrektur, der Ertrag ist die elektrische Arbeit oder Energie in KWh, die Momentanleistung der Anstieg der Kurve in KW

                    Gruß Micha

                    Kommentar


                      #11
                      Lass doch den Ertrag in ein Counter-RRD schreiben, Beispiele dazu findest du beim Zähler-Script oder dem Pelletkessel Script von haegar80 und greentux.
                      Dann kannst Du schön ne Wochenstatistik sehen. Die aktuelle Leistung ganz normal im RRD erfassen.

                      Ansonsten eben noch Sonnenaufgang und Untergang berechnen und während der Dunkelheit Solarlog schließen und die Nullen über das Script schreiben lassen.

                      So sieht die Grafik irgendwie falsch aus

                      Gruß Mirko
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #12
                        Hi,

                        also mit meinem aktuellen script:

                        Code:
                        $plugin_info{$plugname.'_cycle'} = 120;
                        my $WR1; my $WR2;
                        my $aktuelle_leistung =  `curl 192.168.178.xx/min_cur.js | grep Pac | sed -e "s/var Pac=//g"`;
                        my $wr1_summe_ga = '14/1/2'; #kwh
                        my $wr2_summe_ga = '14/1/3'; #kwh
                        my $wr_gesamt_summe_ga = '14/1/4'; #kwh
                        my $ertrag_tag_ga ='14/1/1';
                        my $month_summary_ga = '14/1/5';
                        my $month_ertrag_ga = '14/1/6';
                        my $year_summary_ga = '14/1/7';
                        my $year_ertrag_ga = '14/1/8';
                        
                        my $verguetung = "0.195";
                        my $ertrag_tag;
                        my $date; 
                        my $wr1; 
                        my $wr2; 
                        my $sum1; 
                        my $sum2; 
                        my $sum; 
                        my $max1; 
                        my $max2; 
                        my $max;
                        my $month1;
                        my $month2;
                        my $month_all;
                        my $year1;
                        my $year2;
                        my $year_all;
                        
                        system ( 'curl 192.168.178.xx/days.js > /tmp/days.js' );
                        
                        open(DAT,'</tmp/days.js') or die "couldnt open file";
                        while (<DAT>) {
                            chomp;
                            ($date, $wr1, $wr2) = split(/\|/);
                            ($sum1, $max1) = split(/\;/, $wr1);
                            ($sum2, $max2) = split(/\;/, $wr2);
                        ($sum1, $sum2, $max2) =~ s/[^0-9]//;
                        }
                        close(DAT);
                        open (MONTH,'/tmp/months.js') or die "couldnt open months";
                        while (<MONTH>) {
                            chomp;
                            ($date, $month1, $month2) = split (/\|/);
                            ($month1, $month2) =~ s/[^0-9]//;
                             }
                        close (MONTH);
                        
                        open (YEAR,'/tmp/years.js') or die "couldnt open year";
                        while (<YEAR>) {
                          chomp;
                            ($date, $year1, $year2) = split (/\|/);
                            ($year1, $year2) =~ s/[^0-9]//;
                             }
                        close (YEAR);
                        
                        my $max21 = int($max2);
                        my $summary1 = (int($sum1))/1000;
                        my $summary2 = (int($sum2))/1000;
                        my $summary = ($summary1 + $summary2);
                        
                        my $max_gesamt = $max21 + $max1;
                        my $leistung = int($aktuelle_leistung);
                        update_rrd("Aktuelle_Leistung","",$leistung);
                        update_rrd("WR_gesamt_max","",$max_gesamt);
                        update_rrd("WR2_Summe","",$summary2);
                        update_rrd("WR1_Summe","",$summary1);
                        update_rrd("WR_gesamt","",$summary);
                        update_rrd("WR1_max","",$max1);
                        update_rrd("WR2_max","",$max21);
                        
                        my $ertrag_tag = ($summary * $verguetung);
                        knx_write($ertrag_tag_ga,$ertrag_tag,9);
                        
                        my $month_summary = int($month1) + int($month2);
                        my $month_summary1 = $month_summary/1000;
                        update_rrd("Monat_Summe","",$month_summary1);
                        my $month_summary_ertrag = ($month_summary1 * $verguetung);
                        
                        update_rrd("Monat_Summe_Euro","",$month_summary_ertrag);
                        knx_write($month_ertrag_ga,$month_summary_ertrag,9);
                        
                        
                        my $year_summary = int($year1) + int($year2);
                        
                        update_rrd("Jahr_Summe","",$year_summary);
                        my $year_summary_ertrag = $year_summary * $verguetung/1000;
                        knx_write($year_ertrag_ga,$year_summary_ertrag,9);
                        
                        update_rrd("Jahr_Summe_Euro","",$year_summary_ertrag);
                        return $month_summary1;
                        Den Monat und das Jahr hol ich per cron vom FTP Server (Der von SL hatte desöfteren Problem, daher hab ichs derzeit am NAS) sieht das bei mir aus wie im Anhang.
                        Bei mir zählt der Solarlog genauer als wenn ich das im rrd summiere...

                        Gruß
                        Angehängte Dateien

                        Kommentar


                          #13
                          Nachts nicht erreichtbar - gelöst?

                          Hallo zusammen,

                          ich hol das hier nochmal hoch. Hat jemand das gelöst, dass der Webserver vom Solarlog abstürzt wenn man versucht nachts auf Ihn zuzugreifen?

                          Mein simples Script sieht zur Zeit so aus:
                          Code:
                          # Werte der PV Anlage via SolarLog auf GAs und in RRDs
                          # 
                          # V0.1 2012-08-26
                          # V0.2 2012-10-21
                          #
                          # TODO: use perl regex instead of grep and sed
                          #        finde einen Weg, dass der Webserver nicht abstürzt
                          
                          #return 0;
                          
                          
                          ### Definitionen 
                          my $aktErtrag_ga = "8/5/1";  # Gruppenadresse Aktueller PV Ertrag
                          my $starthour = 4;   # Stunde, ab der nicht mehr abgerufen werden darf
                          my $endhour = 6;   # Stunde, ab der wieder abgerufen werden darf
                          ### Ende Definitionen
                          
                          
                          # Eigenen Aufruf-Zyklus auf jede Minute setzen
                          $plugin_info{$plugname.'_cycle'} = 60;
                          
                          # testen ob SolarLog online ist. Falls nicht und man ruft die Werte ab, hängt sich der http-server auf
                          # FIXME nach 4 Uhr morgens ist leider auch diese Seite nicht mehr abrufbar und der http server hängt sich auf
                          my $online = 'false';
                          # Aktuelle Stunde
                          my $crthour = `date \"+%H\"`;
                          # Wenn ausserhalb des Zeitraumes
                          if ($crthour <= $starthour || $crthour >= $endhour) {
                              $online = `curl http://solarlog/base_vars.js?nocache -s --connect-timeout 5 | grep isOnline | sed -e "s/var isOnline=//g"`;
                          }
                          
                          # aktuellen Ertrag ermitteln und schreiben
                          my $aktErtrag = 0;
                          my @aktErtragString;
                          if ($online == 'true') {
                              # aktuellen Ertrag
                              $aktErtrag =  `curl http://solarlog/min_cur.js?nocache -s --connect-timeout 5 | grep Pac | sed -e "s/var Pac=//g"`;
                              knx_write($aktErtrag_ga, $aktErtrag, 9);
                              update_rrd("PV_aktErtrag", "", int($aktErtrag));
                              # aktuelle Erträge pro String
                              @aktErtragString =  `curl http://solarlog/min_cur.js?nocache -s --connect-timeout 5 | grep aPdc` =~ /(\d+)/g;
                              update_rrd("PV_aktErtragSued", "", int(@aktErtragString[0]));
                              update_rrd("PV_aktErtragOst", "", int(@aktErtragString[1]));
                          }
                          
                          # Pluginlog
                          return 'Online: ' . $online . ', Aktueller Ertrag: ' . $aktErtrag;

                          Kommentar


                            #14
                            Hi,
                            ich hab es leider noch nicht gelöst.
                            um die plugin Laufzeit zu verringern hab ich die Datei abfragen als cron Job gemacht.
                            und der solarlog wird in der Nacht abgeschaltet. So hängt er zumindest nicht mehr. Primitiv aber effektiv

                            mein plugin holt in der Nacht immer die alten Werte bis in der früh der solarlog wieder läuft.

                            Gruß

                            Kommentar


                              #15
                              schade, schaun wir mal. Jetzt bleibts wohl erstmal so...

                              Danke trotzdem

                              Kommentar

                              Lädt...
                              X