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:
          def_parse_eep_F6_0G_03(self, payload, status):
          '''
                  Repeated switch communication(RPS) Telegramm
                  Status command from bidirectional shutter actors
                  Repeated switch Command for Eltako FSB61NP-230V, FSB71
                  Key Description:
                  STATUS: Info what the shutter does
                  B: status of the shutter actor (command) 
                  '''
          self.logger.debug("enocean: processing F6_0G_03: shutter actor")
                  results = {}
          if (payload[0] == 0x70):
                      results['STATUS'] = 'upper end position'
                      results['B'] = 0
          elif (payload[0] == 0x50):
                      results['STATUS'] = 'lower end position'
                      results['B'] = 0
          elif (payload[0] == 0x01):
                      results['STATUS'] = 'Start movin up'
                      results['B'] = 1
          elif (payload[0] == 0x02):
                      results['STATUS'] = 'Start movin down'
                      results['B'] = 2
          return results
          Dann die zweite Änderung.

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

          Code:
          shutterposition:
          remark: Eltako FSB14, FSB61, FSB71 - actor for Shutter
          type: num
          cache: 'True' enforce_updates: 'True'
          movement:
          type: num enocean_rx_id: 1A869C3 enocean_rx_eep: A5_0G_03 enocean_rx_key: MOVE cache: 'True' enforce_updates: 'True'
          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:
              def_parse_eep_F6_0G_03(self, payload, status):
              '''
              Repeated switch communication(RPS) Telegramm
              Status command from bidirectional shutter actors
              Repeated switch Command for Eltako FSB61NP-230V, FSB71
              Key Description:
              POSITION: 0 -> upper endposition; 255 -> lower endposition
              STATUS: Info what the shutter does
              B: status of the shutter actor (command) 
              '''
              self.logger.debug("enocean: processing F6_0G_03: shutter actor")
              results = {}
              if (payload[0] == 0x70):
              results['POSITION'] = 0
              results['B'] = 0
              elif (payload[0] == 0x50):
              results['POSITION'] = 255
              results['B'] = 0
              elif (payload[0] == 0x01):
              results['STATUS'] = 'Start movin up'
              results['B'] = 1
              elif (payload[0] == 0x02):
              results['STATUS'] = 'Start movin down'
              results['B'] = 2
              return results
              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:
                  Key Description:  MOVE: runtime of movement in s (with direction: "+" = up; "-" = down)
                  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

                          Lädt...
                          X