Koenkk / Koenkk/zigbee2mqtt

HS2FD-EF1-3.0 wall_mounted_table set still fails with INVALID_DATA_TYPE (re-report of #27975)

Open
#32,586 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

problem
Dominant language
TypeScript
Stars
15.7k
Forks
2k
Avg merge
18h 55m
Merged PRs (30d)
35

Description

What happened?

This is a re-report of #27975, which appears to have been auto-closed due to inactivity (stale bot) rather than being fixed — the exact same bug is still fully reproducible on the current stable release.

Setting wall_mounted_table fails with INVALID_DATA_TYPE. Tried multiple values within the documented valid range:

{"wall_mounted_table": "-2000,2000,3000,1550"}
{"wall_mounted_table": "-2000,2000,3000,1500"}
{"wall_mounted_table": "-1900,1900,2900,1550"}

All fail the same way. installation_method was confirmed set to WallMounted before attempting the write.

Since the field's own documented range requires -2000 ≤ X1 ≤ 0, X1 is always negative or zero for any valid wall-mounted configuration. If negative-value encoding is what triggers INVALID_DATA_TYPE, wall_mounted_table cannot currently be set to any valid value at all for wall-mounted installs — the feature is effectively non-functional, not just buggy for edge cases.

Note: in the original report the cluster was logged as RadarSensorHeiman; on my setup (converters 26.76.0) it's logged as heimanClusterRadar, so the cluster/converter appears to have been renamed at some point. The failure mode and byte structure are otherwise identical, so this looks like the same underlying bug persisting through the rename.

Debug log:
[2026-07-17 21:50:39] z2m: Publish 'set' 'wall_mounted_table' to 'Heiman Fall Detector 4841' failed: 'Error: ZCL command 0x7cc6b6fffeea4841/1 heimanClusterRadar.write({"wallMountedTable":{"type":"Buffer","data":[48,248,208,7,184,11,220,5]}}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":false,"direction":0,"reservedBits":0,"manufacturerCode":4619,"writeUndiv":false}) failed (Status 'INVALID_DATA_TYPE')'

What did you expect to happen?

Setting wall_mounted_table to a value within the documented range (e.g. -2000,2000,3000,1550) should succeed without a data type error, and the read-back value should match what was set.

How to reproduce it (minimal and precise)
  1. Pair a Heiman HS2FD-EF1-3.0 (Fall Detection Sensor) via Zigbee2MQTT.
  2. In the Z2M frontend, set installation_method to WallMounted.
  3. Attempt to set wall_mounted_table to any value within the documented range, e.g.:
    {"wall_mounted_table": "-2000,2000,3000,1550"}
  4. Observe the set operation fails with a ZCL INVALID_DATA_TYPE error.
Zigbee2MQTT version

2.12.1

Adapter firmware version

7.4.3 [GA]

Adapter

EmberZNet-based coordinator (Silicon Labs EFR32, stack revision 7.4.3 [GA]) - ZB-GW03 (TCP Bridge)

Setup

Plain Docker container on x86-64 Debian.
uname -a: #1 SMP PREEMPT_DYNAMIC Debian 6.12.88-1 (2026-05-15) - 6.12.88+deb13-amd64 - x64
CPU: Intel(R) N150 (x4), RAM: 15774 MB

Device database.db entry

{"id":4,"type":"Router","ieeeAddr":"0x7cc6b6fffeea4841","nwkAddr":60816,"manufId":4619,"manufName":"HEIMAN","powerSource":"Mains (single phase)","modelId":"HS2FD-EF1-3.0","epList":[1,242],"endpoints":{"1":{"profId":260,"epId":1,"devId":263,"inClusterList":[0,3,1030,2821,64651],"outClusterList":[0,3,25],"clusters":{"61441":{"attributes":{"61441":1}},"61442":{"attributes":{"61442":2}},"61446":{"attributes":{"61446":0}},"61447":{"attributes":{"61447":0}},"genBasic":{"attributes":{"modelId":"HS2FD-EF1-3.0","manufacturerName":"HEIMAN","powerSource":1,"zclVersion":3,"appVersion":17,"stackVersion":2,"hwVersion":16,"dateCode":"20240114"}},"heimanClusterRadar":{"attributes":{"cellMountedTable":"0\ufffd\ufffd\u00070\ufffd\ufffd\u0007\ufffd\n","wallMountedTable":"0\ufffd\ufffd\u0007\ufffd\u000b\ufffd\u0005","subRegionIsolationTable":"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","sensitivity":1,"installationMethod":0,"enableIndicator":1,"enableSubRegionIsolation":0}},"msOccupancySensing":{"attributes":{"occupancy":3}}},"binds":[{"cluster":1030,"type":"endpoint","deviceIeeeAddress":"0x040d84fffe58431b","endpointID":1},{"cluster":64651,"type":"endpoint","deviceIeeeAddress":"0x040d84fffe58431b","endpointID":1}],"configuredReportings":[{"cluster":1030,"attrId":0,"minRepIntval":0,"maxRepIntval":3600,"repChange":0}],"meta":{}},"242":{"profId":41440,"epId":242,"devId":102,"inClusterList":[33],"outClusterList":[33],"clusters":{},"binds":[],"configuredReportings":[],"meta":{}}},"appVersion":17,"stackVersion":2,"hwVersion":16,"dateCode":"20240114","zclVersion":3,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{"configured":"0.0.0"},"lastSeen":1784293245881}

Debug log

No response

Notes

This bug makes wall_mounted_table effectively unusable for any wall-mounted install, since the field's own valid range (-2000 ≤ X1 ≤ 0) requires X1 to always be negative or zero.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Locate the HS2FD-EF1-3.0 converter and the heimanClusterRadar wallMountedTable write path; compare the documented range and logged Buffer/ZCL command with the device's recorded attributes. Reproduce the set operation using the listed wall-mounted values, then verify that a valid value writes without INVALID_DATA_TYPE and reads back correctly.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, embedded-iot
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.