Schneider switch mqtt binary sensor unable to read action

I recently change from zha to z2m to get a unsupported device running.
It is the Schneider Odace S520531 zigbee switch.
S520531_IOP-def_SE_CL_369

I can see it working in the Zigbee2MQTT web interface. But in MQTT the only entity is the battery.
Here is what a message sent by the device look like when i press the button:

zigbee2mqtt/switch_1st_floor
  2 dernier(s) message(s) reçu(s)
Received 18:45:00
QoS: 0
Payload: {"action":"on_top","battery":90,"linkquality":98}

Received 18:46:47
QoS: 0
Payload: {"action":"on_bottom","battery":90,"linkquality":87}

My goal is to set a MQTT binary sensor according to the documentation : https://www.home-assistant.io/integrations/binary_sensor.mqtt/

Here is the part of the config file for this device :

mqtt:
  - binary_sensor:
      name: switch_1st_floor
      state_topic: "zigbee2mqtt/switch_1st_floor/action"
      payload_on: top_on
      payload_off: top_off
      qos: 0

I also tried with things like payload_on: “top_on” or define the device with more details (identifiers, via device …)

The binary sensor is always in unknown mode
I can’t figure out why it doesn’t work. I’m new to MQTT and doesn’t know the best way to debug.

What am i missing here ?

beside of that, the switch is very nice !

My bad.
The topic name is “on_top” and i wrote “top_on” …

In conclusion, the Schneider S520531 works very well as long as you use z2m.

Here is the final configuration if you use it in 2 gang mode (see schneider documentation for switching from 1 gang to 2 gang mode) :

mqtt:
  - binary_sensor:
      name: interrupteur_rdc_1
      state_topic: "zigbee2mqtt/interrupteur_rdc" #change for your topic name
      value_template: "{{ value_json.action }}"
      payload_on: "on_top"
      payload_off: "off_top"
      qos: 0
  - binary_sensor:
      name: interrupteur_rdc_2
      state_topic: "zigbee2mqtt/interrupteur_rdc" #change for your topic name
      value_template: "{{ value_json.action }}"
      payload_on: "on_bottom"
      payload_off: "off_bottom"
      qos: 0

Or in 1 gang mode :

mqtt:
  - binary_sensor:
      name: interrupteur_rdc
      state_topic: "zigbee2mqtt/interrupteur_rdc" #change for your topic name
      value_template: "{{ value_json.action }}"
      payload_on: "on_top"
      payload_off: "off_top"
      qos: 0