According to z2m it should work.
Mine looks different but recognised as HOBEIAN ZG-102ZM
It detects open/close but no entity for acceleration or vibration.
According to z2m it should work.
Mine looks different but recognised as HOBEIAN ZG-102ZM
It detects open/close but no entity for acceleration or vibration.
Same here, with ZHA it only shows the binary sensor (open/close) and not the vibration one. I’ll try it later with z2m
You could try it with any magnet. ![]()
Does it look the same as on the picture I posted?
Hello. Did you get it working? I found that when I “vibrate” the sensor, I have the following line in the logs, which suggests the vibration message is received by ZHA doesn’t know what to do with it.
WARNING (MainThread) [zigpy.listeners] Matcher checkin() and command ZCLHeader(frame_control=FrameControl<0x09>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=0, direction=<Direction.Server_to_Client: 1>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=46, command_id=2, *direction=<Direction.Server_to_Client: 1>) b'\x00.\x01\x04\x00\x01\x01' are incompatible
and exactly 6 seconds later, this line which I guess is the “end of vibration” message
WARNING (MainThread) [zigpy.listeners] Matcher checkin() and command ZCLHeader(frame_control=FrameControl<0x09>(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=0, direction=<Direction.Server_to_Client: 1>, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=47, command_id=2, *direction=<Direction.Server_to_Client: 1>) b'\x00/\x01\x04\x00\x01\x00' are incompatible
I also noticed this device does not use any zhaquirks.
Nope, it still works like contact sensor only.
Not explicit quirk means that it uses default ZHA collection.
While waiting for a developer to take an interest in this sensor, I create a piece of YAML (to add to configuration.yaml) to create the missing vibration sensor:
# required to create triggers on system_log_event
system_log:
fire_event: true
template:
- binary_sensor:
name: Vibrate (broken)
unique_id: broken_vibrate_sensor
device_class: vibration
state: |
{{ "\\x01\\x04\\x00\\x01\\x01' are incompatible" in trigger.event.data.message[0] }}
conditions:
- condition: template
value_template: |
{{ "Matcher checkin() and command ZCLHeader" in trigger.event.data.message[0] }}
- condition: template
value_template: |
{{ "\\x01\\x04\\x00\\x01\\x0" in trigger.event.data.message[0] }}
triggers:
- trigger: event
event_type: system_log_event
event_data:
name: zigpy.listeners
level: WARNING
So far, it works all the time
That’s pretty cool approach, great idea.
I have set in configuration.yaml
logger:
default: warning
logs:
zigpy: debug
zigpy.listeners: debug
to obtain warning messages from ZHA. But nothing arrives from ZG-102ZM. How to enable detailed messaging from ZHA?
It should not need to set the log level to debug, it’s a warning so it’s already caught by the default log level. Do you see it in the logs tab (Settings → System → Logs) ?
![]()
If not, maybe our devices are actually different (even though I have exactly the same name “ZG-102ZM by HOBEIAN” and it’s completely identical to the image you posted), or maybe this “Matcher checkin() and command ZCLHeader” bug was patched in the last version (I’m running 2025.8.2 instead of 2025.9.X)
Hi,
Any solution for this device using ZHA? In my case I am not able to see any working in Logs.
Still no. ![]()
Hi.
I built a custom-quirk for this.
Well Claude code and I did…
It’s working just fine for me, but please try it out.
Once fully verified I will make a PR to have it included in zigpy and thereby ZHA.
Works perfectly on my setup, so I created the PR.
Hopefully at some point this will be merged and thereby fixed for all.
But until then, if you wish to try it, here is how:
If you haven’t used custom quirks before, you need to configure ZHA to load them:
custom_zha_quirks in your HA config directory:/config/custom_zha_quirks/<your-config-path>/custom_zha_quirks/configuration.yaml:zha:
custom_quirks_path: /config/custom_zha_quirks/
zg_102zm.py and place it in your custom_zha_quirks folder.After pairing with the quirk, the device should expose:
| Entity | Type | Description |
|---|---|---|
| Vibration | Binary sensor | Vibration detection |
| Contact | Binary sensor | Door/window open/close |
| Battery | Sensor | Battery percentage (1× CR2032) |
| Sensitivity level | Number | Vibration sensitivity (1–50) |
The default IAS Zone entity is disabled by default since it is redundant.
Minor issue found and corrected in the quirk.
If you already downloaded it, please update.
Visible difference is that the old quirk would wait for the device to time-out on pairing-mode while the updated quirk stops pairng mode on the device when successfully paired with HA.