Ankündigung

Einklappen
Keine Ankündigung bisher.

"Szenen" Plugin (erste Version)

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

    [wiregate] "Szenen" Plugin (erste Version)

    Hallo,
    ich hab heut bischen an nem Szenen Plugin gearbeitet, das ist dabei herausgekommen:

    Code:
    # Plugin für Szenen
    # ga1 = GA
    # wert = Wert der auf die GA gesendet werden soll (DPT ist durch import der GAs aus der ETS festzulegen
    # Aufbau moeglichst so, dass man unterhalb der Definitionen nichts aendern muss!
    
    
    my $trigger_ga = '8/2/0';  # triggert die Szene mit einer 1 (DPT 1)
    $plugin_subscribe{$trigger_ga}{$plugname} = 1;
    
    my @GAs;
    push @GAs, { name => "Wohnzimmer TV", ga1 => "1/1/35", wert => 1 };
    push @GAs, { name => "Wohnzimmer Kamin", ga1 => "1/1/11", wert => 0 };
    push @GAs, { name => "Wohnzimmer Tür", ga1 => "1/1/2", wert => 0 };
    push @GAs, { name => "Wohnzimmer Mitte", ga1 => "1/1/38", wert => 0 };
    push @GAs, { name => "Wohnzimmer Fenster", ga1 => "1/1/34" , wert => 0 };
    
    #push @GAs, { name => "Wohnzimmer TV dimmen", ga1 => "1/1/37" , wert => 50};
    
    
    if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $trigger_ga && defined $msg{'value'} && $msg{'value'} == "1" ) {
    
        foreach my $element (@GAs) {
            knx_write($element->{ga1}, $element->{wert}, 1.001);    
        }
    }
    Läuft auch, nur ist bis jetzt nur das senden auf ne GA mit DPT 1 möglich.
    Gibts ne Möglichkeit bei knx_write den DTP aus den importierten GAs abzufragen oder so?
    Dann könnte man auch Dimmwerte usw. senden.

    Noch ne allgemeine Frage, gibts iwo ne Doku zu den WG-spezifischen (perl-)Befehlen? Also knx_write usw? Und GAs anmelden, das immer aus den vorhanden Plugins zusammenzusuchen ist langsam bischen nervig.

    Gruß
    David

    #2
    CometVisu Multitrigger

    Ich habe heute mal versucht das Plugin mit dem Multitrigger der CometVisu zu benutzen, aber die Ausführungsdauer bzw. der Zeitpunkt der Ausführung ist nicht wirklich zufriedenstellend. Um genau zu sein: manchmal dauert es >10s bis das "knx_write" auf dem Bus ankommt.

    Woran liegt das und (wie=) könnte man das verbessern?

    Danke,
    Micha
    Edit: ich habe jetzt mal die $trigger_ga mit der ETS auf den Bus geschrieben und auch hier ist der Zeitversatz >10s, es liegt also wohl eher nicht an der CometVisu sondern am Plugin selbst

    Kommentar


      #3
      Also bei mir läufts wenn ich die GA direkt ansprech wunderbar, be mir kommt ein enormer Zeitversatz dadurch zustande dass im Wohnzimmer die Szene per Doppelklick abruf.

      In der Visu läuft alles sofort durch, aber wenn ich das Doppelklick Plugin nehm (encode_iwas im svn) dauerts echt ewig.

      Vlt. kann da nen echter Experte was dazu sagen, da bin ich auch überfragt.

      Kommentar


        #4
        Zitat von daviid Beitrag anzeigen
        Gibts ne Möglichkeit bei knx_write den DTP aus den importierten GAs abzufragen oder so?
        Ich denke, das geht damit:
        $eibgaconf{$GA}{'DPTSubId'}

        Mit der Doku über alle WG Befehle muss ich dir Recht geben! Sowas wünsche ich mir auch...

        Kommentar


          #5
          Zitat von haegar80 Beitrag anzeigen
          Mit der Doku über alle WG Befehle muss ich dir Recht geben! Sowas wünsche ich mir auch...
          Die wichtigsten Befehle sind hier dokumentiert. Und da steht, dass der DTP bei knx_write automatisch gesetzt wird, wenn er entsprechend im GA-Editor importiert/gesetzt ist ("ESF-import unter EIB-Konfiguration").

          Micha

          Kommentar


            #6
            Verzögerte Reaktionen sind meist schlicht auf andere Plugins zurückzuführen, die "pennen" -> das darf schlicht kein Plugin!
            Also sowas wie sleep, 10s ein mp3 abspielen und warten, versuchen 10 nicht lesbare Adressen vom Bus zu holen, 50 rrd's auf einen Rutsch, ...

            DPT: stimmt so.

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Zitat von makki Beitrag anzeigen
              versuchen 10 nicht lesbare Adressen vom Bus zu holen
              Und schon ist de Fehlerquelle gefunden. Allerdings wird in dem Plugin nur 1x versucht die GA vom Bus zu lesen. Die Zykluszeit des Plugins steht auf 600s. Im eib.log sieht man das A_GroupValue_Read auf diese GA aber auch mehrmals pro Sekunde. Wie kommt das?
              Und: wie kann man das Problem programmatisch in einem Plugin umgehen? Es kann ja prinzipiell immer mal passieren, dass ein knx_read fehlschlägt weil keiner antwortet, oder?

              Danke
              Micha

              Kommentar


                #8
                Nein, das kann nicht passieren.
                Also weder das es 10 gelesen wird (das macht der eibd garnicht, selbst wenn ich einen Fehler in der SW hätte).
                Noch das eine GA "manchmal" nicht lesbar ist: das ist entweder ein generelles Problem (Telegrammwiederholungen?) oder schlicht falsch eingestellt. Auf ein A_GroupValue_Read kommt im Regelbetrieb so sicher wie das Amen in der Kirche ein A_GroupValue_Response, sonst ist was grob faul.

                Makki
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  #9
                  Naja, bei sieht (bzw. sah) man folgendes im Log:

                  Code:
                  2012-01-22 06:25:57.644,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:25:58.713,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:25:59.785,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:26:00.855,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:26:02.033,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:26:03.121,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:26:04.169,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:26:05.210,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  2012-01-22 06:26:06.250,A_GroupValue_Read,1.1.254,2/2/5,00,0.0,DPT_Scaling,5.001,0,low,7,T_DATA_XXX_REQ,0
                  Hintergrund:
                  - die 1.1.254 ist das WG
                  - die 2/2/5 ist die GA für die rel. Luftfeuchte des (alten) Multisensors
                  - diese GA wird seit einer Weile nicht mehr "gefüllt", da ich wegen Problemen mit dem USB-Hub den Busmaster nicht angesteckt habe
                  - ein Plugin (Schwellwertschalter) macht ein "knx_read(2/2/5,300,9);" wenn es durch Ablauf der Zykluszeit (und nicht durch ein Schreiben auf der GA 2/2/5) aufgerufen wurde
                  - die Zykluszeit des Plugins liegt bei 600s
                  - ich breche das Plugin nun direkt am Start mit "return;" ab und die A_GroupValue_Read-Einträge im Log sind verschwunden

                  Die Frage ist nun, warum erscheinen in meiner Konstellation so unendlich viele "A_GroupValue_Read"s im log und verzögern das Ausführen der anderen Plugins?

                  Micha

                  Kommentar


                    #10
                    So kann das nicht sein, gib doch mal das zugehörige Plugin und das eib.log im fraglichen Zeitraum..

                    Makki

                    P.S.: das sind exakt 9, also 3x3 mit wiederholung: ausm Plugin darf man keine Werte vom WG selbst ohne Cache lesen..
                    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                    -> Bitte KEINE PNs!

                    Kommentar


                      #11
                      Zitat von makki Beitrag anzeigen
                      P.S.: das sind exakt 9, also 3x3 mit wiederholung: ausm Plugin darf man keine Werte vom WG selbst ohne Cache lesen..
                      Das mit dem 3x3 ist nur der Tatsache geschuldet, dass ich nur diesen Ausschnitt aus dem eib.log kopiert habe.

                      Anbei nun das Plugin und eib.log von heute morgen. Um 7:08:54 Uhr habe ich das Plugin wieder "aktiviert".

                      VG
                      Micha
                      Angehängte Dateien

                      Kommentar


                        #12
                        Ok,
                        Ad 1) Plugins dürfen keine lokalen Werte über den KNX lesen (ausser diese werden < Zyklus, hier 300 sek., freiwillig gesendet)
                        Code:
                        } else { # zyklischer Aufruf
                           $luftfeuchte = knx_read($wert_ga,300,9);
                        Ansonsten siehts gut aus..

                        Also ganz allgemein:
                        - Wenn man eine GA von einem anderen TLN lesen will (hier 2/2/5) muss diese auch lesbar sein. Das äussert sich im Log dann mit: auf A_Groupvalue_Read folgt ein -> A_Groupvalue_Response
                        - Wenn die GA vom lokalen System stammt, muss sie zyklisch öfters öfters gesendet werden als der Timeout (hier knx_read(...300..)) ist, dann kommts ausm eibd-Cache und alles ist gut.

                        Makki
                        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                        -> Bitte KEINE PNs!

                        Kommentar


                          #13
                          Makki,

                          danke für die einleuchtende Antwort.

                          Sollte man entsprechend einen Kommentar in das Beispielplugin hier hinzufügen?

                          Allerdings ist das ganze Szenario ja trotzdem problematisch:
                          - man nutzt das knx_read im guten Gewissen, dass der Sendezyklus der GA kleiner als der knx_read-Zyklus ist
                          - fällt jetzt jedoch der "Sender" der GA aus, nutzt auch der Zyklus nix mehr; es gibt unendlich viele Lesetelegramme auf dem Bus

                          ... oder habe ich es noch immer nicht so recht verstanden?

                          Micha
                          EDIT: ich glaube obige Konstellation tritt nur auf, wenn der eibd-Cache noch nicht gefüllt werden konnte, z.B. weil die GA noch nie gesendet wurde; also in meinem Beispiel der Multisensor seit dem Start des eibd noch nicht angeschlossen war

                          Kommentar


                            #14
                            Nein, faktisch wird nur einmalig (pro eibd-restart) ein Lesetelegramm (evtl. mit 2 wiederholungen) gesendet. Das macht der eibd..

                            Wie du zu den 9 kommst ist mir offengestanden immernoch schleierhaft Wenns danach dann auf die GA mal sendet, ist alles wieder gut.

                            Makki
                            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                            -> Bitte KEINE PNs!

                            Kommentar


                              #15
                              Zitat von makki Beitrag anzeigen
                              Wie du zu den 9 kommst ist mir offengestanden immernoch schleierhaft
                              Wie gesagt: die Anzahl "9" ist zufällig weil ich 9 Zeilen aus dem log kopiert habe. Eigentlich sind es wesentlich mehr, wie man im kompletten log (siehe Anhang) erkennt...

                              Micha

                              Kommentar

                              Lädt...
                              X