Ankündigung

Einklappen
Keine Ankündigung bisher.

Nachlaufautomatik / Treppenhausautomat

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

    [WireGate-Plugin] Nachlaufautomatik / Treppenhausautomat

    Hallo, wie implementiere ich denn am besten eine Nachlaufautomatik/Treppenhausautomat* als Wiregate-Plug-in?

    * Per EIB-Taster wird etwas eingeschaltet, was eine im Plug-in definierte Zeit läuft (z.B. 30 Min. oder 3 Stunden) und sich dann automatisch ausschaltet.

    Als einfachstes würde ich jetzt sagen, dass ich dafür ein Plug-in mache, das auf die Einschalt-GA hört, einschaltet und dann ein "sleep(<Zeit>)" macht (ich weiß nicht, wie es unter Perl heißt, aber irgend so was wird es schon geben) und dann wieder ausschaltet.

    Bin mir aber nicht sicher, ob das "kompatibel" zu dem Wiregate-Plug-in-Konzept ist ...???
    Spricht da was dagegen?
    Wenn ja, wie mache ich es besser (ohne, dass es viel komplizierter wird)?
    Gibt es bei den aktuellen Code-Schnipseln schon was vergleichbares/verwendbares (ich hatte mit den mir geläufigen Stichworten nix gefunden)?
    ...?

    Danke, Gruß
    mbx

    #2
    ich glaube die Plugins werden zyklisch aufgerufen. Du müsstest es also eher so machen, dass du dir die Startzeit merkst und dann bei jedem Aufruf des Plugins prüfst, ob die aktuelle Zeit x Minuten/Stunden nach der Startzeit liegt und wenn ja, die GA zum Ausschalten senden. Aber da melden sich sicher noch die Profis hier
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    Kommentar


      #3
      Hi,

      mit sleep darfst, bzw. solltest du nicht arbeiten, da dir das Plugin einfach in einen Timeout läuft (und du verzögerst die anderen Plugins).

      Ich würde es so in etwa machen (ist aber nicht getestet, kann noch fehlerhaft sein):

      Code:
      $plugin_info{$plugname.'_cycle'} = 0;
      my $GA="0/0/0"; #Die GA des Tasters
      my $delaytime = 60; #Zeit in Sekunden
      $plugin_subscribe{$GA}{$plugname} = 1;
      
      if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $GA and $msg{'data'} eq "01") {
        $plugin_info{$plugname.'_cycle'} = 5;   # Sobald der Taster gedrückt wird, wird das Plugin alle 5 Sekunden ausgeführt.
        $plugin_info{$plugname."_lastactivatetime"} = time;
        $plugin_info{$plugname."_isactive"} = 1;
        return "Plugin läuft";
      }
      if ($plugin_info{$plugname."_isactive"}) {
        if ($plugin_info{$plugname."_lastactivatetime"}+$delaytime <= time) {
          knx_write($GA,0,1);
          $plugin_info{$plugname."_isactive"} = 0;
          $plugin_info{$plugname.'_cycle'} = 0;
        }
      }
      return;
      Der würde nun bei erneuter Betätigung (auch wenn das Licht noch an ist) die Zeit erneut abwarten. Solltest du das nicht wollen, müsstest du bei der ersten If-Abfrage noch das "isactive" mit abfragen.
      Viele Grüße
      Christian

      Kommentar


        #4
        Okay, alles klar. Danke Euch beiden.

        Kommentar

        Lädt...
        X