diff --git a/homeassistant/components/esphome/manifest.json b/homeassistant/components/esphome/manifest.json index 5433056c2bb..cdd77aa3f47 100644 --- a/homeassistant/components/esphome/manifest.json +++ b/homeassistant/components/esphome/manifest.json @@ -15,6 +15,7 @@ "iot_class": "local_push", "loggers": ["aioesphomeapi", "noiseprotocol", "bleak_esphome"], "mqtt": ["esphome/discover/#"], + "quality_scale": "platinum", "requirements": [ "aioesphomeapi==30.0.1", "esphome-dashboard-api==1.3.0", diff --git a/homeassistant/components/esphome/quality_scale.yaml b/homeassistant/components/esphome/quality_scale.yaml new file mode 100644 index 00000000000..9af63cfbb3e --- /dev/null +++ b/homeassistant/components/esphome/quality_scale.yaml @@ -0,0 +1,85 @@ +rules: + # Bronze + action-setup: + status: exempt + comment: | + Since actions are defined per device, rather than per integration, + they are specific to the device's YAML configuration. Additionally, + ESPHome allows for user-defined actions, making it impossible to + set them up until the device is connected as they vary by device. For more + information, see: https://esphome.io/components/api.html#user-defined-actions + appropriate-polling: done + brands: done + common-modules: done + config-flow-test-coverage: done + config-flow: done + dependency-transparency: done + docs-actions: + status: exempt + comment: | + Since actions are defined per device, rather than per integration, + they are specific to the device's YAML configuration. Additionally, + ESPHome allows for user-defined actions, making it difficult to provide + standard documentation since these actions vary by device. For more + information, see: https://esphome.io/components/api.html#user-defined-actions + 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: + status: exempt + comment: | + ESPHome relies on sleepy devices and fast reconnect logic, so we + can't raise `ConfigEntryNotReady`. Instead, we need to utilize the + reconnect logic in `aioesphomeapi` to determine the right moment + to trigger the connection. + unique-config-entry: done + # Silver + action-exceptions: done + config-entry-unloading: done + docs-configuration-parameters: done + docs-installation-parameters: done + entity-unavailable: done + integration-owner: done + log-when-unavailable: done + parallel-updates: done + reauthentication-flow: done + test-coverage: done + + # Gold + devices: done + diagnostics: done + discovery-update-info: done + discovery: done + docs-data-update: done + docs-examples: + status: exempt + comment: | + Since ESPHome is a framework for creating custom devices, the + possibilities are virtually limitless. As a result, example + automations would likely only be relevant to the specific user + of the device and not generally useful to others. + docs-known-limitations: done + docs-supported-devices: done + docs-supported-functions: done + docs-troubleshooting: done + docs-use-cases: done + dynamic-devices: done + entity-category: done + entity-device-class: done + entity-disabled-by-default: done + entity-translations: done + exception-translations: done + icon-translations: done + reconfiguration-flow: done + repair-issues: done + stale-devices: done + + # Platinum + async-dependency: done + inject-websession: done + strict-typing: done diff --git a/script/hassfest/quality_scale.py b/script/hassfest/quality_scale.py index 55577e4143b..26e1d4cdd7f 100644 --- a/script/hassfest/quality_scale.py +++ b/script/hassfest/quality_scale.py @@ -360,7 +360,6 @@ INTEGRATIONS_WITHOUT_QUALITY_SCALE_FILE = [ "epson", "eq3btsmart", "escea", - "esphome", "etherscan", "eufy", "eufylife_ble", @@ -1406,7 +1405,6 @@ INTEGRATIONS_WITHOUT_SCALE = [ "epson", "eq3btsmart", "escea", - "esphome", "etherscan", "eufy", "eufylife_ble",