Physikalischen Enocean Schalter virtualisieren

Hi Zusammen,

habe mich über die Feiertage mit HA beschäftigt und hänge seit Tagen am Punkt, wie ich es schaffe meinen verbauten PCT210 Schalter der physikalisch existiert und heute auch schon Lampen schaltet, als virtuellen Schalter in HA abzubilden.

Ich bekomme es hin, virtuelle Schalter zu erstellen usw. Kein Problem.
Da ich aber eine komplett aufgebautes Smarthome mit Eltako Enocean habe, möchte ich nur die physikalischen Schalter nun virtualiseren.

Ich nutze:
Mosquitto broker
EnOcean MQTT (GitHub - ChristopheHD/HA_enoceanmqtt-addon: Home Assistant addon for HA_enoceanmqtt (https://github.com/aseracorp/HA_enoceanmqtt) - das originale Build lies sich nicht installieren, dieses Build war explizit für meinen Fehler)
HA 2025.1
USB300

Hat hier jemand eine Idee?

Also Beispiel:

Der Schalter FF112233 schaltet heute mit: rorg
rorg = 0xF6
func = 0x02
type = 0x02

mein Licht im Büro an, das will ich jetzt aber über HA ohne neue IDs über PCT14 einlernen zu müssen. Der FF112233 ist bereits eingelernt (ID ist nur ein Beispiel).

Falls Fragen sind gerne nochmal fragen, oder wenn ich etwas vergessen haben sollte.

Danke

Hallo @Hebs und Herzlich Willkommen bei den SmartHome for Dummies! :grinning:

Ich kann Deinen Ausführungen glaube ich nicht ganz folgen. Stecke aber in dem Thema EnOcean auch nicht so tief drin.
Habe selbst nur FT55, FTKE und Hoppe Fenstergriffe am Start unter Verwendung des EnOcean MQTT Add-On’s.

Hast Du denn nun EnOcean MQTT auch am Start?

Das EEP entspricht ja einem FT55 Schalter.

Hast Di diesen auch bereits als Gerät in der Geräte Konfig Datei von EnoCean MQTT konfiguriert?

Gruß
Osorkon

Hi Osorkon,

vielen Dank :slight_smile:
Ich habe folgendes in der enoceanmqtt.devices mittlerweile als test drinnen:

[testlichttttt1]
address = 0xFF111111 #hier habe ich testweise mal die ID des FAM14 rein
sender = 0xFF112233  #ID des physikalischen Schalters
rorg    = 0xF6
func    = 0x02
type     = 0x01
virtual = 1



[testlichttttt2]
address = 0xFFFFFFFF #um es richtig als virtuellen Schalter zu deklarieren
sender = 0xFFAAE501 # das ist die virtuelle ID die ich schalten kann
rorg    = 0xF6
func    = 0x02
type     = 0x01
virtual = 1

[testlichttttt3]
address = 0xFFFFFFFF #um es richtig als virtuellen Schalter zu deklarieren
sender = 0xFF112233 #ID des physikalischen Schalters
rorg    = 0xF6
func    = 0x02
type     = 0x01
virtual = 1

[rocker_1]
address         = 0xFF112233 #ID des physikalischen Schalters
rorg            = 0xF6
func            = 0x02
type            = 0x02
sender_id       = 0xFF112233 #ID des physikalischen Schalters

Was passiert im einzelnen?

Wenn ich meinen Physikalischen Schalter klicke kommt im LOG:


2025-01-07 17:02:11,513 DEBUG: FF:11:22:33->FF:FF:FF:FF (-70 dBm): 0x01 ['0xf6', '0x10', '0xfe', '0xea', '0x64', '0x32', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x46', '0x0'] OrderedDict()
2025-01-07 17:02:11,513 INFO: received: FF:11:22:33->FF:FF:FF:FF (-70 dBm): 0x01 ['0xf6', '0x10', '0xfe', '0xea', '0x64', '0x32', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x46', '0x0'] OrderedDict()
2025-01-07 17:02:11,517 DEBUG: enoceanmqtt/rocker_1: R1 (Rocker 1st action)=Button AI 
2025-01-07 17:02:11,518 DEBUG: enoceanmqtt/rocker_1: EB (Energy bow)=pressed 
2025-01-07 17:02:11,518 DEBUG: enoceanmqtt/rocker_1: R2 (Rocker 2nd action)=Button AI 
2025-01-07 17:02:11,519 DEBUG: enoceanmqtt/rocker_1: SA (2nd action)=No 2nd action 
2025-01-07 17:02:11,519 DEBUG: enoceanmqtt/rocker_1: T21 (T21)=True 
2025-01-07 17:02:11,519 DEBUG: enoceanmqtt/rocker_1: NU (NU)=True 
2025-01-07 17:02:11,520 DEBUG: enoceanmqtt/rocker_1: Sent MQTT: {"_RSSI_": -70, "_DATE_": "2025-01-07T17:02:11.513039", "_RAW_DATA_": "10:30", "R1": 0, "EB": 1, "R2": 0, "SA": 0, "T21": true, "NU": true}
2025-01-07 17:02:11,521 DEBUG: Sending PUBLISH (d0, q0, r1, m126), 'b'enoceanmqtt/rocker_1'', ... (139 bytes)
2025-01-07 17:02:11,657 DEBUG: FF:11:22:33->FF:FF:FF:FF (-65 dBm): 0x01 ['0xf6', '0x0', '0xfe', '0xea', '0x64', '0x32', '0x20'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x41', '0x0'] OrderedDict()
2025-01-07 17:02:11,657 INFO: received: FF:11:22:33->FF:FF:FF:FF (-65 dBm): 0x01 ['0xf6', '0x0', '0xfe', '0xea', '0x64', '0x32', '0x20'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x41', '0x0'] OrderedDict()
2025-01-07 17:02:11,659 DEBUG: enoceanmqtt/rocker_1: R1 (Rocker 1st action)=Button AI 
2025-01-07 17:02:11,659 DEBUG: enoceanmqtt/rocker_1: EB (Energy bow)=released 
2025-01-07 17:02:11,660 DEBUG: enoceanmqtt/rocker_1: R2 (Rocker 2nd action)=Button AI 
2025-01-07 17:02:11,661 DEBUG: enoceanmqtt/rocker_1: SA (2nd action)=No 2nd action 
2025-01-07 17:02:11,661 DEBUG: enoceanmqtt/rocker_1: T21 (T21)=True 
2025-01-07 17:02:11,662 DEBUG: enoceanmqtt/rocker_1: NU (NU)=False 
2025-01-07 17:02:11,662 DEBUG: enoceanmqtt/rocker_1: Sent MQTT: {"_RSSI_": -65, "_DATE_": "2025-01-07T17:02:11.657062", "_RAW_DATA_": "00:20", "R1": 0, "EB": 0, "R2": 0, "SA": 0, "T21": true, "NU": false}
2025-01-07 17:02:11,663 DEBUG: Sending PUBLISH (d0, q0, r1, m127), 'b'enoceanmqtt/rocker_1'', ... (140 bytes)
2025-01-07 17:02:13,016 DEBUG: FF:22:33:44->FF:FF:FF:FF (-70 dBm): 0x01 ['0xf6', '0x70', '0xff', '0x93', '0x86', '0x85', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x46', '0x0'] OrderedDict()
2025-01-07 17:02:13,017 INFO: received: FF:22:33:44->FF:FF:FF:FF (-70 dBm): 0x01 ['0xf6', '0x70', '0xff', '0x93', '0x86', '0x85', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x46', '0x0'] OrderedDict()
2025-01-07 17:02:13,022 DEBUG: enoceanmqtt/rocker_2: R1 (Rocker 1st action)=Button BO 
2025-01-07 17:02:13,023 DEBUG: enoceanmqtt/rocker_2: EB (Energy bow)=pressed 
2025-01-07 17:02:13,023 DEBUG: enoceanmqtt/rocker_2: R2 (Rocker 2nd action)=Button AI 
2025-01-07 17:02:13,024 DEBUG: enoceanmqtt/rocker_2: SA (2nd action)=No 2nd action 
2025-01-07 17:02:13,024 DEBUG: enoceanmqtt/rocker_2: T21 (T21)=True 
2025-01-07 17:02:13,025 DEBUG: enoceanmqtt/rocker_2: NU (NU)=True 
2025-01-07 17:02:13,026 DEBUG: enoceanmqtt/rocker_2: Sent MQTT: {"_RSSI_": -70, "_DATE_": "2025-01-07T17:02:13.016686", "_RAW_DATA_": "70:30", "R1": 3, "EB": 1, "R2": 0, "SA": 0, "T21": true, "NU": true}
2025-01-07 17:02:13,026 DEBUG: Sending PUBLISH (d0, q0, r1, m128), 'b'enoceanmqtt/rocker_2'', ... (139 bytes)

Ergo der Schalter wird erkannt und liefert alle Daten an den USB300 und es kommt eine Meldung zurück.
Im rocker_1 im Mqqt sehe ich auch

AI_pressed

kurz aufleuchten → Alles i.O.

Klicke ich für den Schalter testlichttttt3 auf Action AI send kommt folgendes im LOG, es passiert aber nichts mit der Lampe bzw. am Aktor:

2025-01-07 17:07:13,230 DEBUG: Received PUBLISH (d0, q0, r0, m0), 'enoceanmqtt/testlichttttt3/req', ...  (59 bytes)
2025-01-07 17:07:13,230 DEBUG: Got MQTT message: enoceanmqtt/testlichttttt3/req
2025-01-07 17:07:13,231 DEBUG: Send Payload: clear
2025-01-07 17:07:13,231 DEBUG: enoceanmqtt/testlichttttt3: req={'R1': 0, 'EB': 1, 'R2': 0, 'SA': 0, 'T21': 1, 'NU': 1}
2025-01-07 17:07:13,232 DEBUG: Trigger message to: enoceanmqtt/testlichttttt3
2025-01-07 17:07:13,236 DEBUG: sensor data: {'R1': 0, 'EB': 1, 'R2': 0, 'SA': 0, 'T21': 1, 'NU': 1}
2025-01-07 17:07:13,241 INFO: sending: FF:11:22:33->FF:FF:FF:FF (-255 dBm): 0x01 ['0xf6', '0x10', '0xfe', '0xea', '0x64', '0x32', '0x30'] ['0x3', '0xff', '0xff', '0xff', '0xff', '0xff', '0x0'] OrderedDict({'R1': {'description': 'Rocker 1st action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'EB': {'description': 'Energy bow', 'unit': '', 'value': 'pressed', 'raw_value': 1}, 'R2': {'description': 'Rocker 2nd action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'SA': {'description': '2nd action', 'unit': '', 'value': 'No 2nd action', 'raw_value': 0}, 'T21': {'description': 'T21', 'unit': '', 'value': True, 'raw_value': 1}, 'NU': {'description': 'NU', 'unit': '', 'value': True, 'raw_value': 1}})
2025-01-07 17:07:13,242 DEBUG: Clearing data buffer.
2025-01-07 17:07:13,342 INFO: Sending packet
2025-01-07 17:07:13,343 DEBUG: FF:11:22:33->FF:FF:FF:FF (-255 dBm): 0x01 ['0xf6', '0x10', '0xfe', '0xea', '0x64', '0x32', '0x30'] ['0x3', '0xff', '0xff', '0xff', '0xff', '0xff', '0x0'] OrderedDict({'R1': {'description': 'Rocker 1st action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'EB': {'description': 'Energy bow', 'unit': '', 'value': 'pressed', 'raw_value': 1}, 'R2': {'description': 'Rocker 2nd action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'SA': {'description': '2nd action', 'unit': '', 'value': 'No 2nd action', 'raw_value': 0}, 'T21': {'description': 'T21', 'unit': '', 'value': True, 'raw_value': 1}, 'NU': {'description': 'NU', 'unit': '', 'value': True, 'raw_value': 1}})
2025-01-07 17:07:13,444 DEBUG: 0x02 ['0x0'] [] OrderedDict()
2025-01-07 17:07:13,445 INFO: got response packet: OK

Für testlichttttt1 folgendes:

2025-01-07 17:08:56,820 DEBUG: Received PUBLISH (d0, q0, r0, m0), 'enoceanmqtt/testlichttttt1/req', ...  (59 bytes)
2025-01-07 17:08:56,821 DEBUG: Got MQTT message: enoceanmqtt/testlichttttt1/req
2025-01-07 17:08:56,823 DEBUG: Send Payload: clear
2025-01-07 17:08:56,823 DEBUG: enoceanmqtt/testlichttttt1: req={'R1': 0, 'EB': 0, 'R2': 0, 'SA': 0, 'T21': 1, 'NU': 0}
2025-01-07 17:08:56,824 DEBUG: Trigger message to: enoceanmqtt/testlichttttt1
2025-01-07 17:08:56,826 DEBUG: sensor data: {'R1': 0, 'EB': 0, 'R2': 0, 'SA': 0, 'T21': 1, 'NU': 0}
2025-01-07 17:08:56,829 INFO: sending: FF:11:22:33->#idvomfam14# (-255 dBm): 0x01 ['0xf6', '0x0', '0xff', '0x93', '0x86', '0x85', '0x20'] ['0x3', '0xff', '0x93', '0x86', '0x80', '0xff', '0x0'] OrderedDict({'R1': {'description': 'Rocker 1st action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'EB': {'description': 'Energy bow', 'unit': '', 'value': 'released', 'raw_value': 0}, 'R2': {'description': 'Rocker 2nd action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'SA': {'description': '2nd action', 'unit': '', 'value': 'No 2nd action', 'raw_value': 0}, 'T21': {'description': 'T21', 'unit': '', 'value': True, 'raw_value': 1}, 'NU': {'description': 'NU', 'unit': '', 'value': False, 'raw_value': 0}})
2025-01-07 17:08:56,829 DEBUG: Clearing data buffer.
2025-01-07 17:08:56,919 INFO: Sending packet
2025-01-07 17:08:56,919 DEBUG: FF:11:22:33->#idvomfam14# (-255 dBm): 0x01 ['0xf6', '0x0', '0xff', '0x93', '0x86', '0x85', '0x20'] ['0x3', '0xff', '0x93', '0x86', '0x80', '0xff', '0x0'] OrderedDict({'R1': {'description': 'Rocker 1st action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'EB': {'description': 'Energy bow', 'unit': '', 'value': 'released', 'raw_value': 0}, 'R2': {'description': 'Rocker 2nd action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'SA': {'description': '2nd action', 'unit': '', 'value': 'No 2nd action', 'raw_value': 0}, 'T21': {'description': 'T21', 'unit': '', 'value': True, 'raw_value': 1}, 'NU': {'description': 'NU', 'unit': '', 'value': False, 'raw_value': 0}})
2025-01-07 17:08:57,021 DEBUG: 0x02 ['0x3'] [] OrderedDict()
2025-01-07 17:08:57,022 INFO: got response packet: WRONG_PARAM

und für testlichttttt2 folgendes:

2025-01-07 17:11:12,552 DEBUG: Received PUBLISH (d0, q0, r0, m0), 'enoceanmqtt/testlichttttt2/req', ...  (59 bytes)
2025-01-07 17:11:12,553 DEBUG: Got MQTT message: enoceanmqtt/testlichttttt2/req
2025-01-07 17:11:12,554 DEBUG: Send Payload: clear
2025-01-07 17:11:12,555 DEBUG: enoceanmqtt/testlichttttt2: req={'R1': 0, 'EB': 0, 'R2': 0, 'SA': 0, 'T21': 1, 'NU': 0}
2025-01-07 17:11:12,555 DEBUG: Trigger message to: enoceanmqtt/testlichttttt2
2025-01-07 17:11:12,558 DEBUG: sensor data: {'R1': 0, 'EB': 0, 'R2': 0, 'SA': 0, 'T21': 1, 'NU': 0}
2025-01-07 17:11:12,563 INFO: sending: FF:AA:E5:01->FF:FF:FF:FF (-255 dBm): 0x01 ['0xf6', '0x0', '0xff', '0xaa', '0xe5', '0x1', '0x20'] ['0x3', '0xff', '0xff', '0xff', '0xff', '0xff', '0x0'] OrderedDict({'R1': {'description': 'Rocker 1st action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'EB': {'description': 'Energy bow', 'unit': '', 'value': 'released', 'raw_value': 0}, 'R2': {'description': 'Rocker 2nd action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'SA': {'description': '2nd action', 'unit': '', 'value': 'No 2nd action', 'raw_value': 0}, 'T21': {'description': 'T21', 'unit': '', 'value': True, 'raw_value': 1}, 'NU': {'description': 'NU', 'unit': '', 'value': False, 'raw_value': 0}})
2025-01-07 17:11:12,563 DEBUG: Clearing data buffer.
2025-01-07 17:11:12,573 INFO: Sending packet
2025-01-07 17:11:12,573 DEBUG: FF:AA:E5:01->FF:FF:FF:FF (-255 dBm): 0x01 ['0xf6', '0x0', '0xff', '0xaa', '0xe5', '0x1', '0x20'] ['0x3', '0xff', '0xff', '0xff', '0xff', '0xff', '0x0'] OrderedDict({'R1': {'description': 'Rocker 1st action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'EB': {'description': 'Energy bow', 'unit': '', 'value': 'released', 'raw_value': 0}, 'R2': {'description': 'Rocker 2nd action', 'unit': '', 'value': 'Button AI', 'raw_value': 0}, 'SA': {'description': '2nd action', 'unit': '', 'value': 'No 2nd action', 'raw_value': 0}, 'T21': {'description': 'T21', 'unit': '', 'value': True, 'raw_value': 1}, 'NU': {'description': 'NU', 'unit': '', 'value': False, 'raw_value': 0}})
2025-01-07 17:11:12,674 DEBUG: 0x02 ['0x0'] [] OrderedDict()
2025-01-07 17:11:12,675 INFO: got response packet: OK

Ich hoffe das macht es klarer. Falls dennoch weiter unklar, gerne nochmal eine Info. Dann versuche ich es besser zu erläutern.

Edit noch: Ich nutze einen PTM210 - liegt da evtl. der Fehler, dass ich ein falsches EEP habe?

Grüße