Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Aufruf Plugin viel zu oft...

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

    [wiregate] - √ - Aufruf Plugin viel zu oft...

    Hallo zusammen,
    ich habe ein Plugin programmiert, das die Luftfeuchte im Bad ausliest und dann eine Aktion ausführen soll.
    Klappt auch.

    Aber das Plugin wird momentan jede Sekunde ausgeführt und das ist erstens völlig unnötig und zweitens auch nicht mein Plan.
    Das Plugin ist auf die GA des Feuchtemessers gesetzt.
    Code:
    $plugin_subscribe{'6/3/61'}{$plugname} = 1;
    Der Wert wird standardmäßig vom WG alle 300 s auf den Bus geschrieben und ich habe noch "Senden bei 5% Änderung" eingestellt. (siehe Screenshot)

    Ich erwarte also, dass das Plugin auch nur bei jeder Änderung am Bus, also alle 300 s ausgeführt wird.
    Warum wird das Plugin dauernd ausgeführt?
    Was mache ich falsch?

    Viele Grüße
    Angehängte Dateien

    #2
    In 2 Stunden ist der Geschirrspüler fertig. Dann kann die Glaskugel uns den Plugin Code verraten .
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Zitat von JuMi2006 Beitrag anzeigen
      In 2 Stunden ist der Geschirrspüler fertig. Dann kann die Glaskugel uns den Plugin Code verraten .
      ???
      Meine Frage war nicht, was am Code zu verändern wäre, sondern warum das Plugin jede Sekunde aufgerufen wird...
      Wozu Du da Deine Glaskugel brauchst, verstehe ich nicht ganz.

      Kommentar


        #4
        Aber wenn der ganze Code hilft:
        Code:
        $plugin_subscribe{'6/3/61'}{$plugname} = 1;
        my $Feuche=knx_read("6/3/61",300,5.001);
        my $Taupunkt=knx_read("6/3/63",300,9.001);
        my $Raumtemperatur=knx_read("6/2/69",300,9.001);
        my $result = 0;
        my $diff = $Raumtemperatur-$Taupunkt;
        if (($Raumtemperatur > 0) and ($diff < 4)) {
         $result=1;
        }
        knx_write("2/1/62",$result,1.001);
        $plugin_info{$plugname.'_result'} = "Temp: ".$Raumtemperatur."/ Tau: ".$Taupunkt."/ Diff :".$diff." => Spiegelheizung: ".$result;

        Kommentar


          #5
          Das Problem ist, dass alle Plugins in einem gemeinamen "prozess" abgearbeitet werden. Wenn du also nur ein paar Plugins mit kurzer Ausführungsdauer hast, ist dein feuchteplugin sehr schnell wieder a der Reihe und wird trotz 300s zyklus abgearbeitet. Dies musst du in deinem Code abfangen...
          Gruss Patrik alias swiss

          Kommentar


            #6
            Zitat von JoeKool Beitrag anzeigen
            ???
            Meine Frage war nicht, was am Code zu verändern wäre, sondern warum das Plugin jede Sekunde aufgerufen wird...
            Wozu Du da Deine Glaskugel brauchst, verstehe ich nicht ganz.
            Weil Dein Fehler zu 99.9999999% am Code liegen wird. Willst Du Hilfe oder nicht?


            Code:
            $plugin_subscribe{'6/3/61'}{$plugname} = 1;
            [B]my $Feuche=knx_read("6/3/61",300,5.001);[/B]
            my $Taupunkt=knx_read("6/3/63",300,9.001);
            my $Raumtemperatur=knx_read("6/2/69",300,9.001);
            my $result = 0;
            my $diff = $Raumtemperatur-$Taupunkt;
            if (($Raumtemperatur > 0) and ($diff < 4)) {
             $result=1;
            }
            knx_write("2/1/62",$result,1.001);
            $plugin_info{$plugname.'_result'} = "Temp: ".$Raumtemperatur."/ Tau: ".$Taupunkt."/ Diff :".$diff." => Spiegelheizung: ".$result;
            Damit sorgst Du dafür dass das Plugin gleich wieder ausgeführt wird, schließlich wird auf die GA gelesen und auch das sorgt für einen erneuten Aufruf.

            Zweitens hast Du kein $plugin_info{$plugname.'_cycle'} definiert was per default für einen Aufruf alle 20/60 Sekunden sorgt (ob 20 oder 60 hab ich nicht im Kopf).
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Zitat von JuMi2006 Beitrag anzeigen
              Weil Dein Fehler zu 99.9999999% am Code liegen wird. Willst Du Hilfe oder nicht?


              Code:
              $plugin_subscribe{'6/3/61'}{$plugname} = 1;
              [B]my $Feuche=knx_read("6/3/61",300,5.001);[/B]
              my $Taupunkt=knx_read("6/3/63",300,9.001);
              Damit sorgst Du dafür dass das Plugin gleich wieder ausgeführt wird, schließlich wird auf die GA gelesen und auch das sorgt für einen erneuten Aufruf.

              Zweitens hast Du kein $plugin_info{$plugname.'_cycle'} definiert was per default für einen Aufruf alle 20/60 Sekunden sorgt (ob 20 oder 60 hab ich nicht im Kopf).
              Okay. Super!
              Vielen Dank!
              Aber warum führt ein reines Lesen einer GA zu einer "Änderung", die zu einer erneuten Ausführung des Plugins führt?

              Und ich dachte, dass ich entweder mit _cycle ODER mit einem GA aufrufe.
              Ist also auch falsch gedacht?
              Wenn ich also einen GA und _cycle angebe, dann müssen beide Bedingungen erfüllt sein, dass das Plugin ausgeführt wird?

              Kommentar


                #8
                Schau Dir doch einfach mal die Struktur der anderen Plugins an.
                Damit es funktioniert muss ein Plugin sowohl unabhängig einer Nachricht (cycle = 0 einmalig, cycle = xxx alle xxx sekunden) aufgerufen werden können, als auch bei Eintreffen einer Nachricht.

                Du musst dann im Plugin-Code selbst diese Zustände unterscheiden, die meisten haben ein
                Code:
                if (%msg)
                // hier kommt der Teil der aufgerufen wird wenn es durch ein empfangenes Telegramm aufegrufen wird
                und ein
                Code:
                else
                // Plugin Setup, zB subscribe oder regelmäßige Aktionen wenn cycle != 0

                Kommentar


                  #9
                  Zitat von ctr Beitrag anzeigen
                  Schau Dir doch einfach mal die Struktur der anderen Plugins an.
                  Damit es funktioniert muss ein Plugin sowohl unabhängig einer Nachricht (cycle = 0 einmalig, cycle = xxx alle xxx sekunden) aufgerufen werden können, als auch bei Eintreffen einer Nachricht.
                  Genau. Soweit war und ist mit das sonnenklar.
                  Ich kann so ein Plugin auf beide Arten aufrufen.
                  Aber muss ich das denn?
                  Ich will es ja gar nicht zyklisch aufrufen und habe daher den zyklischen Aufruf weggelassen und bin davon ausgegangen, dass es dann nur aufgerufen wird, wenn eine Nachricht eintrifft.
                  Darf/kann man das nicht?

                  Kommentar


                    #10
                    Du rufst das Plugin gar nicht auf, sondern der wiregated und der tut es nunmal in beiden Fällen.

                    Wenn Du zyklisch nciht brauchst (was ja durchaus legitim ist), dann eben
                    Code:
                    $plugin_info{$plugname.'_cycle'} = 0; # nur bei Telegramm aufrufen
                    benutzen.

                    Initial wird das Plugin dann doch noch aufgerufen, d.h. den Split in %msg und else (mind für's subscribe) solltest Du trotzdem implementieren.

                    Kommentar


                      #11
                      Zitat von ctr Beitrag anzeigen
                      Du rufst das Plugin gar nicht auf, sondern der wiregated und der tut es nunmal in beiden Fällen.
                      Alles klar. Dass ich dem wiregated den cycle = 0 vorgeben muss (und das nicht durch Weglassen implizit passiert) wusste ich nicht.

                      Vielen Dank!

                      Kommentar

                      Lädt...
                      X