Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Wiregate-Daemon: Patches

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

    [WireGate-Plugin] - √ - Wiregate-Daemon: Patches

    EDIT: Mein Fehler - ich hatte eine veraltete Version des wiregated.pl. Diesen Thread bitte ignorieren, die Patches sind bereits in der Elabnet-Version drin!


    Hallo zusammen,
    ich habe mir mal die Mühe gemacht, mein angestaubtes Wiregate-Paket zu aktualisieren (ich halte mein WG nicht mehr aktuell, seit ich es auf Debian Wheezy umgestellt habe).

    Bei weitem nicht alle Plugins liefen danach problemlos - auch der Logikprozessor nicht - und die Ursache liegt m.E. in der unvollständigen Übernahme meines "COMPILE_PLUGIN"-Patches.

    In aller Kürze hier ein Patch, der den wiregated.pl heilt und dabei noch ein paar andere Problemchen beheben sollte. EXPERIMENTAL - ich gehöre nicht zu ElabNet, es gibt keinen Support!

    Code:
    --- wiregated.pl.ORIG   2015-02-12 19:42:49.869803962 +0100
    +++ wiregated.pl        2015-02-12 20:13:57.754372098 +0100
    @@ -255,6 +255,12 @@
         `cp /tmp/wiregate_plugin.db $plugin_infofile`;
         exit();
     };
    +$SIG{HUP} = sub {
    +    # Logrotate -> Logfile neu oeffnen
    +    close FILE_EIBLOG;
    +    open FILE_EIBLOG, ">>$eiblogfile";
    +};
    +
     #FIXME: add plugin-timeout again with SIGALRM, currently we rely on monit (1 minute)
    
     if($wg_config{''}{'eib_logging'}) {
    @@ -390,21 +396,23 @@
        # check plugins
        if (time()-$lastplugintime > 1) { # at most every 1secs for now
           $thr_eiblisten_timeout = time(); # set timeout
    +      %msg=(); $fh=undef;
           check_generic_plugins();
           $lastplugintime = time();
           # case update rrds
           check_global_rrd_update();
           #Cleanup %plugin_subscribe from deleted!!!
        }
    -   if ($rrd_syslastupdate + $wg_config{''}{'rrd_interval'} < time()) {
    -        my @statinfo = get_stat_info($$);
    -        update_rrd("wiregated_mem","",$statinfo[5]);
    -        update_rrd("wiregated_stime","",$statinfo[0],"COUNTER");
    -        update_rrd("wiregated_utime","",$statinfo[1],"COUNTER");
    -        update_rrd("wiregated_cutime","",$statinfo[2],"COUNTER");
    -        update_rrd("wiregated_cstime","",$statinfo[3],"COUNTER");
    -        $rrd_syslastupdate = time();
    -   }
    +# Doublette - dies hier steht nochmal in check_global_rrd_update
    +#   if ($rrd_syslastupdate + $wg_config{''}{'rrd_interval'} < time()) {
    +#        my @statinfo = get_stat_info($$);
    +#        update_rrd("wiregated_mem","",$statinfo[5]);
    +#        update_rrd("wiregated_stime","",$statinfo[0],"COUNTER");
    +#        update_rrd("wiregated_utime","",$statinfo[1],"COUNTER");
    +#        update_rrd("wiregated_cutime","",$statinfo[2],"COUNTER");
    +#        update_rrd("wiregated_cstime","",$statinfo[3],"COUNTER");
    +#        $rrd_syslastupdate = time();
    +#   }
        # Check if socket-handle is in select - or do this in plugin?
        if (my @sock_ready = $socksel->can_read(.1)) {
             # process sockets ready to read
    @@ -440,11 +448,7 @@
    
     sub check_generic_plugins {
         my $runname = $_[0];
    -    my %msg;
    -    my $fh;
         my $plugin_max_errors = 5;
    -    if (defined $_[1]) { %msg = %{$_[1]}; } else { %msg = (); }
    -    if (defined $_[2]) { $fh = $_[2]; } else { $fh = undef; }
         $thr_eiblisten_cause = "checking plugins";
         my @plugins = grep !/[\~\#]$/ && !-d $_, </etc/wiregate/plugin/generic/*>; # ignore backup-files and subdirectories
         for my $plugfile (@plugins)
    @@ -839,7 +843,7 @@
         $val[0] = hex($val[0]);
         $val[1] = hex($val[1]);
         $val[2] = hex($val[2]);
    -    unless ($val[2]) { return; }
    +#    unless ($val[2]) { return; }
         my $day = ($val[0] & 0xE0) >> 5;
         my $hour    = $val[0] & 0x1F;
         my $minute  = $val[1];
    @@ -1083,7 +1087,7 @@
       $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing
       given ($dpt) {
               when (/^10/) {
    -            my %wd=(Mo=>1, Di=>2, Mi=>3, Do=>4, Fr=>5, Sa=>6, So=>7);
    +            my %wd=(Mo=>1, Di=>2, Mi=>3, Do=>4, Fr=>5, Sa=>6, So=>7, Mon=>1, Tue=>2, Wed=>3, Thu=>4, Fri=>5, Sat=>6, Sun=>7);
                 my $wdpat=join('|',keys %wd);
                 my ($w,$h,$m,$s);
                 return unless ($w,$h,$m,$s)=($value=~/^($wdpat)?\s*([0-2][0-9])\:([0-5][0-9])\:?([0-5][0-9])?\s*/si);
    Zu den einzelnen Hunks:

    1. SIG{HUP} - führt dazu, dass nach einem Logrotate des eib.log-Files der wiregated.pl ins neue File schreibt. Dazu muss im /etc/logrotate.d/eib.log die Zeile

    Code:
            [ -f /var/run/wiregated.pl.pid ] && /bin/kill -HUP `cat /var/run/wiregated.pl.pid`
    stehen.

    2. %msg=()... dient dazu, dass ein Plugin zuverlässig erkennen kann, ob es zyklisch oder vom Bus her aufgerufen wurde

    3. update_rrd... das ist einfach doppelt im wiregated.pl drin. Kostet nix außer Performance.

    4. my %msg... DER IST GANZ WESENTLICH - ohne den funktionieren "kompilierte" Plugins nicht richtig, vor allem in Kombination mit Punkt 2 oben.

    5. val[2]: Bugfix - eine Uhrzeit kann auch 0 im Sekundenfeld haben, ohne dass das irgendwie falsch wäre...

    6. Die Datumsübersetzung etwas flexibler.

    VG, Fry

    #2
    Fry, vielleicht solltest Du klar dazu schreiben für welche wiregated.pl Version dieser Patch gedacht ist. Für die aktuellen Versionen nämlich sicherlich nicht! Auf welche Version hast Du denn geupdated? Vermutich auf eine 39.x Version, vor Umstellung des repos!

    Kommentar


      #3
      In der Tat: die Umstellung des Repositorys ist an mir vorbeigegangen.
      Wie lautet denn die neue Repo-Adresse?
      Dann sehe ich mir das mal an.
      VG, Fry

      Kommentar


        #4
        Zitat von Fry Beitrag anzeigen
        Wie lautet denn die neue Repo-Adresse?
        Das neue Repo wird automatisch mit dem update eingerichtet. Eigentlich sollte ein weiteres Update ausreichen, um dann auf den aktuellsten Stand zu kommen!
        Ich weiss jetzt nicht wie es hier aussieht, wenn man ein CommunityGate nutzt... schau mal im Zweifelsfall in Deine sources.list (wiregate-0.1 ist jetzt wiregate-1.0).

        Kommentar


          #5
          Hinweis: Ich habe das extra nochmal bei uns prüfen lassen:

          In unseren aktuellen Dämons (spätestens ab Version 1.1) sind die entsprechenden Kompatibilitäts-Verbesserungen zum Logikprozessor von Fry allesamt korrekt enthalten, da gibt es - wie XueSheng zuvor ausgeführt hat - NICHTS zu patchen.

          Daher bitte ein wenig Vorsicht, welche Informationen man - wenn auch versehentlich - verbreitet.

          lg

          Stefan

          Kommentar


            #6
            Hm. Da hab ich dann doch ein Problem. Hätte ich gar nicht gedacht.

            Bei mir ist es nämlich so: ich habe ein Original-Wiregate und wollte dieses nur auch verbesserte Hardware - einen fit-PC2 - portieren, dafür die Alix-Hardware ruhigstellen. Dabei habe ich als Grundlage ein Debian-wheezy genommen. Man könnte sagen, damit habe ich ein Community-Gate eingerichtet, wobei mein Wunsch allerdings immer war, zumindest bei den Daemons und dem webmin weiterhin kompatibel zu bleiben.

            Nun sieht es so aus, dass der Zug ohne mich abgefahren ist. Naja. Das Risiko, jetzt einfach auf den update-Button zu klicken, gehe ich nicht ein. Allerdings werde ich das Repo umstellen und den neuen Daemon holen. (ich dachte die ganze Zeit, den hätte ich...)

            Sorry für die Konfusion,
            VG, Fry

            Kommentar


              #7
              Nabend Fry,

              würde Dir ein zweites WireGate mit normalem Patchverlauf helfen, den Logikprozessor aktuell zu halten?

              Dein Logikprozessor ist - wie Chris' CometVisu - eine so coole Erweiterung des WireGate, dass ich Dir dafür ein paar Euro spenden würde. Wenn das ein paar Leute machen, reichts sicher für ein refurbished WireGate (denn ich wette, dass StefanW dafür bei Dir keinen Listenpreis aufrufen wird).

              Viele Grüße

              Dirk
              Baubeginn: 1676d. Sanierungsbeginn: 6/2010. Einzug: 9/2014. Fertig? Nie ;-)

              Kommentar


                #8
                Danke Dirk!
                - aber ich habe mein Original Wiregate noch. Und, ehrlich gesagt, ich betrachte meinen fit-PC2 als "Wiregate", nicht als Communitygate. Bereue auch keinen Cent des Kaufpreises an Elabnet.
                VG,
                Fry

                Kommentar


                  #9
                  und noch was: ich find's super, wenn Leute den Logikprozessor nützlich finden - wie auch meine anderen Plugins, Szenencontroller, Ansagen, Heizungsregler, und Anwesenheitssimulation. Geld kann mich nicht so motivieren wie solches Feedback.

                  Außerdem habe ich aus diesem Forum so enorm viel Nutzen gezogen, dass ein Zurückgeben in die Community einfach richtig ist.

                  Schönen Abend!
                  Fry

                  Kommentar

                  Lädt...
                  X