Ankündigung

Einklappen
Keine Ankündigung bisher.

Impuls nach Ein-Befehl

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

    [wiregate] Impuls nach Ein-Befehl

    Hallo,

    ich bräuchte ein Plugin, das mir einen Aktor (1-Wire I/O) nach einem Ein-Befehl sofort oder ein paar sek. wieder ausschaltet.

    Ich möchte damit mein Garagentor ansteuern.

    Hat jemand so ein Plugin liegen? Es müsste so in der Art wie das Plugin Nachdimmen funktioniern nur ohne die Zeit.

    Gruß Manuel

    #2
    SourceForge.net Repository - [openautomation] Contents of /wiregate/plugin/generic/Timer.pl

    Aber nur diese Revision, die späteren haben ne Mindestlaufzeit von 1 Minute.

    Ansonsten, wenn es nicht oft vorkommt und nur getriggert wird wäre evtl. auch ein
    Code:
    select(undef,undef,undef,0.5)
    nicht soo schlimm. blockiert dann halt für eine halbe Sekunde alle anderen Plugins in diesem einen Moment.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Hallo Mirko,

      wenn ich ehrlich bin, dann verstehe ich nur Bahnhof.

      Vielleicht hast du mich auch nur nicht verstanden.

      Ich brauche ein Plugin, dass nach einigen sek. einen Aus befehl sendet, nachdem ein 1 befehl gekommen ist.

      Gruß Manuel

      Kommentar


        #4
        Genau das macht das Timer Plugin:

        Code:
        my $ga  = "3/2/28";     #GA auf die der "Ein"-Befehl gesendet wird.
        my $delay = 5;          #Delay in Sekunden, danach wird Aus gesendet
        my $start_value = 1;    #Timerstart bei 1 -> 1 (Aus-Timer) also das was Du brauchst. Plugin bekommt "Ein" und sendet nach x-Sekunden "Aus"
        	                #Timerstart bei 0 -> 0 (An-Timer) würde nach einem "Aus"-Befehl ein "Ein" senden
        Den Rest macht das Plugin.

        Also Du sendest auf die "3/2/28" eine "1" und 5 Sekunden später (+/- Plugin Laufzeiten) sendet das Plugin eine "0" auf die "3/2/28".
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          Hallo Mirko,

          danke für deine Unterstützung.

          Habe nun diese Code ausprobiert:

          Code:
          # Timer
          # v 0.3 
          # 2013-02-01 JuMi2006 -> [URL]https://knx-user-forum.de[/URL]
          #####################
          ### Konfiguration ###
          #####################
          my $ga  = "15/2/2";     #GA
          my $delay = 1;          #Delay in Sekunden
          my $start_value = 1;    #Timerstart bei 1 -> 1 (Aus-Timer)
                      #Timerstart bei 0 -> 0 (An-Timer)
           
          ##########################
          ### Ende Konfiguration ###
          ##########################
          $plugin_info{$plugname.'_cycle'} = 86400;
          $plugin_subscribe{$ga}{$plugname} = 1;    
          my $time = time;
          if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga)
          {
              my $val_in = knx_read($ga,0,1);
           
              if ($val_in == $start_value)   # wenn Start von GA erkannt
              {
              plugin_log($plugname,"Timer aktiv");
              $plugin_info{$plugname.'_timer_active'} = 1;# setzt eine Variable zur Fehlervermeidung
              $plugin_info{$plugname.'_last_start'} = time;
              }
           
              if ($val_in == !$start_value)   # wenn Stop von GA erkannt
              {       
              $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
              plugin_log($plugname,"Timer deaktiviert");
              }
          }
          else
          {
              if (($plugin_info{$plugname.'_timer_active'} == 1) && ($time > ($plugin_info{$plugname.'_last_start'} + $delay)))
              {
              knx_write($ga,!$start_value,1);                 # negiert senden
              $plugin_info{$plugname.'_timer_active'} = 0;    # setzt eine Variable zur Fehlervermeidung
              plugin_log($plugname,"Timer abgelaufen");
              }
          }
          Das Problem ist jedoch dass nur durch die Zykluszeit (bei mir nun auf 2sek) eingestellt, die "86400" gesendet wird. Nicht nach der 1 sek.

          Was mache ich falsch ?

          Gruß Manuel

          Kommentar


            #6
            Du musst genau die verlinkte Revision nehmen (Version 0.1 der zweite commit) und nicht die Version 0.3 !!!

            Dann bitte nichts weiter ändern als $ga und $delay !!!

            Grüße
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Wobei cycle beim aktivieren auf delay gesetzt wird. Wenn du also Delay auf 2 Sekunden hast und nach dem Auslösen kurz vor Ablauf von 2 Sekunden ein Plugin an der Reihe ist, dass 2-3 Sekunden benötigt dann dauert es schon bis zu 5 Sekunden.

              Desshalb schreibe ich auch immer, dass Zeitfunktionen mit dem WG Murks sind... -> Timer sind noch viel schlimmer.
              Wenn die ungenaue Dauer ein Problem darstellt (2 Sek = zwischen 2 und 5 Sekunden) müsste man es für diesen Sonderfall ein kleines bischen anpassen... (bei GA=1, cycle = 1 sek und bei erreichen von 2 sek mittels timestamp wieder cycle = 0 oder wenn nicht mehr als 2 sekunden dann könnte man zur Not noch sleep mit cycle=0 verwenden. Darf dann aber NIE blauäugig einfach hochgeschraubt werden! )
              Gruss Patrik alias swiss

              Kommentar


                #8
                @Patrik:

                Genau das gleiche sag ich doch die ganze Zeit

                Das erste verlinkte Pluginarbeitet mit cycle und timestamps. Das sollte eigentlich genau dafür reichen. Manu schrieb ja das es auch ein paar Sekunden sein dürften. Er hat einfach nur die falsche Version gezogen und dann noch das Plugin nach ###Ende Konfiguration### verändert .

                Statt sleep habe ich select(undef,undef,undef,x) vorgeschlagen.

                @Manu

                Hat es denn nun geklappt?
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #9
                  Hallo Mirko,

                  bin nun erst dazu gekommen es zu testen.

                  Danke für deine Hilfe. So wie es aussieht läuft es nun.
                  Die Zeit ist unkritisch. Von derher passt es so.

                  Wo müsste ich denn "select(undef,undef,undef,x)" einfügen ?

                  Gruß Manuel

                  Kommentar


                    #10
                    Wozu brauchst du dass? Nach deiner Aussage funktioniert das Plugin doch? Für die anderen Möglichkeiten müsste man das Plugin umbauen...
                    Gruss Patrik alias swiss

                    Kommentar


                      #11
                      Zitat von manu241 Beitrag anzeigen
                      Von derher passt es so.
                      Dann lass es so ist sicherer für den wiregated. Du kannst ja mal mit dem delay von 1 Sekunde im Busmonitor/Log nachsehen wie lange es im so Schnitt dauert bis der "Aus"-Befehl kommt. I.d.R. sollte das aber recht zügig gehen und nur im ungünstigsten Fall mal etwas (0-10) Sekunden länger dauern.

                      Gruß
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar

                      Lädt...
                      X