Skip to content

z2m converter: eco2/voc/aqi always null — 0xFC01 collides with built-in manuSpecificLegrandDevices #71

Description

@pawelbura

Summary

Using z2m/aircube.js, temperature/humidity/brightness work, but eco2, voc, aqi are always null.

Root cause

Cluster 0xFC01 is already a built-in cluster in zigbee-herdsman: manuSpecificLegrandDevices.
The AirCube sends these attribute reports without a manufacturer code (manufacturerSpecific: false),
so herdsman resolves the raw 0xFC01 to its built-in manuSpecificLegrandDevices definition.
Zigbee2MQTT then dispatches fromZigbee converters by the resolved cluster name, not the number —
so cluster: CUSTOM_CLUSTER_ID (0xFC01 / '64513') never matches, and the values stay null.

Evidence (Z2M debug log)

The device sends the data correctly (attrs 0/1/2 of cluster 64513):
Received Zigbee message from 'AirCube', type 'attributeReport', cluster 'manuSpecificLegrandDevices', data '{"0":751}' from endpoint 10
No converter available for 'AirCube' with cluster 'manuSpecificLegrandDevices' and type 'attributeReport' and data '{"0":751}'
... '{"1":182}' ... '{"2":49}' ...

Fix

In fzAirCubeAirQuality, set cluster: 'manuSpecificLegrandDevices' (instead of the numeric id).
The convert body is unchanged — the Legrand cluster doesn't define attrs 0/1/2, so msg.data
keeps numeric keys and the existing hasOwnProperty(0/1/2) checks work.
Verified on hardware: eco2 751 ppm, voc 182 ppb, aqi 49. Same applies to aircube.mjs.

A cleaner long-term fix would be to disambiguate the manufacturer-specific cluster — either send it
with a manufacturer code from firmware, or declare a private cluster via addCustomCluster() in the
converter so herdsman parses it under a unique name.

Relation to #57

Distinct from #57 (converter failing to load on Z2M 2.11.0). Here the converter loads fine —
temp/humidity/brightness work — but air-quality values stay null due to this cluster-name collision.
Affects 1.x, and would still bite on 2.x after #57 is resolved.

Environment

  • Zigbee2MQTT 1.39.1
  • zigbee-herdsman 0.55.3 ← this is where 0xFC01 → manuSpecificLegrandDevices is defined
  • zigbee-herdsman-converters 19.72.0
  • Coordinator: Sonoff ZBDongle-E, EmberZNet 7.4.4 / ember (EZSP v13)

Note: this is a Zigbee2MQTT/zigbee-herdsman dispatch behaviour, not a device-firmware issue.
The coordinator only relays the raw numeric cluster id (0xFC01); herdsman resolves the name.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions