Ankündigung

Einklappen
Keine Ankündigung bisher.

EnOcean Sensor wird vom Plugin nicht wie erwartet ausgewertet

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

    EnOcean Sensor wird vom Plugin nicht wie erwartet ausgewertet

    Hallo zusammen,

    ich beschäftige mich zum ersten mal mit dem Thema EcOcean in Verbindung mit SmartHomeNG 1.5.1.
    Die Grundsätzliche Inbetriebnahme des Plugins (TCM310 am Serialport) habe ich scheinbar hinbekommen
    und es lassen sich im Log Telegramme vom Sensor (nodon sdo2105) beobachten.

    Dennoch sieht der Telegrammaufbau im Log nicht aus wie erwartet und es gibt keine weitere Verarbeitung auf der KNX Seite.

    Obwohl ich sicher bin, das richtige EEP zu benutzen D5_00_01, steht im Sensortelegramm immer Choice 30, gefolgt von 5 Payload Bytes, Status (immer 0).
    Bei D5_00_01 hätte ich Choice D5 und nur ein Payloadbyte (1BS) erwartet.

    Das Lesen der Plugin Doku, EnOcean Doku, Sensor Doku, Ein erster zaghafter Blick in die Plugin-Quellen bringen mich an dieser Stelle nicht weiter.
    Ich vermute, das ich irgendwo etwas übersehen habe - sehe aber auch nach mehreren Tagen den Wald vor lauter Bäumen nicht mehr.

    In dieser Situation würde mir jeder Kommentar helfen, der mich in eine Richtung zur weiteren Fehlersuche lenkt. Gerne aber auch etwas in der Art: "Du Depp, Du hast hier : und = vertauscht)

    Zunächst doch meine Randdaten, Konfiguration und Logs:
    • Raspberry Pi3b+
    • KNX-USB REG Merten
    • Enocean Pi 868 Mod, (TCM310)
    • Fensterkontakt NODON SDO2105
    • OneWire mit eigenem Busmaster an I2C
    • smarthomeNG 1.5.1, smartVISU 2.8
    • Anfang Dez 2019 Debian, knxd, smartVISU, Onewire nach Anleitung mit den jeweils verfügbaren Versionen komplett neu Aufgesetzt (https://www.smarthomeng.de/user/inst...ng_debian.html)
    • KNXD und der Merten USB Adapter liefen erst zusammen, nachdem ich im code den Timeout geändert habe (soll hier nicht das Thema sein. Hab die Lösung von Ersin benutzt (https://github.com/knxd/knxd/pull/291/commits)
    • Alle items, Logiken und Conf Dateien soweit möglich mit dem Tool conf_to_yaml_converter.py von SmartHome 1.0 migriert.
    • Alle HTML-Datein von smartVISU 2.7 übernommen, Vereinzelt *.PNG nach *.SVG geändert

    Soweit alles ok. Der Umzug auf NG 1.5.1 hat geklappt und das System läuft anstandslos.
    Darauf Aufbauend die Erweiterung um EnOcean:

    1. Pi3b+ RS232 Schnittstelle auf GPIO freischaufeln (siehe diverse Anleitungen im Netz)

    2. Plugin einbinden
    plugin.yaml
    Code:
    xenocean:
        plugin_name: enocean
        serialport: /dev/ttyAMA0
        tx_id: ff954d80
    3. Plugin-Logging "Einschalten". Die EnOcean Logs sind im Standart nicht zu sehen und damit bekommt man auch keine Info über z.B. die Base ID
    logging.yaml
    Code:
    plugins.enocean:
            handlers: [shng_details_file]
            level: DEBUG
    4. EnOcean ITEM anlegen
    enocean.yaml
    Code:
    EnOceanItem:
        Door:
            enocean_rx_id: 05115AE0
            enocean_rx_eep: D5_00_01
            status:
                type: bool
                enocean_rx_key: STATUS
                knx_dpt: 1
                knx_send: 4/4/4 #Nur zum Test
    5. Log auswerten
    Code:
    2018-12-17  22:21:47 WARNING  __main__          --------------------   Init SmartHomeNG 1.5.1.master (c4e9acc3)   --------------------
    
    2018-12-17  22:21:47 WARNING  __main__          Running in Python interpreter 'v3.5.3 final' on linux platform
    
    2018-12-17  22:21:52 INFO     plugins.enocean   enocean: Stick TX ID configured via plugin.conf to: ff954d80
    
    2018-12-17  22:21:52 INFO     plugins.enocean.eep_parser enocean: eep-parser instantiated
    
    2018-12-17  22:21:52 INFO     plugins.enocean.prepare_packet_data enocean-Prepare_Packet_Data-init: Init of Prepare_Packet_Data
    
    2018-12-17  22:21:57 INFO     plugins.enocean   enocean: item EnOceanItem.Door.status listens to id 05115AE0 with eep D5_00_01 key A
    
    2018-12-17  22:21:57 INFO     plugins.enocean   enocean: resetting device
    
    2018-12-17  22:21:57 INFO     plugins.enocean   enocean: sending packet with len = 8 / data = [0x55, 0x00, 0x01, 0x00, 0x05, 0x70, 0x02, 0x0e]!
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: Reset returned code = OK
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: requesting id-base
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: sending packet with len = 8 / data = [0x55, 0x00, 0x01, 0x00, 0x05, 0x70, 0x08, 0x38]!
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: Base ID = 0xff954d80
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: Remaining write cycles for Base ID = 10
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: requesting version information
    
    2018-12-17  22:21:58 INFO     plugins.enocean   enocean: sending packet with len = 8 / data = [0x55, 0x00, 0x01, 0x00, 0x05, 0x70, 0x03, 0x09]!
    
    2018-12-17  22:21:59 INFO     plugins.enocean   enocean: Chip ID = 0x05122a9b / Chip Version = 0x454f0103
    
    2018-12-17  22:21:59 INFO     plugins.enocean   enocean: APP version = 2.11.1.0 / API version = 2.6.3.0 / App description = GATEWAYCTRL
    
    2018-12-17  22:22:48 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0x1b, 0x19, 0xd4, 0x88, 0x05] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:23:07 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0xcd, 0xe5, 0xf5, 0x0c, 0x80] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:23:07 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0x76, 0xef, 0x70, 0x41, 0x78] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:23:08 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0xd8, 0xd0, 0xf1, 0xf2, 0x6d] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:23:57 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0x7c, 0x80, 0x22, 0x93, 0x35] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:24:11 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0xd6, 0x88, 0xc2, 0x11, 0x64] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:24:50 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0xca, 0x15, 0xdf, 0xbc, 0x05] / sender_id = 05115AE0 / status = 0 / repeat = 0
    
    2018-12-17  22:25:11 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0x71, 0xf6, 0x4e, 0x82, 0xcd] / sender_id = 05115AE0 / status = 0 / repeat = 0


    Ab dieser Stelle muss ich ein wenig orakeln.
    • RS232 Schnittstelle und EnOcean-Hardware funktioniert einwandfrei, da ich die sender_id richtig zurückgemeldet bekomme.
    {"alt":"Klicke auf die Grafik f\u00fcr eine vergr\u00f6\u00dferte Ansicht Name: IMG_0027.jpeg Ansichten: 5 Gr\u00f6\u00dfe: 277,5 KB ID: 1302183","data-align":"none","data-attachmentid":"1302183","data-size":"medium"}
    • Ich bin mir Unsicher ob enocean_rx_key: STATUS richtig ist? Wird dort evtl. auch der "Short_Cut: CO" verwendet?
      Siehe 1BS Protokoll und EEP D5_00_01 in der Offiziellen EnOcean EEP Beschreibung 2.6.8?
      enocean_rx_key: CO ?
      enocean_rx_key: A ?
    • Woher kommt "Choice 30" ? Die Zahl 30 macht mich in der Logdatei stutzig.
    • Kann das das Ergebnis eines falschen Einlerntelegramms sein ?
      Bei mir klappt der Aufruf der Interaktiven Konsole nicht, daher habe ich den Befehl zum Anlernen in eine vorhandene Logik gepackt und triggere diese mit einem KNX-Taster *quick & dirty*
    Code:
    if sh.Zentralfunktion.Anwesend():
            if not sh.IntVar.Zentralfunktion.Anwesend():
                    sh.IntVar.Zentralfunktion.Anwesend ('on')
                    logger.warning ("Anwesend: Wird von aendern auf true gesetzt")
                    sh.xenocean.send_learn_protocol()
    else:
            if sh.IntVar.Zentralfunktion.Anwesend():
                    sh.IntVar.Zentralfunktion.Anwesend ('off')
                    logger.warning ("Anwesend: Wird von aendern auf false gesetzt")
    • Müssen "Sensoren" überhaupt eingelernt werden ?



    Verzweifelte Grüße
    Andre
    Zuletzt geändert von knx75knx; 19.12.2018, 21:16.

    #2
    Hi Andre,

    ich bin mir sicher, dass wir den Sensor bei Dir zum laufen bekommen. Ich habe eben über Deine Infos geschaut, ich kann so keinen Fehler finden. Sieht alles soweit gut aus. Ein paar Hinweise bzw. Vorschläge von mir:

    a) Sensoren müssen nicht eingelernt werden. Im Enocean Plugin wird einfach die enocean_rx_id des Sensors eingegeben. Das ist alles richtig, im Log steht, dass der Sensor auch Daten schickt. Den send_learn_protocol Befehl bitte entfernen.

    b) Der enocean_rx_key: STATUS ist korrekt. Im Log steht allerdings was von key: A. Das passt nicht zusammen. Wahrscheinlich hast Du da was ausprobiert.

    c) Nutzt Du die aktuelle Enocean plugin Version im Develop branch, Version 1.3.4? Wenn nicht, bitte aktualisieren. Den Code findest Du hier:
    https://github.com/smarthomeNG/plugi...evelop/enocean

    d) Kleiner Tipp: Teste dein Enocean item (mit Name EnOceanItem.Door.Status) erstmal getrennt von KNX. Nimm dazu die KNX attribute komplett raus und visualisiere das Item in der Smartvisu. Alternativ kannst Du Dir das Item auch im Backend Plugin anzeigen lassen. Teste so erstmal, ob sich der Status hier ändert. Anschließend kann man dann KNX dazunehmen.

    e) Ist der NodeOn Dein einziger Sensor, oder hast Du zufällig noch andere Enocean Sender bei Dir in Betrieb? Mich macht gerade die Payload der empfangenen Packete stutzig? Das sieht mir auf den ersten Blick nicht nach einem Tür Sensor (auf/zu) aus.

    f) Dein Logger scheint nur Messages mit INFO Level auszugeben. Stell den nochmal auf DEBUG Level um.

    Viele Grüße
    Alex
    Zuletzt geändert von aschwith; 20.12.2018, 19:47.

    Kommentar


      #3
      Hallo Alex,

      danke für die Infos.

      a) Gut zu wissen / Befehl wird entfernt
      b) Stimmt, A und OC waren Tests - da hat mich die Doku verwirrt
      c) Update musss ich noch machen. Habe gedacht ich hätte die aktuellste, ist aber nicht so: 1.3.3
      d) Das hatte ich zuerst auch so. Dachte dann aber, ich hätte beim Testen / Debuggen einen Vorteil im KNX zu loggen - frag nicht warum
      e) Da ich gerade frisch mit dem Thema EnOcean anfange, ist das bislang mein einziger Sensor. Aktoren habe ich keine.
      f) Debug hab ich jetzt eingeschaltet - siehe Logfile unten

      Zwischenzeitlich habe ich die EnOcean EEP Doku genauer gelesen (Da die nur auf englisch verfügbar ist, muss ich jeden Satz gefühlt viermal lesen, bis der Inhalt auch angekommen ist). Die Spur führt mich zu den verschlüsselten Telegrammen.

      Auf jeden Fall bedeutet der Status = 30 im log, das es sich um ein verschlüsseltes Datenpaket handelt.
      Jetzt muss ich klären, wieso der Sensor im Secure-Mode sendet?! Bewusst gewollt ist das nicht.
      Die Hersteller Doku des Sensors gibt keinen Hinweis dazu.

      Gruß
      Andre
      Zuletzt geändert von knx75knx; 20.12.2018, 21:53.

      Kommentar


        #4
        Das Sensoren nicht eingelernt werden müssen ist für mich ok - aber ich stelle mir gerade die Frage wofür der Teach-Button auf der Rückseite des Sensors ist?

        Kommentar


          #5
          Kontakt geschlossen
          Code:
          2018-12-20 21:47:51 DEBUG plugins.enocean enocean: data received
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: call function << _calc_crc8 >>
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: received header with data_length = 11 / opt_length = 0x07 / type = 1
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: call function << _calc_crc8 >>
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: accepted package with type = 0x01 / len = 25 / data = [0x55, 0x00, 0x0b, 0x07, 0x01, 0x80, 0x30, 0x3b, 0x51, 0x45, 0x1e, 0x10, 0x05, 0x11, 0x5a, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0xdf]!
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: call function << _process_packet_type_radio >>
          2018-12-20  21:47:51 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0x3b, 0x51, 0x45, 0x1e, 0x10] / sender_id = 05115AE0 / status = 0 / repeat = 0
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: radio message with additional info: subtelnum = 1 / dest_id = FFFFFFFF / signal = -44dBm / SecurityLevel = 0
          2018-12-20  21:47:51 DEBUG    plugins.enocean   enocean: Sender ID found in item list


          Kontakt geöffnet
          Code:
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: data received
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: call function << _calc_crc8 >>
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: received header with data_length = 11 / opt_length = 0x07 / type = 1
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: call function << _calc_crc8 >>
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: accepted package with type = 0x01 / len = 25 / data = [0x55, 0x00, 0x0b, 0x07, 0x01, 0x80, 0x30, 0xff, 0x87, 0xb2, 0x2b, 0xa8, 0x05, 0x11, 0x5a, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x00, 0xdc]!
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: call function << _process_packet_type_radio >>
          2018-12-20  21:48:09 INFO     plugins.enocean   enocean: radio message: choice = 30 / payload = [0xff, 0x87, 0xb2, 0x2b, 0xa8] / sender_id = 05115AE0 / status = 0 / repeat = 0
          2018-12-20  21:48:09 DEBUG    plugins.enocean   enocean: radio message with additional info: subtelnum = 1 / dest_id = FFFFFFFF / signal = -45dBm / SecurityLevel = 0
          2018-12-20. 21:48:09 DEBUG    plugins.enocean   enocean: Sender ID found in item list
          Zuletzt geändert von knx75knx; 20.12.2018, 22:09.

          Kommentar


            #6
            Ich glaube, Du hast den Grund gefunden. Choice = 30 bedeutet in der Tat, dass es sich um ein Secure Telegram handelt. Deshalb kam mir der Payload Teil auch komisch vor, siehe Punkte e) oben. Das liegt einfach daran, dass die Daten verschlüsselt sind.

            Mit der Verschlüsselung kenn ich mich leider nicht aus. Eventuell muss zum Entschlüsseln der Sensor doch vorher angelernt werden(mit dem Teach-Button). Eine guter Einstiegspunkt wäre das Dokument EnoceanSerialProtocol3.pdf.
            Zuletzt geändert von aschwith; 20.12.2018, 22:02.

            Kommentar


              #7
              Richtung Sensor habe noch nichts gefunden, das auf eine Wahlmöglichkeit "mit/ohne Verschlüsselung" hindeutet.

              So wie es aussieht, werde ich mich dann mal mit dem Plugin beschäftigen und versuchen das für verschlüsselte Telegramme entsprechend zu erweitern.
              Zumindest habe ich im Code nichts entdeckt, was mit diesen Telegrammen adäquat umgehen könnte.

              Kommentar


                #8
                Kurze Rückmeldung zum Stand der Dinge.

                Nach erstem Oberflächlichem Studium der EnOcean Doku schien es plötzlich zwei Varianten zu geben, wie die Verschlüsselung/Entschlüsselung laut Spezifikation ablaufen könnte.

                1. Der ganze Krypto-Kram muss auf dem Zielsystem in Software, entsprechend der Doku, nachgebildet werden
                2. Die eigentlichen Verschlüsselungs- / Enschlüsselungsalgorithmen liegen mit in der Firmware der Schnittstelle (z.B. TCM310) und es gibt eine Anwenderschnittstelle, die mit einigen wenigen Methoden dem Anwender die Krypto-Arbeit abnimmt.

                Welche Variante zutrifft, habe ich bisher nicht ganz verstanden.... aber

                Ist aktuell auch nicht mehr nötig. Ich konnte den Sensor dazu überreden, das er unverschlüsselt sendet.

                Interessanter Weise habe ich die Information „10sec den Lernknopf drücken, wechselt zwischen Verschlüsselt/Unverschlüsselt“
                von einer Website, die in ihrem Betrag eine EnOcean Pressemitteilung veröffentlicht hat.
                Weder in der Sensordoku, noch in den EnOcean bin auf diesen Sachverhalt gestoßen.

                Nun, ja - bei mir läuft es jetzt - unverschlüsselt

                Gruß
                Andre

                Kommentar


                  #9
                  Schön, dass es bei Dir jetzt - wenn auch unverschlüsselt - funktioniert. Ich habe mich auch mal mit Variante 2 beschäftigt. Dafür gibt es im Plugin Methoden, um den TCM310 in einen Anlernmodus zu bringen. Falls Du hier noch Interesse hast, melde Dich einfach. Ich habe aktuell kein Sensor, der verschlüsselte Daten ausgibt.
                  Gruß
                  Alex

                  Kommentar

                  Lädt...
                  X