claudegel / sinope-zha

This is a custom quirks for sinope zigbee devices for testing before it is added to zha-device-handlers. It also explain how to setup those quirks in Home Assistant to use and test them before they are merged in zha-device-handlers
GNU General Public License v2.0
26 stars 5 forks source link

DM2550ZB Change phase #14

Open nickb24 opened 9 months ago

nickb24 commented 9 months ago

The DM2550ZB is supposed to have the ability to change the phase mode. According to the manual "The DM2550ZB dimmer is configured in reverse phase by default to ensure more compatibility with most LED, incandescent and halogen bulbs. If a flickering problem persists, it is possible to change the control mode in the dimmer settings on the Neviweb app."

What is the best way to help discover this missing attribute?

claudegel commented 9 months ago

Please install zha-toolkit via HACS. then use service zha_toolkit.scan_device in devtool/services

service: zha_toolkit.scan_device
data:
  ieee: 00:0d:6f:00:05:7d:2d:34 ## your dimmer ieee
  endpoint: 1
  event_success: my_read_success_trigger_event
  event_fail: my_read_fail_trigger_event
  event_done: my_read_done_trigger_event

This will scan all cluster of the device and create a file in config/scans/ directory. Send the file to me so I can check which attribute could be the one we need. you can copy paste the file here

claudegel commented 9 months ago

If we didn't get the attribute then install my sinope-zha qwirck by following this documentation: https://github.com/claudegel/sinope-zha Once installed let me know I'll send you an updated light.py file which contain a list of unknown attributes for cluster 0xff01 it is probably attribute 0x0001 or 0x0012 or 0x0013

nickb24 commented 9 months ago

Here is the file: { "ieee": "50:0b:91:40:00:04:d2:4c", "nwk": "0xe651", "model": "SW2500ZB", "manufacturer": "Sinope Technologies", "manufacturer_id": "0x4508", "endpoints": [ { "id": 1, "device_type": "0x0100", "profile": "0x0104", "in_clusters": { "0x0000": { "cluster_id": "0x0000", "title": "Basic", "name": "basic", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "zcl_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 2 }, "0x0001": { "attribute_id": "0x0001", "attribute_name": "app_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 132 }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "stack_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0003": { "attribute_id": "0x0003", "attribute_name": "hw_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0004": { "attribute_id": "0x0004", "attribute_name": "manufacturer", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508 }, "0x0005": { "attribute_id": "0x0005", "attribute_name": "model", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508 }, "0x0007": { "attribute_id": "0x0007", "attribute_name": "power_source", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508 }, "0x0010": { "attribute_id": "0x0010", "attribute_name": "location_desc", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508 }, "0x0011": { "attribute_id": "0x0011", "attribute_name": "physical_env", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x4000": { "attribute_id": "0x4000", "attribute_name": "sw_build_id", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": "539" }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "reset_fact_default", "command_arguments": "<class 'zigpy.zcl.foundation.reset_fact_default'>" } }, "commands_generated": {} }, "0x0002": { "cluster_id": "0x0002", "title": "Device Temperature", "name": "device_temperature", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "current_temperature", "value_type": [ "0x29", "int16s", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 31 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0x0003": { "cluster_id": "0x0003", "title": "Identify", "name": "identify", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "identify_time", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "identify", "command_arguments": "<class 'zigpy.zcl.foundation.identify'>" }, "0x01": { "command_id": "0x01", "command_name": "identify_query", "command_arguments": "<class 'zigpy.zcl.foundation.identify_query'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "identify_query_response", "command_args": "<class 'zigpy.zcl.foundation.identify_query_response'>" } } }, "0x0004": { "cluster_id": "0x0004", "title": "Groups", "name": "groups", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "name_support", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "add", "command_arguments": "<class 'zigpy.zcl.foundation.add'>" }, "0x01": { "command_id": "0x01", "command_name": "view", "command_arguments": "<class 'zigpy.zcl.foundation.view'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership", "command_arguments": "<class 'zigpy.zcl.foundation.get_membership'>" }, "0x03": { "command_id": "0x03", "command_name": "remove", "command_arguments": "<class 'zigpy.zcl.foundation.remove'>" }, "0x04": { "command_id": "0x04", "command_name": "remove_all", "command_arguments": "<class 'zigpy.zcl.foundation.remove_all'>" }, "0x05": { "command_id": "0x05", "command_name": "add_if_identifying", "command_arguments": "<class 'zigpy.zcl.foundation.add_if_identifying'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "add_response", "command_args": "<class 'zigpy.zcl.foundation.add_response'>" }, "0x01": { "command_id": "0x01", "command_name": "view_response", "command_args": "<class 'zigpy.zcl.foundation.view_response'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership_response", "command_args": "<class 'zigpy.zcl.foundation.get_membership_response'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_response", "command_args": "<class 'zigpy.zcl.foundation.remove_response'>" } } }, "0x0005": { "cluster_id": "0x0005", "title": "Scenes", "name": "scenes", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "count", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0001": { "attribute_id": "0x0001", "attribute_name": "current_scene", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "current_group", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0003": { "attribute_id": "0x0003", "attribute_name": "scene_valid", "value_type": [ "0x10", "Bool", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0004": { "attribute_id": "0x0004", "attribute_name": "name_support", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "add", "command_arguments": "<class 'zigpy.zcl.foundation.add'>" }, "0x01": { "command_id": "0x01", "command_name": "view", "command_arguments": "<class 'zigpy.zcl.foundation.view'>" }, "0x02": { "command_id": "0x02", "command_name": "remove", "command_arguments": "<class 'zigpy.zcl.foundation.remove'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_all", "command_arguments": "<class 'zigpy.zcl.foundation.remove_all'>" }, "0x04": { "command_id": "0x04", "command_name": "store", "command_arguments": "<class 'zigpy.zcl.foundation.store'>" }, "0x05": { "command_id": "0x05", "command_name": "recall", "command_arguments": "<class 'zigpy.zcl.foundation.recall'>" }, "0x06": { "command_id": "0x06", "command_name": "get_scene_membership", "command_arguments": "<class 'zigpy.zcl.foundation.get_scene_membership'>" }, "0x40": { "command_id": "0x40", "command_name": "enhanced_add", "command_arguments": "<class 'zigpy.zcl.foundation.enhanced_add'>" }, "0x41": { "command_id": "0x41", "command_name": "enhanced_view", "command_arguments": "<class 'zigpy.zcl.foundation.enhanced_view'>" }, "0x42": { "command_id": "0x42", "command_name": "copy", "command_arguments": "<class 'zigpy.zcl.foundation.copy'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "add_scene_response", "command_args": "<class 'zigpy.zcl.foundation.add_scene_response'>" }, "0x01": { "command_id": "0x01", "command_name": "view_response", "command_args": "<class 'zigpy.zcl.foundation.view_response'>" }, "0x02": { "command_id": "0x02", "command_name": "remove_scene_response", "command_args": "<class 'zigpy.zcl.foundation.remove_scene_response'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_all_scenes_response", "command_args": "<class 'zigpy.zcl.foundation.remove_all_scenes_response'>" }, "0x04": { "command_id": "0x04", "command_name": "store_scene_response", "command_args": "<class 'zigpy.zcl.foundation.store_scene_response'>" }, "0x06": { "command_id": "0x06", "command_name": "get_scene_membership_response", "command_args": "<class 'zigpy.zcl.foundation.get_scene_membership_response'>" }, "0x40": { "command_id": "0x40", "command_name": "enhanced_add_response", "command_args": "<class 'zigpy.zcl.foundation.enhanced_add_response'>" }, "0x41": { "command_id": "0x41", "command_name": "enhanced_view_response", "command_args": "<class 'zigpy.zcl.foundation.enhanced_view_response'>" }, "0x42": { "command_id": "0x42", "command_name": "copy_response", "command_args": "<class 'zigpy.zcl.foundation.copy_response'>" } } }, "0x0006": { "cluster_id": "0x0006", "title": "On/Off", "name": "on_off", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "on_off", "value_type": [ "0x10", "Bool", "Discrete" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 0 }, "0x4001": { "attribute_id": "0x4001", "attribute_name": "on_time", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x4002": { "attribute_id": "0x4002", "attribute_name": "off_wait_time", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "off", "command_arguments": "<class 'zigpy.zcl.foundation.off'>" }, "0x01": { "command_id": "0x01", "command_name": "on", "command_arguments": "<class 'zigpy.zcl.foundation.on'>" }, "0x02": { "command_id": "0x02", "command_name": "toggle", "command_arguments": "<class 'zigpy.zcl.foundation.toggle'>" }, "0x42": { "command_id": "0x42", "command_name": "on_with_timed_off", "command_arguments": "<class 'zigpy.zcl.foundation.on_with_timed_off'>" } }, "commands_generated": {} }, "0x0702": { "cluster_id": "0x0702", "title": "Metering", "name": "smartenergy_metering", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "current_summ_delivered", "value_type": [ "0x25", "uint48_t", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 0 }, "0x0200": { "attribute_id": "0x0200", "attribute_name": "status", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0300": { "attribute_id": "0x0300", "attribute_name": "unit_of_measure", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0301": { "attribute_id": "0x0301", "attribute_name": "multiplier", "value_type": [ "0x22", "uint24_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0302": { "attribute_id": "0x0302", "attribute_name": "divisor", "value_type": [ "0x22", "uint24_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1000 }, "0x0303": { "attribute_id": "0x0303", "attribute_name": "summation_formatting", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 193 }, "0x0306": { "attribute_id": "0x0306", "attribute_name": "metering_device_type", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "65533", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0x0b05": { "cluster_id": "0x0b05", "title": "Diagnostic", "name": "diagnostic", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "number_of_resets", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 13 }, "0x0001": { "attribute_id": "0x0001", "attribute_name": "persistent_memory_writes", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 912 }, "0x011b": { "attribute_id": "0x011b", "attribute_name": "average_mac_retry_per_aps_message_sent", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x011c": { "attribute_id": "0x011c", "attribute_name": "last_message_lqi", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 255 }, "0x011d": { "attribute_id": "0x011d", "attribute_name": "last_message_rssi", "value_type": [ "0x28", "int8s", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": -41 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0xff01": { "cluster_id": "0xff01", "title": "Sinopé Technologies Manufacturer specific", "name": "sinope_manufacturer_specific", "attributes": { "0x0001": { "attribute_id": "0x0001", "attribute_name": "1", "value_type": [ "0x10", "Bool", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 1 }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "keypad_lockout", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x0003": { "attribute_id": "0x0003", "attribute_name": "3", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 539 }, "0x0004": { "attribute_id": "0x0004", "attribute_name": "firmware_version", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": "539" }, "0x0050": { "attribute_id": "0x0050", "attribute_name": "on_led_color", "value_type": [ "0x22", "uint24_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 16776960 }, "0x0051": { "attribute_id": "0x0051", "attribute_name": "off_led_color", "value_type": [ "0x22", "uint24_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 255 }, "0x0052": { "attribute_id": "0x0052", "attribute_name": "on_led_intensity", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 50 }, "0x0053": { "attribute_id": "0x0053", "attribute_name": "off_led_intensity", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x0054": { "attribute_id": "0x0054", "attribute_name": "action_report", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 18 }, "0x0080": { "attribute_id": "0x0080", "attribute_name": "128", "value_type": [ "0x23", "uint32_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 16908288 }, "0x0090": { "attribute_id": "0x0090", "attribute_name": "144", "value_type": [ "0x23", "uint32_t", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 11087 }, "0x00a0": { "attribute_id": "0x00a0", "attribute_name": "timer", "value_type": [ "0x23", "uint32_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x00a1": { "attribute_id": "0x00a1", "attribute_name": "161", "value_type": [ "0x23", "uint32_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0119": { "attribute_id": "0x0119", "attribute_name": "connected_load", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x0200": { "attribute_id": "0x0200", "attribute_name": "unknown", "value_type": [ "0x1b", "bitmap32", "Discrete" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x01": { "command_id": "0x01", "command_name": "1", "command_arguments": "not_in_zcl" }, "0x0f": { "command_id": "0x0f", "command_name": "15", "command_arguments": "not_in_zcl" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "0", "command_args": "not_in_zcl" }, "0x01": { "command_id": "0x01", "command_name": "1", "command_args": "not_in_zcl" } } } }, "out_clusters": { "0x0003": { "cluster_id": "0x0003", "title": "Identify", "name": "identify", "attributes": { "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "identify", "command_arguments": "<class 'zigpy.zcl.foundation.identify'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "identify_query_response", "command_args": "<class 'zigpy.zcl.foundation.identify_query_response'>" }, "0x01": { "command_id": "0x01", "command_name": "1", "command_args": "not_in_zcl" } } }, "0x0004": { "cluster_id": "0x0004", "title": "Groups", "name": "groups", "attributes": { "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "add", "command_arguments": "<class 'zigpy.zcl.foundation.add'>" }, "0x01": { "command_id": "0x01", "command_name": "view", "command_arguments": "<class 'zigpy.zcl.foundation.view'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership", "command_arguments": "<class 'zigpy.zcl.foundation.get_membership'>" }, "0x03": { "command_id": "0x03", "command_name": "remove", "command_arguments": "<class 'zigpy.zcl.foundation.remove'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "add_response", "command_args": "<class 'zigpy.zcl.foundation.add_response'>" }, "0x01": { "command_id": "0x01", "command_name": "view_response", "command_args": "<class 'zigpy.zcl.foundation.view_response'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership_response", "command_args": "<class 'zigpy.zcl.foundation.get_membership_response'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_response", "command_args": "<class 'zigpy.zcl.foundation.remove_response'>" }, "0x04": { "command_id": "0x04", "command_name": "4", "command_args": "not_in_zcl" }, "0x05": { "command_id": "0x05", "command_name": "5", "command_args": "not_in_zcl" } } }, "0x0019": { "cluster_id": "0x0019", "title": "Ota", "name": "ota", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "upgrade_server_id", "value_type": [ "0xf0", "EUI64", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": [ 142, 165, 46, 42, 0, 75, 18, 0 ] }, "0x0006": { "attribute_id": "0x0006", "attribute_name": "image_upgrade_status", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0009": { "attribute_id": "0x0009", "attribute_name": "minimum_block_req_delay", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1000 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "0", "command_arguments": "not_in_zcl" }, "0x02": { "command_id": "0x02", "command_name": "2", "command_arguments": "not_in_zcl" }, "0x05": { "command_id": "0x05", "command_name": "5", "command_arguments": "not_in_zcl" }, "0x07": { "command_id": "0x07", "command_name": "7", "command_arguments": "not_in_zcl" } }, "commands_generated": { "0x01": { "command_id": "0x01", "command_name": "1", "command_args": "not_in_zcl" }, "0x03": { "command_id": "0x03", "command_name": "3", "command_args": "not_in_zcl" }, "0x04": { "command_id": "0x04", "command_name": "4", "command_args": "not_in_zcl" }, "0x06": { "command_id": "0x06", "command_name": "6", "command_args": "not_in_zcl" } } } } } ] }

claudegel commented 9 months ago

Thanks, can you try to change value of cluster 0xff01, attribute 0x0001 The value now is 1, try to change to 0 or 2

claudegel commented 9 months ago

Can you send me your zigbee signature for your DM2550ZB You'll find it in parameters/devices and services/Zigbee Home Automation select your device and click the three vertical dot near reconfigure tehn choose manage zigbee device and signature. You are missing cluster 0x0008. It is possible that your device is not properly detected by ZHA

nickb24 commented 9 months ago

Sorry for the long delay. I switched over to ZHA to get you the logs but my normal setup is with z2m. I switched back to z2m but lost half my zigbee devices in my network. Just finished adding them back. Didn't think I would have to do that if I shutdown the z2m add-on before enabling ZHA, oh well.

claudegel commented 9 months ago

You can't imagine how many time I've busted all my HA setup during development of my custom components :)

claudegel commented 9 months ago

I just realize that the scan you've sent me was for a SW2500ZB not your DM2550ZB :( In z2m the cluster 0xff01, attribute 0x0001, 0x0010, 0x0012 are not available for your dimmer and light

nickb24 commented 9 months ago

Sorry about that. It looks like I scanned my other device. Do you know of a way to do the scan with z2m? I do have a DM2550ZB image

claudegel commented 9 months ago

I'm not familiar with z2m but what is the Clusters listed on top menu of the picture you just sent. Does it list all cluster of your device ?

nickb24 commented 9 months ago

image

I tried manually sending to the attribute you posted but it won't let me. I think it's because it's missing in the 'manuSpecificSinope' image

claudegel commented 9 months ago

z2m is based on zigbee-herdsman cluster library and the attributes 0x0001 is not defined in that library. That,s why I prefer ZHA where I can develop my own library and test faster. maybe there is a way to add those attributes in your herdsman library locally. I'll check if I can find a way to edit that library locally.

nickb24 commented 9 months ago

I tried sending a value to 'unknown' image

and I get this error: image

I got the idea to use 'unknown' from your table here: image

claudegel commented 9 months ago

unknown in your case is attribute 0x0075 and it is not supported for lights and dimmer

nickb24 commented 9 months ago

I will try again tomorrow with ZHA if it's easier then.

nickb24 commented 9 months ago

I have redone what you have asked for. Here is the output: { "ieee": "50:0b:91:40:00:04:9c:6d", "nwk": "0xe02e", "model": "DM2550ZB", "manufacturer": "Sinope Technologies", "manufacturer_id": "0x4508", "endpoints": [ { "id": 1, "device_type": "0x0101", "profile": "0x0104", "in_clusters": { "0x0000": { "cluster_id": "0x0000", "title": "Basic", "name": "basic", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "zcl_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 2 }, "0x0001": { "attribute_id": "0x0001", "attribute_name": "app_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 12 }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "stack_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0003": { "attribute_id": "0x0003", "attribute_name": "hw_version", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0004": { "attribute_id": "0x0004", "attribute_name": "manufacturer", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508 }, "0x0005": { "attribute_id": "0x0005", "attribute_name": "model", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508 }, "0x0007": { "attribute_id": "0x0007", "attribute_name": "power_source", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508 }, "0x0010": { "attribute_id": "0x0010", "attribute_name": "location_desc", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508 }, "0x0011": { "attribute_id": "0x0011", "attribute_name": "physical_env", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x4000": { "attribute_id": "0x4000", "attribute_name": "sw_build_id", "value_type": [ "0x42", "CharacterString", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": "227" }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "reset_fact_default", "command_arguments": "<class 'zigpy.zcl.foundation.reset_fact_default'>" } }, "commands_generated": {} }, "0x0002": { "cluster_id": "0x0002", "title": "Device Temperature", "name": "device_temperature", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "current_temperature", "value_type": [ "0x29", "int16s", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 23 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0x0003": { "cluster_id": "0x0003", "title": "Identify", "name": "identify", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "identify_time", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "identify", "command_arguments": "<class 'zigpy.zcl.foundation.identify'>" }, "0x01": { "command_id": "0x01", "command_name": "identify_query", "command_arguments": "<class 'zigpy.zcl.foundation.identify_query'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "identify_query_response", "command_args": "<class 'zigpy.zcl.foundation.identify_query_response'>" } } }, "0x0004": { "cluster_id": "0x0004", "title": "Groups", "name": "groups", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "name_support", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "add", "command_arguments": "<class 'zigpy.zcl.foundation.add'>" }, "0x01": { "command_id": "0x01", "command_name": "view", "command_arguments": "<class 'zigpy.zcl.foundation.view'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership", "command_arguments": "<class 'zigpy.zcl.foundation.get_membership'>" }, "0x03": { "command_id": "0x03", "command_name": "remove", "command_arguments": "<class 'zigpy.zcl.foundation.remove'>" }, "0x04": { "command_id": "0x04", "command_name": "remove_all", "command_arguments": "<class 'zigpy.zcl.foundation.remove_all'>" }, "0x05": { "command_id": "0x05", "command_name": "add_if_identifying", "command_arguments": "<class 'zigpy.zcl.foundation.add_if_identifying'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "add_response", "command_args": "<class 'zigpy.zcl.foundation.add_response'>" }, "0x01": { "command_id": "0x01", "command_name": "view_response", "command_args": "<class 'zigpy.zcl.foundation.view_response'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership_response", "command_args": "<class 'zigpy.zcl.foundation.get_membership_response'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_response", "command_args": "<class 'zigpy.zcl.foundation.remove_response'>" } } }, "0x0005": { "cluster_id": "0x0005", "title": "Scenes", "name": "scenes", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "count", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0001": { "attribute_id": "0x0001", "attribute_name": "current_scene", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "current_group", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0003": { "attribute_id": "0x0003", "attribute_name": "scene_valid", "value_type": [ "0x10", "Bool", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0004": { "attribute_id": "0x0004", "attribute_name": "name_support", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "add", "command_arguments": "<class 'zigpy.zcl.foundation.add'>" }, "0x01": { "command_id": "0x01", "command_name": "view", "command_arguments": "<class 'zigpy.zcl.foundation.view'>" }, "0x02": { "command_id": "0x02", "command_name": "remove", "command_arguments": "<class 'zigpy.zcl.foundation.remove'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_all", "command_arguments": "<class 'zigpy.zcl.foundation.remove_all'>" }, "0x04": { "command_id": "0x04", "command_name": "store", "command_arguments": "<class 'zigpy.zcl.foundation.store'>" }, "0x05": { "command_id": "0x05", "command_name": "recall", "command_arguments": "<class 'zigpy.zcl.foundation.recall'>" }, "0x06": { "command_id": "0x06", "command_name": "get_scene_membership", "command_arguments": "<class 'zigpy.zcl.foundation.get_scene_membership'>" }, "0x40": { "command_id": "0x40", "command_name": "enhanced_add", "command_arguments": "<class 'zigpy.zcl.foundation.enhanced_add'>" }, "0x41": { "command_id": "0x41", "command_name": "enhanced_view", "command_arguments": "<class 'zigpy.zcl.foundation.enhanced_view'>" }, "0x42": { "command_id": "0x42", "command_name": "copy", "command_arguments": "<class 'zigpy.zcl.foundation.copy'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "add_scene_response", "command_args": "<class 'zigpy.zcl.foundation.add_scene_response'>" }, "0x01": { "command_id": "0x01", "command_name": "view_response", "command_args": "<class 'zigpy.zcl.foundation.view_response'>" }, "0x02": { "command_id": "0x02", "command_name": "remove_scene_response", "command_args": "<class 'zigpy.zcl.foundation.remove_scene_response'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_all_scenes_response", "command_args": "<class 'zigpy.zcl.foundation.remove_all_scenes_response'>" }, "0x04": { "command_id": "0x04", "command_name": "store_scene_response", "command_args": "<class 'zigpy.zcl.foundation.store_scene_response'>" }, "0x06": { "command_id": "0x06", "command_name": "get_scene_membership_response", "command_args": "<class 'zigpy.zcl.foundation.get_scene_membership_response'>" }, "0x40": { "command_id": "0x40", "command_name": "enhanced_add_response", "command_args": "<class 'zigpy.zcl.foundation.enhanced_add_response'>" }, "0x41": { "command_id": "0x41", "command_name": "enhanced_view_response", "command_args": "<class 'zigpy.zcl.foundation.enhanced_view_response'>" }, "0x42": { "command_id": "0x42", "command_name": "copy_response", "command_args": "<class 'zigpy.zcl.foundation.copy_response'>" } } }, "0x0006": { "cluster_id": "0x0006", "title": "On/Off", "name": "on_off", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "on_off", "value_type": [ "0x10", "Bool", "Discrete" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 0 }, "0x4001": { "attribute_id": "0x4001", "attribute_name": "on_time", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x4002": { "attribute_id": "0x4002", "attribute_name": "off_wait_time", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "off", "command_arguments": "<class 'zigpy.zcl.foundation.off'>" }, "0x01": { "command_id": "0x01", "command_name": "on", "command_arguments": "<class 'zigpy.zcl.foundation.on'>" }, "0x02": { "command_id": "0x02", "command_name": "toggle", "command_arguments": "<class 'zigpy.zcl.foundation.toggle'>" }, "0x42": { "command_id": "0x42", "command_name": "on_with_timed_off", "command_arguments": "<class 'zigpy.zcl.foundation.on_with_timed_off'>" } }, "commands_generated": {} }, "0x0008": { "cluster_id": "0x0008", "title": "Level control", "name": "level", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "current_level", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 127 }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "min_level", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x0003": { "attribute_id": "0x0003", "attribute_name": "max_level", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 255 }, "0x000f": { "attribute_id": "0x000f", "attribute_name": "options", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 0 }, "0x0011": { "attribute_id": "0x0011", "attribute_name": "on_level", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "3", "access_acl": 3, "manf_id": 4508, "attribute_value": 255 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 2 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "move_to_level", "command_arguments": "<class 'zigpy.zcl.foundation.move_to_level'>" }, "0x01": { "command_id": "0x01", "command_name": "move", "command_arguments": "<class 'zigpy.zcl.foundation.move'>" }, "0x02": { "command_id": "0x02", "command_name": "step", "command_arguments": "<class 'zigpy.zcl.foundation.step'>" }, "0x03": { "command_id": "0x03", "command_name": "stop", "command_arguments": "<class 'zigpy.zcl.foundation.stop'>" }, "0x04": { "command_id": "0x04", "command_name": "move_to_level_with_on_off", "command_arguments": "<class 'zigpy.zcl.foundation.move_to_level_with_on_off'>" }, "0x05": { "command_id": "0x05", "command_name": "move_with_on_off", "command_arguments": "<class 'zigpy.zcl.foundation.move_with_on_off'>" }, "0x06": { "command_id": "0x06", "command_name": "step_with_on_off", "command_arguments": "<class 'zigpy.zcl.foundation.step_with_on_off'>" }, "0x07": { "command_id": "0x07", "command_name": "stop_with_on_off", "command_arguments": "<class 'zigpy.zcl.foundation.stop_with_on_off'>" } }, "commands_generated": {} }, "0x0702": { "cluster_id": "0x0702", "title": "Metering", "name": "smartenergy_metering", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "current_summ_delivered", "value_type": [ "0x25", "uint48_t", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 34 }, "0x0200": { "attribute_id": "0x0200", "attribute_name": "status", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0300": { "attribute_id": "0x0300", "attribute_name": "unit_of_measure", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0301": { "attribute_id": "0x0301", "attribute_name": "multiplier", "value_type": [ "0x22", "uint24_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0302": { "attribute_id": "0x0302", "attribute_name": "divisor", "value_type": [ "0x22", "uint24_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1000 }, "0x0303": { "attribute_id": "0x0303", "attribute_name": "summation_formatting", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 193 }, "0x0306": { "attribute_id": "0x0306", "attribute_name": "metering_device_type", "value_type": [ "0x18", "bitmap8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "65533", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0x0b04": { "cluster_id": "0x0b04", "title": "Electrical Measurement", "name": "electrical_measurement", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "measurement_type", "value_type": [ "0x1b", "bitmap32", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 9 }, "0x0505": { "attribute_id": "0x0505", "attribute_name": "rms_voltage", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 121 }, "0x0507": { "attribute_id": "0x0507", "attribute_name": "rms_voltage_max", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 122 }, "0x0508": { "attribute_id": "0x0508", "attribute_name": "rms_current", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 0 }, "0x050a": { "attribute_id": "0x050a", "attribute_name": "rms_current_max", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 109 }, "0x050b": { "attribute_id": "0x050b", "attribute_name": "active_power", "value_type": [ "0x29", "int16s", "Analog" ], "access": "5", "access_acl": 5, "manf_id": 4508, "attribute_value": 0 }, "0x050d": { "attribute_id": "0x050d", "attribute_name": "active_power_max", "value_type": [ "0x29", "int16s", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 4 }, "0x0600": { "attribute_id": "0x0600", "attribute_name": "ac_voltage_multiplier", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0601": { "attribute_id": "0x0601", "attribute_name": "ac_voltage_divisor", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0602": { "attribute_id": "0x0602", "attribute_name": "ac_current_multiplier", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0603": { "attribute_id": "0x0603", "attribute_name": "ac_current_divisor", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1000 }, "0x0604": { "attribute_id": "0x0604", "attribute_name": "ac_power_multiplier", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0x0605": { "attribute_id": "0x0605", "attribute_name": "ac_power_divisor", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0x0b05": { "cluster_id": "0x0b05", "title": "Diagnostic", "name": "diagnostic", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "number_of_resets", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 8 }, "0x0001": { "attribute_id": "0x0001", "attribute_name": "persistent_memory_writes", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 234 }, "0x011b": { "attribute_id": "0x011b", "attribute_name": "average_mac_retry_per_aps_message_sent", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x011c": { "attribute_id": "0x011c", "attribute_name": "last_message_lqi", "value_type": [ "0x20", "uint8_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 199 }, "0x011d": { "attribute_id": "0x011d", "attribute_name": "last_message_rssi", "value_type": [ "0x28", "int8s", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": -67 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0xff01": { "cluster_id": "0xff01", "title": "Sinopé Technologies Manufacturer specific", "name": "sinope_manufacturer_specific", "attributes": {}, "commands_received": { "0x01": { "command_id": "0x01", "command_name": "1", "command_arguments": "not_in_zcl" }, "0x0f": { "command_id": "0x0f", "command_name": "15", "command_arguments": "not_in_zcl" }, "0x10": { "command_id": "0x10", "command_name": "16", "command_arguments": "not_in_zcl" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "0", "command_args": "not_in_zcl" }, "0x01": { "command_id": "0x01", "command_name": "1", "command_args": "not_in_zcl" } } } }, "out_clusters": { "0x0003": { "cluster_id": "0x0003", "title": "Identify", "name": "identify", "attributes": { "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "identify", "command_arguments": "<class 'zigpy.zcl.foundation.identify'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "identify_query_response", "command_args": "<class 'zigpy.zcl.foundation.identify_query_response'>" }, "0x01": { "command_id": "0x01", "command_name": "1", "command_args": "not_in_zcl" } } }, "0x0004": { "cluster_id": "0x0004", "title": "Groups", "name": "groups", "attributes": { "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "add", "command_arguments": "<class 'zigpy.zcl.foundation.add'>" }, "0x01": { "command_id": "0x01", "command_name": "view", "command_arguments": "<class 'zigpy.zcl.foundation.view'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership", "command_arguments": "<class 'zigpy.zcl.foundation.get_membership'>" }, "0x03": { "command_id": "0x03", "command_name": "remove", "command_arguments": "<class 'zigpy.zcl.foundation.remove'>" } }, "commands_generated": { "0x00": { "command_id": "0x00", "command_name": "add_response", "command_args": "<class 'zigpy.zcl.foundation.add_response'>" }, "0x01": { "command_id": "0x01", "command_name": "view_response", "command_args": "<class 'zigpy.zcl.foundation.view_response'>" }, "0x02": { "command_id": "0x02", "command_name": "get_membership_response", "command_args": "<class 'zigpy.zcl.foundation.get_membership_response'>" }, "0x03": { "command_id": "0x03", "command_name": "remove_response", "command_args": "<class 'zigpy.zcl.foundation.remove_response'>" }, "0x04": { "command_id": "0x04", "command_name": "4", "command_args": "not_in_zcl" }, "0x05": { "command_id": "0x05", "command_name": "5", "command_args": "not_in_zcl" } } }, "0x000a": { "cluster_id": "0x000a", "title": "Time", "name": "time", "attributes": { "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": {}, "commands_generated": {} }, "0x0019": { "cluster_id": "0x0019", "title": "Ota", "name": "ota", "attributes": { "0x0000": { "attribute_id": "0x0000", "attribute_name": "upgrade_server_id", "value_type": [ "0xf0", "EUI64", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": [ 105, 184, 46, 42, 0, 75, 18, 0 ] }, "0x0002": { "attribute_id": "0x0002", "attribute_name": "current_file_version", "value_type": [ "0x23", "uint32_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 66049 }, "0x0006": { "attribute_id": "0x0006", "attribute_name": "image_upgrade_status", "value_type": [ "0x30", "enum8", "Discrete" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 0 }, "0x0009": { "attribute_id": "0x0009", "attribute_name": "minimum_block_req_delay", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1000 }, "0xfffd": { "attribute_id": "0xfffd", "attribute_name": "cluster_revision", "value_type": [ "0x21", "uint16_t", "Analog" ], "access": "1", "access_acl": 1, "manf_id": 4508, "attribute_value": 1 } }, "commands_received": { "0x00": { "command_id": "0x00", "command_name": "0", "command_arguments": "not_in_zcl" }, "0x02": { "command_id": "0x02", "command_name": "2", "command_arguments": "not_in_zcl" }, "0x05": { "command_id": "0x05", "command_name": "5", "command_arguments": "not_in_zcl" }, "0x07": { "command_id": "0x07", "command_name": "7", "command_arguments": "not_in_zcl" } }, "commands_generated": { "0x01": { "command_id": "0x01", "command_name": "1", "command_args": "not_in_zcl" }, "0x03": { "command_id": "0x03", "command_name": "3", "command_args": "not_in_zcl" }, "0x04": { "command_id": "0x04", "command_name": "4", "command_args": "not_in_zcl" }, "0x06": { "command_id": "0x06", "command_name": "6", "command_args": "not_in_zcl" } } } } } ] }

Here is my signature output: { "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=1, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4508, maximum_buffer_size=71, maximum_incoming_transfer_size=43, server_mask=10752, maximum_outgoing_transfer_size=43, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)", "endpoints": { "1": { "profile_id": "0x0104", "device_type": "0x0101", "input_clusters": [ "0x0000", "0x0002", "0x0003", "0x0004", "0x0005", "0x0006", "0x0008", "0x0702", "0x0b04", "0x0b05", "0xff01" ], "output_clusters": [ "0x0003", "0x0004", "0x000a", "0x0019" ] } }, "manufacturer": "Sinope Technologies", "model": "DM2550ZB", "class": "zhaquirks.sinope.light.SinopeDM2550ZB" }

claudegel commented 9 months ago

Ok I can see that your dimmer is correctly detected. But don't know why but in the scan, the cluster 0xff01, manufacturer cluster, there is no attributes reported. Are you using my quirks or just ZHA ? Your SW2500ZB scan was reporting attributes for the cluster 0xff01. Can you tell me if your DM2550ZB was previously connected to Neviweb. Same for your SW2500ZB ? I need to investigate why there is no attribute for your DM2550ZB. Maybe the manufacturer cluster attributes are populated the first time the device is connected to Neviweb as they are performing firmware update and we do not have access to firmware update in HA. I know that there was a bug in zha-toolkit that was not reading the manufacturer cluster attribute during the scan. Are you able to see attribute value in zha with the manage zigbee device ?

nickb24 commented 9 months ago

I ran the scan after installing only zha and zha-toolkit. It was never connected to Neviweb. It's fresh out of the box with Home assistant only.

In the manage ZigBee device section I can see everything, except for changing the phase.

claudegel commented 9 months ago

Ok to get the test attribute you will need to install my sinope-zha. just create a dir in config/ named zhaquirks and copy inside the file light.py that you will find in the bellow branch https://github.com/claudegel/sinope-zha/tree/dimmer-test In your configuration.yaml add this

zha_toolkit:

zha:
  database_path: zigbee.db
  custom_quirks_path: /config/zhaquirks/

probably you already have the line zha_toolkit: and zha: the important line is custom_quirks... restart HA this will allow to load light.py instead of the one in zha and you will be able to play with the attributes for what we are looking for

claudegel commented 9 months ago

For the SW2500ZB that you have scanned at the beginning did that devive was connected to neviweb before ? In the manage ZigBee device section you see the attribute but can you get value for the attributes ?

nickb24 commented 9 months ago

For the SW2500ZB that you have scanned at the beginning did that devive was connected to neviweb before ? In the manage ZigBee device section you see the attribute but can you get value for the attributes ?

Never connected to neviweb, I don't even have that device. All I have is a SONOFF Zigbee 3.0 USB Dongle Plus ZBDongle-P and Home Assistant.

I've done the steps you asked for: image

I have this running on a separate Home assistant server from my main installation. It's a fresh install with a dedicated Zigbee dongle attached to it and only this dimmer. image

image

Downloading the diagnostic logs I get: image

nickb24 commented 9 months ago

I tried to play with this attribute: image

I tried setting to 0 and 2. Both writes were successful but I didn't notice anything on my lights. I'm not really sure if it's actually changing the phase from reverse to forward. The reason I want to try changing the phase is to try to stop my led bulbs from flickering, but I know this could also be a badly designed LED bulb problem. Without hooking up an oscilloscope to the output of the dimmer, I don't know how else to verify what the phase setting is of the dimmer.

Some reading: https://www.leviton.com/en/docs/Dimmer-Forward-and-Reverse-Application-Note.pdf

claudegel commented 9 months ago

When you put 0 or 2 for attribute 0x0001 when you read it back does the value change. This attribute is of type bool so I think you should just put false This way you will get Bool.false

So if you never setup your SW2500ZB in Neviweb than zha-toolkit scan is the problem for your DM2550ZB as it can't scan the attributes for 0xff01

Do you see attribute 0x0010, 0x0012 and 0x0013 ? especially the last two as they are of type enum and it is possible to put 0, 1 or 2

nickb24 commented 9 months ago

When you put 0 or 2 for attribute 0x0001 when you read it back does the value change. This attribute is of type bool so I think you should just put false This way you will get Bool.false

Yes I read it back and it took the value correctly. When I put a 0, it reads back false. 1 reads back true. 2 reads back none.

So if you never setup your SW2500ZB in Neviweb than zha-toolkit scan is the problem for your DM2550ZB as it can't scan the attributes for 0xff01

Do you see attribute 0x0010, 0x0012 and 0x0013 ? especially the last two as they are of type enum and it is possible to put 0, 1 or 2

See them where? Here? image

claudegel commented 9 months ago

Yes, if when you read value it say None it is because this attribute is not supported by your device. If youget something esle then it is a supported attribute. Just to let you know, tomorrow I,ll be out until friday night. so it is possible that I can't answer. But I'll be back friday night.

nickb24 commented 9 months ago

Thanks for all your help. What I thought would be something simple looks like will be more complicated. I just wish Sinope would just provide this information instead of keeping it a secret...

claudegel commented 9 months ago

I'm thinking of buying one so I can put it in Neviweb and sniff the zigbee communications. That's how I found most attributes

claudegel commented 9 months ago

I just bought a DM2550ZB so I'll be able to sniff all the zigbee trafic between Neviweb and the device. Also it is possible that the attribute we are looking for is not in the 0xff01 cluster. Sinopé could have add it to another cluster like lighting, metering or level control. In that last one there is an attribute 0x000f named options. It could be this.

nickb24 commented 9 months ago

It would be interesting to see if they also update the firmware after connecting to Neviweb. If you sniff that traffic, would you be able to also sniff the firmware URL that they use?

claudegel commented 9 months ago

If I can find this it would be great. I'm gonna sniff to follow all the connection process.

claudegel commented 9 months ago

Finally I got the attribute for phase control, 0xff01 0x0056 I also found attribute for key double up action. When set to on double up key press set light intensity to 100% 0xff01 0x0058 I've updated branche dimmer-test, file light.py Please test as my DM2550ZB is on Neviweb now to update my code for neviweb130 let me know

nickb24 commented 9 months ago

Thank you for this amazing work! I'll give this a shot as soon as I can.

claudegel commented 9 months ago

if you already download the new light.py I just found a typo. Please download it again. Sorry

nickb24 commented 9 months ago

I've been testing it out and it seems to work. Without an oscilloscope connected however I can't really confirm if it is really changing between forward or reverse phase though. Fantastic work here!

claudegel commented 9 months ago

Did you had time to test the double clic up. When activated via cluster 0xff01, attribute 0x0058. With the double clic up the light turn on at 100% intensity. I also found that attribute 0x0090 is a kind of power watt summation and could be used for consumption statistic. I need to test a little bit more but I'm close to make a PR. There is also attribute 0x0010 where the device store its last on intensity. Could you change the intensity and check if there are the same change in attribute 0x0010 value ? Thank you for your help.

nickb24 commented 8 months ago

Sorry have been busy the last little bit. Double click up seems to register for me. 0x0010 is working too. This is fantastic work.

Regarding integrating this in zha, do you know how it works if we want to also integrate this into z2m? I see in your zha library for Sinope there are a few more attributes that are missing in z2m's implementation of Sinope. Example, I noticed in zha you can see voltage and power readings for the Sinope switch, but not in z2m.

claudegel commented 8 months ago

I'm presently finishing digging for the DM2550ZB and Sedna valve with flow meter attributes and I'll send a PR to ZHA and z2m to add those attributes. Thank you for helping me testing all that.

claudegel commented 7 months ago

I just finish sedna flow meter integration and will push a PR soon in ZHA

nickb24 commented 6 months ago

Do you know what the process is to get this merged into z2m?