Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
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.
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.
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.
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.
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.
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?)
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
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.
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?
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.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar