From 9261efcd7a3ecc6ac6016e709962bc2873002403 Mon Sep 17 00:00:00 2001 From: Nc Hodges <86037210+Hodnc@users.noreply.github.com> Date: Mon, 15 Sep 2025 13:44:32 +0000 Subject: [PATCH 1/4] Initial Commit - Add Quality Scale to ElkM1 Integration --- homeassistant/components/elkm1/manifest.json | 1 + .../components/elkm1/quality_scale.yaml | 60 +++++++++++++++++++ script/hassfest/quality_scale.py | 2 - 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 homeassistant/components/elkm1/quality_scale.yaml diff --git a/homeassistant/components/elkm1/manifest.json b/homeassistant/components/elkm1/manifest.json index 12c22e23ff067..7e6488fb46a5f 100644 --- a/homeassistant/components/elkm1/manifest.json +++ b/homeassistant/components/elkm1/manifest.json @@ -15,5 +15,6 @@ "documentation": "https://www.home-assistant.io/integrations/elkm1", "iot_class": "local_push", "loggers": ["elkm1_lib"], + "quality_scale": "bronze", "requirements": ["elkm1-lib==2.2.11"] } diff --git a/homeassistant/components/elkm1/quality_scale.yaml b/homeassistant/components/elkm1/quality_scale.yaml new file mode 100644 index 0000000000000..76b8d347408bf --- /dev/null +++ b/homeassistant/components/elkm1/quality_scale.yaml @@ -0,0 +1,60 @@ +rules: + # Bronze + action-setup: done + appropriate-polling: done + brands: done + common-modules: done + config-flow-test-coverage: done + config-flow: done + dependency-transparency: done + docs-actions: done + docs-high-level-description: done + docs-installation-instructions: done + docs-removal-instructions: done + entity-event-setup: done + entity-unique-id: done + has-entity-name: done + runtime-data: done + test-before-configure: done + test-before-setup: done + unique-config-entry: done + + # Silver + action-exceptions: todo + config-entry-unloading: todo + docs-configuration-parameters: todo + docs-installation-parameters: todo + entity-unavailable: todo + integration-owner: todo + log-when-unavailable: todo + parallel-updates: todo + reauthentication-flow: todo + test-coverage: todo + + # Gold + devices: todo + diagnostics: todo + discovery-update-info: todo + discovery: todo + docs-data-update: todo + docs-examples: todo + docs-known-limitations: todo + docs-supported-devices: todo + docs-supported-functions: todo + docs-troubleshooting: todo + docs-use-cases: todo + dynamic-devices: todo + entity-category: todo + entity-device-class: todo + entity-disabled-by-default: todo + entity-translations: todo + exception-translations: todo + icon-translations: todo + reconfiguration-flow: todo + repair-issues: todo + stale-devices: todo + + # Platinum + async-dependency: todo + inject-websession: todo + strict-typing: todo diff --git a/script/hassfest/quality_scale.py b/script/hassfest/quality_scale.py index 978cea6f627c6..e81420e587f99 100644 --- a/script/hassfest/quality_scale.py +++ b/script/hassfest/quality_scale.py @@ -331,7 +331,6 @@ class Rule: "eight_sleep", "electrasmart", "eliqonline", - "elkm1", "elmax", "elv", "elvia", @@ -1356,7 +1355,6 @@ class Rule: "electrasmart", "elevenlabs", "eliqonline", - "elkm1", "elmax", "elgato", "elv", From b6cc889b36ea16843f1ccf34acb049001651ce66 Mon Sep 17 00:00:00 2001 From: Nc Hodges <86037210+Hodnc@users.noreply.github.com> Date: Tue, 16 Sep 2025 13:40:14 +0000 Subject: [PATCH 2/4] Update Strings to include data_description --- homeassistant/components/elkm1/strings.json | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/homeassistant/components/elkm1/strings.json b/homeassistant/components/elkm1/strings.json index 400a7197f4112..f1ba4cb29996a 100644 --- a/homeassistant/components/elkm1/strings.json +++ b/homeassistant/components/elkm1/strings.json @@ -7,6 +7,9 @@ "description": "Choose a discovered system or 'Manual Entry' if no devices have been discovered.", "data": { "device": "[%key:common::config_flow::data::device%]" + }, + "data_description": { + "device": "Select a discovered Elk-M1 control system to configure or choose Manual Entry to enter connection details." } }, "manual_connection": { @@ -19,6 +22,14 @@ "password": "[%key:common::config_flow::data::password%]", "prefix": "A unique prefix (leave blank if you only have one Elk-M1).", "temperature_unit": "The temperature unit Elk-M1 uses." + }, + "data_description": { + "protocol": "Protocol to use when connecting to the Elk-M1 (secure, non-secure, serial, etc.).", + "address": "IP address, domain name, or serial device path. For serial use format 'tty[:baud]'.", + "username": "The username to authenticate with the Elk-M1 panel.", + "password": "The password to authenticate with the Elk-M1 panel.", + "prefix": "Optional unique prefix to distinguish multiple Elk-M1 panels.", + "temperature_unit": "Unit used by the Elk-M1 for temperature values (C or F)." } }, "discovered_connection": { @@ -29,6 +40,12 @@ "username": "[%key:common::config_flow::data::username%]", "password": "[%key:common::config_flow::data::password%]", "temperature_unit": "[%key:component::elkm1::config::step::manual_connection::data::temperature_unit%]" + }, + "data_description": { + "protocol": "[%key:component::elkm1::config::step::manual_connection::data_description::protocol%]", + "username": "The username to authenticate with the Elk-M1 panel.", + "password": "The password to authenticate with the Elk-M1 panel.", + "temperature_unit": "[%key:component::elkm1::config::step::manual_connection::data_description::temperature_unit%]" } }, "reconfigure": { @@ -39,6 +56,12 @@ "address": "[%key:component::elkm1::config::step::manual_connection::data::address%]", "username": "[%key:common::config_flow::data::username%]", "password": "[%key:common::config_flow::data::password%]" + }, + "data_description": { + "protocol": "[%key:component::elkm1::config::step::manual_connection::data_description::protocol%]", + "address": "[%key:component::elkm1::config::step::manual_connection::data_description::address%]", + "username": "The username to authenticate with the Elk-M1 panel.", + "password": "The password to authenticate with the Elk-M1 panel." } } }, From e7419b2ece7c6708c9d2aa145774c2a50209b001 Mon Sep 17 00:00:00 2001 From: Hodnc <86037210+Hodnc@users.noreply.github.com> Date: Fri, 12 Dec 2025 10:24:46 +0000 Subject: [PATCH 3/4] Fix Strings --- homeassistant/components/elkm1/strings.json | 56 ++++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/elkm1/strings.json b/homeassistant/components/elkm1/strings.json index 7ce51ece4611a..1d2c533f22427 100644 --- a/homeassistant/components/elkm1/strings.json +++ b/homeassistant/components/elkm1/strings.json @@ -19,59 +19,65 @@ "step": { "discovered_connection": { "data": { - "device": "[%key:common::config_flow::data::device%]" + "password": "[%key:common::config_flow::data::password%]", + "protocol": "[%key:component::elkm1::config::step::manual_connection::data::protocol%]", + "temperature_unit": "[%key:component::elkm1::config::step::manual_connection::data::temperature_unit%]", + "username": "[%key:common::config_flow::data::username%]" }, "data_description": { - "device": "Select a discovered Elk-M1 control system to configure or choose Manual Entry to enter connection details." - } + "password": "[%key:component::elkm1::config::step::manual_connection::data_description::password%]", + "protocol": "[%key:component::elkm1::config::step::manual_connection::data_description::protocol%]", + "temperature_unit": "[%key:component::elkm1::config::step::manual_connection::data_description::temperature_unit%]", + "username": "[%key:component::elkm1::config::step::manual_connection::data_description::username%]" + }, + "description": "Connect to the discovered system: {mac_address} ({host})", + "title": "[%key:component::elkm1::config::step::user::title%]" }, "manual_connection": { "data": { "address": "The IP address or domain or serial port if connecting via serial.", "password": "[%key:common::config_flow::data::password%]", "prefix": "A unique prefix (leave blank if you only have one Elk-M1).", - "temperature_unit": "The temperature unit Elk-M1 uses." + "protocol": "Protocol", + "temperature_unit": "The temperature unit Elk-M1 uses.", + "username": "[%key:common::config_flow::data::username%]" }, "data_description": { - "protocol": "Protocol to use when connecting to the Elk-M1 (secure, non-secure, serial, etc.).", "address": "IP address, domain name, or serial device path. For serial use format 'tty[:baud]'.", - "username": "The username to authenticate with the Elk-M1 panel.", "password": "The password to authenticate with the Elk-M1 panel.", "prefix": "Optional unique prefix to distinguish multiple Elk-M1 panels.", - "temperature_unit": "Unit used by the Elk-M1 for temperature values (C or F)." - } + "protocol": "Protocol to use when connecting to the Elk-M1 (secure, non-secure, serial, etc.).", + "temperature_unit": "Unit used by the Elk-M1 for temperature values (C or F).", + "username": "The username to authenticate with the Elk-M1 panel." + }, + "description": "The address string must be in the form 'address[:port]' for 'secure' and 'non-secure'. Example: '192.168.1.1'. The port is optional and defaults to 2101 for 'non-secure' and 2601 for 'secure'. For the serial protocol, the address must be in the form 'tty[:baud]'. Example: '/dev/ttyS1'. The baud is optional and defaults to 115200.", + "title": "[%key:component::elkm1::config::step::user::title%]" }, "reconfigure": { "data": { "address": "[%key:component::elkm1::config::step::manual_connection::data::address%]", "password": "[%key:common::config_flow::data::password%]", - "temperature_unit": "[%key:component::elkm1::config::step::manual_connection::data::temperature_unit%]" + "protocol": "[%key:component::elkm1::config::step::manual_connection::data::protocol%]", + "username": "[%key:common::config_flow::data::username%]" }, "data_description": { + "address": "[%key:component::elkm1::config::step::manual_connection::data_description::address%]", + "password": "[%key:component::elkm1::config::step::manual_connection::data_description::password%]", "protocol": "[%key:component::elkm1::config::step::manual_connection::data_description::protocol%]", - "username": "The username to authenticate with the Elk-M1 panel.", - "password": "The password to authenticate with the Elk-M1 panel.", - "temperature_unit": "[%key:component::elkm1::config::step::manual_connection::data_description::temperature_unit%]" - } - }, - "reconfigure": { - "title": "Reconfigure Elk-M1 Control", + "username": "[%key:component::elkm1::config::step::manual_connection::data_description::username%]" + }, "description": "[%key:component::elkm1::config::step::manual_connection::description%]", "title": "Reconfigure Elk-M1 Control" }, "user": { "data": { - "protocol": "[%key:component::elkm1::config::step::manual_connection::data::protocol%]", - "address": "[%key:component::elkm1::config::step::manual_connection::data::address%]", - "username": "[%key:common::config_flow::data::username%]", - "password": "[%key:common::config_flow::data::password%]" + "device": "[%key:common::config_flow::data::device%]" }, "data_description": { - "protocol": "[%key:component::elkm1::config::step::manual_connection::data_description::protocol%]", - "address": "[%key:component::elkm1::config::step::manual_connection::data_description::address%]", - "username": "The username to authenticate with the Elk-M1 panel.", - "password": "The password to authenticate with the Elk-M1 panel." - } + "device": "Select a discovered Elk-M1 control system to configure or choose Manual Entry to enter connection details." + }, + "description": "Choose a discovered system or 'Manual Entry' if no devices have been discovered.", + "title": "Connect to Elk-M1 Control" } } }, From b50e597c9c71387d444a3bac12f429499203ea3f Mon Sep 17 00:00:00 2001 From: Hodnc <86037210+Hodnc@users.noreply.github.com> Date: Fri, 12 Dec 2025 10:38:15 +0000 Subject: [PATCH 4/4] Update scale to include status for other levels --- .../components/elkm1/quality_scale.yaml | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/elkm1/quality_scale.yaml b/homeassistant/components/elkm1/quality_scale.yaml index 76b8d347408bf..6bb02fd50ab34 100644 --- a/homeassistant/components/elkm1/quality_scale.yaml +++ b/homeassistant/components/elkm1/quality_scale.yaml @@ -20,41 +20,43 @@ rules: unique-config-entry: done # Silver - action-exceptions: todo - config-entry-unloading: todo - docs-configuration-parameters: todo - docs-installation-parameters: todo - entity-unavailable: todo - integration-owner: todo + action-exceptions: done + config-entry-unloading: done + docs-configuration-parameters: done + docs-installation-parameters: done + entity-unavailable: done + integration-owner: done log-when-unavailable: todo parallel-updates: todo reauthentication-flow: todo test-coverage: todo # Gold - devices: todo + devices: done diagnostics: todo - discovery-update-info: todo - discovery: todo + discovery-update-info: done + discovery: done docs-data-update: todo - docs-examples: todo - docs-known-limitations: todo - docs-supported-devices: todo - docs-supported-functions: todo - docs-troubleshooting: todo + docs-examples: done + docs-known-limitations: done + docs-supported-devices: done + docs-supported-functions: done + docs-troubleshooting: done docs-use-cases: todo dynamic-devices: todo - entity-category: todo - entity-device-class: todo + entity-category: done + entity-device-class: done entity-disabled-by-default: todo entity-translations: todo exception-translations: todo icon-translations: todo - reconfiguration-flow: todo + reconfiguration-flow: done repair-issues: todo stale-devices: todo # Platinum - async-dependency: todo - inject-websession: todo - strict-typing: todo + async-dependency: done + inject-websession: + status: exempt + comment: Integration does not use HTTP/websession (uses elkm1_lib for Elk panel protocol). + strict-typing: done