Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TS011F by _TZ3000_okaz9tjs #1966

Closed
Fierydwarf opened this issue Nov 27, 2022 · 29 comments · Fixed by #2069
Closed

TS011F by _TZ3000_okaz9tjs #1966

Fierydwarf opened this issue Nov 27, 2022 · 29 comments · Fixed by #2069
Labels
Tuya Request/PR regarding a Tuya device

Comments

@Fierydwarf
Copy link

Previously i had issues with my TS011F by _TZ3000_okaz9tjs Tuya plug not showing the correct values - the issues were resolved here (#1764) by adding quirks.
Now i have another issue - the energy monitoring plug is now not available to the home assistant energy dashboard via Energy Dashboard > Add Device. it was before using quirks to modify the values.

For the device to be avaliable after modifying it using quirks. I hav a few of these plugs and would like to resolve this before adding them

Device signature
{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4660, maximum_buffer_size=108, maximum_incoming_transfer_size=0, server_mask=11264, maximum_outgoing_transfer_size=0, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
  "endpoints": {
    "1": {
      "profile_id": 260,
      "device_type": "0x010a",
      "in_clusters": [
        "0x0000",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0x0702",
        "0x0b04",
        "0xe001"
      ],
      "out_clusters": []
    }
  },
  "manufacturer": "_TZ3000_okaz9tjs",
  "model": "TS011F",
  "class": "ts011f_plug.Plug_v2"
}
Diagnostic information
{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2022.11.4",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.10.7",
    "docker": true,
    "arch": "aarch64",
    "timezone": "Europe/London",
    "os_name": "Linux",
    "os_version": "5.15.61-v8",
    "supervisor": "2022.11.2",
    "host_os": "Home Assistant OS 9.3",
    "docker_version": "20.10.18",
    "chassis": "embedded",
    "run_as_root": true
  },
  "custom_components": {
    "pyscript": {
      "version": "1.3.3",
      "requirements": [
        "croniter==1.3.4",
        "watchdog==2.1.6"
      ]
    },
    "uptime_kuma": {
      "version": "1.2.1",
      "requirements": [
        "pyuptimekuma==0.0.6"
      ]
    },
    "kodi_media_sensors": {
      "version": "3.8.0",
      "requirements": []
    },
    "mass": {
      "version": "2022.11.0",
      "requirements": [
        "music-assistant==1.8.7",
        "git+https://github.com/music-assistant/databases@fix-breaking-sqlalchemy-cursor-changes#databases==0.6.2"
      ]
    },
    "alarmo": {
      "version": "v1.9.6",
      "requirements": []
    },
    "hildebrandglow_dcc": {
      "version": "0.6.0",
      "requirements": []
    },
    "alexa_media": {
      "version": "4.3.2",
      "requirements": [
        "alexapy==1.26.4",
        "packaging>=20.3",
        "wrapt>=1.12.1"
      ]
    },
    "deebot": {
      "version": "1.5.0",
      "requirements": [
        "deebot-client==1.6.0",
        "numpy>=1.21.2"
      ]
    },
    "spotcast": {
      "version": "v3.6.30",
      "requirements": [
        "spotify_token==1.0.0"
      ]
    },
    "huesyncbox": {
      "version": "1.23.0",
      "requirements": [
        "aiohuesyncbox==0.0.21"
      ]
    },
    "watchman": {
      "version": "0.5.1",
      "requirements": [
        "prettytable==3.0.0"
      ]
    },
    "unifigateway": {
      "version": "0.3.3",
      "requirements": [
        "pyunifi==2.21"
      ]
    },
    "hacs": {
      "version": "1.28.4",
      "requirements": [
        "aiogithubapi>=22.2.4"
      ]
    },
    "sonarr_upcoming_media": {
      "version": "0.2.7",
      "requirements": []
    },
    "anniversaries": {
      "version": "4.5.0",
      "requirements": [
        "python-dateutil>=2.8.1",
        "integrationhelper>=0.2.2",
        "voluptuous>=0.12.1"
      ]
    },
    "google_home": {
      "version": "1.9.15",
      "requirements": [
        "glocaltokens==0.6.8"
      ]
    },
    "ui_lovelace_minimalist": {
      "version": "v1.1.6-hotfix",
      "requirements": [
        "aiofiles==0.8.0",
        "aiogithubapi>=22.2.4"
      ]
    },
    "sonoff": {
      "version": "3.3.1",
      "requirements": [
        "pycryptodome>=3.6.6"
      ]
    },
    "nodered": {
      "version": "1.1.2",
      "requirements": []
    }
  },
  "integration_manifest": {
    "domain": "zha",
    "name": "Zigbee Home Automation",
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/zha",
    "requirements": [
      "bellows==0.34.2",
      "pyserial==3.5",
      "pyserial-asyncio==0.6",
      "zha-quirks==0.0.86",
      "zigpy-deconz==0.19.0",
      "zigpy==0.51.5",
      "zigpy-xbee==0.16.2",
      "zigpy-zigate==0.10.3",
      "zigpy-znp==0.9.1"
    ],
    "usb": [
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*2652*",
        "known_devices": [
          "slae.sh cc2652rb stick"
        ]
      },
      {
        "vid": "1A86",
        "pid": "55D4",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus v2"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*zigstar*",
        "known_devices": [
          "ZigStar Coordinators"
        ]
      },
      {
        "vid": "1CF1",
        "pid": "0030",
        "description": "*conbee*",
        "known_devices": [
          "Conbee II"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8A2A",
        "description": "*zigbee*",
        "known_devices": [
          "Nortek HUSBZB-1"
        ]
      },
      {
        "vid": "0403",
        "pid": "6015",
        "description": "*zigate*",
        "known_devices": [
          "ZiGate+"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*zigate*",
        "known_devices": [
          "ZiGate"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8B34",
        "description": "*bv 2010/10*",
        "known_devices": [
          "Bitron Video AV2010/10"
        ]
      }
    ],
    "codeowners": [
      "@dmulcahey",
      "@adminiuga",
      "@puddly"
    ],
    "zeroconf": [
      {
        "type": "_esphomelib._tcp.local.",
        "name": "tube*"
      },
      {
        "type": "_zigate-zigbee-gateway._tcp.local.",
        "name": "*zigate*"
      },
      {
        "type": "_zigstar_gw._tcp.local.",
        "name": "*zigstar*"
      }
    ],
    "dependencies": [
      "file_upload"
    ],
    "after_dependencies": [
      "onboarding",
      "usb",
      "zeroconf"
    ],
    "iot_class": "local_polling",
    "loggers": [
      "aiosqlite",
      "bellows",
      "crccheck",
      "pure_pcapy3",
      "zhaquirks",
      "zigpy",
      "zigpy_deconz",
      "zigpy_xbee",
      "zigpy_zigate",
      "zigpy_znp"
    ],
    "is_built_in": true
  },
  "data": {
    "ieee": "**REDACTED**",
    "nwk": 50457,
    "manufacturer": "_TZ3000_okaz9tjs",
    "model": "TS011F",
    "name": "_TZ3000_okaz9tjs TS011F",
    "quirk_applied": true,
    "quirk_class": "ts011f_plug.Plug_v2",
    "manufacturer_code": 4660,
    "power_source": "Mains",
    "lqi": 138,
    "rssi": null,
    "last_seen": "2022-11-27T17:33:10",
    "available": true,
    "device_type": "Router",
    "signature": {
      "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4660, maximum_buffer_size=108, maximum_incoming_transfer_size=0, server_mask=11264, maximum_outgoing_transfer_size=0, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
      "endpoints": {
        "1": {
          "profile_id": 260,
          "device_type": "0x010a",
          "in_clusters": [
            "0x0000",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0x0702",
            "0x0b04",
            "0xe001"
          ],
          "out_clusters": []
        }
      }
    },
    "active_coordinator": false,
    "entities": [
      {
        "entity_id": "button.kettle_identify",
        "name": "_TZ3000_okaz9tjs TS011F"
      },
      {
        "entity_id": "select.kettle_power_on_state",
        "name": "_TZ3000_okaz9tjs TS011F"
      },
      {
        "entity_id": "sensor.kettle_active_power",
        "name": "_TZ3000_okaz9tjs TS011F"
      },
      {
        "entity_id": "sensor.kettle_rms_current",
        "name": "_TZ3000_okaz9tjs TS011F"
      },
      {
        "entity_id": "sensor.kettle_rms_voltage",
        "name": "_TZ3000_okaz9tjs TS011F"
      },
      {
        "entity_id": "sensor.kettle_summation_delivered",
        "name": "_TZ3000_okaz9tjs TS011F"
      },
      {
        "entity_id": "switch.kettle_switch",
        "name": "_TZ3000_okaz9tjs TS011F"
      }
    ],
    "neighbors": [
      {
        "device_type": "Coordinator",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x0000",
        "permit_joining": "NotAccepting",
        "depth": "0",
        "lqi": "0"
      },
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x7DDB",
        "permit_joining": "NotAccepting",
        "depth": "1",
        "lqi": "0"
      },
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x8C82",
        "permit_joining": "NotAccepting",
        "depth": "1",
        "lqi": "1"
      },
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x2D85",
        "permit_joining": "NotAccepting",
        "depth": "1",
        "lqi": "117"
      },
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0xC290",
        "permit_joining": "NotAccepting",
        "depth": "1",
        "lqi": "0"
      },
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0xFB7C",
        "permit_joining": "NotAccepting",
        "depth": "0",
        "lqi": "0"
      },
      {
        "device_type": "Router",
        "rx_on_when_idle": "On",
        "relationship": "Sibling",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0xE02F",
        "permit_joining": "NotAccepting",
        "depth": "2",
        "lqi": "160"
      },
      {
        "device_type": "Unknown",
        "rx_on_when_idle": "On",
        "relationship": "NoneOfTheAbove",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x0CA1",
        "permit_joining": "NotAccepting",
        "depth": "0",
        "lqi": "117"
      },
      {
        "device_type": "Unknown",
        "rx_on_when_idle": "On",
        "relationship": "NoneOfTheAbove",
        "extended_pan_id": "**REDACTED**",
        "ieee": "**REDACTED**",
        "nwk": "0x0CA1",
        "permit_joining": "NotAccepting",
        "depth": "0",
        "lqi": "111"
      }
    ],
    "endpoint_names": [
      {
        "name": "ON_OFF_PLUG_IN_UNIT"
      }
    ],
    "user_given_name": "Kettle",
    "device_reg_id": "0fe7dad053ee83e039e01cda835c2ec0",
    "area_id": "kitchen",
    "cluster_details": {
      "1": {
        "device_type": {
          "name": "ON_OFF_PLUG_IN_UNIT",
          "id": 266
        },
        "profile_id": 260,
        "in_clusters": {
          "0x0000": {
            "endpoint_attribute": "basic",
            "attributes": {
              "0x0001": {
                "attribute_name": "app_version",
                "value": 160
              },
              "0x0004": {
                "attribute_name": "manufacturer",
                "value": "_TZ3000_okaz9tjs"
              },
              "0x0005": {
                "attribute_name": "model",
                "value": "TS011F"
              }
            },
            "unsupported_attributes": {
              "0x0013": {
                "attribute_name": "alarm_mask"
              }
            }
          },
          "0x0003": {
            "endpoint_attribute": "identify",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0004": {
            "endpoint_attribute": "groups",
            "attributes": {},
            "unsupported_attributes": {}
          },
          "0x0005": {
            "endpoint_attribute": "scenes",
            "attributes": {
              "0x0000": {
                "attribute_name": "count",
                "value": 0
              },
              "0x0001": {
                "attribute_name": "current_scene",
                "value": 0
              },
              "0x0002": {
                "attribute_name": "current_group",
                "value": 0
              },
              "0x0003": {
                "attribute_name": "scene_valid",
                "value": 0
              },
              "0x0004": {
                "attribute_name": "name_support",
                "value": 0
              },
              "0xfffd": {
                "attribute_name": "cluster_revision",
                "value": 1
              }
            },
            "unsupported_attributes": {
              "0x0005": {
                "attribute_name": "last_configured_by"
              }
            }
          },
          "0x0006": {
            "endpoint_attribute": "on_off",
            "attributes": {
              "0x0000": {
                "attribute_name": "on_off",
                "value": 1
              },
              "0x8000": {
                "attribute_name": "child_lock",
                "value": 0
              },
              "0x8001": {
                "attribute_name": "backlight_mode",
                "value": 255
              },
              "0x8002": {
                "attribute_name": "power_on_state",
                "value": 0
              }
            },
            "unsupported_attributes": {
              "0x4003": {
                "attribute_name": "start_up_on_off"
              }
            }
          },
          "0x0702": {
            "endpoint_attribute": "smartenergy_metering",
            "attributes": {
              "0x0000": {
                "attribute_name": "current_summ_delivered",
                "value": 4294969542
              },
              "0x0301": {
                "attribute_name": "multiplier",
                "value": 1
              },
              "0x0302": {
                "attribute_name": "divisor",
                "value": 100
              }
            },
            "unsupported_attributes": {
              "0x0400": {
                "attribute_name": "instantaneous_demand"
              },
              "0x0200": {
                "attribute_name": "status"
              },
              "0x0300": {
                "attribute_name": "unit_of_measure"
              },
              "0x0303": {
                "attribute_name": "summation_formatting"
              },
              "0x0304": {
                "attribute_name": "demand_formatting"
              },
              "0x0a00": {
                "attribute_name": "bill_to_date"
              },
              "0x0306": {
                "attribute_name": "metering_device_type"
              },
              "0x0006": {
                "attribute_name": "power_factor"
              },
              "0x0a01": {
                "attribute_name": "bill_to_date_time_stamp"
              },
              "0x0405": {
                "attribute_name": "cur_part_profile_int_start_time_delivered"
              },
              "0x0406": {
                "attribute_name": "cur_part_profile_int_start_time_received"
              },
              "0x0413": {
                "attribute_name": "cur_month_max_energy_carr_demand"
              },
              "0x0407": {
                "attribute_name": "cur_part_profile_int_value_delivered"
              },
              "0x0408": {
                "attribute_name": "cur_part_profile_int_value_received"
              },
              "0x000e": {
                "attribute_name": "current_block"
              },
              "0x000c": {
                "attribute_name": "current_block_period_consump_delivered"
              },
              "0x040d": {
                "attribute_name": "current_day_max_demand"
              },
              "0x0312": {
                "attribute_name": "alternative_unit_of_measure"
              },
              "0x0314": {
                "attribute_name": "alternative_consumption_formatting"
              },
              "0x0313": {
                "attribute_name": "alternative_demand_formatting"
              },
              "0x0019": {
                "attribute_name": "control_temperature"
              },
              "0x0414": {
                "attribute_name": "cur_month_min_energy_carr_demand"
              },
              "0x0416": {
                "attribute_name": "cur_year_min_energy_carr_demand"
              },
              "0x001a": {
                "attribute_name": "current_in_energy_carrier_demand"
              },
              "0x001d": {
                "attribute_name": "current_block_period_consump_received"
              },
              "0x0015": {
                "attribute_name": "current_in_energy_carrier_summ"
              },
              "0x0016": {
                "attribute_name": "current_out_energy_carrier_summ"
              },
              "0x0020": {
                "attribute_name": "active_register_tier_delivered"
              },
              "0x0021": {
                "attribute_name": "active_register_tier_received"
              },
              "0x0409": {
                "attribute_name": "current_day_max_pressure"
              },
              "0x001b": {
                "attribute_name": "current_out_energy_carrier_demand"
              },
              "0x0008": {
                "attribute_name": "current_max_demand_delivered_time"
              },
              "0x0009": {
                "attribute_name": "current_max_demand_received_time"
              },
              "0x0206": {
                "attribute_name": "current_meter_id"
              },
              "0x0600": {
                "attribute_name": "current_demand_delivered"
              },
              "0x0002": {
                "attribute_name": "current_max_demand_delivered"
              },
              "0x0003": {
                "attribute_name": "current_max_demand_received"
              },
              "0x040f": {
                "attribute_name": "current_month_max_demand"
              }
            }
          },
          "0x0b04": {
            "endpoint_attribute": "electrical_measurement",
            "attributes": {
              "0x0505": {
                "attribute_name": "rms_voltage",
                "value": 238
              },
              "0x0508": {
                "attribute_name": "rms_current",
                "value": 24
              },
              "0x050b": {
                "attribute_name": "active_power",
                "value": 0
              },
              "0x0602": {
                "attribute_name": "ac_current_multiplier",
                "value": 1
              },
              "0x0603": {
                "attribute_name": "ac_current_divisor",
                "value": 1000
              },
              "0xfffd": {
                "attribute_name": "cluster_revision",
                "value": 1
              }
            },
            "unsupported_attributes": {
              "0x0300": {
                "attribute_name": "ac_frequency"
              },
              "0x0601": {
                "attribute_name": "ac_voltage_divisor"
              },
              "0x0302": {
                "attribute_name": "ac_frequency_max"
              },
              "0x0604": {
                "attribute_name": "ac_power_multiplier"
              },
              "0x0605": {
                "attribute_name": "ac_power_divisor"
              },
              "0x0600": {
                "attribute_name": "ac_voltage_multiplier"
              },
              "0x0507": {
                "attribute_name": "rms_voltage_max"
              },
              "0x0401": {
                "attribute_name": "ac_frequency_divisor"
              },
              "0x0400": {
                "attribute_name": "ac_frequency_multiplier"
              },
              "0x050a": {
                "attribute_name": "rms_current_max"
              },
              "0x0000": {
                "attribute_name": "measurement_type"
              },
              "0x0403": {
                "attribute_name": "power_divisor"
              },
              "0x050d": {
                "attribute_name": "active_power_max"
              },
              "0x0306": {
                "attribute_name": "total_apparent_power"
              },
              "0x050f": {
                "attribute_name": "apparent_power"
              },
              "0x0103": {
                "attribute_name": "dc_current"
              },
              "0x030d": {
                "attribute_name": "meas_phase1st_harmonic_current"
              },
              "0x0312": {
                "attribute_name": "meas_phase11th_harmonic_current"
              },
              "0x030e": {
                "attribute_name": "meas_phase3rd_harmonic_current"
              },
              "0x030f": {
                "attribute_name": "meas_phase5th_harmonic_current"
              },
              "0x0310": {
                "attribute_name": "meas_phase7th_harmonic_current"
              },
              "0x0311": {
                "attribute_name": "meas_phase9th_harmonic_current"
              },
              "0x0303": {
                "attribute_name": "neutral_current"
              },
              "0x0910": {
                "attribute_name": "power_factor_ph_b"
              },
              "0x0a10": {
                "attribute_name": "power_factor_ph_c"
              },
              "0x0502": {
                "attribute_name": "instantaneous_active_current"
              },
              "0x0402": {
                "attribute_name": "power_multiplier"
              },
              "0x0304": {
                "attribute_name": "total_active_power"
              },
              "0x0305": {
                "attribute_name": "total_reactive_power"
              },
              "0x0404": {
                "attribute_name": "harmonic_current_multiplier"
              },
              "0x0405": {
                "attribute_name": "phase_harmonic_current_multiplier"
              },
              "0x0902": {
                "attribute_name": "active_current_ph_b"
              },
              "0x0510": {
                "attribute_name": "power_factor"
              }
            }
          },
          "0xe001": {
            "endpoint_attribute": "tuya_external_switch_type",
            "attributes": {},
            "unsupported_attributes": {
              "0xd030": {
                "attribute_name": "external_switch_type"
              }
            }
          }
        },
        "out_clusters": {}
      }
    }
  }
}
Additional logs
Paste any additional debug logs here.
Don't remove the extra line breaks outside the ``` marks.

Additional context
Add any other context or screenshots about the feature request here.

@javicalle
Copy link
Collaborator

You are using a local quirk. After reading the related issue not sure which is the quirk content.

Have you tried to remove and pair the device again?
Also you can try the reconfigure option from the device view.

@Fierydwarf
Copy link
Author

This section on the related issue resolved it

You would need enable the local quirk configuration. There are some info for example here:

#693 (comment)
Once configured, copy the current ts011f_plug.py file inside the custom_zha_quirks folder:

https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/tuya/ts011f_plug.py
Add the proposed quirk at the end of the file. That would be my proposal:

class Plug_v2(CustomDevice):
"""Another TS011F Tuya plug."""

signature = {
    MODEL: "TS011F",
    ENDPOINTS: {
        # "profile_id": 260,
        # "device_type": "0x0051",
        # "in_clusters": ["0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0702", "0x0b04", "0xe001"],
        # "out_clusters": []
        1: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
            INPUT_CLUSTERS: [
                Basic.cluster_id,
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                OnOff.cluster_id,
                Metering.cluster_id,
                ElectricalMeasurement.cluster_id,
                TuyaZBExternalSwitchTypeCluster.cluster_id,
            ],
            OUTPUT_CLUSTERS: [],
        },
    },
}
replacement = {
    ENDPOINTS: {
        1: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_PLUG_IN_UNIT,
            INPUT_CLUSTERS: [
                Basic.cluster_id,
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                TuyaZBOnOffAttributeCluster,
                TuyaZBMeteringCluster,
                TuyaZBElectricalMeasurement,
                TuyaZBExternalSwitchTypeCluster,
            ],
            OUTPUT_CLUSTERS: [],
        },
    },
}

Once added you need to restart HA, remove the device and pair it again.

As part of the process, i removed and repaired the device. -which resulted in the correct values being displayed. Ive also tried the reconfiguration option after repairing.
Do you think i should remove and re-add again?

@javicalle
Copy link
Collaborator

@dmulcahey Sorry to ping you directly, but I'm not familiar with the energy dashboard.

The related quirk just modify:

  • DEVICE_TYPE from SMART_PLUG to ON_OFF_PLUG_IN_UNIT
  • clusters definitions, but just the multiplier and divisor:
class TuyaZBMeteringCluster(CustomCluster, Metering):
    """Divides the kWh for tuya."""

    MULTIPLIER = 0x0301
    DIVISOR = 0x0302
    _CONSTANT_ATTRIBUTES = {MULTIPLIER: 1, DIVISOR: 100}


class TuyaZBElectricalMeasurement(CustomCluster, ElectricalMeasurement):
    """Divides the Current for tuya."""

    AC_CURRENT_MULTIPLIER = 0x0602
    AC_CURRENT_DIVISOR = 0x0603
    _CONSTANT_ATTRIBUTES = {AC_CURRENT_MULTIPLIER: 1, AC_CURRENT_DIVISOR: 1000}

No cluster_id or ep_attribute modification here, just the cluster class.
Can you point me to the HA code responsible for the Add device for the Energy Dashboard.

Thanks in advanced.

@dmulcahey
Copy link
Collaborator

Not sure what you mean. If it exposes a summation sensor you just need to go to the dashboard and add the device

@MattWestb
Copy link
Contributor

@javicalle The quirked device is not setting the multiplier and divisor so the quirk is adding them so the dashboard is shewing the right measurements.
Power measurements and more sensors if sending one value and then have one fixed/and* for presenting the right formatted to the host system.

The rest is OK Zigbee and is working OK (not all tuyas is very bad ;-)) ).

@javicalle
Copy link
Collaborator

User claims that it was possible to add the device to the Energy dashboard before apply the quirk.
Once the quirk is applied to the device, the device was not avaliable to add to the Energy Dashboard.

I'm not familiar with the energy dashboard because I don't have it enabled in my instalation, but I can't see any reason why the behavior would change after applying the quirk. And I am not able to locate where is this functionallity in HA to take a look.

@MattWestb
Copy link
Contributor

Restart HA so its loading all things OK and can hocking up the device with the new configuration.

@javicalle
Copy link
Collaborator

@Fierydwarf can you do a HA restart and try to add the device again?

@Fierydwarf
Copy link
Author

@javicalle Sure. To confirm what you'd want me to do. Remove the device from ZHA, reboot, re-add the device , reboot?

@javicalle
Copy link
Collaborator

I'm going to suggest:

  • remove the device from ZHA
  • reboot HA
  • re-add the device

At this point, try again to add the device to the Energy dashboard.

@javicalle
Copy link
Collaborator

Could be that the device is not avaliable to add to dashboard if already included?

@Fierydwarf
Copy link
Author

Could be that the device is not avaliable to add to dashboard if already included?

Unfortunately, removing and re-adding didn't work. I'll just not add it to the energy monitor. At least the numbers are correct.

@javicalle
Copy link
Collaborator

Maybe the problem is with the use of a local quirk.
I just checked that the previous issue was closed but no PR was made.
Can you create the PR with the changes?

@rofo69
Copy link

rofo69 commented Dec 9, 2022

I have this device and using the information above i created this quirk:-

`"""TS011F plug."""

from zigpy.profiles import zha
from zigpy.quirks import CustomCluster,CustomDevice
from zigpy.zcl.clusters.general import (
Basic,
GreenPowerProxy,
Groups,
Identify,
OnOff,
Ota,
Scenes,
Time,
)
from zigpy.zcl.clusters.homeautomation import ElectricalMeasurement
from zigpy.zcl.clusters.smartenergy import Metering

from zhaquirks.const import (
DEVICE_TYPE,
ENDPOINTS,
INPUT_CLUSTERS,
MODEL,
MODELS_INFO,
OUTPUT_CLUSTERS,
PROFILE_ID,
)
from zhaquirks.tuya import (
TuyaNewManufCluster,
TuyaZBE000Cluster,
TuyaZBElectricalMeasurement,
TuyaZBExternalSwitchTypeCluster,
TuyaZBMeteringCluster,
TuyaZBOnOffAttributeCluster,
)
from zhaquirks.tuya.mcu import EnchantedDevice

class TuyaZBMeteringCluster(CustomCluster, Metering):
"""Divides the kWh for tuya."""

MULTIPLIER = 0x0301
DIVISOR = 0x0302
_CONSTANT_ATTRIBUTES = {MULTIPLIER: 1, DIVISOR: 100}

class TuyaZBElectricalMeasurement(CustomCluster, ElectricalMeasurement):
#Divides the Current for tuya.
AC_CURRENT_MULTIPLIER = 0x0602
AC_CURRENT_DIVISOR = 0x0603
_CONSTANT_ATTRIBUTES = {AC_CURRENT_MULTIPLIER: 1, AC_CURRENT_DIVISOR: 1000}

class Plug(CustomDevice):
"""Another TS011F Tuya plug."""

signature = {
    MODEL: "TS011F",
    ENDPOINTS: {
        # "profile_id": 260,
        # "device_type": "0x0051",
        # "in_clusters": ["0x0000", "0x0003", "0x0004", "0x0005", "0x0006", "0x0702", "0x0b04", "0xe001"],
        # "out_clusters": []
        1: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.SMART_PLUG,
            INPUT_CLUSTERS: [
                Basic.cluster_id,
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                OnOff.cluster_id,
                Metering.cluster_id,
                ElectricalMeasurement.cluster_id,
                TuyaZBExternalSwitchTypeCluster.cluster_id,
            ],
            OUTPUT_CLUSTERS: [],
        },
    },
}
replacement = {
    ENDPOINTS: {
        1: {
            PROFILE_ID: zha.PROFILE_ID,
            DEVICE_TYPE: zha.DeviceType.ON_OFF_PLUG_IN_UNIT,
            INPUT_CLUSTERS: [
                Basic.cluster_id,
                Identify.cluster_id,
                Groups.cluster_id,
                Scenes.cluster_id,
                TuyaZBOnOffAttributeCluster,
                TuyaZBMeteringCluster,
                TuyaZBElectricalMeasurement,
                TuyaZBExternalSwitchTypeCluster,
            ],
            OUTPUT_CLUSTERS: [],
        },
    },
}

`
I added these two classes into the quirk:-

class TuyaZBMeteringCluster(CustomCluster, Metering):
class TuyaZBElectricalMeasurement(CustomCluster, ElectricalMeasurement):

which I understand are for adjusting the incorrect power metering figures, but mine are still way out.

It looks like the device has taken the quirk, and added three missing configuration items (backlight mode, child lock and power on state) but I'm not sure what to do to fix the numbers:-

image

@rofo69
Copy link

rofo69 commented Dec 9, 2022

However, I have an alternate version of this plug which display correctly (RMS number looks ok, and summaration delivered is in kwh) using a different quirk:-

image

Not sure if its relevant, but even the 'working' plug has strange values when clicking on kwh:-

image

@rofo69
Copy link

rofo69 commented Dec 9, 2022

FYI, for some reason the RMS current values are starting to report correctly, so all that is left is the total summation values.
I also removed those 2 classes I referred to and checked the cluster attributes so see those values were already correct.
I can confirm that before the quirk was installed, the device was selectable as an energy source for the energy dashboard, but it no longer appears now its using the quirk.

@mattsaxon
Copy link
Contributor

mattsaxon commented Dec 14, 2022

Previously i had issues with my TS011F by _TZ3000_okaz9tjs Tuya plug not showing the correct values - the issues were resolved here (#1764) by adding quirks. Now i have another issue - the energy monitoring plug is now not available to the home assistant energy dashboard via Energy Dashboard > Add Device. it was before using quirks to modify the values.

I've not added the quirk yet, but I can't add these plugs to the energy dashboard either. Perhaps this is an change that was caused by a newer HA, I'm using Home Assistant 2022.12.1 at the moment

@Fierydwarf
Copy link
Author

Previously i had issues with my TS011F by _TZ3000_okaz9tjs Tuya plug not showing the correct values - the issues were resolved here (#1764) by adding quirks. Now i have another issue - the energy monitoring plug is now not available to the home assistant energy dashboard via Energy Dashboard > Add Device. it was before using quirks to modify the values.

I've not added the quirk yet, but I can't add these plugs to the energy dashboard either. Perhaps this is an change that was caused by a newer HA, I'm using Home Assistant 2022.12.1 at the moment

I have that issue too! I added another plug to test if it I could add it to the energy dashboard with out the quirk and nothing.

@Fierydwarf
Copy link
Author

Maybe the problem is with the use of a local quirk. I just checked that the previous issue was closed but no PR was made. Can you create the PR with the changes?

PR?

@mattsaxon
Copy link
Contributor

PR, a GitHub Pull Request, to take the local quirk and include it in the zigpy standard delivery

@mattsaxon
Copy link
Contributor

mattsaxon commented Jan 2, 2023

OK, I've added the local quirk as @Fierydwarf has and had a look around. Seems to me the issue is that the plug doesn't support the following atribute

"0x0300": { "attribute_name": "unit_of_measure" },

Can anyone instruct me how to make a quirk return this when the device doesn't support it?

@MattWestb
Copy link
Contributor

look how the other attributes that is missing from the device is fixed here

# Tuya Zigbee Metering Cluster Correction Implementation
class TuyaZBMeteringCluster(CustomCluster, Metering):
"""Divides the kWh for tuya."""
MULTIPLIER = 0x0301
DIVISOR = 0x0302
_CONSTANT_ATTRIBUTES = {MULTIPLIER: 1, DIVISOR: 100}

And adding the 0x0300 and the definition is here in the system that is imprted
https://github.com/zigpy/zigpy/blob/a5ae12efc6510df9c487e775bef7af8937ad85f5/zigpy/zcl/clusters/smartenergy.py#L208..
The value you shall using i think is 0x00 kWh (Kilowatt Hours) & kW (Kilowatts) in pure binary format.
If you need other values look in ZCL R8 Table 10-72. UnitofMeasure Attribute Enumerations.

@javicalle
Copy link
Collaborator

Here you have a couple of examples:

  • class TuyaElectricalMeasurement(LocalDataCluster, Metering):
    """Custom class for total energy measurement."""
    cluster_id = Metering.cluster_id
    CURRENT_DELIVERED_ID = 0x0000
    CURRENT_RECEIVED_ID = 0x0001
    POWER_WATT = 0x0000
    """Setting unit of measurement."""
    _CONSTANT_ATTRIBUTES = {0x0300: POWER_WATT}
  • class TuyaValveWaterConsumed(Metering, TuyaLocalCluster):
    """Tuya Valve Water consumed cluster."""
    VOLUME_LITERS = 0x0007
    WATER_METERING = 0x02
    """Setting unit of measurement."""
    _CONSTANT_ATTRIBUTES = {
    0x0300: VOLUME_LITERS,
    0x0306: WATER_METERING,
    }

The later one (TuyaValveWaterConsumed) also defines the metering_device_type (0x0306), mapped here:

@TheJulianJES TheJulianJES added the Tuya Request/PR regarding a Tuya device label Jan 4, 2023
mattsaxon added a commit to mattsaxon/zha-device-handlers that referenced this issue Jan 5, 2023
@mattsaxon
Copy link
Contributor

mattsaxon commented Jan 5, 2023

Thanks @javicalle and @MattWestb , I've successfully tested locally and submitted a PR for both this issue and #1764.

@Fierydwarf do you want to see if it resolves your HA dashboard issues, for me it has.

dmulcahey pushed a commit that referenced this issue Jan 10, 2023
* Add support for TS011F by _TZ3000_okaz9tjs

Resolves issues #1764 and #1966

* Black formatting

* Flake8 formatting

* Don't override devicetype

* Rename v2 cluster and inherit from EnchantedDevice

* Flake8

* Moved MetereringClusterWithUnit to __init__.py
@arsenyspb
Copy link
Contributor

@mattsaxon could you leave code review & your suggestions in pull/2008 - based on issues/2005 there is a need to add MULTIPLIER and DIVISOR too? @javicalle I see you're already in the PR, maybe can you propose similar quirk for it?...

@mattsaxon
Copy link
Contributor

Id be pleased to take a look, but am away from computer for 3 weeks

@javicalle
Copy link
Collaborator

see you're already in the PR, maybe can you propose similar quirk for it?...

Not sure which PR are you refering.
In PR #2008 I have asked for some changes but no response from author.

@jesus51998
Copy link

Hi, I have a device kind “_TZ3000_okaz9tjs”, I followed the thread, but my device, don’t work well,
the energy and current are multiplier for 100 or 1000.
Somebody can help my.
1.- Delete device.
2.- delete folder cache
3.- copy file https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/tuya/ts011f_plug.py in my folder /config/custom_zha_quirks/
4.- In configuration.yaml insert
zha:
enable_quirks: true
custom_quirks_path: /config/custom_zha_quirks/
5.- Reboot HA.
6.- Add device

{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.FullFunctionDevice|MainsPowered|RxOnWhenIdle|AllocateAddress: 142>, manufacturer_code=4660, maximum_buffer_size=108, maximum_incoming_transfer_size=0, server_mask=11264, maximum_outgoing_transfer_size=0, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": "0x0104",
"device_type": "0x0100",
"input_clusters": [
"0x0000",
"0x0003",
"0x0004",
"0x0005",
"0x0006",
"0x000a",
"0x0702",
"0x0b04",
"0x1000",
"0xe000",
"0xe001"
],
"output_clusters": []
}
},
"manufacturer": "_TZ3000_okaz9tjs",
"model": "TS011F",
"class": "zigpy.device.Device"
}

@GuidoC1
Copy link

GuidoC1 commented Mar 8, 2024

For reference (as others might be looking for the same quick):
For the custom quirk for "device_type": "0x0100", as Jesus51998 was looking for, see this post. It has been confirmed to work by mutliple people.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Tuya Request/PR regarding a Tuya device
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants