-
Notifications
You must be signed in to change notification settings - Fork 933
Support for timestamp for the Heiman SOS-EF-3.0 #4539
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Conversation
Hello, This pull requests tries to add a timestamp sensor to the Heiman SOS-EF-3.0 emergency button to easily set an event. As the device does not update its IasZone cluster when the emergency button is released, I propose a very simple solution. Best regards
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #4539 +/- ##
=======================================
Coverage 92.28% 92.28%
=======================================
Files 371 372 +1
Lines 12158 12162 +4
=======================================
+ Hits 11220 11224 +4
Misses 938 938 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
Hello, attribute_converter=lambda x: dt.datetime.now().astimezone() if bool(x) else NoneIt does not change HA automations in case of the button is pressed as you have to check state of button before sending a SOS action. |
|
If the device doesn't react when the button is released, could you explain how this PR fixes this? From what I understand, the entity will update only when the underlying attribute updates. |
|
It is a way to trigger HA automation. |
Proposed change
This pull requests tries to add a timestamp sensor to the Heiman SOS-EF-3.0 emergency button to easily set an event. As the device does not update its IasZone cluster when the emergency button is released, I propose a very simple solution.
Additional information
This pull request just add a new timestamp sensor to the Heiman SOS-EF-3.0 emergency button.
Device diagnostics
{ "home_assistant": { "installation_type": "Home Assistant Container", "version": "2025.11.1", "dev": false, "hassio": false, "virtualenv": false, "python_version": "3.13.9", "docker": true, "arch": "aarch64", "timezone": "Europe/Paris", "os_name": "Linux", "os_version": "**REDACTED**", "container_arch": "aarch64", "run_as_root": true }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "after_dependencies": [ "hassio", "onboarding", "usb" ], "codeowners": [ "dmulcahey", "adminiuga", "puddly", "TheJulianJES" ], "config_flow": true, "dependencies": [ "file_upload", "homeassistant_hardware" ], "documentation": "https://www.home-assistant.io/integrations/zha", "iot_class": "local_polling", "loggers": [ "aiosqlite", "bellows", "crccheck", "pure_pcapy3", "zhaquirks", "zigpy", "zigpy_deconz", "zigpy_xbee", "zigpy_zigate", "zigpy_znp", "zha", "universal_silabs_flasher" ], "requirements": [ "zha==0.0.77" ], "usb": [ { "description": "*2652*", "known_devices": [ "slae.sh cc2652rb stick" ], "pid": "EA60", "vid": "10C4" }, { "description": "*slzb-07*", "known_devices": [ "smlight slzb-07" ], "pid": "EA60", "vid": "10C4" }, { "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus v2" ], "pid": "55D4", "vid": "1A86" }, { "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus" ], "pid": "EA60", "vid": "10C4" }, { "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ], "pid": "EA60", "vid": "10C4" }, { "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ], "pid": "7523", "vid": "1A86" }, { "description": "*zigstar*", "known_devices": [ "ZigStar Coordinators" ], "pid": "7523", "vid": "1A86" }, { "description": "*conbee*", "known_devices": [ "Conbee II" ], "pid": "0030", "vid": "1CF1" }, { "description": "*conbee*", "known_devices": [ "Conbee III" ], "pid": "6015", "vid": "0403" }, { "description": "*zigbee*", "known_devices": [ "Nortek HUSBZB-1" ], "pid": "8A2A", "vid": "10C4" }, { "description": "*zigate*", "known_devices": [ "ZiGate+" ], "pid": "6015", "vid": "0403" }, { "description": "*zigate*", "known_devices": [ "ZiGate" ], "pid": "EA60", "vid": "10C4" }, { "description": "*bv 2010/10*", "known_devices": [ "Bitron Video AV2010/10" ], "pid": "8B34", "vid": "10C4" }, { "description": "*sonoff*max*", "known_devices": [ "SONOFF Dongle Max MG24" ], "pid": "EA60", "vid": "10C4" }, { "description": "*sonoff*lite*mg21*", "known_devices": [ "sonoff zigbee dongle lite mg21" ], "pid": "EA60", "vid": "10C4" } ], "zeroconf": [ { "name": "tube*", "type": "_esphomelib._tcp.local." }, { "name": "*zigate*", "type": "_zigate-zigbee-gateway._tcp.local." }, { "name": "*zigstar*", "type": "_zigstar_gw._tcp.local." }, { "name": "uzg-01*", "type": "_uzg-01._tcp.local." }, { "name": "slzb-06*", "type": "_slzb-06._tcp.local." }, { "name": "xzg*", "type": "_xzg._tcp.local." }, { "name": "czc*", "type": "_czc._tcp.local." }, { "name": "*", "type": "_zigbee-coordinator._tcp.local." } ], "is_built_in": true, "overwrites_built_in": false }, "setup_times": { "null": { "setup": 0.0002776720211841166 }, "56726414735c3c1ac8f1371f43c13648": { "wait_import_platforms": -0.28547723701922223, "wait_base_component": -0.003234168980270624, "config_entry_setup": 18.28780186700169 } }, "data": { "version": 1, "ieee": "**REDACTED**", "nwk": "0x1E99", "manufacturer": "HEIMAN", "model": "SOS-EF-3.0", "friendly_manufacturer": "HEIMAN", "friendly_model": "SOS-EF-3.0", "name": "HEIMAN SOS-EF-3.0", "quirk_applied": true, "quirk_class": "zigpy.quirks.v2.CustomDeviceV2", "quirk_id": null, "manufacturer_code": 4619, "power_source": "Battery or Unknown", "lqi": 192, "rssi": -52, "last_seen": "2025-11-30T21:21:56.506853+00:00", "available": true, "device_type": "EndDevice", "active_coordinator": false, "node_descriptor": { "logical_type": "EndDevice", "complex_descriptor_available": false, "user_descriptor_available": false, "reserved": 0, "aps_flags": 0, "frequency_band": 8, "mac_capability_flags": 128, "manufacturer_code": 4619, "maximum_buffer_size": 82, "maximum_incoming_transfer_size": 82, "server_mask": 11264, "maximum_outgoing_transfer_size": 82, "descriptor_capability_field": 0 }, "endpoints": { "1": { "profile_id": 260, "device_type": { "name": "IAS_ZONE", "id": 1026 }, "in_clusters": [ { "cluster_id": "0x0000", "endpoint_attribute": "basic", "attributes": [ { "id": "0x0004", "name": "manufacturer", "zcl_type": "string", "value": "HEIMAN" }, { "id": "0x0005", "name": "model", "zcl_type": "string", "value": "SOS-EF-3.0" } ] }, { "cluster_id": "0x0001", "endpoint_attribute": "power", "attributes": [ { "id": "0x0021", "name": "battery_percentage_remaining", "zcl_type": "uint8", "value": 200 }, { "id": "0x0033", "name": "battery_quantity", "zcl_type": "uint8", "unsupported": true }, { "id": "0x0031", "name": "battery_size", "zcl_type": "enum8", "unsupported": true }, { "id": "0x0020", "name": "battery_voltage", "zcl_type": "uint8", "value": 32 } ] }, { "cluster_id": "0x0003", "endpoint_attribute": "identify", "attributes": [] }, { "cluster_id": "0x0500", "endpoint_attribute": "ias_zone", "attributes": [ { "id": "0x0010", "name": "cie_addr", "zcl_type": "EUI64", "value": "**REDACTED**" }, { "id": "0x0000", "name": "zone_state", "zcl_type": "enum8", "value": 1 }, { "id": "0x0002", "name": "zone_status", "zcl_type": "map16", "value": 1 }, { "id": "0x0001", "name": "zone_type", "zcl_type": "enum16", "value": 277 } ] }, { "cluster_id": "0x0b05", "endpoint_attribute": "diagnostic", "attributes": [] } ], "out_clusters": [ { "cluster_id": "0x0019", "endpoint_attribute": "ota", "attributes": [ { "id": "0x0002", "name": "current_file_version", "zcl_type": "uint32", "value": 16 } ] } ] } }, "original_signature": {}, "zha_lib_entities": { "binary_sensor": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "binary_sensor", "class_name": "IASZone", "translation_key": "ias_zone", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": null, "entity_registry_enabled_default": true, "enabled": true, "primary": true, "cluster_handlers": [ { "class_name": "IASZoneClusterHandler", "generic_id": "cluster_handler_0x0500", "endpoint_id": 1, "cluster": { "id": 1280, "name": "IAS Zone", "type": "server" }, "id": "1:0x0500", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "attribute_name": "zone_status" }, "state": { "class_name": "IASZone", "available": true, "state": true } } ], "button": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "button", "class_name": "IdentifyButton", "translation_key": null, "translation_placeholders": null, "device_class": "identify", "state_class": null, "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "IdentifyClusterHandler", "generic_id": "cluster_handler_0x0003", "endpoint_id": 1, "cluster": { "id": 3, "name": "Identify", "type": "server" }, "id": "1:0x0003", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "command": "identify", "args": [ 5 ], "kwargs": {} }, "state": { "class_name": "IdentifyButton", "available": true } } ], "sensor": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "LQISensor", "translation_key": "lqi", "translation_placeholders": null, "device_class": null, "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", "endpoint_id": 1, "cluster": { "id": 0, "name": "Basic", "type": "server" }, "id": "1:0x0000", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": null }, "state": { "class_name": "LQISensor", "available": true, "state": 192 } }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "RSSISensor", "translation_key": "rssi", "translation_placeholders": null, "device_class": "signal_strength", "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", "endpoint_id": 1, "cluster": { "id": 0, "name": "Basic", "type": "server" }, "id": "1:0x0000", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": "dBm" }, "state": { "class_name": "RSSISensor", "available": true, "state": -52 } }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "Battery", "translation_key": null, "translation_placeholders": null, "device_class": "battery", "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "PowerConfigurationClusterHandler", "generic_id": "cluster_handler_0x0001", "endpoint_id": 1, "cluster": { "id": 1, "name": "Power Configuration", "type": "server" }, "id": "1:0x0001", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "battery_voltage" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": 0, "unit": "%" }, "state": { "class_name": "Battery", "available": true, "state": 100.0, "battery_voltage": 3.2 }, "extra_state_attributes": [ "battery_quantity", "battery_size", "battery_voltage" ] }, { "info_object": { "fallback_name": "Timestamp", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "Sensor", "translation_key": null, "translation_placeholders": null, "device_class": "timestamp", "state_class": "measurement", "entity_category": null, "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "IASZoneClusterHandler", "generic_id": "cluster_handler_0x0500", "endpoint_id": 1, "cluster": { "id": 1280, "name": "IAS Zone", "type": "server" }, "id": "1:0x0500", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": null }, "state": { "class_name": "Sensor", "available": true, "state": "2025-11-30T22:30:37.699702+01:00" } } ], "update": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "update", "class_name": "FirmwareUpdateEntity", "translation_key": null, "translation_placeholders": null, "device_class": "firmware", "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "OtaClientClusterHandler", "generic_id": "cluster_handler_0x0019_client", "endpoint_id": 1, "cluster": { "id": 25, "name": "Ota", "type": "client" }, "id": "1:0x0019_client", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "supported_features": 7 }, "state": { "class_name": "FirmwareUpdateEntity", "available": true, "installed_version": "0x00000010", "in_progress": false, "update_percentage": null, "latest_version": null, "release_summary": null, "release_notes": null, "release_url": null } } ] }, "neighbors": [], "routes": [] }, "issues": [] }Checklist
pre-commitchecks pass / the code has been formatted using Black