NorthernMan54 / node-red-contrib-homebridge-automation

Homebridge and Node-RED Integration
Apache License 2.0
107 stars 18 forks source link

Accessories with Duplicate Names - continuation of #30 #109

Closed jeffgregx2 closed 1 year ago

jeffgregx2 commented 1 year ago

Hi,

I've been trying to use the homebridge-automation plugin to access devices created by a second plugin - homebridge-kumo (Mitsubishi Kumo Cloud devices - i.e., Heating/Cooling devices). This is essentially the same problem reported by #30 .

image

As part of #30, support for Nest was added with the following changes in Service.js:

if (this.name) {
  // Fix for #30
  if (context.manufacturer === "Nest" && (this.name === "Fan" || this.name === "Eco Mode")) {
    fullName = context.name + " - " + this.name;
  } else {
    context.name = this.name;
    fullName = context.name;
  }
}

A simple workaround to fix this issue is as follows:

if (this.name) {
  // Fix for #30
  if (context.manufacturer === "Nest" && (this.name === "Fan" || this.name === "Eco Mode")) {
    fullName = context.name + " - " + this.name;
  } else if (context.manufacturer === "Mitsubishi" && !fullName.includes(this.name)) {
    fullName = context.name + " - " + this.name;
  } else {
    context.name = this.name;
    fullName = context.name;
  }
}

however I'm not sure I totally understand why the else clause is arranged the way it is. I would like to propose a "fix" as follows which attempts to preserve context.name if different from this.name and only do the final else clause as a final gasp. Perhaps I'm missing something though.

if (this.name) {
  // Fix for #30
  if (context.manufacturer === "Nest" && (this.name === "Fan" || this.name === "Eco Mode")) {
    fullName = context.name + " - " + this.name;
  } else if (context.name != null && context.name.trim() != "" && !context.name.includes(this.name)) {
    // Since we have two names, let them stand
    fullName = context.name;
  } else {
    context.name = this.name;
    fullName = context.name;
  }
}

In my testing this seems to result in the desired output: image

Thanks, -Jeff

NorthernMan54 commented 1 year ago

Pls keep in mind that HomeKit has an optional hierarchical naming structure, where in this particular context, this.name is the service name, and context.name is the accessory name.

What the code is doing, is checking if the service is named, and if it is using that as the name, if not defaults to the accessory name.

I tried your recommendation

else if (context.name != null && context.name.trim() != "" && !context.name.includes(this.name)) {
    // Since we have two names, let them stand
    fullName = context.name;

And in my setup it broke all my devices with hierarchical naming

So am recommending that this be implemented for your issue

else if (context.manufacturer === "Mitsubishi" && !fullName.includes(this.name)) {
    fullName = context.name + " - " + this.name;
jeffgregx2 commented 1 year ago

Any chance you can send me an example of the hierarchical naming? I don’t have any other devices so I’m trying to come up to speed. Given the number of issues around naming that exists it would be nice to find a more general solution if it exists. What you propose may in fact be the more general solution but I’d love to at least understand it more fully.

Thanks, -Jeff

On Jan 8, 2023, at 11:44 AM, Northern Man @.***> wrote:

Pls keep in mind that HomeKit has an optional hierarchical naming structure, where in this particular context, this.name is the service name, and context.name is the accessory name.

What the code is doing, is checking if the service is named, and if it is using that as the name, if not defaults to the accessory name.

I tried your recommendation

else if (context.name != null && context.name.trim() != "" && !context.name.includes(this.name)) { // Since we have two names, let them stand fullName = context.name; And in my setup it broke all my devices with hierarchical naming

So am recommending that this be implemented for your issue

else if (context.manufacturer === "Mitsubishi" && !fullName.includes(this.name)) { fullName = context.name + " - " + this.name; — Reply to this email directly, view it on GitHub https://github.com/NorthernMan54/node-red-contrib-homebridge-automation/issues/109#issuecomment-1374878036, or unsubscribe https://github.com/notifications/unsubscribe-auth/A5ENRBZGN7HBKT27WP7I57TWRLVGZANCNFSM6AAAAAATUTGPBI. You are receiving this because you authored the thread.

NorthernMan54 commented 1 year ago

This is the discovery object from my Dryer - which is a problematic use case

Accessory Name - Dryer Power

Service 1 - Dryer Power ENERGY Total History Service 2 - Dryer Power ENERGY Total Service 3 - Dryer Power

 {
      "aid": 29,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Dryer Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "130C86-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Dryer Power ENERGY Total",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E863F10C-079E-48FF-8F27-9C2605A29F52",
              "iid": 11,
              "value": 0,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Total Consumption",
              "format": "float",
              "unit": "kWh"
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "Dryer Power ENERGY Total",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            },
            {
              "type": "E863F10D-079E-48FF-8F27-9C2605A29F52",
              "iid": 13,
              "value": 0,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Current Consumption",
              "format": "float",
              "unit": "W"
            }
          ]
        },
        {
          "type": "E863F007-079E-48FF-8F27-9C2605A29F52",
          "iid": 14,
          "characteristics": [
            {
              "type": "E863F11C-079E-48FF-8F27-9C2605A29F52",
              "iid": 18,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W1",
              "format": "data"
            },
            {
              "type": "E863F121-079E-48FF-8F27-9C2605A29F52",
              "iid": 19,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W2",
              "format": "data"
            },
            {
              "type": "23",
              "iid": 15,
              "value": "Dryer Power ENERGY Total History",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "E863F116-079E-48FF-8F27-9C2605A29F52",
              "iid": 16,
              "value": "0yA3AQAAAAC3SjEoAwcCDgEOAcAPwA/adAAAAAAAAAEB",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R1",
              "format": "data"
            },
            {
              "type": "E863F117-079E-48FF-8F27-9C2605A29F52",
              "iid": 17,
              "value": "AA==",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R2",
              "format": "data"
            }
          ]
        },
        {
          "type": "49",
          "iid": 24,
          "characteristics": [
            {
              "type": "23",
              "iid": 25,
              "value": "Dryer Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 26,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 27,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
NorthernMan54 commented 1 year ago

FYI - The latest version includes this for your issue

else if (context.manufacturer === "Mitsubishi" && !fullName.includes(this.name)) {
    fullName = context.name + " - " + this.name;

If you have a better suggestion we can look at this further

jeffgregx2 commented 1 year ago

I really appreciate it. FYI - I am looking at this at the moment - I needed to build an environment hence the delay since I didn’t have a way to examine while running.

In any case, as I examine the code it appears that context is the Accessory Information (3E) object associated with the Service array. In the examples I have I see one per Service array (I assume they are optional).

This yields what looks like the following:

Dryer Power Accessories: Accessory, AID: 29

Please note the previously attached JSON output was only partial - I am assuming it was from the Accessory array contents.

Mitsubishi AC Accessories: Accessory, AID: 1

and so forth.

For the Mitsubishi services it appears the proper name is:

  Accessory Info.name “-“ Service.name

This would yield:

  Loft Bedroom - Heater Cooler
  Loft Bedroom - Fan
  Loft Bedroom - Dehumidifier

etc within the toList() code.

The same logic yields:

  Dryer Power - Dryer Power ENERGY Total
  Dryer Power - Dryer Power ENERGY Total History
  Dryer Power - Dryer Power

While this seems totally reasonable the current code in toList() I think yields:

  Dryer Power ENERGY Total - Dryer Power ENERGY Total
  Dryer Power ENERGY Total History - Dryer Power ENERGY Total History
  Dryer Power - Dryer Power

I’m not sure why this is the desired state - I must be missing something. With a sample size of 2 (not good) it appears the Accessory Information.name is the group name to ensure uniqueness to the naming (although probably doesn’t). Part of the issue is the lack of uniqueness - I see that each accessory should have an AID associated with it. I’m assuming it’s an internally generated ID? According to the Apple specs, there is supposed to be a “uniqueIdentifier” (UUID) but I don’t see it in the objects I have access to (perhaps I need to go further upstream). Having some form of a unique ID that we could use to help select from the list would help prevent duplicate names (which are just attributes) from causing failure.

Is there a relatively inexpensive device that causes this issue? I’d love to help figure out what the right solution is (and then what we need if that is not doable), it would be easier to debug if I could reproduce the problem and then sit back and think.

-Jeff

P.S. - I have the Accessory information for Mitsubishi in JSON output is that helps. P.P.S - If you would like to take this offline I am happy to do so :-)

On Jan 11, 2023, at 11:34 AM, Northern Man @.***> wrote:

FYI - The latest version includes this for your issue

else if (context.manufacturer === "Mitsubishi" && !fullName.includes(this.name)) { fullName = context.name + " - " + this.name; If you have a better suggestion we can look at this further

— Reply to this email directly, view it on GitHub https://github.com/NorthernMan54/node-red-contrib-homebridge-automation/issues/109#issuecomment-1379108282, or unsubscribe https://github.com/notifications/unsubscribe-auth/A5ENRBYD2AP7E5GID45RJW3WR3OJPANCNFSM6AAAAAATUTGPBI. You are receiving this because you authored the thread.

NorthernMan54 commented 1 year ago

A couple of comments for background:

1 - For this I'm using the HAP interface which is documented in 'HomeKit Accessory Protocol Specification'. If you look UUID is not used in the spec.

2 - AID and IID unfortunately are not long lived and can change in some scenarios when a homebridge configuration is changed or restarted. ( You can see this by your devices moving to the 'default room' in the Home App )

When I pulled this together, my thought on node naming was a combination of Accessory / Device Name and Device Type. With the device type being based on the individual characteristic type. So for example a weather sensor device would have the ability to select temperature or humidity data

ie

image

This was also driven by the event / notification model within the HAP interface being at the characteristic level.

To recreate the issue, no need to purchase a device, just grab an accessory dump from your homebridge instance and put it through the device parser. If you look in the tools directory there is a file called parseAccessories.js which runs the device parser against an accessory dump file.

ie

node parseAccessories.js ~/Desktop/tasmota.json

And you can collect an accessory dump with this

curl -X PUT http://192.168.1.11:33615/accessories --header "Content-Type:Application/json" --header "authorization: 031-45-154" > ~/Desktop/tasmota.json

Just change the IP address and port to be your problematic homebridge instance.

This allows you to quickly try things without restarting node-red etc

NorthernMan54 commented 1 year ago

PS - An Accessory Dump from one of my instances

{
  "accessories": [
    {
      "aid": 1,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "homebridge.io",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "homebridge",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Tasmota 5019",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "CC:22:3D:E3:CF:34",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "1.6.0",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "A2",
          "iid": 2000000008,
          "characteristics": [
            {
              "type": "37",
              "iid": 9,
              "value": "1.1.0",
              "perms": [
                "pr"
              ],
              "description": "Version",
              "format": "string",
              "maxLen": 64
            }
          ]
        }
      ]
    },
    {
      "aid": 34,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "SmartValve",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Water",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "6BAFD7-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Water",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 1,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 36,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "BME  Leak",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Water Meter",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "860695-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0sensors",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "82",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Water Meter ANALOG Moisture",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "10",
              "iid": 10,
              "value": 21,
              "perms": [
                "ev",
                "pr"
              ],
              "description": "Current Relative Humidity",
              "format": "float",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "8A",
          "iid": 12,
          "characteristics": [
            {
              "type": "23",
              "iid": 13,
              "value": "Water Meter Temperature",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "11",
              "iid": 14,
              "value": 22.3,
              "perms": [
                "ev",
                "pr"
              ],
              "description": "Current Temperature",
              "format": "float",
              "unit": "celsius",
              "minValue": -100,
              "maxValue": 100,
              "minStep": 0.1
            },
            {
              "type": "E3",
              "iid": 15,
              "value": "Water Meter Temperature",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "E863F007-079E-48FF-8F27-9C2605A29F52",
          "iid": 16,
          "characteristics": [
            {
              "type": "E863F11C-079E-48FF-8F27-9C2605A29F52",
              "iid": 20,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W1",
              "format": "data"
            },
            {
              "type": "E863F121-079E-48FF-8F27-9C2605A29F52",
              "iid": 21,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W2",
              "format": "data"
            },
            {
              "type": "23",
              "iid": 17,
              "value": "Water Meter ANALOG Moisture History",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "E863F116-079E-48FF-8F27-9C2605A29F52",
              "iid": 18,
              "value": "wDT0AQAAAAD0V3snBQECAQICAgICAwLAD8AP2MwAAAAAAAABAQ==",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R1",
              "format": "data"
            },
            {
              "type": "E863F117-079E-48FF-8F27-9C2605A29F52",
              "iid": 19,
              "value": "AA==",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R2",
              "format": "data"
            }
          ]
        },
        {
          "type": "82",
          "iid": 22,
          "characteristics": [
            {
              "type": "23",
              "iid": 23,
              "value": "Water Meter BME280 Humidity",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "10",
              "iid": 24,
              "value": 33,
              "perms": [
                "ev",
                "pr"
              ],
              "description": "Current Relative Humidity",
              "format": "float",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 25,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "B77831FD-D66A-46A4-B66D-FD7EE8DFE3CE",
          "iid": 26,
          "characteristics": [
            {
              "type": "23",
              "iid": 27,
              "value": "Water Meter BME280 Pressure",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "E863F10F-079E-48FF-8F27-9C2605A29F52",
              "iid": 28,
              "value": 994,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Air Pressure",
              "format": "uint16",
              "unit": "hPa",
              "minValue": 300,
              "maxValue": 1100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 29,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "8A",
          "iid": 30,
          "characteristics": [
            {
              "type": "23",
              "iid": 31,
              "value": "Water Meter DewPoint",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "11",
              "iid": 32,
              "value": 5.2,
              "perms": [
                "ev",
                "pr"
              ],
              "description": "Current Temperature",
              "format": "float",
              "unit": "celsius",
              "minValue": -100,
              "maxValue": 100,
              "minStep": 0.1
            },
            {
              "type": "E3",
              "iid": 33,
              "value": "Water Meter DewPoint",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 40,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Dining Room Chandelier",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "A97667-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Dining Room Chandelier",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 50,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 41,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Garage Door",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Garage Door",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "FB6A07-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "41",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Garage Door",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "E",
              "iid": 10,
              "value": 1,
              "perms": [
                "ev",
                "pr"
              ],
              "description": "Current Door State",
              "format": "uint8",
              "minValue": 0,
              "maxValue": 4,
              "minStep": 1,
              "valid-values": [
                0,
                1,
                2,
                3,
                4
              ]
            },
            {
              "type": "32",
              "iid": 11,
              "value": 1,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Target Door State",
              "format": "uint8",
              "minValue": 0,
              "maxValue": 1,
              "minStep": 1,
              "valid-values": [
                0,
                1
              ]
            },
            {
              "type": "24",
              "iid": 12,
              "value": 0,
              "perms": [
                "ev",
                "pr"
              ],
              "description": "Obstruction Detected",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 13,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 44,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "WiOn",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Dehumidifier",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "0073C8-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Dehumidifier",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 50,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "WiOn",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Bathroom Fan",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "01F87E-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Bathroom Fan",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 53,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Sonoff iFan03",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Master Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "2D9EB5-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Master Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "40",
          "iid": 12,
          "characteristics": [
            {
              "type": "23",
              "iid": 13,
              "value": "Master Fan",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 14,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "29",
              "iid": 15,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Rotation Speed",
              "format": "float",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 16,
              "value": "Master Fan",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 58,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "CE-WF500D",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Deck Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "EF159D-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Deck Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 99,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 59,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "CE-WF500D",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Firepit light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "3A62AD-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Firepit light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 100,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 63,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Sonoff iFan03",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "East Bedroom",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "303057-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "East Bedroom",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "40",
          "iid": 12,
          "characteristics": [
            {
              "type": "23",
              "iid": 13,
              "value": "East Bedroom Fan",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 14,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "29",
              "iid": 15,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Rotation Speed",
              "format": "float",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 16,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 66,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "WiOn",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Door Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "0086F2-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Door Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 1,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 68,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Front Soffit",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "0DCAD4-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Front Soffit",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 100,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 69,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Front Hall",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "23CAC5-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Front Hall",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 100,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 70,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Garage Soffit",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "0B3CC4-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Garage Soffit",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 45,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 75,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "WiOn",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Shed Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "02231D-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Shed Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 86,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "MCULED",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Side Counter",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "AC545F-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Side Counter",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "8",
              "iid": 11,
              "value": 100,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Brightness",
              "format": "int",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "13",
              "iid": 12,
              "value": 65,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Hue",
              "format": "float",
              "unit": "arcdegrees",
              "minValue": 0,
              "maxValue": 360,
              "minStep": 1
            },
            {
              "type": "2F",
              "iid": 13,
              "value": 100,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Saturation",
              "format": "float",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 14,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 15,
          "characteristics": [
            {
              "type": "23",
              "iid": 16,
              "value": "Side Counter",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 17,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 18,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 89,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "WiOn",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Router Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "00FF8D-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Router Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 1,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 93,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Trailer Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "139827-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Trailer Power ENERGY Total",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E863F10C-079E-48FF-8F27-9C2605A29F52",
              "iid": 11,
              "value": 0,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Total Consumption",
              "format": "float",
              "unit": "kWh"
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            },
            {
              "type": "E863F10D-079E-48FF-8F27-9C2605A29F52",
              "iid": 13,
              "value": 0,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Current Consumption",
              "format": "float",
              "unit": "W"
            }
          ]
        },
        {
          "type": "E863F007-079E-48FF-8F27-9C2605A29F52",
          "iid": 14,
          "characteristics": [
            {
              "type": "E863F11C-079E-48FF-8F27-9C2605A29F52",
              "iid": 18,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W1",
              "format": "data"
            },
            {
              "type": "E863F121-079E-48FF-8F27-9C2605A29F52",
              "iid": 19,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W2",
              "format": "data"
            },
            {
              "type": "23",
              "iid": 15,
              "value": "Trailer Power ENERGY Total History",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "E863F116-079E-48FF-8F27-9C2605A29F52",
              "iid": 16,
              "value": "82Y/AQAAAADBJTAoAwcCDgEOAcAPwA8OeAAAAAAAAAEB",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R1",
              "format": "data"
            },
            {
              "type": "E863F117-079E-48FF-8F27-9C2605A29F52",
              "iid": 17,
              "value": "AA==",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R2",
              "format": "data"
            }
          ]
        },
        {
          "type": "49",
          "iid": 20,
          "characteristics": [
            {
              "type": "23",
              "iid": 21,
              "value": "Trailer Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 22,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 23,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 105,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Tuya MCU",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "Washer Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "F52066-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "49",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "Washer Power ENERGY Total",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E863F10C-079E-48FF-8F27-9C2605A29F52",
              "iid": 11,
              "value": 0,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Total Consumption",
              "format": "float",
              "unit": "kWh"
            },
            {
              "type": "E3",
              "iid": 12,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            },
            {
              "type": "E863F10D-079E-48FF-8F27-9C2605A29F52",
              "iid": 13,
              "value": 0,
              "perms": [
                "pr",
                "ev"
              ],
              "description": "Current Consumption",
              "format": "float",
              "unit": "W"
            }
          ]
        },
        {
          "type": "E863F007-079E-48FF-8F27-9C2605A29F52",
          "iid": 14,
          "characteristics": [
            {
              "type": "E863F11C-079E-48FF-8F27-9C2605A29F52",
              "iid": 18,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W1",
              "format": "data"
            },
            {
              "type": "E863F121-079E-48FF-8F27-9C2605A29F52",
              "iid": 19,
              "perms": [
                "pw",
                "hd"
              ],
              "description": "S2W2",
              "format": "data"
            },
            {
              "type": "23",
              "iid": 15,
              "value": "Washer Power ENERGY Total History",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "E863F116-079E-48FF-8F27-9C2605A29F52",
              "iid": 16,
              "value": "2vk+AQAAAAA8KzAoAwcCDgEOAcAPwA9PeAAAAAAAAAEB",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R1",
              "format": "data"
            },
            {
              "type": "E863F117-079E-48FF-8F27-9C2605A29F52",
              "iid": 17,
              "value": "AA==",
              "perms": [
                "pr",
                "ev",
                "hd"
              ],
              "description": "S2R2",
              "format": "data"
            }
          ]
        },
        {
          "type": "49",
          "iid": 20,
          "characteristics": [
            {
              "type": "23",
              "iid": 21,
              "value": "Washer Power",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 22,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 23,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    },
    {
      "aid": 106,
      "services": [
        {
          "type": "3E",
          "iid": 1,
          "characteristics": [
            {
              "type": "14",
              "iid": 2,
              "perms": [
                "pw"
              ],
              "description": "Identify",
              "format": "bool"
            },
            {
              "type": "20",
              "iid": 3,
              "value": "Tasmota",
              "perms": [
                "pr"
              ],
              "description": "Manufacturer",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "21",
              "iid": 4,
              "value": "Sonoff iFan03",
              "perms": [
                "pr"
              ],
              "description": "Model",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "23",
              "iid": 5,
              "value": "West Bedroom Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "30",
              "iid": 6,
              "value": "302F1B-jesse",
              "perms": [
                "pr"
              ],
              "description": "Serial Number",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "52",
              "iid": 7,
              "value": "9.5.0tasmota",
              "perms": [
                "pr"
              ],
              "description": "Firmware Revision",
              "format": "string"
            }
          ]
        },
        {
          "type": "43",
          "iid": 8,
          "characteristics": [
            {
              "type": "23",
              "iid": 9,
              "value": "West Bedroom Light",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 10,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "E3",
              "iid": 11,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        },
        {
          "type": "40",
          "iid": 12,
          "characteristics": [
            {
              "type": "23",
              "iid": 13,
              "value": "West Bedroom Fan",
              "perms": [
                "pr"
              ],
              "description": "Name",
              "format": "string",
              "maxLen": 64
            },
            {
              "type": "25",
              "iid": 14,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "On",
              "format": "bool"
            },
            {
              "type": "29",
              "iid": 15,
              "value": 0,
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Rotation Speed",
              "format": "float",
              "unit": "percentage",
              "minValue": 0,
              "maxValue": 100,
              "minStep": 1
            },
            {
              "type": "E3",
              "iid": 16,
              "value": "",
              "perms": [
                "ev",
                "pr",
                "pw"
              ],
              "description": "Configured Name",
              "format": "string"
            }
          ]
        }
      ]
    }
  ]
}
bakman2 commented 1 year ago

I don't not want to hijack this issue, but I see everything coming from zigbee2mqtt as duplicate, accessories from other plugins show up properly with a single entry.

image

Is there an "easy" remedy for this ?

edit - restarted my system (running zigbee2mqtt/homebridge/nr) and all good again. spoke too soon :(

NorthernMan54 commented 1 year ago

@bakman2 Can you open a new issue, and include an accessory dump. If you look up this issue, instructions are included.

Is there a chance that your zigbee2mqtt is unstable and restarting on a regular basis ? And the duplicates are old versions/instances ?

bakman2 commented 1 year ago

Is there a chance that your zigbee2mqtt is unstable and restarting on a regular basis ? And the duplicates are old versions/instances ?

Yes, all of the above (trying to migrate to a new server). Still need for a new issue or is there a quick answer ?

NorthernMan54 commented 1 year ago

Am thinking you need to stabilize zigbee2mqtt, then the problem will be resolved.

bakman2 commented 1 year ago

Am thinking you need to stabilize zigbee2mqtt, then the problem will be resolved.

Hmm I cleared the zigbee2mqtt topic from the broker, restarted everything (i am using homebridge does that matter?), everything came back duplicated :(

NorthernMan54 commented 1 year ago

Okay, back to what I asked for earlier, a homebridge accessory dump. Likely two of them.

one when you restart everything and it is not duplicate, and one once the duplicates appear.

bakman2 commented 1 year ago

Okay, back to what I asked for earlier, a homebridge accessory dump. Likely two of them.

one when you restart everything and it is not duplicate, and one once the duplicates appear.

Ok perhaps it is very helpful if I stop all my leftover homebridge instances....pffff sorry for the confusion, all good now.

NorthernMan54 commented 1 year ago

Glad to hear you solved this