Skip to content
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

Xiaomi H1 Wired Double Rocker Switch With Neutral #1391

Merged

Conversation

dumpfheimer
Copy link
Contributor

@dumpfheimer dumpfheimer commented Feb 22, 2022

Added quirk for Xiaomi H1 double rocker switche with neutral (n2aeu1)

@dumpfheimer
Copy link
Contributor Author

One more thing, if anyone wants to test this: my working environment is based on the ZCLv7 update from puddly. There might be an issue with OppleCluster.attributes vs OppleCluster.manufacturer_attributes

@coveralls
Copy link

coveralls commented Feb 22, 2022

Pull Request Test Coverage Report for Build 2956280996

  • 37 of 44 (84.09%) changed or added relevant lines in 2 files are covered.
  • 24 unchanged lines in 3 files lost coverage.
  • Overall coverage decreased (-0.2%) to 71.568%

Changes Missing Coverage Covered Lines Changed/Added Lines %
zhaquirks/xiaomi/aqara/opple_switch.py 35 42 83.33%
Files with Coverage Reduction New Missed Lines %
zhaquirks/tuya/ts0210.py 2 84.38%
zhaquirks/xiaomi/aqara/plug_mmeu01.py 10 67.44%
zhaquirks/siglis/zigfred.py 12 65.31%
Totals Coverage Status
Change from base Build 2933899945: -0.2%
Covered Lines: 5266
Relevant Lines: 7358

💛 - Coveralls

@codecov-commenter
Copy link

codecov-commenter commented Feb 22, 2022

Codecov Report

Attention: Patch coverage is 84.09091% with 7 lines in your changes missing coverage. Please review.

Project coverage is 71.56%. Comparing base (1274644) to head (e7c5401).
Report is 570 commits behind head on dev.

Files with missing lines Patch % Lines
zhaquirks/xiaomi/aqara/opple_switch.py 83.33% 7 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##              dev    #1391      +/-   ##
==========================================
- Coverage   71.74%   71.56%   -0.18%     
==========================================
  Files         237      239       +2     
  Lines        7195     7358     +163     
==========================================
+ Hits         5162     5266     +104     
- Misses       2033     2092      +59     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@dumpfheimer dumpfheimer changed the title [WIP] Working on Aqara D1 3 button wall switch [WIP] Working on Xiaomi Opple Switches Feb 25, 2022
@dumpfheimer dumpfheimer marked this pull request as draft February 27, 2022 07:15
@ianfromnyc
Copy link

I have several H1 one-button WS-EUK03 lumi.switch.n1aeu1 switches, is there anything I can do to help?

@dumpfheimer
Copy link
Contributor Author

Hi! Thanks for offering your help!

Could you send me the device descriptor of your switches?

@dumpfheimer dumpfheimer changed the title [WIP] Working on Xiaomi Opple Switches Xiaomi H1 Wired Double Rocker Switch With Neutral Apr 28, 2022
@dumpfheimer dumpfheimer marked this pull request as ready for review April 28, 2022 13:05
dumpfheimer pushed a commit to dumpfheimer/core that referenced this pull request May 2, 2022
@BlastyCZ
Copy link

BlastyCZ commented May 2, 2022

Hi, I am new to world of HA and ZHA. I bought Aqara WS-EUK04. Temperature and electric doesn't work. So I have found you quirk - now I am stuck with this:

2022-05-02 17:19:16 DEBUG (MainThread) [zigpy.application] Device is initialized <Device model='lumi.switch.n2aeu1' manuf='LUMI' nwk=0x1F3F ieee=54:ef:44:10:00:36:48:53 is_initialized=True>
2022-05-02 17:19:16 DEBUG (MainThread) [zigpy.quirks.registry] Checking quirks for LUMI lumi.switch.n2aeu1 (54:ef:44:10:00:36:48:53)
2022-05-02 17:19:16 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'opple_switch.XiaomiOpple2ButtonSwitch'>
2022-05-02 17:19:16 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 41, 42, 242, 51, 21, 31} {1, 2, 242}
2022-05-02 17:19:16 DEBUG (MainThread) [zigpy.quirks.registry] Considering <class 'opple_switch.XiaomiOpple3ButtonSwitch'>
2022-05-02 17:19:16 DEBUG (MainThread) [zigpy.quirks.registry] Fail because endpoint list mismatch: {1, 2, 3, 41, 42, 43, 242, 51, 52, 21, 53, 61, 31} {1, 2, 242}

Any advice?

@dumpfheimer
Copy link
Contributor Author

It seems like Xiaomi devices change their type when they are re-joined. Maybe try removing and re-joining the device a few times and check if the entities that are discovered change.

Mine for example only have the electric measurements every other time. Also sometimes they are switches sometimes lights I believe.

@BlastyCZ
Copy link

BlastyCZ commented May 2, 2022

No luck - logs shows the same error, so I am trying to provide some useful info.

"data": {
    "ieee": "**REDACTED**",
    "nwk": 2824,
    "manufacturer": "LUMI",
    "model": "lumi.switch.n2aeu1",
    "name": "LUMI lumi.switch.n2aeu1",
    "quirk_applied": false,
    "quirk_class": "zigpy.device.Device",
    "manufacturer_code": 4447,
    "power_source": "Mains",
    "lqi": 100,
    "rssi": -75,
    "last_seen": "2022-05-02T18:23:49",
    "available": true,
    "device_type": "Router",
    "signature": {
      "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4447, maximum_buffer_size=127, maximum_incoming_transfer_size=100, server_mask=11264, maximum_outgoing_transfer_size=100, 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": 260,
          "device_type": "0x0100",
          "in_clusters": [
            "0x0000",
            "0x0002",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0x0009",
            "0x0702",
            "0x0b04"
          ],
          "out_clusters": [
            "0x000a",
            "0x0019"
          ]
        },
        "2": {
          "profile_id": 260,
          "device_type": "0x0100",
          "in_clusters": [
            "0x0000",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0x0012",
            "0xfcc0"
          ],
          "out_clusters": []
        },
        "242": {
          "profile_id": 41440,
          "device_type": "0x0061",
          "in_clusters": [],
          "out_clusters": [
            "0x0021"
          ]
        }
      }
    }

@dumpfheimer
Copy link
Contributor Author

You alwas get the same 3 clusters?
Does it make a difference if you reset it on the device or click "remove device" on the device page?

@BlastyCZ
Copy link

BlastyCZ commented May 2, 2022

If clusters means keys in endpoints ("1", "2", "242") - yes they are always the same

@dumpfheimer
Copy link
Contributor Author

Yes, sorry, that is what I meant. Do you have debugging turned on for zigpy? My best guess is that some of the endpoints somewhere get lost because they do not get matched or so. Maybe there ist just a slight difference in the actual device descriptor. Also what software versions are you using?

@BlastyCZ
Copy link

BlastyCZ commented May 2, 2022

Debugging turned on - unfortunately I dont know what should I look for....

2022-05-02 20:32:39 DEBUG (MainThread) [zigpy.appdb] Error handling '_save_attribute' event with (54:ef:44:10:00:36:48:53, 1, 0, 4, 'LUMI') params: FOREIGN KEY constraint failed

I can provide full log if you want.

{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2022.4.7",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.9.9",
    "docker": true,
    "arch": "x86_64",
    "timezone": "Europe/Prague",
    "os_name": "Linux",
    "os_version": "5.10.108",
    "supervisor": "2022.04.0",
    "host_os": "Home Assistant OS 7.6",
    "docker_version": "20.10.9",
    "chassis": "vm",
    "run_as_root": true
  },
  "custom_components": {},
  "integration_manifest": {
    "domain": "zha",
    "name": "Zigbee Home Automation",
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/zha",
    "requirements": [
      "bellows==0.29.0",
      "pyserial==3.5",
      "pyserial-asyncio==0.6",
      "zha-quirks==0.0.72",
      "zigpy-deconz==0.14.0",
      "zigpy==0.44.2",
      "zigpy-xbee==0.14.0",
      "zigpy-zigate==0.7.4",
      "zigpy-znp==0.7.0"
    ],
    "usb": [
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*2652*",
        "known_devices": [
          "slae.sh cc2652rb stick"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*zigstar*",
        "known_devices": [
          "ZigStar Coordinators"
        ]
      },
      {
        "vid": "1CF1",
        "pid": "0030",
        "description": "*conbee*",
        "known_devices": [
          "Conbee II"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8A2A",
        "description": "*zigbee*",
        "known_devices": [
          "Nortek HUSBZB-1"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8B34",
        "description": "*bv 2010/10*",
        "known_devices": [
          "Bitron Video AV2010/10"
        ]
      }
    ],
    "codeowners": [
      "@dmulcahey",
      "@adminiuga"
    ],
    "zeroconf": [
      {
        "type": "_esphomelib._tcp.local.",
        "name": "tube*"
      }
    ],
    "after_dependencies": [
      "usb",
      "zeroconf"
    ],
    "iot_class": "local_polling",
    "loggers": [
      "aiosqlite",
      "bellows",
      "crccheck",
      "pure_pcapy3",
      "zhaquirks",
      "zigpy",
      "zigpy_deconz",
      "zigpy_xbee",
      "zigpy_zigate",
      "zigpy_znp"
    ],
    "is_built_in": true
  },
  "data": {
    "ieee": "**REDACTED**",
    "nwk": 2824,
    "manufacturer": "LUMI",
    "model": "lumi.switch.n2aeu1",
    "name": "LUMI lumi.switch.n2aeu1",
    "quirk_applied": false,
    "quirk_class": "zigpy.device.Device",
    "manufacturer_code": 4447,
    "power_source": "Mains",
    "lqi": 100,
    "rssi": -75,
    "last_seen": "2022-05-02T18:23:49",
    "available": true,
    "device_type": "Router",
    "signature": {
      "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4447, maximum_buffer_size=127, maximum_incoming_transfer_size=100, server_mask=11264, maximum_outgoing_transfer_size=100, 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": 260,
          "device_type": "0x0100",
          "in_clusters": [
            "0x0000",
            "0x0002",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0x0009",
            "0x0702",
            "0x0b04"
          ],
          "out_clusters": [
            "0x000a",
            "0x0019"
          ]
        },
        "2": {
          "profile_id": 260,
          "device_type": "0x0100",
          "in_clusters": [
            "0x0000",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0x0012",
            "0xfcc0"
          ],
          "out_clusters": []
        },
        "242": {
          "profile_id": 41440,
          "device_type": "0x0061",
          "in_clusters": [],
          "out_clusters": [
            "0x0021"
          ]
        }
      }
    },
    "entities": [
      {
        "entity_id": "sensor.lumi_lumi_switch_n2aeu1_53483600_electrical_measurement",
        "name": "LUMI lumi.switch.n2aeu1"
      },
      {
        "entity_id": "sensor.lumi_lumi_switch_n2aeu1_53483600_smartenergy_metering_summation_delivered",
        "name": "LUMI lumi.switch.n2aeu1"
      },
      {
        "entity_id": "sensor.lumi_lumi_switch_n2aeu1_53483600_device_temperature",
        "name": "LUMI lumi.switch.n2aeu1"
      },
      {
        "entity_id": "button.lumi_lumi_switch_n2aeu1_53483600_identify",
        "name": "LUMI lumi.switch.n2aeu1"
      },
      {
        "entity_id": "light.lumi_lumi_switch_n2aeu1_53483600_on_off",
        "name": "LUMI lumi.switch.n2aeu1"
      },
      {
        "entity_id": "light.lumi_lumi_switch_n2aeu1_53483600_on_off_2",
        "name": "LUMI lumi.switch.n2aeu1"
      }
    ],
    "neighbors": [],
    "endpoint_names": [
      {
        "name": "ON_OFF_LIGHT"
      },
      {
        "name": "ON_OFF_LIGHT"
      },
      {
        "name": "unknown 97 device_type of 0xa1e0 profile id"
      }
    ],
    "user_given_name": null,
    "device_reg_id": "5b25e9c57b587746227f68578ef537ff",
    "area_id": "obyvak"
  }
}

@dumpfheimer
Copy link
Contributor Author

@javicalle I think I see what you mean. I'm out of time for now but will look into it eventually.

Thanks for your help

@@ -52,28 +53,28 @@
PRESS_TYPES = {0: "hold", 1: "single", 2: "double", 3: "triple", 255: "release"}


class OppleOperationMode(t.uint8_t):
class OppleOperationMode(t.uint8_t, Enum):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the t.enum8 can be used here instead of t.uint8_t, Enum

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately not. I then get data type errors when I set the Attribute

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the error I got:
[homeassistant.components.zha.api] Set attribute for: cluster_id: [64704] cluster_type: [in] endpoint_id: [1] attribute: [512] value: [False] manufacturer: [4447] response: [Write_Attributes_rsp(status_records=[WriteAttributesStatusRecord(status=<Status.INVALID_DATA_TYPE: 141>, attrid=0x0200)])]

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you maybe trying to set the values as True/False instead of 1/0?

It had been implemented this way in other places:
https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/tuya/__init__.py#L849..L853

But it is known that it does not work with boolean values.

In any case if it is working properly I don't see any problem with keeping it as is.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the UI? I manually entered 1/0 but also the configuration entity failed to set the values with the same error (no UI feedback, only in the log?

@dumpfheimer
Copy link
Contributor Author

If I look at the raw data they still seem indistinguishable to me:
button 1 / button 2:

Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=64704, SrcAddr=0x89B8, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=94, SecurityUse=<Bool.false: 0>, TimeStamp=12250024, TSN=0, Data=b'\x1C\x5F\x11\xA3\x0A\xFC\x00\x10\x00', MacSrcAddr=0x89B8, MsgResultRadius=29)
Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=64704, SrcAddr=0x89B8, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=87, SecurityUse=<Bool.false: 0>, TimeStamp=12706746, TSN=0, Data=b'\x1C\x5F\x11\xA4\x0A\xFC\x00\x10\x00', MacSrcAddr=0x89B8, MsgResultRadius=29)


The A3/A4 part seems to increment with every command so is no "real difference"
I am not knowledgeable enough in Zigbee to know whether there could be another way to keep the two apart.

@BlastyCZ
Copy link

If I look at the raw data they still seem indistinguishable to me: button 1 / button 2:

Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=64704, SrcAddr=0x89B8, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=94, SecurityUse=<Bool.false: 0>, TimeStamp=12250024, TSN=0, Data=b'\x1C\x5F\x11\xA3\x0A\xFC\x00\x10\x00', MacSrcAddr=0x89B8, MsgResultRadius=29)
Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=64704, SrcAddr=0x89B8, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=87, SecurityUse=<Bool.false: 0>, TimeStamp=12706746, TSN=0, Data=b'\x1C\x5F\x11\xA4\x0A\xFC\x00\x10\x00', MacSrcAddr=0x89B8, MsgResultRadius=29)

The A3/A4 part seems to increment with every command

Just wild guess - what about one button has only odd numbers and the other even numbers?

@dumpfheimer
Copy link
Contributor Author

I looked at that too, also within the timestamp.. nothing relatively obvious

@dumpfheimer
Copy link
Contributor Author

Does someone have the Xiaomi gateway? Are there distinguishable long press events in the Xiaomi ecosystem?

@javicalle
Copy link
Collaborator

Does anyone knows what is the 0x00FC atribute?
It is not n OppleCluster attribute.

It must be triggering errors in this part because that attribute doesn't exists:

    def _update_attribute(self, attrid, value):
        super()._update_attribute(attrid, value)
        if attrid == 0x00FC:
            self._current_state = PRESS_TYPES.get(value)
            .../...

@dumpfheimer
Copy link
Contributor Author

I'm not sure where I copied that from.. should take another look and see if it's even necessary..

@dumpfheimer
Copy link
Contributor Author

Well, turns out it's needed 💪and still, the buttons seem indistinguishable :-/

class XiaomiOpple2ButtonSwitchBase(XiaomiCustomDevice):
"""Xiaomi Opple 2 Button Switch."""

manufacturer_id_override = 0x115F
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we define the attributes as manufacturer specific I think we can remove these

Copy link
Collaborator

@dmulcahey dmulcahey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple questions left. We can merge this after they’re addressed


attributes.update(
{
0x0002: ("power_outage_count", t.uint8_t),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these be defined as manufacturer specific?

Copy link
Collaborator

@dmulcahey dmulcahey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@TheJulianJES
Copy link
Collaborator

@dumpfheimer Sorry for the late comment, but is there a reason MODELS_INFO isn't used?
So manufacturer and model aren't matched at all? (only the endpoints are)

If there's no particular reason, would you mind adding them?
Should just be something like this in the signature:

MODELS_INFO: [(LUMI, "lumi.switch.n2aeu1")], 

(or are there further models?)

@dumpfheimer
Copy link
Contributor Author

There are multiple models that seem to work the same way. I do not know if they are matched this quirk, though. What are you after?

@TheJulianJES
Copy link
Collaborator

@dumpfheimer You have some of these devices, right? Can you provide the device signature(s) for all your Xiaomi H1 switches?
I'm after the ones that match your added XiaomiOpple2ButtonSwitchFace1, XiaomiOpple2ButtonSwitchFace2 quirks.

We want to whitelist those quirks to only apply to the correct manufacturer / models. It's there for almost all other quirks, but missing for these two quirks. (MODELS_INFO is missing from those quirks -- see linked issues/PRs/comments between this and my last comment for reference)

@dumpfheimer
Copy link
Contributor Author

I think there are multiple models that should use this quirk and that is why the model was omitted, not 100% sure, though.

My model is lumi.switch.n2aeu1

This is the signature, copied from the debug json
{
"node_descriptor": "NodeDescriptor(logical_type=, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=, mac_capability_flags=, manufacturer_code=4447, maximum_buffer_size=127, maximum_incoming_transfer_size=100, server_mask=11264, maximum_outgoing_transfer_size=100, descriptor_capability_field=, *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": "0x0000",
"input_clusters": [
"0x0000",
"0x0002",
"0x0003",
"0x0004",
"0x0005",
"0x0006",
"0x0009",
"0x0012",
"0x0702",
"0xfcc0"
],
"output_clusters": [
"0x000a",
"0x0019"
]
},
"2": {
"profile_id": "0x0104",
"device_type": "0x0000",
"input_clusters": [
"0x0000",
"0x0003",
"0x0004",
"0x0005",
"0x0006",
"0x0012",
"0xfcc0"
],
"output_clusters": []
},
"21": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x000c"
],
"output_clusters": []
},
"31": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x000c"
],
"output_clusters": []
},
"41": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x0012"
],
"output_clusters": []
},
"42": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x0012"
],
"output_clusters": []
},
"51": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x0012"
],
"output_clusters": []
},
"61": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x0012"
],
"output_clusters": []
},
"242": {
"profile_id": "0xa1e0",
"device_type": "0x0061",
"input_clusters": [],
"output_clusters": [
"0x0021"
]
}
},
"manufacturer": "LUMI",
"model": "lumi.switch.n2aeu1"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants