Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Plugin soll pausieren!

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

    [wiregate] - √ - Plugin soll pausieren!

    Hallo,

    ich fahrte mit einem Plugin ein paar Ventile.

    Wenn diese gefahren will ich eine Pumpe anfahren.

    Die Verfahrzeit beträgt 105s

    Ich habe dazu sleep(105); benutzt. Das Plugin wird bis zu dem Kommando vor Sleep ausgeführt, danach passiert aber nichts mehr.

    Wie kann ich das Plugin für die Zeit x in der Ausführung anhalten?



    [INFORMATION]
    if ($senden ==1) {
    # Daten werden gesendet
    knx_write($dreiwegeventil,$pos3wege,5);
    knx_write($brunnenventil,$brunnenventil_pos,5);
    knx_write($bachlaufventil,$bachlaufventil_pos,5);
    #Warten bis Ventile in Stellung
    knx_write($ventil_aktion,1,1);
    sleep (105);
    knx_write($ventil_aktion,0,1);
    knx_write($rpm_wert,$rpm,9);
    return "$pumpenszene,$pos3wege,$bachlaufventil_pos, $brunnenventil_pos, $rpm, $url_send";
    }
    [/INFORMATION]
    Gruß Hartwig

    #2
    Hallo Hartwig,

    meines Wissens werden Plugins nach spätestens 10 Sekunden beendet, von daher wird Dein Plugin nicht fertig.

    Ich würde es an Deiner Stelle mit einer Hilfsvariable lösen, die anzeigt, dass das Programm aktiv ist und den Zeitpunkt der Ausführung speichert.

    Also in etwa so (ungetestet):

    Code:
    if (!$plugin_info{$plugname."_AnzahlBewegung"}){
      if ($senden ==1) {
      #Ausführungszyklus auf 1 Sekunde setzen
      $plugin_info{$plugname.'_cycle'} = 1;
      #Startzeit erfassen:
      $plugin_info{$plugname."_AnzahlBewegung"} = time();
      # Daten werden gesendet
      knx_write($dreiwegeventil,$pos3wege,5); 
      knx_write($brunnenventil,$brunnenventil_pos,5);
      knx_write($bachlaufventil,$bachlaufventil_pos,5);
      #Warten bis Ventile in Stellung
      knx_write($ventil_aktion,1,1);
    }
    elsif (time() - $plugin_info{$plugname."_AnzahlBewegung"} > 105) {
      knx_write($ventil_aktion,0,1);
      knx_write($rpm_wert,$rpm,9);
      delete($plugin_info{$plugname."_AnzahlBewegung"});
      $plugin_info{$plugname.'_cycle'} = 300; #ursprünglicher Wert
      return "$pumpenszene,$pos3wege,$bachlaufventil_pos, $brunnenventil_pos, $rpm, $url_send";
     }
    }
    Viele Grüße
    Christian

    Kommentar


      #3
      Pausen in Plugins sind (wie in anderen ereignisgesteuerten Systemen) ungünstig und daher meist nicht erlaubt.

      Ein pausierendes = stehendes Plugin stoppt den Perl-Prozess und hält alles andere an. Darum werden Plugins die länger als 10 Sekunden brauchen auch gekillt.

      Daher Start-Zeitpunkt in eine GA "schreiben" und bei folgenden Durchläufen prüfen ob die Zeit schon rum ist für die nächste Aktion.

      Das wurde bereits in einigen Beiträgen hier zu Plugins gepostet, wie dies korrekt zu lösen ist.

      Edit: Christian war (viel) schneller.

      lg

      Stefan

      Kommentar


        #4
        Hallo Christian,

        danke für den Quellcode.

        Funktioniert nun perfekt.

        Danke für die Hilfe.
        Gruß Hartwig

        Kommentar

        Lädt...
        X