Ankündigung

Einklappen
Keine Ankündigung bisher.

plugin_info und die liebe Persistenz

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

    [wiregate] plugin_info und die liebe Persistenz

    Moin,

    stehe gerade gewaltig auf dem Schlauch und sehe wohl den Fehler einfach nicht...
    Das Forum ist sich ja soweit einig dass plugin_info persistent über einen Neustart hinweg ist, z.B. https://knx-user-forum.de/forum/supp...-hinaus-merken

    PHP-Code:
      $plugin_info{$plugname.'_irgendwas'} = "irgendwas anderes"

    Allerdings funktioniert das für meinen Gaszähler (an Tasterschnittstelle) nicht: die Variable ist nach einem Neustart verschwunden und muss über die normalerweise auskommentierte Zeile (siehe unten) erst wieder initialisiert werden.

    Was mache ich verkehrt? Kann ich irgendwo mal an eine Einstellung gekommen sein? etc. etc.

    SaveState scheint mir overkill wenn plugin_info doch eigentlich prima funktionieren müsste.

    Vielen Dank für die Hilfe!



    Code:
    # CONFIGURATION
    
    my $debugGasCounter = '0';
    
    my $gasCounterGA = '9/1/100';
    my $wiregateVariable = 'GasMeterCounter';
    
    ### end CONFIGURATION
    
    # NB: important to configure Tasterschnittstelle to only count either steigende or fallende Flanke, as in: XOR ):-)
    
    ### no configuration expected below this line
    # --------------------------------------------------------------------------------------------------
    
    # no cyclic calling, react to GA only
    $plugin_info{$plugname.'_cycle'} = 0;
    
    my $busActive = !(!keys %msg); # true if script was called due to bus traffic
    if( !$busActive ) # unnecesary during bus traffic
    {
        $plugin_subscribe{$gasCounterGA}{$plugname} = 1;
        plugin_log($plugname,'Subscribed to counter GA '.$gasCounterGA);
    
        #$plugin_info{$plugname.'_'.$wiregateVariable} = 11010.32;
    }
    else {
        $plugin_info{$plugname.'_'.$wiregateVariable} += 0.01;
        if ($debugGasCounter) {plugin_log($plugname,'GasMeterCounter='.$plugin_info{$plugname.'_'.$wiregateVariable});}
    }
    return 0;

    #2
    Also, die Kurzantwort (und Vermutung!): $plugin_info ist persistent, allerdings nicht wenn man extrem ungeduldig ist, weil damit der Flash-Speicher viele, viele Jahre überlebt wird das nicht ständig weggeschrieben - braucht es im Regelbetrieb ja auch nicht.

    Warte mal 15 Minuten, allerdings macht die Frage mit diesem Code keinen Sinn, weil du schreibst ja vorher einen (evtl. gerade auskommentiert) fixen Wert rein(?)
    bzw. der "else" Zweig greift nie, weil $debugGasCounter halt 0=FALSE ist.
    Also grundsätzlich ist da der Fehler, evtl. nur ein Verständnis/Gedulds-Problem, das $plugin_info(_...) da garnicht aktualisiert wird ..

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

    Kommentar


      #3
      Danke für deine Mühen. Bin zwar ein ungeduldiger Typ, aber nicht so extrem...

      Spaß beiseite: auch nach mehreren Stunden warten überlebt der Wert den Neustart nicht.

      Habe beim Neustart http://wiregateZZZ:10000/wiregate/edit_plugins.cgi im Auge behalten:
      - erstmal werden nur die Scripts angezeigt, aber keine einzige Variable
      - dann (ich vermute sobald die Scripts initialisiert sind) erscheinen die ersten Werte
      - allerdings steht der obige Wert nicht dazwischen
      - muss ich also manuell initialisieren

      Am Code sollte es nicht liegen:
      1) Die auskommentierte Zeile ist nur für mich zum manuell initialisieren: "scharf stellen", Skript hochladen, auskommentieren, wieder hochladen
      2) a) Sobald einmal manuell initialisiert, funktioniert alles prima: auf edit_plugins.cgi sehe ich dass der Zähler brav hochgezählt wird
      b) Auch das Auslesen der Variable in einem anderen script funktioniert: der Messwert landet wie vorgesehen in einer rrd.

      Wenn ich es richtig verstehe, wird $plugin_info(_...) aktualisiert.

      Vor dem Neustart hatte ich geschaut: /etc/wiregate/wiregate_plugin.db hatte eine aktuelle Uhrzeit, war also anscheinend aus /tmp kopiert worden. Inhalt habe ich mir nicht separat angeschaut (nur über edit_plugins.cgi).


      Hast du noch Ideen woran es liegen könnte?

      Vielen Dank und Grüße

      Kommentar

      Lädt...
      X