Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin nur 1x täglich ausführen

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

    [wiregate] Plugin nur 1x täglich ausführen

    Hallo zusammen,
    ich habe eine Wärmepumpe mit Wärmemengenzähler, die bei veränderten Werten diese kWh an den Bus sendet. Jetzt will ich täglich um 00:00Uhr die Differenz zum Vortag ermitteln. Ich dachte ein cycle von 8640 wäre da meine Lösung aber irgendwie wird das Plugin auch mal zwischendrin aufgerufen.

    Kann ich den Aufruf vom WG irgendwie blockieren und von der Kommeandozeile selbst vornehmen? Ich fänd es halt schick, das Plugin neben den anderen am WG zu verwalten.

    Danke für die Hilfe!
    Carsten

    #2
    Schreib das doch in ein Counter-RRD und lese den Wert dann aus dem RRD. Da musst Du Dich um nichts kümmern, der aktuelle Wert darf sogar jede Sekunde ins RRD geschoben werden .

    Irgendwo im SVN gabs da auch Plugins die Werte aus dem RRD lesen als Beispielcode. Wenns grafisch reicht musst Du Dich nichtmal darum kümmern.

    Edit:
    Oder alle 60 Sekunde ausführen und auf Zeitpunkt überprüfen -> localtime
    Angehängte Dateien
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Hallo Carsten!

      Ich mach das mit dem Code unten. Wenn sich der Wert des Wochentags ändert => neuer Tag. Bei 60s Zykluszeit des Plugins wird der Code innerhalb der if Schleife zw. 0:00 und 0:01 ausgeführt.

      Nur über die cycletime geht nicht, da sich nach einem Reboot der Ausführungszeitpunkt ändert.

      Code:
      my $day = (localtime(time))[3];
      if ($day != $plugin_info{$plugname.'_last_day'}) {
        #Neuer tag, Berechnung 1x für heute und Folgetag durchführen
        $plugin_info{$plugname.'_last_day'} = $day;
      
        xxxx
      
      }
      return;
      Ich hoffe das hilft.

      lg Robert

      Kommentar


        #4
        Wenn ich ein Plugin oder einen Teil davon täglich um die Mittagszeit ausführen möchte klappt das dann so?

        Code:
        my $day = (localtime(time))[3];
        my $hour = (localtime(time)) [2];
        if ($day != $plugin_info{$plugname.'_last_day'}&& $hour >=12) {
          #Neuer tag, Berechnung 1x für heute und Folgetag durchführen
          $plugin_info{$plugname.'_last_day'} = $day;
        
          xxxx
        
        }
        return;
        Gruß -mfd-
        KNX-UF-IconSet since 2011

        Kommentar


          #5
          Ich nutze dabei das codefragment aus dem plugin emx_sonne.pl aus dem svn. Hier wird das plugin nach Änderung einaml ausgeführt und dann immer zur angegebenen Zeit.
          Viele Grüße Jens

          Kommentar


            #6
            Zitat von mfd Beitrag anzeigen
            Wenn ich ein Plugin oder einen Teil davon täglich um die Mittagszeit ausführen möchte klappt das dann so?
            [...]
            Ja, ist aber nicht sonderlich flexibel. D.h. im konkreten Fall mag das durchaus passen - aber sobald es um mehrere Events geht wird's hässlich.

            Meine Lösung:
            Ich hab einen Zustandsautomaten gebaut (und das sogar generisch, dürfe auch in den Code Schnipseln sein).

            Da würde man in diesem Fall zwei Zustände erzeugen: "Nachmittag" und "Vormittag".
            Der Zustandwechsel "Vormittag" -> "Nachmittag" wird dann durchgeführt, wenn $hour > 12.
            Und der Zustandswechsel "Nachmittag" -> "Vormittag" wenn $hour < 12.

            Möchte man nun etwas genau 1x nach dem Zustandswechsel ausführen, dann macht man halt noch einen weiteren "Hilfs"-Zustand. Z.B. "Nachmittag_Start". Der übernimmt den Zustandswechsel "Vormittag" -> "Nachmittag" (nun als "Nachmittag_Start") um 12 Uhr. Und der Übergang von "Nachmittag_start" zu "Nachmittag" ist immer Wahr, d.h. wird sofort durchgeführt.

            Das klingt fürchterlich kompliziert, nicht?
            Nun, auf den ersten Blick ja - aber es strukturiert die Aufgabe deutlich. Und bleibt dadurch auch langfristig gut wartbar. Z.B. wenn doch noch ein weiterer Zustand (z.B. "Dämmerung") dazu kommen soll. Und v.a. wenn dazu noch andere Bedingungen kommen - wie Sensor-Werte mit Schwellwerten, etc. pp.
            TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

            Kommentar


              #7
              Ich hab' das noch ein wenig anders gelöst.
              Es existiert eine definierte eine Soll-Zeit für das Ereignis. Im Plugin wird dann geprüft, ob aktuelle Zeit nach Soll-Zeit UND letzte Ausführungszeit des Plugins vor Soll-Zeit. In diesem Fall wird die Aktion ausgführt.
              Endlich umgezogen. Fertig? Noch lange nicht... ;-)

              Kommentar


                #8
                Ich will an der Stelle - auch wenn es etwas OT ist - mal den Hintergrund der Aktion etwas erläutern:

                Ein PV-Wechselrichter speichert intern die Erträge der letzten Tage. Diese sind per RS232 abrufbar. Nun möchte ich jeweils den Wert vom gestrigen Tag auslesen und z.B. in einen rrd schreiben. Natürlich NUR den Wert vom jeweiligen Vortag. Das ganze muss tagsüber geschehen, da der WR über Nacht aus ist und somit nichts senden kann.
                Falls das Wiregate mal für einige Stunden down ist, z.B. zur Mittagszeit, soll der Wert natürlich noch geholt werden. Ich hätte deshalb eine Zeitspanne zwischen 10 Uhr und 15 Uhr gewählt (= WR auf jeden Fall in Betrieb).

                Die spannende Frage dabei wird noch sein, wie bringe ich das Plugin dazu einen Wert für "gestern" in einen rrd zu schreiben...
                Gruß -mfd-
                KNX-UF-IconSet since 2011

                Kommentar


                  #9
                  Ob das mit dem WG-Perlscript "update_rdd" geht weiß ich nicht genau, habe den Code gerade nicht greifbar. Vielleicht kannst du auch hier den Parameter Timestamp direkt übergeben.
                  Ansonsten hilft RRDtool - rrdupdate weiter.

                  Code:
                  [B]rrdtool[/B] [B]update[/B] [I]filename[/I] [I]timestamp[/I][B]:[/B][I]value[/I]
                  Endlich umgezogen. Fertig? Noch lange nicht... ;-)

                  Kommentar

                  Lädt...
                  X