Ankündigung

Einklappen
Keine Ankündigung bisher.

Taster merkt sich GA Zustand nicht

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

    KNX/EIB Taster merkt sich GA Zustand nicht

    Moin,

    ich habe eine Tasterinterface von MDT, das zu vergessen scheint, wie sein letzter Status war.
    Das Interface ist so parametriert, dass es eine 1 sendet, wenn man den angeschlossenen Taster lange drückt und eine 0 bei kurzem Druck. Das er das tut, kann ich im Gruppenmonitor der ETS sehen, sowie daran erkennen, dass eine Logik auf die 1 reagiert. Lese ich danach den Wert vom BUS, sendet das gleiche Tasterinterface eine 0 als Status. Mit dem KO ist nur die eine Gruppenadresse verknüpft, und es findet zwischen durch keine weitere Kommunikation auf dieser GA statt.

    Im Anhang findet ihr ein Screenshot aus dem Gruppenmonitor, gefiltert auf die entsprechende GA, sowie die Parameter der KO.

    Jemand eine Idee, wie ich dem Gedächtnis des Tasters auf die Sprünge helfen kann?

    Gruß, Sebastian
    Angehängte Dateien
    Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
    Ruhri? -> Komm zum Stammtisch

    #2
    Ein Taster hat auch keinen Status! Den Status bekommst Du vom Aktor.

    Kommentar


      #3
      Moin Micha,

      danke für die schnelle Antwort.
      Klingt irgendwie einleuchtend. Aber warum antwortet der Taster dann überhaupt (falsch) auf die Leseanfrage?

      In diesem Fall gibt es keinen Aktor. Der Wert wird nur in verschiedenen, teilweise zyklisch ausgeführten, Logiken verarbeitet. Werde mich mal in das Thema GA Zustand im Wiregate merken einlesen. Da gab es hier irgendwo auch eine Thema zu.

      Gruß, Sebastian
      Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
      Ruhri? -> Komm zum Stammtisch

      Kommentar


        #4
        Hoi Banit

        Der Taster reagiert nicht. Es gibt keinen Wert und somit eine Null (bei einer binären Verbindung wie Schalten (Typ 1.001).

        Mit dem Wiregate und beispielsweise linknx ist es dafür dann überhaupt kein Problem diesen Status zu speichern.

        Wenn Du linknx einsetzen willst:
        <objects>
        <object type="1.001" id="Id_fuer_zugriff" init="persist" flags="cwtus" gad="x/y/z">beschreibung text</object>
        </objects>

        Dann speichert die Logikengine den Wert und durch die Flags wird der Wert auch immer bei einer anfälligen Regelauswertung auf den Bus gesendet. Wenn Du dies nicht brauchst kannst Du flags komplett weglassen.

        Gruss
        Stef

        Kommentar


          #5
          Zitat von lordhelmchench Beitrag anzeigen
          Der Taster reagiert nicht. Es gibt keinen Wert und somit eine Null
          Moin Stef,
          das eine Logik eine Null "sehen" würde, falls der Taster nichts antwortet ist klar. Aber der Taster selber scheint ja auf die Leseanfrage zu antworten und eine Null zu senden. Zu sehen ist das in dem Screenshot aus dem ersten Beitrag. In Zeile 541 wird eine Leseanfrage auf den BUS gesendet und in Zeile 542 (Taster rechts am Bett) und Zeile 543 (Taster links am Bett) wird von den beiden Tastern geantwortet. Warum antworten die, wenn Sie sich sowiso nichts merken können?

          Danke für den Tip mit LinKNX. Dann reicht es wahrscheinlich in der ETS, das Leseflag bei dem KO zu entfernen und die GA wie beschrieben in LinKNX einzubauen.

          Gruß, Sebastian
          Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
          Ruhri? -> Komm zum Stammtisch

          Kommentar


            #6
            Huhu Baint

            Huch übersehen... Mit der Frage warum hatte ich mich bei meiner Installation dann gar nicht befasst. Hast Du da selber das Leseflag gesetzt oder war dies im Standard so?

            Ich wollte dann sowieso mit den linknx basteln, daher war die Lösung darüber die logische Wahl.

            Gruss
            Stef

            Kommentar


              #7
              Moin Stef,

              nein, das Leseflag war schon ab Werk gesetzt.
              Vielleicht hat man bei MDT in der Programmierung aber auch einfach nicht unterschieden zwischen Tasterbetrieb (Wert senden) und Schalterbetrieb (Zustand senden). Denn für Schalterbetrieb, z.B. Fensterkontakt, macht das Leseflag ja Sinn.

              Jetzt muss ich nur mal schauen, ob ich mich auch noch in LinKNX einarbeiten muss oder ob es für das GA-merken irgendwo ein einfaches Plugin fürs Wiregate gibt. Eingentlich hab ich hier schon genug verschiedenen Programmiersprachen/Dialekte.

              Gruß, Sebastian
              Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
              Ruhri? -> Komm zum Stammtisch

              Kommentar


                #8
                Hoi Sebastian

                Das schöne am Linknx ist, dass es via XML-Regeln gesteuert wird. Du musst also nix programmieren. Du konfigurierst einfach unter /etc/linknx.xml deine Config und das war es schon.

                Siehe minimales das XML-File was ich hochgeladen habe. Meines ist in Zwischen schon etwas grösser geworden

                Danach musst Du es nur noch per linknx starten (ist bei wiregate ja schon als daemon vorhanden):
                /etc/init.d/linknx restart
                Und ich kontrolliere nach Änderung am xml immer noch, ob meine Konfig korrekt ist. Bei einem Fehler sieht mal dies im Log:
                tail -80 /tmp/linknx.log

                Mit den Rules kann man von allen möglichen Checks und Steuerung von KNX auch Staubsauger starten oder DNS-Refresh vornehmen...

                Vermutlich wäre die Logik-Engine von Fry eine Alternative. Die kenne ich aber gar nicht.

                Gruss
                Stef
                Angehängte Dateien

                Kommentar


                  #9
                  Moin Stef,
                  das klingt ja einfach. Die linknx.xml hab ich dank dir jetzt gefunden. Danke dafür. Spannenderweise stehen da schon andere Objects drin ohne das ich da dran war. Den Object-Eintrag meiner eigenen GA kopiere ich heute abend da mal rein. Dann hab ich auch die Zeit in der ETS die Flags zu ändern.
                  Momentan muss ich erst mal Rauchmelder vernetzen.

                  Gruß, Sebastian
                  Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
                  Ruhri? -> Komm zum Stammtisch

                  Kommentar


                    #10
                    Moin,
                    hab das heute mal testen können. Dank Änderung der Flags des KO Antworten die Taster nicht mehr auf Leseanforderungen. Damit kommen auch keine falschen Werte auf den BUS.
                    Leider funktioniert das mit dem Zwischenspeichern der GA im Wiregate noch nicht.
                    In die linknx.xml hab ich die Zeile
                    Code:
                    <object log="true" type="1.001" id="anwesend_bewohner_schlafen_wach"  init="persist" flags="cwtus" gad="0/1/11">Bewohner  schlafen</object>
                    eingefügt.
                    In der Datei stand vorher schon einiges drin. Sie sieht damit jetzt so aus.

                    Code:
                    <?xml version="1.0" ?>
                    <config>
                        <objects>
                            <object id="ecl_escalier" gad="14/3/6">Eclairage Escalier
                                <listener gad="14/3/206"/>
                            </object>
                            <object id="cur_time" gad="14/3/150" type="EIS3">Current Time</object>
                            <object id="cur_date" gad="14/3/151" type="EIS4" forcewrite="true">Current Date</object>
                            <object id="2C0E66010000" gad="5/0/215" type="EIS5">WP HGL-VL</object>
                            <object id="vpn_mgmnt_active_ga" gad="14/5/144" type="1.001">Management-VPN active</object>
                            
                            <object log="true" type="1.001" id="anwesend_bewohner_schlafen_wach" init="persist" flags="cwtus" gad="0/1/11">Bewohner schlafen</object>
                             
                        </objects>
                        <rules>
                            <rule id="test">
                                    <condition type="object" id="vpn_mgmnt_active_ga" value="on" />
                                <actionlist>
                                    <action type="shell-cmd" cmd="/root/test_linknx.sh" />
                                </actionlist>
                            </rule>
                        </rules>
                        <services>
                            <knxconnection url="ip:localhost" />
                            <xmlserver type="inet" port="1028"/>
                            <emailserver type="smtp" host="smtp.myprovider.com:25" from="linknx@mydomain.com"/>
                            <persistence type="file" path="/tmp"/>
                            <exceptiondays>
                                <date day="1" month="1" />
                                <date day="1" month="5" />
                                <date day="1" month="6" year="2009" />
                                <date day="24" month="5" year="2010" />
                            </exceptiondays>
                        </services>
                        <logging output="/tmp/linknx.log" format="%d{%Y-%m-%d %H:%M:%S,%l} %5p > %c %x - %m%n" level="DEBUG" maxfilesize=100 maxfileindex=2/>
                    </config>
                    Aber der Wert wird scheinbar nur 5 Minuten lang gespeichert. Ob die Speicherung von LinKNX oder nativ vom Wiregate ist, hab ich noch nicht getestet. Ich würde aber sagen, es kommt nicht von LinKNX.

                    Eine Datei /tmp/linknx.log gibt es auch nicht.
                    eibd und auch das ganze Wiregate hab ich schon neu gestartet. Jemand eine Idee, wo der Fehler liegen kann?

                    Gruß, Sebastian
                    Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
                    Ruhri? -> Komm zum Stammtisch

                    Kommentar


                      #11
                      Hoi Sebastion

                      Versuche mal linknx direkt zu starten. Nicht als daemon. Dann siehst Du besser eine allfällige Fehlermeldung:
                      linknx -c/etc/linknx.xml

                      Zudem das Verzeichnis /tmp gibt es bei dir?

                      Und als letztes Verzeichnis /tmp: Wird dies nicht standardmässig bei einem Reboot gelöscht? Ich habe daher mein persist-File auf folgendes Verzeichnis gesetzt: /etc/linknx/persist/

                      Code:
                          <services>
                              <knxconnection url="ip:192.168.1.24" />
                              <xmlserver type="inet" port="1028"/>
                              <persistence type="file" path="/etc/linknx/persist"/>
                          </services>
                      Auf dem Wiregate hat es da schon eine Vorschlagsdatei. Ich hatte alles rausgelöscht, das ich nicht benötigt hatte. Wichtig ist auf den Typ des referenzieren Objekts zu achten. Es werden nicht alle von Linknx unterstützt.

                      http://sourceforge.net/apps/mediawik...inition_Syntax

                      Gruss
                      Stef

                      Kommentar


                        #12
                        Guten Morgen Stef,

                        ja /temp gibt es. Kann sein, dass es bei einem Reboot gelöscht wird. Allerdings hab ich nach dem Reboot auf den Taster gedrückt. Bis zum nächsten Reboot sollte er es sich also merken können.
                        Werde das Verzeichnis aber umlegen. Macht ja schon Sinn, das die Variablen auch einen Neustart überleben.
                        Vor dem direkten Start von LinKNX muss ich erst den Daemon beenden? Wenn ja, wie funktioniert das?

                        Werde das heute abend mal mit dem direkten Start versuchen. Ebenso wie mit dem Aufräumen der xml.

                        Heute abend dann mehr zu dem Ergebnis.

                        Gruß, Sebastian
                        Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
                        Ruhri? -> Komm zum Stammtisch

                        Kommentar


                          #13
                          Zitat von lordhelmchench Beitrag anzeigen
                          Versuche mal linknx direkt zu starten. Nicht als daemon. Dann siehst Du besser eine allfällige Fehlermeldung:
                          linknx -c/etc/linknx.xml
                          Moin,
                          wenn ich in der Kommadozeile
                          Code:
                          [URL="https://knx-user-forum.de/vbglossar.php?do=showentry&item=linknx"]linknx[/URL] -c/etc/linknx.xml
                          eingebe bekomme ich als Fehlermeldung:
                          Code:
                          -bash: linknx: command not found
                          Dabei ist es egal, ob ich mich auf der Kommandozeile "ganz oben" oder in /etc/init.d befinde.
                          Aber wenn ich es richtig verstanden hab, dann ist LinKNX doch auf dem WG schon vorinstalliert. in etc/init.d liegt auch eine Datei Namens linknx

                          Gebe ich
                          Code:
                          etc/init.d/[URL="https://knx-user-forum.de/vbglossar.php?do=showentry&item=linknx"]linknx[/URL] -c/etc/linknx.xml
                          ein, bekomme ich wenigstens keine Fehlermeldung. Aber ich bekomme auch keine Bestätigung.

                          Das die Speicherung der GA natürlich nicht funktioniert, ergibt sich damit fast von selbst.


                          Gruß, Sebastian
                          Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
                          Ruhri? -> Komm zum Stammtisch

                          Kommentar


                            #14
                            Zitat von Bainit Beitrag anzeigen
                            Moin,
                            ich habe eine Tasterinterface von MDT, das zu vergessen scheint, wie sein letzter Status war.
                            Das ist kein Bug, sondern eine korrekte Implementierung!
                            Ein "Read" soll nicht irgend einen Status der irgendwann mal existiert hat zurück liefern, sondern den aktuellen Status. Genau das macht dein Tasterinterface ja.
                            Dumm ist in dem Fall nur, das in deiner Konfig der Wert "0" für einen kurzen Druck gesendet wird, denn so wird die Sache uneindeutig.
                            Eine Antwort von "0" von einem Taster bedeutet "gerade nicht gedrückt" - was ja völlig korrekt ist.
                            Dafür das eine "0" bei dir gleichzeitig "kurzer Tastendruck" bedeutet kann der Taster ja nix - und halte ich auch für eine sehr ungeschickte Implementierung.

                            Kommentar

                            Lädt...
                            X