Ankündigung

Einklappen
Keine Ankündigung bisher.

Featurewunsch: EnOcean plugin

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

    Hi Alex,

    ok Danke für Deinen Hinweis.
    Werde mir das mal anschauen.
    Ich vermute dann werde ich der Korrektheit halber, das bereits vorhandene "F6_02_03_01" EEP in ein F6_GG_01 umbenennen.
    Schaue noch mal in enocean Fokus.

    Grüße

    Kommentar


      Hi Alex,

      habe noch mal in die Definition der EEP Profile geschaut.
      Der Enocean Standard gibt vor dass die Profile wie folgt definiert sind:
      RORG: 00...FF
      FUNC: 00...3F
      TYPE: 00...7F

      Somit wäre es aus meiner Sicht nur notwendig für spezielle Profile außerhalb des Enocean Standards die FUNC Nummer anzupassen. RORG und TYPE kann man ja entsprechend dem Enocean Standard belassen.
      Daher wäre mein Vorschlag für den Eltako FSB71 folgendes festzulegen:

      Vorhandenes Profil mit F6_02_03_01 umbennen zu F6_4F_01 oder F6_4F_02 (Light ans Blind Control)

      Und das neue Profil bezüglich der Rolladen Position als EEP A5_4F_03 (Controller Status -> BlindStatus)
      anzulegen.

      Passt das für Dich?


      Unbenannt.PNG

      Grüße
      Frank

      Kommentar


        Hallo Frank, ja das Prinzip passt. Allerdings sind für Enocean EEPs mit Version > 3.0 8bit für Function ID reserviert. Deshal der Vorschlag, eine benutzerdefinierte Func ID >0xFF zu nutzen.

        Grüße Alex

        Kommentar


          Hallo Alex,

          habe folgende Punkte im eep-Parser geändert.
          Was meinst Du dazu?

          1.) Umbenennen der existierenden Methode:
          Code:
          [COLOR=#569cd6]def[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#dcdcaa]_parse_eep_F6_0G_03[/COLOR][COLOR=#d4d4d4]([/COLOR][COLOR=#9cdcfe]self[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#9cdcfe]payload[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#9cdcfe]status[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#ce9178]'''[/COLOR]
          [COLOR=#ce9178]        Repeated switch communication(RPS) Telegramm[/COLOR]
          [COLOR=#ce9178]        Status command from bidirectional shutter actors[/COLOR]
          [COLOR=#ce9178]        Repeated switch Command for Eltako FSB61NP-230V, FSB71[/COLOR]
          [COLOR=#ce9178]        Key Description:[/COLOR]
          [COLOR=#ce9178]        STATUS: Info what the shutter does[/COLOR]
          [COLOR=#ce9178]        B: status of the shutter actor (command) [/COLOR]
          [COLOR=#ce9178]        '''[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: processing F6_0G_03: shutter actor"[/COLOR][COLOR=#d4d4d4])[/COLOR]
          [COLOR=#d4d4d4]        results = {}[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]70[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'STATUS'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#ce9178]'upper end position'[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]0[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]50[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'STATUS'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#ce9178]'lower end position'[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]0[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]01[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'STATUS'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#ce9178]'Start movin up'[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]1[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]02[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'STATUS'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#ce9178]'Start movin down'[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]2[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]return[/COLOR][COLOR=#d4d4d4] results[/COLOR]
          Dann die zweite Änderung.

          2.) Neue Methode runtime feedback of Eltako FSB71 und weitere
          Code:
          [COLOR=#569cd6]def[/COLOR][COLOR=#d4d4d4] [/COLOR][COLOR=#dcdcaa]_parse_eep_A5_0G_03[/COLOR][COLOR=#d4d4d4]([/COLOR][COLOR=#9cdcfe]self[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#9cdcfe]payload[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#9cdcfe]status[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#ce9178]'''[/COLOR]
          [COLOR=#ce9178]        4 Byte communication(4BS) Telegramm[/COLOR]
          [COLOR=#ce9178]        Status command from bidirectional shutter actors:[/COLOR]
          [COLOR=#ce9178]            Eltako FSB61NP-230V, FSB71, FJ62/12-36V DC, FJ62NP-230V[/COLOR]
          [COLOR=#ce9178]        If actor is stopped during run it sends the feedback of runtime and the direction[/COLOR]
          [COLOR=#ce9178]        This enables to calculate the actual shutter position[/COLOR]
          [COLOR=#ce9178]        Key Description:[/COLOR]
          [COLOR=#ce9178]            MOVE: runtime of movement in s (with direction: "+" = up; "-" = down)[/COLOR]
          [COLOR=#ce9178]        '''[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: eep-parser processing A5_0G_03 4BS telegram: shutter movement feedback"[/COLOR][COLOR=#d4d4d4])[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: eep-parser input payload = [[/COLOR][COLOR=#569cd6]{}[/COLOR][COLOR=#ce9178]]"[/COLOR][COLOR=#d4d4d4].format(payload))[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: eep-parser input status = [/COLOR][COLOR=#569cd6]{}[/COLOR][COLOR=#ce9178]"[/COLOR][COLOR=#d4d4d4].format(status))[/COLOR]
          [COLOR=#d4d4d4]        results = {}[/COLOR]
          [COLOR=#d4d4d4]        runtime_s = ((payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] << [/COLOR][COLOR=#b5cea8]8[/COLOR][COLOR=#d4d4d4]) + payload[[/COLOR][COLOR=#b5cea8]1[/COLOR][COLOR=#d4d4d4]]) / [/COLOR][COLOR=#b5cea8]10[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]2[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#b5cea8]1[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]            [/COLOR][COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: shutter moved [/COLOR][COLOR=#569cd6]{}[/COLOR][COLOR=#ce9178] s 'upwards'"[/COLOR][COLOR=#d4d4d4].format(runtime_s))[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'MOVE'[/COLOR][COLOR=#d4d4d4]] = runtime_s[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]2[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#b5cea8]2[/COLOR][COLOR=#d4d4d4]):[/COLOR]
          [COLOR=#d4d4d4]            [/COLOR][COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: shutter moved [/COLOR][COLOR=#569cd6]{}[/COLOR][COLOR=#ce9178] s 'downwards'"[/COLOR][COLOR=#d4d4d4].format(runtime_s))[/COLOR]
          [COLOR=#d4d4d4]            results[[/COLOR][COLOR=#ce9178]'MOVE'[/COLOR][COLOR=#d4d4d4]] = runtime_s * -[/COLOR][COLOR=#b5cea8]1[/COLOR]
          [COLOR=#d4d4d4]        [/COLOR][COLOR=#c586c0]return[/COLOR][COLOR=#d4d4d4] results[/COLOR]
          Das zugehörige Item könnte so aussehen:

          Code:
          shutterposition:[INDENT]remark: Eltako FSB14, FSB61, FSB71 - actor for Shutter[/INDENT][INDENT]type: num[/INDENT][INDENT]cache: 'True'
          enforce_updates: 'True'[/INDENT][INDENT]movement:[/INDENT][INDENT=2]type: num
          enocean_rx_id: 1A869C3
          enocean_rx_eep: A5_0G_03
          enocean_rx_key: MOVE
          cache: 'True'
          enforce_updates: 'True'[/INDENT]
          In "shutterposition.movement" steht, wenn der Rolladen whärend der Fahrt angehalten wird die Laufzeit in s.
          Beispielweise:
          5s runter --> -5.0
          6,2 s hoch --> 6.2

          Passt das aus Deiner Sicht?

          Nun werde ich noch überlegen wie man aus beiden EEPs die aktuelle Rolladenposition in einer Logik errechnet.

          Würdest Du diesem Pullrequest zustimmen?

          Grüße
          Frank

          Kommentar


            Ja. Top. Doku nicht vergessen.

            Gruß

            Kommentar


              Eine kleine Änderung würde ich bei 1.) noch machen...

              Bei Payload == 0x70 und 0x50 würde ich gleich die EnlagenPosition wie im SHNG üblich auf:
              0 = Enlage oben
              255 = Enlage unten
              zuweisen
              Dann fällt die Verrechnung in der Logik leichter.


              Code:
              [COLOR=#569cd6]def[/COLOR][COLOR=#dcdcaa]_parse_eep_F6_0G_03[/COLOR][COLOR=#d4d4d4]([/COLOR][COLOR=#9cdcfe]self[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#9cdcfe]payload[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#9cdcfe]status[/COLOR][COLOR=#d4d4d4]):[/COLOR]
              [COLOR=#ce9178]'''[/COLOR]
              [COLOR=#ce9178]Repeated switch communication(RPS) Telegramm[/COLOR]
              [COLOR=#ce9178]Status command from bidirectional shutter actors[/COLOR]
              [COLOR=#ce9178]Repeated switch Command for Eltako FSB61NP-230V, FSB71[/COLOR]
              [COLOR=#ce9178]Key Description:[/COLOR]
              [COLOR=#ce9178]POSITION: 0 -> upper endposition; 255 -> lower endposition[/COLOR]
              [COLOR=#ce9178]STATUS: Info what the shutter does[/COLOR]
              [COLOR=#ce9178]B: status of the shutter actor (command) [/COLOR]
              [COLOR=#ce9178]'''[/COLOR]
              [COLOR=#569cd6]self[/COLOR][COLOR=#d4d4d4].logger.debug([/COLOR][COLOR=#ce9178]"enocean: processing F6_0G_03: shutter actor"[/COLOR][COLOR=#d4d4d4])[/COLOR]
              [COLOR=#d4d4d4]results = {}[/COLOR]
              [COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]70[/COLOR][COLOR=#d4d4d4]):[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'POSITION'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]0[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]0[/COLOR]
              [COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]50[/COLOR][COLOR=#d4d4d4]):[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'POSITION'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]255[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]0[/COLOR]
              [COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]01[/COLOR][COLOR=#d4d4d4]):[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'STATUS'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#ce9178]'Start movin up'[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]1[/COLOR]
              [COLOR=#c586c0]elif[/COLOR][COLOR=#d4d4d4] (payload[[/COLOR][COLOR=#b5cea8]0[/COLOR][COLOR=#d4d4d4]] == [/COLOR][COLOR=#569cd6]0x[/COLOR][COLOR=#b5cea8]02[/COLOR][COLOR=#d4d4d4]):[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'STATUS'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#ce9178]'Start movin down'[/COLOR]
              [COLOR=#d4d4d4]results[[/COLOR][COLOR=#ce9178]'B'[/COLOR][COLOR=#d4d4d4]] = [/COLOR][COLOR=#b5cea8]2[/COLOR]
              [COLOR=#c586c0]return[/COLOR][COLOR=#d4d4d4] results[/COLOR]
              Zuletzt geändert von Hasenradball; 06.09.2020, 11:56.

              Kommentar


                Kommentar


                  Hi Alex,

                  Danke fürs akzeptieren!

                  Habe noch einen kleinen Typo in der Kurzbeschreibung der Methode gefunden:
                  Mit Anlehnung von SHNG 0...255 ist natürlich "+" und "-" vertauscht.

                  Code:
                  [COLOR=#ce9178]Key Description:[/COLOR] [COLOR=#ce9178] MOVE: runtime of movement in s (with direction: "+" = up; "-" = down)[/COLOR]
                  Schau mal ist das hier auch noch ein Typo in der Readme.md

                  Sollt ich den gleich mitkorrigieren?

                  2020-09-08_15h59_09.png

                  Grüße
                  Frank

                  Kommentar


                    Kein Problem. Bei guten Pullrequests immer gerne .

                    Für obige Punkte gerne wieder Pullrequest. Das bekommen wir schnell durch.

                    Viele Grüße

                    Kommentar


                      Hallo zusammen,

                      ich nutze das Plugin (vielen Dank dafür) mit einem USB Stick TCM310. Das Ganze funktioniert an sich auch prima, nur leider scheint gelegentlich die Verbindung zum USB Stick verloren zu gehen (siehe log unten). Den Grund dafür habe ich bisher nicht herausgefunden (der Stick wurde weder entfernt, noch kann ich mir einen mehrfachen Zugriff erklären, wie in der Fehlermeldung angegeben). In diesem Fall hilft dann nur ein kompletter smarthome Neustart. Wäre es irgendwie denkbar, die Verbindung zum USB Stick im Fehlerfall neu aufzubauen (Reconnect)?

                      Code:
                      2020-09-20 22:07:01 ERROR lib.plugin Plugin 'enocean' exception in run() method: read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
                      > Traceback (most recent call last):
                      > File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 501, in read
                      > 'device reports readiness to read but returned no data '
                      > serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
                      
                      During handling of the above exception, another exception occurred:
                      
                      > Traceback (most recent call last):
                      > File "/usr/local/smarthome/lib/plugin.py", line 657, in run
                      > self.plugin.run()
                      > File "/usr/local/smarthome/plugins/enocean/__init__.py", line 412, in run
                      > readin = self._tcm.read(1000)
                      > File "/usr/local/lib/python3.7/dist-packages/serial/serialposix.py", line 509, in read
                      > raise SerialException('read failed: {}'.format(e))
                      > serial.serialutil.SerialException: read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
                      Gruß
                      Franz

                      Kommentar


                        Hallo Franz,

                        ich nutze den USB Stick nur in Verbindung mit der enocean SW zwecks Verifikationen der Protokolle.
                        Für der Produktivbetrieb Nutze ich das Fam4pi Module.
                        Zu Deiner seriellen Frage kann ich Dir leider gerade nicht helfen, aber falls du einen Pi einsetzt kann ich Dir das Modul sehr empfehlen.
                        Grüße
                        Frank

                        Kommentar


                          Hallo Frank,

                          vielen Dank für Deine Antwort. Ich lasse smarthomeng als Docker Container auf einer Linux Maschine laufen, deswegen benutze ich den USB Stick.

                          Gruß
                          Franz

                          Kommentar


                            Servus

                            Hatte eben das Problem, dass nach einem Upgrade meines Intel NUC auf Bullseye und SHNG 1.9.1 das Enocean Plugin nicht mehr wollte. Es konnte das eigentlich korrekte Device ttyUSB0 nicht finden. In /var/log/messages bzw. über dmesg konnte man sehen, dass der Enocean Stick sehr wohl erkannt und auf ttyUSB0 gesetzt wurde, aber gleich darauf wieder raus flog, weil ein 'brltty' dazwischen funkte.

                            Das ist ein Daemon für Blindenschrift (Braille) Terminals. Warum das bei Debian selbst in der amd64 Netinst dabei und aktiv ist, erschließt sich mir nicht. Das war bei älteren Versionen nicht der Fall (Buster, Jessie, etc.). Der Fehler ansich, dass brlTTY mit FTDI Devices kollidiert, ist bekannt.

                            Lösung ist einfach:

                            Code:
                            apt-get remove brltty
                            Nicht vergessen den User Smarthome der Gruppe dialout hinzuzufügen:

                            Code:
                            sudo gpasswd --add smarthome dialout
                            Danach geht wieder alles.
                            Vielleicht kann's ja wer brauchen.

                            Kommentar


                              Hallo zusammen,

                              mir ist bei WebIF folgendes aufgefallen (s.Bild), kann mir jemand erklären voher der wert kommt?
                              Und für was der "nächste freie TX-Offset" gedacht ist?



                              Unbenannt.png
                              Angehängte Dateien

                              Kommentar


                                Alle Enocean Aktoren werden an dem Plugin mit einer ID angelernt. Diese ID enspricht einem Offset, der auf die BaseID aufaddiert wird. Diese ID wird nur für Devices benötigt, die das Plugin aktiv steuert (TX=Transmit). Zur Bestimmung des nächsten freien TX-Offsets schaut das Plugin, welche IDs (Offsets) Du bereits verwendest hast. Bei Dir anscheined ID 1,2 und 3. Beim Anlernen eines neues Devices, siehe rechts, schlägt er Dir jetzt die nächste freie ID = 4 vor. Gerade bei größeren Installationen hilf das.

                                Kommentar

                                Lädt...
                                X