AI Slop Code Risk Monitor

make-all/tuya-local

SlopCodeMonitor badge for make-all/tuya-local Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Local support for Tuya devices in Home Assistant

3.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for make-all/tuya-local, a Python project with 3,629 GitHub stars. SynthScan examined 379,174 lines of code across 1937 source files, recording 706 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 3.8 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

3.8
Adjusted Signal
3.8
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
3.6K
Stars
Python
Language
379.2K
Lines of Code
1.9K
Files
706
Pattern Hits
2026-10-31
Scan Date
0.05
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 6.2/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 469 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

Are imports declared and package/API names verified? 1 finding(s).

Agent Over-Engineering Ratio 16.0/100 · LOW

Are wrappers, guards, and repeated structures necessary? 607 finding(s).

PR Review Velocity Impact 17.6/100 · LOW

Which changes need focused human review? 706 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 102MEDIUM 124LOW 480

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 706 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Decorative Section Separators122 hits · 418 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_config_flow.py909# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py911# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1018# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1020# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1074# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1076# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1356# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1358# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1466# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1468# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1561# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1563# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1619# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1621# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1652# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_config_flow.py1654# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1158# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_config_flow.py1160# ---------------------------------------------------------------------------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.yaml52 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml54 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml82 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml84 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml99 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml101 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml132 # -------------------------------------------------------COMMENT
MEDIUM…nts/tuya_local/devices/smartmi_air_circulator_fan.yaml134 # -------------------------------------------------------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.yaml79 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml81 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml125 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml127 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml161 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml163 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml199 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml201 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml238 # ------------------------------------COMMENT
MEDIUM…omponents/tuya_local/devices/nexsmart_air3_camera.yaml240 # ------------------------------------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.yaml50 # ------------------------------------COMMENT
MEDIUM⚡…ponents/tuya_local/devices/nexsmart_watch2_camera.yaml52 # ------------------------------------COMMENT
62 more matches not shown…
Hyper-Verbose Identifiers371 hits · 383 pts
SeverityFileLineSnippetContext
LOWtests/test_diagnostics.py26async def test_config_entry_diagnostics(hass):CODE
LOWtests/test_diagnostics.py69async def test_diagnostic_redaction(hass):CODE
LOWtests/test_diagnostics.py120def _device_with_sensitive_dp(dp_name: str, dp_value: str):CODE
LOWtests/test_diagnostics.py141def test_sensitive_attribute_is_redacted():CODE
LOWtests/test_diagnostics.py164def test_sensitive_primary_value_is_redacted():CODE
LOWtests/test_diagnostics.py179def test_state_kept_when_sensitive_dp_is_not_the_state():CODE
LOWtests/test_diagnostics.py194def test_unrelated_entity_state_is_untouched():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
LOW⚡tests/test_entity.py101 def test_init_begin_sets_device_and_config(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py108 def test_init_begin_returns_dps_dict(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py115 def test_init_begin_with_translation_key(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py121 def test_init_begin_with_translation_only_key(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py128 def test_init_begin_with_placeholders(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py134 def test_init_end_excludes_blacklisted(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py142 def test_init_end_excludes_hidden(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py168 def test_available_when_device_returned_state(self, entity):CODE
LOW⚡tests/test_entity.py171 def test_available_false_when_no_state(self, entity, mock_device):CODE
LOW⚡tests/test_entity.py175 def test_available_false_when_config_unavailable(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py182 def test_name_returns_config_name(self, entity):CODE
LOW⚡tests/test_entity.py185 def test_name_falls_back_to_super(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py191 def test_name_uses_device_name_when_no_own_name(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py197 def test_use_device_name_false_with_name(self, entity):CODE
LOW⚡tests/test_entity.py200 def test_use_device_name_false_with_translation_key(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py211 def test_entity_category_none(self, entity):CODE
LOW⚡tests/test_entity.py214 def test_entity_category_config(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py218 def test_entity_category_diagnostic(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py226 def test_icon_falls_back_to_super(self, entity, mock_config):CODE
LOW⚡tests/test_entity.py230 def test_extra_state_attributes(self, entity):CODE
LOW⚡tests/test_entity.py235 def test_extra_state_attributes_skips_none_optional(self, mock_device, mock_config):CODE
LOW⚡tests/test_entity.py284 async def test_async_added_to_hass_logs_deprecation(CODE
LOW⚡tests/test_entity.py294 async def test_async_will_remove_from_hass(self, entity, mock_device):CODE
LOW⚡tests/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_entity.py322 def test_missing_json_does_not_raise(self, mock_device, 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.py68async def test_init_entry_fails_if_device_has_no_valve(hass):CODE
LOWtests/test_valve.py103def test_separate_current_position(mocker, position, expected_state):CODE
LOWtests/test_valve.py123async def test_set_position_writes_target_only(mocker):CODE
LOWtests/test_valve.py132async def test_set_zero_writes_target_only(mocker):CODE
LOWtests/test_valve.py158def test_frankever_product_match_is_preferred():CODE
LOWtests/test_valve.py169def test_frankever_auxiliary_entity_values(mocker):CODE
LOWtests/test_valve.py182async 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
LOW⚡tests/test_device_config.py888def test_default_without_mapping(mocker):CODE
LOW⚡tests/test_device_config.py896def test_matching_with_product_id():CODE
311 more matches not shown…
Empty Error Handlers57 hits · 285 pts
SeverityFileLineSnippetContext
HIGHtests/test_water_heater.py69except ValueError:CODE
HIGHtests/test_water_heater.py97except ValueError:CODE
HIGHtests/test_button.py66except ValueError:CODE
HIGHtests/test_button.py94except ValueError:CODE
HIGHtests/test_camera.py60except ValueError:CODE
HIGHtests/test_camera.py85except ValueError:CODE
HIGHtests/test_time.py60except ValueError:CODE
HIGHtests/test_time.py85except ValueError:CODE
HIGHtests/test_select.py60except ValueError:CODE
HIGHtests/test_select.py85except ValueError:CODE
HIGHtests/test_siren.py56except ValueError:CODE
HIGHtests/test_siren.py79except ValueError:CODE
HIGHtests/test_valve.py90except ValueError:CODE
HIGHtests/test_valve.py204except ValueError:CODE
HIGHtests/test_lawn_mower.py67except ValueError:CODE
HIGHtests/test_lawn_mower.py95except ValueError:CODE
HIGHtests/test_alarm_control_panel.py86except ValueError:CODE
HIGHtests/test_alarm_control_panel.py109except ValueError:CODE
HIGHtests/test_fan.py92except ValueError:CODE
HIGHtests/test_fan.py120except ValueError:CODE
HIGHtests/test_media_player.py70except ValueError:CODE
HIGHtests/test_media_player.py96except ValueError:CODE
HIGHtests/test_humidifier.py73except ValueError:CODE
HIGHtests/test_humidifier.py101except ValueError:CODE
HIGHtests/test_binary_sensor.py66except ValueError:CODE
HIGHtests/test_binary_sensor.py91except ValueError:CODE
HIGHtests/test_event.py63except ValueError:CODE
HIGHtests/test_event.py88except ValueError:CODE
HIGHtests/test_datetime.py63except ValueError:CODE
HIGHtests/test_datetime.py88except ValueError:CODE
HIGHtests/test_cover.py64except ValueError:CODE
HIGHtests/test_cover.py92except ValueError:CODE
HIGHtests/test_sensor.py61except ValueError:CODE
HIGHtests/test_sensor.py86except ValueError:CODE
HIGHtests/test_lock.py66except ValueError:CODE
HIGHtests/test_lock.py94except ValueError:CODE
HIGHtests/test_text.py61except ValueError:CODE
HIGHtests/test_text.py86except ValueError:CODE
HIGHtests/test_config_flow.py409except vol.MultipleInvalid:CODE
HIGHtests/test_config_flow.py611except vol.MultipleInvalid:CODE
HIGHtests/test_config_flow.py677except vol.MultipleInvalid:CODE
HIGHtests/test_infrared.py68except ValueError:CODE
HIGHtests/test_infrared.py96except ValueError:CODE
HIGHtests/test_light.py67except ValueError:CODE
HIGHtests/test_light.py95except ValueError:CODE
HIGHtests/test_device.py681except StopAsyncIteration:CODE
HIGHtests/test_remote.py74except ValueError:CODE
HIGHtests/test_remote.py102except ValueError:CODE
HIGHtests/test_number.py61except ValueError:CODE
HIGHtests/test_number.py86except ValueError:CODE
HIGHtests/test_climate.py95except ValueError:CODE
HIGHtests/test_climate.py123except ValueError:CODE
HIGHtests/test_vacuum.py64except ValueError:CODE
HIGHtests/test_vacuum.py92except ValueError:CODE
HIGHtests/test_switch.py92except ValueError:CODE
HIGHtests/test_switch.py120except ValueError:CODE
HIGHcustom_components/tuya_local/device.py258except CancelledError:CODE
Cross-File Repetition45 hits · 225 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_media_player.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 Block61 hits · 60 pts
SeverityFileLineSnippetContext
LOWtests/test_translations.py61 raise AssertionError(f"Inconsistent translations in {', '.join(unmatched)}")COMMENT
LOWtests/test_discovery.py221# mocker.patch(COMMENT
LOWtests/test_device.py421COMMENT
LOWtests/test_climate.py41 m_add_entities.assert_called_once()COMMENT
LOWcustom_components/tuya_local/lock.py21# eavesdropping cloud unlock messages.COMMENT
LOWcustom_components/tuya_local/config_flow.py521 )COMMENT
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 # - Payload is a sequence of records; each record is 10 bytes:COMMENT
LOW…mponents/tuya_local/devices/wifi_m604_quad_switch.yaml141 dps:COMMENT
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/eta_2625solesmart_heater.yaml1name: Panel heaterCOMMENT
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.yaml201 # unit: kWhCOMMENT
LOW…omponents/tuya_local/devices/space_dog_music_lamp.yaml61 # value: FastCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml61 range:COMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml161 # [Bluetooth Unlock] is used to trigger the device to perform BluetoothCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml181 # 6=timeout failure to close the doorCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml301 - dps_val: highCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml321 # can also be used as a normally open mode. Only when the door lock hardwareCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml341 # name: Door statusCOMMENT
LOW…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml361 # dps: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 # DPS 113 value is False, butCOMMENT
LOW…/tuya_local/devices/fisher_summer_air_conditioner.yaml101 # and et horizontal mode basic options)COMMENT
LOW…/tuya_local/devices/fisher_summer_air_conditioner.yaml121 # horizontal direction to filter "wide" 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…nts/tuya_local/devices/breville_airrounder_heater.yaml1# Loosly based on the Airrounder Plus configCOMMENT
LOW…ya_local/devices/zemismart_spm01_d2tw_energymeter.yaml1name: Energy meterCOMMENT
LOW…ponents/tuya_local/devices/intelbras_IFR7000_lock.yaml161# 48 = remote_no_pd_setkey (rw), 49 = remote_no_dp_key (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…ts/tuya_local/devices/amantii_trdlumina_fireplace.yaml261 type: stringCOMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml321# name: Last chargeCOMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml341# mapping:COMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml361# dps:COMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml381# mapping:COMMENT
LOW…ponents/tuya_local/devices/aimiler_11kW_evcharger.yaml401# value: "Three phase"COMMENT
LOW…ponents/tuya_local/devices/diivoo_wt05_watervalve.yaml1# "11": 100, batteryCOMMENT
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
1 more matches not shown…
Deep Nesting35 hits · 34 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.py357CODE
LOWtests/test_device_config.py398CODE
LOWtests/test_device_config.py422CODE
LOWtests/test_device_config.py444CODE
LOWtests/test_device_config.py547CODE
LOWtests/test_device_config.py597CODE
LOWtests/test_remote.py382CODE
LOWcustom_components/tuya_local/time.py61CODE
LOWcustom_components/tuya_local/cover.py133CODE
LOWcustom_components/tuya_local/light.py120CODE
LOWcustom_components/tuya_local/light.py212CODE
LOWcustom_components/tuya_local/light.py319CODE
LOWcustom_components/tuya_local/remote.py144CODE
LOWcustom_components/tuya_local/device.py51CODE
LOWcustom_components/tuya_local/device.py261CODE
LOWcustom_components/tuya_local/device.py329CODE
LOWcustom_components/tuya_local/device.py564CODE
LOWcustom_components/tuya_local/device.py669CODE
LOWcustom_components/tuya_local/media_player.py96CODE
LOWcustom_components/tuya_local/__init__.py39CODE
LOWcustom_components/tuya_local/__init__.py91CODE
LOWcustom_components/tuya_local/vacuum.py100CODE
LOWcustom_components/tuya_local/lock.py102CODE
LOWcustom_components/tuya_local/lock.py184CODE
LOWcustom_components/tuya_local/lock.py214CODE
LOWcustom_components/tuya_local/config_flow.py683CODE
LOWcustom_components/tuya_local/config_flow.py97CODE
LOWcustom_components/tuya_local/config_flow.py236CODE
LOWcustom_components/tuya_local/config_flow.py384CODE
Excessive Try-Catch Wrapping11 hits · 11 pts
SeverityFileLineSnippetContext
LOWcustom_components/tuya_local/device.py128 except Exception as e:CODE
LOWcustom_components/tuya_local/device.py280 except Exception as e:CODE
LOWcustom_components/tuya_local/device.py303 except Exception as t:CODE
LOWcustom_components/tuya_local/device.py451 except Exception as t:CODE
LOWcustom_components/tuya_local/device.py708 except Exception as e:CODE
LOWcustom_components/tuya_local/__init__.py1133 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py117 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py709 except Exception as e:CODE
LOWcustom_components/tuya_local/config_flow.py724 except Exception as e:CODE
LOWcustom_components/tuya_local/helpers/config.py33 except Exception as e:CODE
LOWcustom_components/tuya_local/helpers/device_config.py862 except Exception:CODE
Slop Phrases2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml230 # switching, you can use this DP to switch the local doorbell ringtone ofCOMMENT
MEDIUM…ponents/tuya_local/devices/hornbill_y4_smart_lock.yaml429 # [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