Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - "Lebenzeichen" senden

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

    [wiregate] - √ - "Lebenzeichen" senden

    Hallo,

    wie kriege ich es hin, dass das Wiregate z.b alle 55min ein 1bit Ping zum Bus schickt. Gibt es da was fertiges?

    Würde mich über eine kurze Hilfe freuen.

    Danke
    #Jascha

    #2
    Mit dem Logikprozessor von pfry kannst du das meines Erachtens umsetzen.

    Der Plugin-Code liegt hier: Open Automation / Code / [r1935] /wiregate/plugin/generic/Logikprozessor.pl

    Die Beispiel-Config liegt hier: Open Automation / Code / [r1935] /wiregate/plugin/generic/conf.d/Logikprozessor.conf

    Beispiel 10 beschreibt eine Timerfunktion, auf der du aufbauen kannst.
    Grüße
    Michael

    Kommentar


      #3
      Ob es dafür was fertiges gibt weiß ich leider nicht. Allerdings war es auch mein erstes Problem welches ich mit einem Plugin löste. Ich habe damals dafür ein Schwellwertplugin genommen und ein wenig angepasst.
      Es wird dabei bei über- und unterschreiten eines Werts eine "1" ausgegeben.
      Die Zykluszeit des Plugins bestimmt damit die Frequenz der ausgegebenen Bits. Dies funktioniert schon mindestens zwei Jahre bei mir so und habe es deshalb auch nie mehr geändert.
      Mit Sicherheit kann man dies mit entsprechenden Kenntnissen auch einfacher lösen, für mich war es damals allerdings die einfachste Möglichkeit.

      Gruß Plusch

      Kommentar


        #4
        @michau
        Ist der Logikprozessor nicht ein wenig oversized für einen einfachen Ping?

        Gibt es nicht einfachere Lösungen? Bin in perl nicht so bewand...

        Grüße

        Kommentar


          #5
          Na ja, klar ist der ziemlich umfangreich. Aber er ist halt fertig.

          Natürlich kann man das selbst programmiert wesentlich einfacher lösen, wenn man ein bisschen mit Perl arbeiten will.

          PS: Du kannst mal alle Plugins im Repository durchschauen, ob was Brauchbares dabei ist.
          Grüße
          Michael

          Kommentar


            #6
            Code:
            ### Definitionen
            # Eigenen Aufruf-Zyklus auf 3300 Sekunden setzen
            $plugin_info{$plugname.'_cycle'} = 3300;
            my $wert_ga = "X/X/X";  # Gruppenadresse mit dem Wert
            my $schwellwert = 100;     # Schwellwert
            my $ziel_ga = "X/X/X";  # Adresse an die Wert bei Unter/�berschreitung gesendet wird
            ### Ende Definitionen
            
            
            my $luftfeuchte;
            # Plugin an Gruppenadresse "anmelden"
            $plugin_subscribe{$wert_ga}{$plugname} = 1;
            
            # Nun kommt es darauf an, ob das Plugin aufgrund eines eintreffenden Telegramms
            # oder zyklisch aufgerufen wird! Wir wollen beides..
            # Bei eintreffenden Telegrammen reagieren wir gezielt auf "Write" (gibt ja auch Read/Response)
            # und die spezifische Gruppenadresse, das Plugin k�nnte ja bei mehreren "angemeldet" sein.
            if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $wert_ga) {
               $luftfeuchte = $msg{'value'};
               #oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef!
               #$luftfeuchte = decode_dpt9($msg{'data'});
            
            } else { # zyklischer Aufruf
               # "9" (DPT) kann entfallen falls richtig importiert!
               $luftfeuchte = knx_read($wert_ga,300,9);
            }
            
            if ($luftfeuchte >= $schwellwert and $plugin_info{$plugname.'_merker_schwellwert1'} ne 1) {
               # Sende an ZielGA den Wert "1" als 1bit-Wert (DPT1)
               # "1" (DPT) kann entfallen falls richtig importiert!
               knx_write($ziel_ga,1,1);
               # und merken
               $plugin_info{$plugname.'_merker_schwellwert1'} = 1;
            } elsif ($luftfeuchte < $schwellwert and $plugin_info{$plugname.'_merker_schwellwert1'} eq 1) { 
               # unter Schwellwert,vorher aktiv -> sende 0
               knx_write($ziel_ga,1,1);
               # und merken
               $plugin_info{$plugname.'_merker_schwellwert1'} = 1;
            }
            
            return;
            # verf�gbare Daten in %msg:
            # $msg{'repeated'} 0/1
            # $msg{'sequence'} 0-xxx
            # $msg{'buf'} Rohdaten LPDU 
            # $msg{'src'} Quelladresse 
            # $msg{'tpdu_type'} T_DATA_XXX_REQ
            # $msg{'data'} rohe Telegrammdaten
            # $msg{'rcount'} Routing-Z�hler
            # $msg{'apci'} A_GroupValue_Write,A_GroupValue_Read,A_GroupValue_Response (u.v.m)
            # $msg{'class'} low/alarm/high/system
            # $msg{'dst'} Zieladresse x/y/z
            # $msg{'datalen'} Datenl�nge
            # $msg{'value'} Dekodierter Klartext-Wert (nur falls ESF importiert!)
            Wenn Du oben stehendes Plugin einfügst und die GAs bei "my $wert_ga" (irgendeine GA eines Temperatursensors) und "my $ziel_ga" anpasst erhälst Du das gewünschte Ergebnis.

            Gruß Plusch

            Kommentar


              #7
              Cool Danke das kann ich verwenden. ;-)

              Danke auch für die schnellen Hilfen...

              Grüße

              Kommentar


                #8
                Habs mir gerade noch mal angesehen. Das Plugin ist so geschrieben das bei empfangenen Wert verglichen wird und das Ergebnis ausgegeben wird. D.h. der Takt ist in dem Falle auch vom zyklischen Senden des Temperaturwertes abhängig. Ist dies nicht gwünscht sollte es genügen eine GA zu verwenden auf die nicht geschrieben wird.
                Aber wie gesagt dies geht mit dem entsprechenden Knowhow sicherlich eleganter ...

                Gruß Plusch

                Kommentar


                  #9
                  Nur mal so für mein Verständnis: Ein Plugin soll alle 55 Minuten den Wert '1' auf eine GA senden? Mehr nicht? Müssen es exakt 55 Minuten sein oder spätestens nach 55 Minuten? Oder als Reaktion auf eine andere GA, die zuerst einen "Ping" zum Wiregate sendet?

                  Die einfachste Variante könnte dann so aussehen:
                  Code:
                  ### Definitionen
                  # Eigenen Aufruf-Zyklus auf 3300 Sekunden setzen
                  $plugin_info{$plugname.'_cycle'} = 3300;
                  my $ziel_ga = "X/X/X";  # Adresse an die Wert gesendet wird
                  ### Ende Definitionen
                  
                  knx_write($ziel_ga,1,1);
                  
                  return;
                  Wofür braucht man das gleich noch?

                  @Plusch:
                  Dein "merker_schwellwert1" erhält immer den Wert "1" und wird nicht zurückgesetzt. Dadurch kann doch die erste Bedingung (ne 1) nach dem ersten Überschreiten der Schwelle nie mehr erfüllt werden. Soll das wirklich so sein?
                  Hab' das Plugin wirklich nur überflogen und bitte um Nachsicht, falls ich da jetzt was falsch verstanden habe.

                  Kommentar


                    #10
                    Ja, das sollte so sein. Für den Fall gibt es ja noch die zweite Bedingung. Und eine von beiden wird immer erfüllt und ich bekomme zyklisch meine "1". Aber wie gesagt ich habe mir dieses Plugin damals mit Null Perlkenntnissen an meine Bedürfnisse angepasst um mein Ziel zu erreichen. Heute kann man das natürlich viel eleganter lösen, wie Dein Beispiel zeigt.

                    Meine Jalousieaktoren benötigen um die aktuelle Position zu übertragen eine "1" auf dem Objekt "Rückmeldung aktivieren". Nach jeder Programmierung bzw. auch bei einem Spannungsausfall musste ich diese über die ETS manuell senden, und das wollte ich dann irgendwann nicht mehr.

                    Gruß Plusch

                    Kommentar


                      #11
                      Benötigt wird dies um den Heizungsaktor mitzuteilen, dass das Wiregate noch Daten sendet. Sollte der "Ping" ausbleiben fährt dieser die Stellaktoren in eine Notöffnung.

                      Kommentar


                        #12
                        Ok, dann weißt Du allerdings auch noch nicht ob der Temperatursenor noch Daten sendet ...
                        Es hilft Dir zwar jetzt micht mehr aber vielleicht anderen, die MDT Heizungsaktoren sind so parametrierbar das beim Ausbleiben eines Temperaturwertes für eine einstellbare Zeit der Aktor in den Notbetrieb geht.

                        Gruß Plusch

                        Kommentar


                          #13
                          Ja das Notprogramm wollte ich auch nutzen. Hab am Anfang nen kleinen Denkfehler gehabt. Hab zuerst gedacht das er einen eigenen Status benötigt alle xx Min. Aber er nimmt ja den Temperaturwert ;-)

                          Naja das "Lebenszeichen" kann man ja trotzdem für andere Sachen nutzen...

                          Grüße
                          Jascha

                          Kommentar

                          Lädt...
                          X