Repository Analysis

make-all/tuya-local

Local support for Tuya devices in Home Assistant

3.2 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of make-all/tuya-local, a Python project with 3,180 GitHub stars. SynthScan v2.0 examined 344,707 lines of code across 1796 source files, recording 612 pattern matches distributed across 9 syntactic categories. The overall adjusted score of 3.2 places this repository in the Likely human-written band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

3.2
Adjusted Score
3.2
Raw Score
100%
Time Factor
2026-07-14
Last Push
3.2K
Stars
Python
Language
344.7K
Lines of Code
1.8K
Files
612
Pattern Hits
2026-07-14
Scan Date
0.02
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 44MEDIUM 124LOW 444

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 612 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Decorative Section Separators122 hits · 420 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_config_flow.py850# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py852# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py959# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py961# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1015# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1017# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1297# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1299# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1407# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1409# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1502# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1504# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1560# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1562# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1593# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1595# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1099# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1101# ---------------------------------------------------------------------------COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml134 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml136 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml163 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml165 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml195 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml197 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml250 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml252 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml276 # ==========================================COMMENT
MEDIUM…ts/tuya_local/devices/amicismart_1pjt_energymeter.yaml278 # ==========================================COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml12 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml14 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml40 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml42 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml70 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml72 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml87 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml89 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml120 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml122 # -------------------------------------------------------COMMENT
MEDIUM…nents/tuya_local/devices/inkbird_c236t_thermostat.yaml271 # -----------------------------------------------------------COMMENT
MEDIUM…nents/tuya_local/devices/inkbird_c236t_thermostat.yaml273 # -----------------------------------------------------------COMMENT
MEDIUM…nents/tuya_local/devices/inkbird_c236t_thermostat.yaml533 # -----------------------------------------------------------COMMENT
MEDIUM…nents/tuya_local/devices/inkbird_c236t_thermostat.yaml535 # -----------------------------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml8 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml10 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml31 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml33 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml80 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml82 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml126 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml128 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml162 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml164 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml200 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml202 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml239 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml241 # ------------------------------------COMMENT
MEDIUM…ponents/tuya_local/devices/nexsmart_watch2_camera.yaml8 # ------------------------------------COMMENT
MEDIUM…ponents/tuya_local/devices/nexsmart_watch2_camera.yaml10 # ------------------------------------COMMENT
MEDIUM…ponents/tuya_local/devices/nexsmart_watch2_camera.yaml51 # ------------------------------------COMMENT
MEDIUM…ponents/tuya_local/devices/nexsmart_watch2_camera.yaml53 # ------------------------------------COMMENT
62 more matches not shown…
Hyper-Verbose Identifiers339 hits · 356 pts
SeverityFileLineSnippetContext
LOWtests/test_diagnostics.py25async def test_config_entry_diagnostics(hass):CODE
LOWtests/test_diagnostics.py68async def test_diagnostic_redaction(hass):CODE
LOWtests/test_water_heater.py47async def test_init_entry_fails_if_device_has_no_water_heater(hass):CODE
LOWtests/test_water_heater.py75async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_button.py18async def test_init_entry_as_secondary(hass):CODE
LOWtests/test_button.py44async def test_init_entry_fails_if_device_has_no_button(hass):CODE
LOWtests/test_button.py72async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_camera.py41async def test_init_entry_fails_if_device_has_no_camera(hass):CODE
LOWtests/test_camera.py66async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_entity.py101 def test_init_begin_sets_device_and_config(self, mock_device, mock_config):CODE
LOWtests/test_entity.py108 def test_init_begin_returns_dps_dict(self, mock_device, mock_config):CODE
LOWtests/test_entity.py115 def test_init_begin_with_translation_key(self, mock_device, mock_config):CODE
LOWtests/test_entity.py121 def test_init_begin_with_translation_only_key(self, mock_device, mock_config):CODE
LOWtests/test_entity.py128 def test_init_begin_with_placeholders(self, mock_device, mock_config):CODE
LOWtests/test_entity.py134 def test_init_end_excludes_blacklisted(self, mock_device, mock_config):CODE
LOWtests/test_entity.py142 def test_init_end_excludes_hidden(self, mock_device, mock_config):CODE
LOWtests/test_entity.py168 def test_available_when_device_returned_state(self, entity):CODE
LOWtests/test_entity.py171 def test_available_false_when_no_state(self, entity, mock_device):CODE
LOWtests/test_entity.py175 def test_available_false_when_config_unavailable(self, entity, mock_config):CODE
LOWtests/test_entity.py182 def test_name_returns_config_name(self, entity):CODE
LOWtests/test_entity.py185 def test_name_falls_back_to_super(self, entity, mock_config):CODE
LOWtests/test_entity.py191 def test_name_uses_device_name_when_no_own_name(self, entity, mock_config):CODE
LOWtests/test_entity.py197 def test_use_device_name_false_with_name(self, entity):CODE
LOWtests/test_entity.py200 def test_use_device_name_false_with_translation_key(self, entity, mock_config):CODE
LOWtests/test_entity.py211 def test_entity_category_none(self, entity):CODE
LOWtests/test_entity.py214 def test_entity_category_config(self, entity, mock_config):CODE
LOWtests/test_entity.py218 def test_entity_category_diagnostic(self, entity, mock_config):CODE
LOWtests/test_entity.py226 def test_icon_falls_back_to_super(self, entity, mock_config):CODE
LOWtests/test_entity.py230 def test_extra_state_attributes(self, entity):CODE
LOWtests/test_entity.py235 def test_extra_state_attributes_skips_none_optional(self, mock_device, mock_config):CODE
LOWtests/test_entity.py284 async def test_async_added_to_hass_logs_deprecation(CODE
LOWtests/test_entity.py294 async def test_async_will_remove_from_hass(self, entity, mock_device):CODE
LOWtests/test_entity.py298 def test_on_receive_does_nothing(self, entity):CODE
LOWtests/test_entity.py35 def _default_to_device_class_name(self):CODE
LOWtests/test_entity.py154 def test_init_end_includes_non_blacklisted_non_hidden(CODE
LOWtests/test_entity.py249 def test_extra_state_attributes_includes_none_required(CODE
LOWtests/test_entity.py266 def test_entity_registry_enabled_default(self, entity, mock_config):CODE
LOWtests/test_time.py41async def test_init_entry_fails_if_device_has_no_time(hass):CODE
LOWtests/test_time.py66async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_select.py41async def test_init_entry_fails_if_device_has_no_select(hass):CODE
LOWtests/test_select.py66async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_siren.py39async def test_init_entry_fails_if_device_has_no_siren(hass):CODE
LOWtests/test_siren.py62async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_valve.py42async def test_init_entry_fails_if_device_has_no_valve(hass):CODE
LOWtests/test_valve.py70async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_lawn_mower.py46async def test_init_entry_fails_if_device_has_no_lawn_mower(hass):CODE
LOWtests/test_lawn_mower.py73async def test_init_entry_fails_if_config_is_missing(hass):CODE
LOWtests/test_device_config.py852def test_default_without_mapping(mocker):CODE
LOWtests/test_device_config.py860def test_matching_with_product_id():CODE
LOWtests/test_device_config.py866def test_matched_product_id_with_conflict_rejected():CODE
LOWtests/test_device_config.py872def test_multi_stage_redirect(mocker):CODE
LOWtests/test_device_config.py313def test_can_find_config_files():CODE
LOWtests/test_device_config.py562def test_configs_can_be_matched():CODE
LOWtests/test_device_config.py611def test_entity_find_unknown_dps_fails():CODE
LOWtests/test_device_config.py621async def test_dps_async_set_readonly_value_fails(mocker):CODE
LOWtests/test_device_config.py633def test_dps_values_is_empty_with_no_mapping(mocker):CODE
LOWtests/test_device_config.py657def test_bytes_to_fmt_returns_string_for_unknown():CODE
LOWtests/test_device_config.py678def test_format_with_none_defined(mocker):CODE
LOWtests/test_device_config.py740def test_match_returns_false_on_errors_with_bitfield(mocker):CODE
LOWtests/test_device_config.py918async def test_setting_multi_stage_redirect(mocker):CODE
279 more matches not shown…
Cross-File Repetition44 hits · 220 pts
SeverityFileLineSnippetContext
HIGHtests/test_water_heater.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_button.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_camera.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_time.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_select.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_valve.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_lawn_mower.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_alarm_control_panel.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_fan.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_humidifier.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_binary_sensor.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_event.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_datetime.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_cover.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_sensor.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_lock.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_text.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_infrared.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_light.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_remote.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_number.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_climate.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_vacuum.py0test initialisation when device has no matching entitySTRING
HIGHtests/test_switch.py0test initialisation when device has no matching entitySTRING
HIGHcustom_components/tuya_local/time.py0initialise the datetime entity. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the cSTRING
HIGHcustom_components/tuya_local/text.py0initialise the datetime entity. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the cSTRING
HIGHcustom_components/tuya_local/datetime.py0initialise the datetime entity. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the cSTRING
HIGHcustom_components/tuya_local/event.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/sensor.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/vacuum.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/binary_sensor.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/number.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/camera.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/select.py0initialise the select. args: device (tuyalocaldevice): the device api instance config (tuyaentityconfig): the configuratSTRING
HIGHcustom_components/tuya_local/fan.py0initialise the climate device. args: device (tuyalocaldevice): the device api instance. config (tuyaentityconfig): the eSTRING
HIGHcustom_components/tuya_local/remote.py0initialise the climate device. args: device (tuyalocaldevice): the device api instance. config (tuyaentityconfig): the eSTRING
HIGHcustom_components/tuya_local/humidifier.py0initialise the climate device. args: device (tuyalocaldevice): the device api instance. config (tuyaentityconfig): the eSTRING
HIGHcustom_components/tuya_local/climate.py0initialise the climate device. args: device (tuyalocaldevice): the device api instance. config (tuyaentityconfig): the eSTRING
HIGHcustom_components/tuya_local/fan.py0return the features supported by this climate device.STRING
HIGHcustom_components/tuya_local/humidifier.py0return the features supported by this climate device.STRING
HIGHcustom_components/tuya_local/water_heater.py0return the features supported by this climate device.STRING
HIGHcustom_components/tuya_local/fan.py0return the list of presets that this device supports.STRING
HIGHcustom_components/tuya_local/humidifier.py0return the list of presets that this device supports.STRING
HIGHcustom_components/tuya_local/climate.py0return the list of presets that this device supports.STRING
Over-Commented Block55 hits · 54 pts
SeverityFileLineSnippetContext
LOWtests/test_translations.py61 raise AssertionError(f"Inconsistent translations in {', '.join(unmatched)}")COMMENT
LOWtests/test_device.py401 mocker.patch.object(patched_hass, "async_create_task")COMMENT
LOWtests/test_climate.py41 m_add_entities.assert_called_once()COMMENT
LOWcustom_components/tuya_local/helpers/device_config.py981 return dps_mapCOMMENT
LOW…m_components/tuya_local/devices/rgb48_lightstring.yaml1# Smart Light RGB48 - RGBIC outdoor string lightsCOMMENT
LOW…mponents/tuya_local/devices/wifi_m604_quad_switch.yaml121 # start_dur_lo, end_dur_hi, end_dur_lo]COMMENT
LOW…mponents/tuya_local/devices/wifi_m604_quad_switch.yaml141 name: valueCOMMENT
LOW…mponents/tuya_local/devices/wifi_m604_quad_switch.yaml161 category: configCOMMENT
LOW…components/tuya_local/devices/etop_fcu_thermostat.yaml41 # min: 41COMMENT
LOW…nts/tuya_local/devices/elegrp_dtr10_dimmer_switch.yaml121 range:COMMENT
LOW…nts/tuya_local/devices/elegrp_dtr10_dimmer_switch.yaml141 # name: Maximum brightnessCOMMENT
LOW…nents/tuya_local/devices/dekala_lumos_alarm_clock.yaml1# `tuya-local` configuration for the Dekala Lumos sunrise alarmCOMMENT
LOW…nents/tuya_local/devices/moes_motionsensor_switch.yaml1# Example DPS StatusCOMMENT
LOW…nents/tuya_local/devices/inkbird_c236t_thermostat.yaml501 # Hex value FF acts as a "not used" placeholder.COMMENT
LOW…ts/tuya_local/devices/inkbird_int12bw_thermometer.yaml201 # Probe2COMMENT
LOW…om_components/tuya_local/devices/voldt_ev_charger.yaml81 dps:COMMENT
LOW…om_components/tuya_local/devices/voldt_ev_charger.yaml201 # mapping:COMMENT
LOW…omponents/tuya_local/devices/space_dog_music_lamp.yaml61 # value: FastCOMMENT
LOWcustom_components/tuya_local/devices/diivoo_wt05.yaml1# "11": 100, batteryCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml61 range:COMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml161 name: ble_unlock_checkCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml241 - entity: sensorCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml301 # report the data. This dp is only used to display the anti-lock status onCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml321 name: Automatic lockCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml341 # optional: trueCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml361 # mapping:COMMENT
LOW…nts/tuya_local/devices/pv28-cw_airquality_monitor.yaml21 dps:COMMENT
LOW…nts/tuya_local/devices/pv28-cw_airquality_monitor.yaml41 # - dps_val: middleCOMMENT
LOW…nts/tuya_local/devices/pv28-cw_airquality_monitor.yaml61 # value: "ringtone_3"COMMENT
LOW…nts/tuya_local/devices/pv28-cw_airquality_monitor.yaml221 # type: stringCOMMENT
LOW…tuya_local/devices/henden_essential_pool_heatpump.yaml141 class: measurementCOMMENT
LOW…/tuya_local/devices/fisher_summer_air_conditioner.yaml101 # and et horizontal mode basic options)COMMENT
LOW…m_components/tuya_local/devices/junsun_ev_charger.yaml61 name: valueCOMMENT
LOW…m_components/tuya_local/devices/junsun_ev_charger.yaml201 value: trueCOMMENT
LOW…nts/tuya_local/devices/feyree_ev_portable_charger.yaml241 # - id: 125COMMENT
LOW…/tuya_local/devices/aygrochy_inline_wifi_air_vent.yaml301# "1":"Switch",COMMENT
LOW…/tuya_local/devices/aygrochy_inline_wifi_air_vent.yaml321# "117":"Auto-High humid switch",COMMENT
LOW…ents/tuya_local/devices/elechico_ccib001_heatpump.yaml1# Elechico / Guangdong Chico CCIB001-CC1177D — pool / ice-bath heat pump chillerCOMMENT
LOW…nts/tuya_local/devices/nutromo_sh014_space_heater.yaml1name: Space heaterCOMMENT
LOW…onents/tuya_local/devices/catit_pixi_smart_feeder.yaml121 # {% set s = states("sensor.your_last_meal_details") %}COMMENT
LOW…ponents/tuya_local/devices/intelbras_IFR7000_lock.yaml161# 27 = password_disable, 28 = password_enable, 39 = password_reset (rw),COMMENT
LOW…om_components/tuya_local/devices/asakuki_diffuser.yaml61 value: limeCOMMENT
LOW…om_components/tuya_local/devices/asakuki_diffuser.yaml81 # max: 255COMMENT
LOW…components/tuya_local/devices/proscenic_m9_vacuum.yaml361 min: 0COMMENT
LOW…components/tuya_local/devices/proscenic_m9_vacuum.yaml381 # - dps_val: russianCOMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml321# optional: trueCOMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml341# value: trueCOMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml361# name: sensorCOMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml381# value: FahrenheitCOMMENT
LOW…m_components/tuya_local/devices/cecotec_fan_light.yaml41 # I comment this features because that are reported by device butCOMMENT
LOW…m_components/tuya_local/devices/cecotec_fan_light.yaml61 # range:COMMENT
LOW…ya_local/devices/qlima_ms_ac_5002_air_conditioner.yaml1name: Air conditionerCOMMENT
LOW…ya_local/devices/qlima_ms_ac_5002_air_conditioner.yaml21# COOLCOMMENT
LOW…_components/tuya_local/devices/ultenic_t10_vacuum.yaml121 - value: trueCOMMENT
LOW…_components/tuya_local/devices/ultenic_t10_vacuum.yaml141# DP 101 always ""COMMENT
Deep Nesting36 hits · 36 pts
SeverityFileLineSnippetContext
LOWutil/untranslated_select.py14CODE
LOWutil/translation_candidates.py15CODE
LOWutil/products.py11CODE
LOWutil/best_match.py11CODE
LOWutil/match_against.py11CODE
LOWutil/untranslated_entities.py18CODE
LOWtests/test_device_config.py322CODE
LOWtests/test_device_config.py363CODE
LOWtests/test_device_config.py387CODE
LOWtests/test_device_config.py409CODE
LOWtests/test_device_config.py512CODE
LOWtests/test_device_config.py562CODE
LOWtests/test_remote.py382CODE
LOWcustom_components/tuya_local/time.py61CODE
LOWcustom_components/tuya_local/cover.py133CODE
LOWcustom_components/tuya_local/light.py118CODE
LOWcustom_components/tuya_local/light.py198CODE
LOWcustom_components/tuya_local/light.py296CODE
LOWcustom_components/tuya_local/remote.py144CODE
LOWcustom_components/tuya_local/device.py52CODE
LOWcustom_components/tuya_local/device.py258CODE
LOWcustom_components/tuya_local/device.py321CODE
LOWcustom_components/tuya_local/device.py547CODE
LOWcustom_components/tuya_local/device.py656CODE
LOWcustom_components/tuya_local/diagnostics.py83CODE
LOWcustom_components/tuya_local/diagnostics.py98CODE
LOWcustom_components/tuya_local/__init__.py40CODE
LOWcustom_components/tuya_local/__init__.py92CODE
LOWcustom_components/tuya_local/vacuum.py100CODE
LOWcustom_components/tuya_local/lock.py99CODE
LOWcustom_components/tuya_local/lock.py198CODE
LOWcustom_components/tuya_local/entity.py100CODE
LOWcustom_components/tuya_local/config_flow.py643CODE
LOWcustom_components/tuya_local/config_flow.py73CODE
LOWcustom_components/tuya_local/config_flow.py200CODE
LOWcustom_components/tuya_local/config_flow.py348CODE
Excessive Try-Catch Wrapping12 hits · 12 pts
SeverityFileLineSnippetContext
LOWcustom_components/tuya_local/device.py128 except Exception as e:CODE
LOWcustom_components/tuya_local/device.py277 except Exception as e:CODE
LOWcustom_components/tuya_local/device.py300 except Exception as t:CODE
LOWcustom_components/tuya_local/device.py432 except Exception as t:CODE
LOWcustom_components/tuya_local/device.py689 except Exception as e:CODE
LOWcustom_components/tuya_local/__init__.py1011 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py93 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py496 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py669 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py684 except Exception as e:CODE
LOWcustom_components/tuya_local/helpers/config.py33 except Exception as e:CODE
LOWcustom_components/tuya_local/helpers/device_config.py856 except Exception:CODE
Slop Phrases2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml225 # switching, you can use this DP to switch the local doorbell ringtone ofCOMMENT
MEDIUM…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml438 # [Modify unlocking method] After the device is online, you can modifyCOMMENT
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcustom_components/tuya_local/cloud.py289 def update_token(self, token_info: dict[str, Any]) -> None:CODE
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcustom_components/tuya_local/diagnostics.py3CODE