Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Problem mit RRD_creator.pl

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

    [wiregate] - √ - Problem mit RRD_creator.pl

    Hallo,

    beim ausführen vom RRD_creator.pl wird folgender Fehler angezeigt:

    Undefined subroutine &main::basename called at /etc/wiregate/plugin/generic/RRD_creator.pl line 27.

    weis jemand weiter?


    gruss, crsp

    #2
    Ich gehe davon aus dass Du die entsprechende conf.d erstellt hast bzw. auch aus dem SVN geladen hast?

    Ansonsten probiers mal mit dem hier, da ist die config dann direkt im Plugin. Jedes push ist dann eben ein rrd.

    Code:
    # Buswerte in RRD speichern
    # V2.0 2012-08-16
    
    # Variablen deklarieren
    my @rrds;
    push @rrds, { name => "Helligkeit_EG_gr", 		ga => "3/1/49", dpt => 9};
    push @rrds, { name => "Helligkeit_EG_kl", 		ga => "3/1/29", dpt => 9};
    push @rrds, { name => "Helligkeit_OG", 			ga => "3/2/29", dpt => 9};
    push @rrds, { name => "WP_Heizungspumpe_Laufzeit",	ga => "0/5/2", dpt => 1};
    push @rrds, { name => "WP_Zirkulation_Laufzeit", 	ga => "0/5/5", dpt => 1};
    push @rrds, { name => "WP_Solepumpe_Laufzeit", 		ga => "0/5/3", dpt => 1};
    push @rrds, { name => "WP_Kompressor_Laufzeit", 	ga => "0/5/4", dpt => 1};
    
    # Aufrufzyklus = Heartbeat RRD
    $plugin_info{$plugname.'_cycle'} = 300;
    
    # MAIN
    
    foreach my $rrd (@rrds) {
    update_rrd($rrd->{name},"",knx_read($rrd->{ga},300,$rrd->{dpt}));
    #plugin_log($plugname, "triggered $rrd->{name}");
    }
    
    return;
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Ja, in der RRD_creator.conf im conf.d steht im Moment eine Zeile

      Code:
      push @rrds, { name => "WP_Kompressor_Laufzeit", 	ga => "0/5/4", dpt => 1};
      daraufhin spuckt er diese FM.

      Baue ich nun das RRD_creator.pl entsprechend deinen Empfehlungen um, spuckt er folgendes:

      Undefined subroutine &main::knx_read called at ./RRD_creator.pl line 19.


      Gruss, Rico

      Kommentar


        #4
        Poste mal Deinen gesamten Code sonst ist das stochern im Nebel.

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

        Kommentar


          #5
          Der Code ist eigentlich der aus dem SVN:

          Code:
          #!/usr/bin/perl
          # Buswerte in RRD speichern
          # V2.0 2012-08-16
          # Info und Konfiguration in /etc/wiregate/plugin/generic/conf.d/RRD_creator.conf_sample
          # Eigene Konfiguration speichern unter /etc/wiregate/plugin/generic/conf.d/RRD_creator.conf
          # Alternativ über Webmin -> Plugins -> Pluginname -> config
          
          # Variablen deklarieren
          my @rrds;
          # conf einlsen
          &readConf;
          # Aufrufzyklus = Heartbeat RRD
          $plugin_info{$plugname.'_cycle'} = 300;
          
          # MAIN
          
          foreach my $rrd (@rrds) {
          update_rrd($rrd->{name},"",knx_read($rrd->{ga},300,$rrd->{dpt}));
          #plugin_log($plugname, "triggered $rrd->{name}");
          }
          
          return;
          
          # SUBS
          sub readConf
          {
           my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
           if (! -f $confFile) {
          
           } else {
            #plugin_log($plugname, "reading conf file [$confFile].");
            open(CONF, $confFile);
            my @lines = <CONF>;
            close($confFile);
            my $result = eval("@lines");
            #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
            if ($@) {
             plugin_log($plugname, "ERR: conf file [$confFile] returned:");
             my @parts = split(/\n/, $@);
             plugin_log($plugname, "--> $_") foreach (@parts);
            }
           }
          }
          und dazu in /etc/wiregate/plugin/generic/conf.d/ eine RRD_creator.conf mit der Zeile

          Code:
          push @rrds, { name => "WP_Kompressor_Laufzeit", 	ga => "0/5/4", dpt => 1};
          wird, wenn ich das scropt als root auf der console ausführe mit

          Undefined subroutine &main::basename called at ./RRD_creator.pl line 27.

          quittiert.

          Kommentar


            #6
            hallo,

            die plugins werden vom Wiregate ausgeführt. schau mal im Webmin!

            Gruß

            Kommentar


              #7
              ja, aber im Plugin-Log tauchen auch Fehler auf:


              2012-12-23 22:44:53.063,rrd_graph.pl,,0s,Undefined subroutine &main::rrdupdate called at (eval 888) line 6.

              2012-12-23 23:32:05.212,RRD_creator.pl,,0s,syntax error at (eval 904) line 27, near "'/etc/wiregate/plugin/generic/conf.d/'("

              und die Line 27 motzt er ja auch an, wenn ichs auf der console ausführe....

              Kommentar


                #8
                Die Scripte/Plugins laufen in der Konsole definitiv nicht. Da fehlen einfach Abhängigkeiten in Form von Subs die im wiregated liegen.

                Der SVN Code ist eine 1:1 Kopie von meinem System.


                Baustelle 2.0
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #9
                  Richtig, wie Jumi bereits geschrieben hat:

                  Plugins nur als solche laufen lassen - also im Plugin-System - weil sich nur dort die passende Laufzeitumgebung befindet (die Plugins werden durch den wiregated.pl daemon ausgeführt).

                  Stefan

                  Kommentar


                    #10
                    Hm, irgendwas mache ich wohl falsch. Es kommen für die Verdichterlaufzeit einfach keine Werte an. Der RRD wird erstellt, aber nichts angezeigt.
                    Hab jetzt mal testweise die Temperatur vom WW Speicher in 'nen RRD schreiben lassen, die Kürvchen werden sauber gemalt.

                    gruss, Rico

                    Kommentar


                      #11
                      Wie wird die auf den Bus gegeben -> DPT ?
                      Oder geht es um reines I/O ? Sollte eigentlich auch passen. Die GA auf die der Wert des Verdichters gesendet wird ist sauber ins WireGate übertragen (ETS-Import bzw. im Webmin bei den Gruppenadressen eingetragen)?

                      edit:
                      Achso, wird der Status des Verdichter regelmäßig (< 5 Minuten) gesendet?
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #12
                        Nein, der Status wird nur bei Änderung gesendet...sprich bei EIN und AUS.
                        Das Viessmann Vitogate kann wohl nicht zyklisch senden

                        Kommentar


                          #13
                          Antwortet sie auf Lesetelegramme?
                          Sollte jedes KNX-Gerät können (ok, war bissig, ist ja keins )

                          Ansonsten kann man tricksen: das RRD weiss davon nichts, dann kommen halt alte Werte, sofern aus dem (eibd-)Cache gelesen wird (mit hohem/0-timeout)
                          Aber Fakt ist: das RRD will (Defaultmässig: mind. alle 300s*3=15 Minuten) einen Wert haben..

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

                          Kommentar


                            #14
                            Auf "lesen" antwortet das Vitogate offensichtlich nicht. Ich sehe zwar, dass das Plugin regelmäßig auf der GA fragt, aber da scheint eisernes Schweigen zu herrschen.

                            Hab das gestern dann mal noch ausprobiert und aus der ETS alle paar Minuten eine Statusmeldung auf die GA des Verdichters geschickt und siehe da, der Graph wird gemalt. Doof.
                            Gäbe es vielleicht die Möglichkeit (Plugin?) den Status, der 1x gesendet wurde, solange alle x-Minuten zu repeaten, bis ein anderer Status an die GA gesendet wird?`

                            Gruss, crsp

                            Kommentar


                              #15
                              Du könntest den Betriebsstundenzähler SourceForge.net Repository - [openautomation] Contents of /wiregate/plugin/generic/Betriebsstundenzaehler.pl dafür missbrauchen. plugin_cycle setzt Du dann auf 240 Sekunden und fügst an geeigneter Stelle ein knx_write ein ... bin im Moment etwas in Eile, heute Abend evtl. mehr falls Du nicht weiter kommst.

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

                              Kommentar

                              Lädt...
                              X