Ankündigung

Einklappen
Keine Ankündigung bisher.

Featurewunsch: EnOcean plugin

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

    hi, im Anhang - zeile 351 fängt den Modus ab und ruft dann einen entsprechenden Befehl auf, der die passende Antwort sendet.
    Du müsstest also sehen, welche Anlernanfrage gesendet wird und daraufhin die passende Anlernantwort generieren und senden.
    Angehängte Dateien

    Kommentar


      Hallo,

      danke Marcov.

      Zitat von beckerth Beitrag anzeigen
      Was ich leider nicht verstehe:
      Code:
      CO_WR_LEARNMODE = 0x23 # Function: Enables or disables learn mode of Controller.
      CO_RD_LEARNMODE = 0x24 # Function: Reads the learn-mode state of Controller.
      Anscheinend unterstützt der TCM310 auf dem IBB Cape den 'learn mode' nicht. Beim Aufruf im interactive mode kommt: enocean: Write LearnMode returned code = WRONG PARAM

      Aber leider klappt das anlernen mittels UTE bei mir aber nicht. Ich habe mal quick and dirty die _process_packet_type_radio() Funktion etwas angepasst. Laut EnOcean_Equipment_Profiles_EEP_v2.6.6 Kapitel 3.6 kommt ein Paket mit RORG D4, auf das ich mit einem weiteren Paket D4 innerhalb von 500ms antworten muss.

      Folgendes Paket sehe ich rein kommen:

      enocean enocean: radio message: choice = d4 / payload = [0xa0, 0xff, 0x33, 0x00, 0x09, 0x01, 0xd2] /

      Die Antwort sollte sein: DB0.0-DB5.7 Echo vom orginal Paket, DB6 zusammengebaut nach Tabelle 7.

      Seht ihr einen offensichtlichen Fehler? Kann das Timing das Problem sein? Dass ich es nicht schaffe innerhalb von 500ms zu antworten?

      Code:
       def _process_packet_type_radio(self, data, optional):
              self.logger.warning("enocean: processing radio message with data = [{}] / optional = [{}]".format(', '.join(['0x%02x' % b for b in data]), ', '.join(['0x%02x' % b for b in optional])))
      
              choice = data[0]
              payload = data[1:-5]
              sender_id = int.from_bytes(data[-5:-1], byteorder='big', signed=False)
              status = data[-1]
              repeater_cnt = status & 0x0F
              self.logger.info("enocean: radio message: choice = {:02x} / payload = [{}] / sender_id = {:08X} / status = {} / repeat = {}".format(choice, ', '.join(['0x%02x' % b for b in payload]), sender_id, status, repeater_cnt))
      
              if (len(optional) == 7):
                  subtelnum = optional[0]
                  dest_id = int.from_bytes(optional[1:5], byteorder='big', signed=False)
                  dBm = -optional[5]
                  SecurityLevel = optional[6]
                  self.logger.debug("enocean: radio message with additional info: subtelnum = {} / dest_id = {:08X} / signal = {}dBm / SecurityLevel = {}".format(subtelnum, dest_id, dBm, SecurityLevel))
                 if choice == 212:
                      self.logger.debug("UTE FOUND!! RORG {:02x}".format(choice))
                      self.logger.debug("send response")
                      time.sleep(0.1)
                      self._send_radio_packet(5, choice, [0x91, 0xFF, 0x33, 0x00, 0x09, 0x01, 0xD2] )
      Angehängte Dateien
      Zuletzt geändert von beckerth; 25.03.2017, 23:49.

      Kommentar


        Ich halte es für unwahrscheinlich, dass Du zu langsam antwortest, ich glaube das sleep kannst Du Dir sparen. Du kannst ja im Log ausgeben lassen, wenn send_radio_packet gesendet wird, dann siehst Du, ob es innerhalb von 550ms gesendet wurde.
        Ich hatte am Anfang Fehler in dem Zusammensetzen der Antwort, die letzte DB wird meiner Erinnerung nach an erster Position gesendet.
        Ich habe auch nachgerechnet, wie die Bits in Hexadezimal umgerechnet aussehen, um die Fehler zu finden.
        Deine DB 6 is 91 = 100100001 meiner Meinung nach könnte es auch binär 10011000 sein = 98 in hex (ich weiß aber auch nicht genau wie 6.3-6.0 = 1 zu interpretieren ist, ggf. probierst Du es mal mit 98)
        6.7 6.6 6.5 6.4 6.3 6.2 6.1 6.0
        1 0 0 1 1 0 0 0
        Zuletzt geändert von Marcov; 26.03.2017, 12:49.

        Kommentar


          Mit 0x98 auch kein Erfolg. Ich checke mal wie es mit der Ausgabe des Timings ausschaut..

          Kommentar


            ggf. auch mal ohne offset versuchen und choice d4 ist für die Antwort richtig?

            Kommentar


              Hi Marcov,

              ohne Offset hab ich schon probiert. Kein Unterschied. Das mit Choice 'D4' sollte laut Doku auch passen. Um mal die Zeit aus dem Spiel zu nehmen:
              Die Antwort kommt innerhalb von ~157ms. Hab die Zeit wenn die Pakete reinkommen und wenn ich meins raus schicke mal ausgegeben. Müsste also genügend Marge sein.
              Ich glaube aber ich habe bei den FHEM Jungs was gefunden - die Destination ID muss vermutlich mit rein, es darf kein Broadcast Paket sein.

              Aus https://forum.fhem.de/index.php?topic=64443.0:

              Code:
              2017.01.09 12:44:47 1: EnOcean Unknown device with SenderID 01926B9A and UTE telegram, please define it.
              2017.01.09 12:44:47 2: autocreate: define EnO_01926B9A EnOcean 01926B9A EnOcean:1:D4:A0FF33000901D2:01926B9A:00:03FFFFFFFF4600
              2017.01.09 12:44:47 2: EnOcean define EnO_01926B9A EnOcean 01926B9A EnOcean:1:D4:A0FF33000901D2:01926B9A:00:03FFFFFFFF4600
              2017.01.09 12:44:47 2: EnOcean define FileLog_EnO_01926B9A FileLog ./log/EnO_01926B9A-%Y.log EnO_01926B9A
              2017.01.09 12:44:47 2: EnOcean define SVG_EnO_01926B9A SVG FileLog_EnO_01926B9A:EnO_dim4:CURRENT
              2017.01.09 12:44:48 2: EnOcean define SVG_EnO_01926B9A_2 SVG FileLog_EnO_01926B9A:EnO_power4energy4:CURRENT
              2017.01.09 12:44:48 5: TCM RemoteTCM sent ESP: 55000D0701FDD491FF33000901D2FFB85801000301926B9AFF006B
              2017.01.09 12:44:48 5: SW: 55000D0701FDD491FF33000901D2FFB85801000301926B9AFF006B
              2017.01.09 12:44:48 2: EnOcean EnO_01926B9A UTE teach-in response send to 01926B9A
              2017.01.09 12:44:48 2: EnOcean EnO_01926B9A UTE teach-in accepted EEP D2-01-09 Manufacturer: Permundo GmbH
              Erste Markierung: das Empfangene Paket
              Zweite Markierung - für mein Verständnis das gesendete Paket: choice D4 und 91 für das DB6, dann DB5-DB0 Echo. Was dann kommt muss ich jetzt mal nachschauen. Hinten kommt jedoch die ID vom ursprünglichen Sender, der ursprüngliche Sender hatte das als Broadcast ausgeführt (FFFFFFFF am Ende, 2 Bytes vor Schluss).
              Zuletzt geändert von beckerth; 27.03.2017, 21:20.

              Kommentar


                Ich vermelde hiermit Erfolg :-) Kann den PSC234 über UTE einlernen und mittels D2-01-09 ansteuern. Der Code ist zwar noch nicht wirklich zu gebrauchen aber proof-of-principle ist erbracht.
                Der Unterschied zu der bisherigen Implementierung liegt darin das die Pakete adressiert werden müssen. Das gibt das Plugin für mein Verständnis so bisher nicht her.


                Edit: Kann mir jemand sagen ob ich meinen enocean Ordner auch einzeln umhängen kann im git? Oder muss ich den kompletten Plugin Ordner von SmarthomeNG umhängen um dann auf den dev Branch zu wechseln?
                Zuletzt geändert von beckerth; 27.03.2017, 23:05.

                Kommentar


                  Sehr schön - freut mich, dass es geklappt hat. Mein Lösung ist auch noch dirty und müsste auch noch angepasst / erweitert werden, um sie auf die Allgemeinheit loszulassen.
                  In Summe finde ich die Enocean Dokumentation recht verwirrend, wenn sie bei jedem Vorgang ein Beispiel hinzugefügt hätten, würde das viel Arbeit ersparen.

                  Kommentar


                    Ja, die Doku ist manchmal etwas schwer verständlich. Beispiele wären schön.. Ich kämpfe mal etwas mit Github um dann die Arbeit für alle nutzbar zu haben falls Interesse besteht.

                    Kommentar


                      Hab mal ne Funktion gemacht die einen "Learn mode" aktiviert bei dem automatisch auf die UTE Anfrage geantwortet wird...und diese gleich als Pull Request bei Github eingestellt.

                      https://github.com/smarthomeNG/plugins/pull/31

                      Edit: in der Zwischenzeit gemerged
                      Zuletzt geändert von beckerth; 20.04.2017, 23:21.

                      Kommentar


                        Ich versuche, einen Peha Empfänger D 451 FU-EBI PF O.T. über UTE einzulernen und anzubinden. Er meldet sich über D2-01-07, was nach Enocean Spec auch Sinn macht. Das Einlernen klappt mit dem Plugin aus V1.3 leider noch nicht, Analyse ist im Gange.

                        In __init.__.py und eep_parser.py kann ich auch keinen Eintrag zu D2-01 finden. Könntest du bitte deinen Code und deine zugehörige Item-Definition posten.

                        Danke!

                        Kommentar


                          Hi,

                          kannst Du dazu noch etwas genauer drauf eingehen ("Und nein, null ist keine gültige Base ID Actuatoren. Diese ist nämlich für das Gateway reserviert. ")?
                          Wie ist das dann zu verstehen?

                          Beispiel:
                          Ich habe 3 gleiche Aktuatoren, die alle einzeln angesteuert werden sollen.
                          Ich habe die Aktuatoren wie folgt eingelernt:

                          akt1: BASE ID +0
                          akt2: BASE ID +1
                          akt3: BASE ID +2

                          Funktioniert alles perfekt.

                          Was meinst Du genau dass die BASE ID für das Gateway reserviert ist?

                          Grüße

                          Kommentar


                            Ich meinte, in der Enocean Spec stand, dass ID=0 für das Gatway reserviert ist. Es entspricht dann ja der BaseID des Tx Chips. Wenn es bei Dir funktioniert, scheint BaseID +0 auch eine gültige Sendeadresse zu sein. Wir können dann gerne den Default Wert im WebIf ändern. Gerne einen Pullrequest stellen (aber einzeln )

                            Kommentar


                              Ich glaube da ist ein kleines Missverständnis im Spiel.
                              Die BASE ID muss immer mit 0 enden das stimmt, aber beim Senden eines Telegramms benötigt man die SENDER ID und die ist [BASE ID + OFFSET].
                              Und eine gültige SENDER ID kann auch mit der 0 enden --> offset = 0.
                              Hier noch mal der Link das findest Du auch den Screenshot
                              https://www.enocean.com/en/knowledge..._is_a_base_id/

                              Unbenannt.JPG

                              Kommentar


                                Hallo,

                                hab mir heute mal das enocean Webif angeschaut Umstellung auf default value = "0", wäre nicht das Problem.
                                Nur habe ich dabei festgestellt dass beim Abschicken der Lernroutine es massiv Fehler hagelt beim CSS Inspector (Firefox F12 Taste drücken).
                                Kann Sich das mal jemand anschauen, ich kenne mich da leider nicht aus...

                                Bei den anderen Webif s ist das wohl nicht so.

                                Unbenannt.JPG

                                Kommentar

                                Lädt...
                                X