[Enocean] Can't operate Eltako actors (FD62NPN/FL62NP)

I have a problem setting up Enocean in HA with two Eltako actors (one dimmer FD62NPN-230V and one switch FL62NP-230V). The first is connected to the dining room light (dimmable), the second to the kitchen light (not dimmable). I am using an Enocean USB300 USB dongle directly connected to my HASSOS machine. I have set the debug logging level and I can see packets coming in from a separate Enocean wall switch (that I don’t want to connect to HA). That is, I think the dongle is working properly in HA.

Example packets when switching both lights on and off:

2021-12-04 07:54:54 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-68 dBm): 0x01 ['0xf6', '0x30', '0x0', '0x3e', '0x6', '0xff', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x44', '0x0'] OrderedDict()
2021-12-04 07:54:54 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-67 dBm): 0x01 ['0xf6', '0x0', '0x0', '0x3e', '0x6', '0xff', '0x20'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x43', '0x0'] OrderedDict()
2021-12-04 07:54:55 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 04:14:7F:22->FF:FF:FF:FF (-60 dBm): 0x01 ['0xf6', '0x70', '0x4', '0x14', '0x7f', '0x22', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3c', '0x0'] OrderedDict()
2021-12-04 07:54:55 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 04:14:7F:22->FF:FF:FF:FF (-60 dBm): 0x01 ['0xa5', '0x2', '0x10', '0x0', '0x9', '0x4', '0x14', '0x7f', '0x22', '0x0'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3c', '0x0'] OrderedDict()
2021-12-04 07:54:57 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-61 dBm): 0x01 ['0xf6', '0x10', '0x0', '0x3e', '0x6', '0xff', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3d', '0x0'] OrderedDict()
2021-12-04 07:54:57 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-61 dBm): 0x01 ['0xf6', '0x0', '0x0', '0x3e', '0x6', '0xff', '0x20'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3d', '0x0'] OrderedDict()
2021-12-04 07:54:58 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 04:14:7F:22->FF:FF:FF:FF (-60 dBm): 0x01 ['0xf6', '0x50', '0x4', '0x14', '0x7f', '0x22', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3c', '0x0'] OrderedDict()
2021-12-04 07:54:59 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 04:14:7F:22->FF:FF:FF:FF (-61 dBm): 0x01 ['0xa5', '0x2', '0x0', '0x0', '0x8', '0x4', '0x14', '0x7f', '0x22', '0x0'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3d', '0x0'] OrderedDict()
2021-12-04 07:54:59 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-65 dBm): 0x01 ['0xf6', '0x70', '0x0', '0x3e', '0x6', '0xff', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x41', '0x0'] OrderedDict()
2021-12-04 07:54:59 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-67 dBm): 0x01 ['0xf6', '0x0', '0x0', '0x3e', '0x6', '0xff', '0x20'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x43', '0x0'] OrderedDict()
2021-12-04 07:54:59 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 04:14:B2:66->FF:FF:FF:FF (-58 dBm): 0x01 ['0xf6', '0x70', '0x4', '0x14', '0xb2', '0x66', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3a', '0x0'] OrderedDict()
2021-12-04 07:55:00 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-65 dBm): 0x01 ['0xf6', '0x50', '0x0', '0x3e', '0x6', '0xff', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x41', '0x0'] OrderedDict()
2021-12-04 07:55:00 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 00:3E:06:FF->FF:FF:FF:FF (-65 dBm): 0x01 ['0xf6', '0x0', '0x0', '0x3e', '0x6', '0xff', '0x20'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x41', '0x0'] OrderedDict()
2021-12-04 07:55:01 DEBUG (Thread-3) [homeassistant.components.enocean.dongle] Received radio packet: 04:14:B2:66->FF:FF:FF:FF (-60 dBm): 0x01 ['0xf6', '0x50', '0x4', '0x14', '0xb2', '0x66', '0x30'] ['0x0', '0xff', '0xff', '0xff', '0xff', '0x3c', '0x0'] OrderedDict()

I’ve successfully trained in the dongle and both actors using a python script that I found here: Enocean switch - #24 by cgrueter. I’ve figured out the base id of the dongle and added “1” and “2” to it to obtain sender ids for training in the two actors. I have confirmed that controlling both actors works using a slightly modified version of the same script (simulating single button presses to turn on/off the light).

However, configuring both actors in HA using the same destination and sender ids doesn’t work. Although packets from the wall switch appear in the log, the entity doesn’t toggle when I press the Enocean switch. Only one of them (why no idea) toggles when I flip the local physical switch connected to the Eltako. Most importantly, I can’t switch on/off the lights from HA.

This is my configuration:

light:
  - platform: enocean
    id: [0x04,0x14,0x7F,0x22]
    sender_id: [0xFF,0xE3,0x01,0x82]
    name: diningroom_light
  - platform: enocean
    id: [0x04,0x14,0xB2,0x66]
    sender_id: [0xFF,0xE3,0x01,0x81]
    name: kitchen_light

In the above script, this is how the packets are created that allow me to toggle the light:

def assemble_packet_press_a_1():
    return Packet.create(packet_type=PACKET.RADIO, rorg=0xF6, rorg_func=0x02, rorg_type=0x02, destination=destination_id, sender=sender_id, R1=0, EB=1, R2=0, SA=0, T21=True, NU=True)

In contrast, HA seems to do the following:

    def turn_on(self, **kwargs):
        """Turn the light source on or sets a specific dimmer value."""
        if (brightness := kwargs.get(ATTR_BRIGHTNESS)) is not None:
            self._brightness = brightness

        bval = math.floor(self._brightness / 256.0 * 100.0)
        if bval == 0:
            bval = 1
        command = [0xA5, 0x02, bval, 0x01, 0x09]
        command.extend(self._sender_id)
        command.extend([0x00])
        self.send_command(command, [], 0x01)
        self._on_state = True

The separate wall switch also uses the F6 RORG (in contrast to HA that uses A5) but not sure if this could be the reason for the problems I encounter.

Any ideas/suggestions for how to get this working?

UPDATE (04 Dec):
When I add a binary_sensor for the separate enocean wall switch I don’t see any change in the entity/logbook entry when I press it (not toggling when I flick the switch):

binary_sensor:
  - platform: enocean
    id: [0x00,0x3E,0x06,0xFF]
    name: diningroom_kitchen_switch

UPDATE 2:
I’ve been reading into the official Enocean protocol and packet specifications, looking at tons of logfiles, testing different teaching in strategies all day. And I came to the conclusion that the problem is that the HA enocean implementation is simply not compatible with the Eltako actors. I have already started debugging with a custom enocean component (copy of the original) that I will now continue to modify to send and analyse received packets geared to the Eltako actors. Let’s see - I already managed to get the status of the kitchen actor and have the HA entity toggle it’s state accordingly. Let’s see…

5 Likes

Did you ever solved it?
I have a FL62-230V and was thinking to integrate this into HA

Not fully, unfortunately. I can switch both lights from HA but the status of the non-dimmable light in the kitchen is not properly sent back to HA, i.e. I can’t see whether the light is on or off.

For the dimmable light the situation is a bit different and, depending on how you look at it, worse: In contrast to the kitchen, I can see the on/off status in HA, which is nice. But if I switch on the light in HA the device is “stuck” and cannot be switched off using the normal wall switches anymore. Also, switching the light using HA results in a lower brightness setting than switching the light with the wall switch.

So, overall, it kind of works but unfortunately not fully like all other 20+ lights that I integrated into HA…

Actually the actuators send back their current state. I had to extend the enocean plugin (and make it a custom component). I just simply changed the value_changes function of the light.py file the following way:

    def value_changed(self, packet):
        """Update the internal state of this device.

        Dimmer devices like Eltako FUD61 send telegram in different RORGs.
        We only care about the 4BS (0xA5).
        """
        
        _LOGGER.debug("enocean: Got message: %s",packet)
        if packet.data[0] == 0xF6:
            val = packet.data[1]
            self._on_state = bool(val >= 0x70)
            self.schedule_update_ha_state()

I could be your actor is behaving differently (sending different package), that is why there is the debug output to monitor it)

1 Like

Thanks a lot for your reply.

It’s been a very long time since I last looked into this (my original message dates back to Dec 2021).

I had used the debug functionality intensively at the time in combination with a custom enocean component. I gave up at some point and I believe it was when I realised that the enocean implementation/integration is outdated.

This has worked like a charm - I now see the status at least of the non-dimming Eltako in HomeAssistant. Thanks a lot!