Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Plugin Fensterstatus

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

    [wiregate] - √ - Plugin Fensterstatus

    Hallo zusammen,

    ich habe endlich am verregneten WE meine Fensterkontakte mit MDT Tasterschnittstellen verbunden. Jetzt bekomme ich auch wunderschön den Status jedes Fensters auf den Bus. Hurra!

    Was mir fehlt ist ein Gesamtstatus:
    Irgend ein Fenster ist auf!

    Im Forum habe ich gelesen, daß das nur mit Logik funktioniert. Dank vorhandenen Wiregate sollte das doch irgendwie mit den Plugins funktionieren?

    Ich will den Status nutzen, um auf meine Dunstabzugshaube zu schalten bzw. um auf einer TS3 LED den Status auszugeben.
    Ich denke/hoffe das haben bestimmt schon mehrere mit dem Wiregate gelöst...

    Ich habe noch überhaupt keinen Plan wie ich ein Plugin mit Pearl schreiben kann weil eure Codebeispiele schon so abgehoben sind, dass ich nicht mehr durchsteige.

    Hat jemand ein Plugin fertig oder kann jemand ein Beispiel mit n Gruppenadressen die abgefragt werden und einer Gruppenadresse für die Ausgabe posten?

    Danke
    Sascha

    #2
    Mir geht es ähnlich in dem I Button Thread auf der letzten Seite das sollte funktionieren. Die Probleme bei mir kommen imho vom owserver.
    Das Plugin ist dank der Hilfe von swiss funktionstüchtig.

    Gruß

    Sent from my LG-P920 using Tapatalk

    Kommentar


      #3
      Zitat von haegar80 Beitrag anzeigen
      Im Forum habe ich gelesen, daß das nur mit Logik funktioniert.
      Das verstehe ich nicht.

      Ich habe im EG für jeden Raum ein GA "Fenster bzw. Tür ist auf". Im Erdgeschoss sind das dann 5 GA, je eine für Diele, WC, Wohnen, Essen, Küche.

      Die habe ich alle auf ein und das selbe LED-Objekt im TS3+ gezogen. Wenn nun irgendein Fenster in irgend einem Raum im EG auf ist, leuchtet auf dem TS3+ die LED. Das ist doch eine ganz normale Funktion des EIB, da ist nichts mit Logik.

      Also müsste das doch auch ohne TS3+ gehen, ohne Zusatzbausteine. Oder hab ich was übersehen?
      Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

      Kommentar


        #4
        Ich habe dazu mal vor einiger Zeit ein Plugin geschrieben. Allerdings habe ich es damals mangels Interesse der anderen nicht unter Codeschnipsel und nicht im SVN veröffentlicht.

        PS: Ich sehe gerade das ich mit dem Plugin nur die Fensterzustände (ZU/AUF/Gekippt/Fehler) Auf den BUS sende. Dieser Zustand wird für jedes Fenster separat ausgegeben und ist für eine Visu gedacht. Aber man könnte das Plugin dahingehend umbauen, dass es den gesammtstatus ermittelt. Oder wenn es NUR um den gesammt status geht, würde ich das IButton Plugin von Volker dafür mussbrauchen.
        Gruss Patrik alias swiss

        Kommentar


          #5
          @Edgar:

          Zitat von emax
          Die habe ich alle auf ein und das selbe LED-Objekt im TS3+ gezogen. Wenn nun irgendein Fenster in irgend einem Raum im EG auf ist, leuchtet auf dem TS3+ die LED. Das ist doch eine ganz normale Funktion des EIB, da ist nichts mit Logik.

          Also müsste das doch auch ohne TS3+ gehen, ohne Zusatzbausteine. Oder hab ich was übersehen?
          Hmmm...

          Ganz so einfach ist es nicht. Man müsste jeden EIN-Zustand zyklisch senden und den AUS-Zustand nur bei z.B. fallender Flanke. Sonst könnte z.B. folgendes Szenario geschehen...


          ...Du machst im EG 1 Fenster auf. Es wird eine 1 auf den Bus gesendet. Dadurch leuchtet die LED.

          Deine Frau macht im EG ein weiteres Fenster auf. Es wird noch eine 1 auf den BUS gesendet und die LED leuchtet weiter.

          Du machst dein Fenster wieder zu. Es wird nun eine 0 Auf den BUS gesendet und die LED erlischt.

          -> Das Fenster deiner Frau ist aber noch offen und die Status-LED meldet alle Fenster ZU.
          Gruss Patrik alias swiss

          Kommentar


            #6
            Zitat von emax Beitrag anzeigen
            Das verstehe ich nicht.

            Die habe ich alle auf ein und das selbe LED-Objekt im TS3+ gezogen. Wenn nun irgendein Fenster in irgend einem Raum im EG auf ist, leuchtet auf dem TS3+ die LED. Das ist doch eine ganz normale Funktion des EIB, da ist nichts mit Logik.

            Also müsste das doch auch ohne TS3+ gehen, ohne Zusatzbausteine. Oder hab ich was übersehen?
            Ich glaube, das geht nicht. Wenn alle Fenster offen sind und ich eine schließe dann signalisiert die LED Fenster zu...
            Ich werd jetzt mal das iButton Plugin von Volker umbauen. (Er hat mir schon wertvolle Tipps per PN gegeben.)

            Kommentar


              #7
              Zitat von swiss Beitrag anzeigen
              Ganz so einfach ist es nicht. Man müsste jeden EIN-Zustand zyklisch seinden und den AUS-Zustand nur bei z.B. fallender Flanke. Sonst könnte z.B. folgendes Szenario geschehen...
              Da hast Du allerdings Recht, und genau so ist es auch konfiguriert: Alle 30 Sekunden wird das Telegramm wiederholt. Ich muss das tatsächlich genau so machen, weil meine RTR sonst nicht begreifen, dass da noch immer ein Fenster auf ist, genau wie Du sagst.

              Allerdings hatte ich es so verstanden, dass ohne Logik keine mehrfach-GA im genannten Kontext auswertbar seien, und das ist so natürlich auch nur die halbe Wahrheit. Man kann es durchaus ohne Logik machen - dann allerdings nur unter den genannten Voraussetzungen.
              Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

              Kommentar


                #8
                Zitat von haegar80 Beitrag anzeigen
                Ich glaube, das geht nicht. Wenn alle Fenster offen sind und ich eine schließe dann signalisiert die LED Fenster zu...
                Du könntest Dich per Plugin an alle Fenster GA anmelden. Jedes mal wenn so ein Telegramm kommt, prüfst Du alle GA-Zustände und schreibst dann eine eigene Sammel-GA auf den Bus, die den Status wiedergibt.

                Ok, das wäre dann in der Tat wohl eine Mini-Logik :-)
                Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                Kommentar


                  #9
                  Das stimmt. Man kann es ganz ohne logiken lösen. Nur die Parameter für Flanke und Zyklus müssen richtig konfiguriert werden. Sonst funktioniert es nicht richtig.

                  Wenn man aber ein WG hat und sich ohnehin mit Plugins beschäftigen möchte fände ich das sogar der bessere Weg da das ganze Zyklische senden weggelassen werden kann. (Reduziert dadurch auch ein bischen die BUS last)

                  PS: Das IButton Plugin dass oben erwähnt wurde macht genau das
                  Gruss Patrik alias swiss

                  Kommentar


                    #10
                    Hallo zusammen,


                    Ich habe mal versucht das iButton Plugin für meine Bedürfnisse mit 2 Fenstern umzuschreiben. Komplexer wollte ich es noch nicht machen...


                    ## GA´s für Fensterstatus definieren
                    my $KÜ= '6/1/20';
                    my $WZ= '6/1/100';
                    my $UG = '6/1/0';
                    # Ausführen des Plugin
                    # $plugin_subscribe >> bei neuem Wert auf GA
                    $plugin_subscribe{$KÜ}{$plugname} = 1;
                    $plugin_subscribe{$WZ}{$plugname} = 1;
                    $plugin_info{$plugname.'_cycle'} = 0;
                    # ein Array der Objecte mit definierten namen, und den dazugehörigen GA´s
                    my @UG;
                    push @UG, {"KÜ"};
                    push @UG, {"WZ"};


                    # Plugin für jedes oben definiertes Element ausführen
                    foreach my $element (@UG) { #nur ausführen wenn das Ziel die definierte GA ist und das Telegram ein Write Telegram ist und kein Read oder Response Telegram. Der Status der Elemente wird unten im Plugin "gemerkt"
                    if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_GroupValue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
                    {
                    ## Status der GA´s holen
                    my $status = knx_read($UG ,0,1);
                    my $KÜ_stat = knx_read($KÜ,0,1);
                    my $WZ_stat = knx_read($WZ,0,1);
                    ## definierte if else anweisung die ausgeführt werden soll nach bestimmten zuständen
                    if (($msg{'value'} == 01) && ($status == 00)) {
                    knx_write($UGt ,1,1);
                    plugin_log($plugname,"name: " . $status);
                    }

                    elsif (($msg{'value'} == 00) && ($KÜ_stat == 00) && ($WZ_stat == 00) {
                    knx_write($UG ,0,1);
                    plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
                    }
                    #merken der Zustände:
                    $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
                    $plugin_info{$plugname.'_' . ($UG) } = knx_read($UG ,0,1);
                    }
                    # wenn keine der oben genannten bedingungen zutrifft dann das nächste Element abarbbeiten
                    else {
                    next;
                    }
                    }

                    Hilfe das funktioniert nicht!!!
                    Ich bekomme die überaus hilfreiche Fehlermeldung:
                    Unrecognized character \xDC in column 45 at (eval 108) line 2, line 4027.


                    Könnt ihr euch das mal anschauen?

                    Danke
                    Sascha

                    Kommentar


                      #11
                      Zitat von haegar80 Beitrag anzeigen
                      Hilfe das funktioniert nicht!!!
                      Ich bekomme die überaus hilfreiche Fehlermeldung:
                      Unrecognized character \xDC in column 45 at (eval 108) line 2, line 4027.
                      Umlaute in Variablennamen

                      Dafür gibts ein mal Erschießen gratis.

                      Ich verzichte sogar in Kommentaren auf Umlaute ...
                      Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                      Kommentar


                        #12
                        Okay Asche auf mein Haupt, Perl scheint da ja extrem rumzuzicken...

                        Ich habe jetzt den Code so:
                        Code:
                        ## GA´s fUr Fensterstatus definieren
                        my $KU= '6/1/20';
                        my $WZ= '6/1/100';
                        my $UG = '6/1/0';
                         
                        # AusfUhren des Plugin
                        # $plugin_subscribe >> bei neUm Wert auf GA
                        $plugin_subscribe{$KU}{$plugname} = 1; 
                        $plugin_subscribe{$WZ}{$plugname} = 1; 
                        $plugin_info{$plugname.'_cycle'} = 0;
                        # ein Array der Objecte mit definierten namen, und den dazugehörigen GA´s 
                        my @UG; 
                        push @UG, {"KU"}; 
                        push @UG, {"WZ"}; 
                         
                         
                        # Plugin fUr jedes oben definiertes Element ausfUhren 
                        foreach my $element (@UG) { #nur ausfUhren wenn das Ziel die definierte GA ist und das Telegram ein Write Telegram ist und kein Read oder Response Telegram. Der Status der Elemente wird unten im Plugin "gemerkt"
                             if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_Groupvalue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
                             {
                             ## Status der GA´s holen
                             my $status = knx_read($UG ,0,1);
                             my $KU_stat = knx_read($KU,0,1);
                             my $WZ_stat = knx_read($WZ,0,1);
                             ## definierte if else anweisung die ausgefUhrt werden soll nach bestimmten zuständen
                                  if (($msg{'valuee'} == 01) && ($status == 00)) {
                                 knx_write($UG ,1,1);
                                 plugin_log($plugname,"name: " . $status);
                                  }
                         
                                  elsif (($msg{'value'} == 00) && ($KU_stat == 00) && ($WZ_stat == 00)  {               
                                   knx_write($UG ,0,1);
                                   plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
                                  }
                            #merken der Zustände:
                            $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
                            $plugin_info{$plugname.'_' . ($UG) } = knx_read($UG ,0,1);
                            }
                         # wenn keine der oben genannten bedingungen zutrifft dann das nächste Element abarbbeiten
                           else {
                                  next;
                             }    
                        }
                        Ich bekomme jetzt das hier:
                        syntax error at (eval 398) line 35, near ") {" syntax error at (eval 398) line 44, near "} # wenn keine der oben genannten bedingungen zutrifft dann das nächste Element abarbbeiten else"

                        Was will mir mein Wiregate sagen??

                        Danke schonmal für die Hilfe und die Geduld mit mir ;-)
                        Sascha

                        Kommentar


                          #13
                          also bei dem elsif ist schonmal ne klammer zuwenig

                          Code:
                          ## GA´s fUr Fensterstatus definieren
                          my $KU= '6/1/20';
                          my $WZ= '6/1/100';
                          my $UG = '6/1/0';
                           
                          # AusfUhren des Plugin
                          # $plugin_subscribe >> bei neUm Wert auf GA
                          $plugin_subscribe{$KU}{$plugname} = 1; 
                          $plugin_subscribe{$WZ}{$plugname} = 1; 
                          $plugin_info{$plugname.'_cycle'} = 0;
                          # ein Array der Objecte mit definierten namen, und den dazugehörigen GA´s 
                          my @UG; 
                          push @UG, {"KU"}; 
                          push @UG, {"WZ"}; 
                           
                           
                          # Plugin fUr jedes oben definiertes Element ausfUhren 
                          foreach my $element (@UG) { #nur ausfUhren wenn das Ziel die definierte GA ist und das Telegram ein Write Telegram ist und kein Read oder Response Telegram. Der Status der Elemente wird unten im Plugin "gemerkt"
                               if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_Groupvalue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
                               {
                               ## Status der GA´s holen
                               my $status = knx_read($UG ,0,1);
                               my $KU_stat = knx_read($KU,0,1);
                               my $WZ_stat = knx_read($WZ,0,1);
                               ## definierte if else anweisung die ausgefUhrt werden soll nach bestimmten zuständen
                                    if (($msg{'valuee'} == 01) && ($status == 00)) {
                                   knx_write($UG ,1,1);
                                   plugin_log($plugname,"name: " . $status);
                                    }
                           
                                    elsif (($msg{'value'} == 00) && ($KU_stat == 00) && ($WZ_stat == 00))  {               
                                     knx_write($UG ,0,1);
                                     plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
                                    }
                              #merken der Zustände:
                              $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
                              $plugin_info{$plugname.'_' . ($UG) } = knx_read($UG ,0,1);
                              }
                           # wenn keine der oben genannten bedingungen zutrifft dann das nächste Element abarbbeiten
                             else {
                                    next;
                               }    
                          }

                          Gruß

                          Kommentar


                            #14
                            Zitat von vlamers Beitrag anzeigen
                            also bei dem elsif ist schonmal ne klammer zuwenig
                            Danke Volker!
                            Das Plugin läuft nun ohne Fehlermeldung und wird auch ausgeführt, wenn sich ein Fensterstatus ändert.

                            Im ETS-Busmonitor sehe ich aber nicht, daß die Sammeladresse 6/1/0 für den Fensterstatus angesprochen wird...

                            Kommentar


                              #15
                              Zitat von haegar80 Beitrag anzeigen
                              Hilfe das funktioniert nicht!!!
                              Ich bekomme die überaus hilfreiche Fehlermeldung:
                              Unrecognized character \xDC in column 45 at (eval 108) line 2, line 4027.
                              Vermutlich liegt das an dem Umlaut in der Bezeichnung
                              TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                              Kommentar

                              Lädt...
                              X