Add quality scale (#92)

* Add quality scale

* Rephrase intro

* Address comments

* Add translations for sensors only

* Typo

* Few more styling tweaks

* Update integration_quality_scale_index.md

* Typo
This commit is contained in:
Paulus Schoutsen 2018-09-26 14:31:55 +02:00 committed by GitHub
parent 96017841e6
commit e4ab6fdc82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 904 additions and 148 deletions

View File

@ -0,0 +1,49 @@
---
title: "Integration Quality Scale"
sidebar_label: "Introduction"
---
The Integration Quality Scale scores each integration based on the code quality and user experience. Each level of the quality scale consists of a list of requirements. If an integration matches all requirements, it's considered to have reached that level.
> Suggestions for changes can be done by creating an issue in the [architecture repo](https://github.com/home-assistant/architecture/issues/).
# No score
This integration passes the bare minimum requirements to become part of the index.
- Satisfy all requirements for [creating components](creating_component_code_review.md) and [creating platforms](creating_platform_code_review.md).
- Configurable via `configuration.yaml`
# Silver 🥈
This integration is able to cope when things go wrong. It will not print any exceptions nor will it fill the log with retry attempts.
- Set an appropriate `SCAN_INTERVAL` (if a polling integration)
- Raise `PlatformNotReady` if unable to connect during platform setup (if appropriate)
- Handles expiration of auth credentials. Refresh if possible or print correct error and fail setup. If based on a config entry, should trigger a new config entry flow to re-authorize.
- Handles internet unavailable. Log a warning once when unavailable, log once when reconnected.
- Handles device/service unavailable. Log a warning once when unavailable, log once when reconnected.
- Set `available` property to `False` if appropriate ([docs](entity_index.md#generic-properties))
- Entities have unique ID (if available) ([docs](entity_registry_index.md#unique-id-requirements))
# Gold 🥇
This is a solid integration that is able to survive poor conditions and can be configured via the user interface.
- Configurable via config entries.
- Don't allow configuring already configured device/service (example: no 2 entries for same hub)
- Tests for the config flow
- Discoverable (if available)
- Entities have device info (if available) ([docs](device_registry_index.md#defining-devices))
- States are translated in the frontend (sensors only, [docs](internationalization_index.md))
- Tests for reading data from/controlling the integration ([docs](development_testing.md))
- Has a code owner
# Platinum 🏆
Best of the best. The integration is completely async, meaning it's super fast. Integrations that reach platinum level will require approval by the code owner for each PR.
- Set appropriate `PARALLEL_UPDATES` constant
- Support config entry unloading (called when config entry is removed)
- Integration + dependency are async
- Uses aiohttp and allows passing in websession (if making HTTP requests)

View File

@ -4,132 +4,831 @@
"next": "Next",
"previous": "Previous",
"tagline": "All you need to start developing for Home Assistant",
"architecture_components": "Components Architecture",
"Components": "Components",
"architecture_entities": "Entity Architecture",
"Entity": "Entity",
"architecture_hassio": "Hass.io Architecture",
"Hass.io": "Hass.io",
"architecture_index": "Architecture",
"Introduction": "Introduction",
"asyncio_101": "Asyncio 101",
"asyncio_categorizing_functions": "Categorizing Functions",
"asyncio_index": "Asynchronous Programming",
"asyncio_working_with_async": "Working with Async",
"auth_api": "Authentication API",
"API": "API",
"auth_auth_module": "Multi-factor Authentication Modules",
"auth_auth_provider": "Authentication Providers",
"auth_index": "Authentication",
"config_entries_config_flow_handler": "Config Flow Handlers",
"config_entries_index": "Config Entries",
"configuration_yaml_index": "Configuration.yaml",
"creating_component_code_review": "Checklist for creating a component",
"creating_component_deps_and_reqs": "Requirements & Dependencies",
"creating_component_discovery": "Component Discovery",
"creating_component_events": "Handling events",
"creating_component_generic_discovery": "Generic Platform Discovery",
"creating_component_index": "Creating components",
"creating_component_loading": "Loading your components",
"creating_component_states": "Handling states",
"creating_platform_code_review": "Checklist for creating a platform",
"creating_platform_example_light": "Example light platform",
"creating_platform_example_sensor": "Example sensor platform",
"creating_platform_index": "Adding support for a new platform",
"data_entry_flow_index": "Data Entry Flow",
"dev_101_config": "Using Config",
"dev_101_events": "Using Events",
"dev_101_hass": "Hass object",
"dev_101_index": "Development 101",
"dev_101_services": "Using Services",
"dev_101_states": "Using States",
"development_catching_up": "Catching up with Reality",
"development_checklist": "Development Checklist",
"development_environment": "Set up Development Environment",
"development_guidelines": "Style guidelines",
"development_index": "Starting with Development",
"development_submitting": "Submit your work",
"development_testing": "Testing your code",
"development_typing": "Adding type hints to your code",
"development_validation": "Validate the input",
"device_registry_index": "Device Registry",
"documentation_create_page": "Create a new page",
"documentation_index": "Documentation",
"documentation_standards": "Standards",
"entity_alarm_control_panel": "Alarm Control Panel Entity",
"Alarm Control Panel": "Alarm Control Panel",
"entity_binary_sensor": "Binary Sensor Entity",
"Binary Sensor": "Binary Sensor",
"entity_climate": "Climate Entity",
"Climate": "Climate",
"entity_cover": "Cover Entity",
"Cover": "Cover",
"entity_fan": "Fan Entity",
"Fan": "Fan",
"entity_index": "Entity",
"entity_light": "Light Entity",
"Light": "Light",
"entity_lock": "Lock Entity",
"Lock": "Lock",
"entity_media_player": "Media Player Entity",
"Media Player": "Media Player",
"entity_registry_index": "Entity Registry",
"entity_remote": "Remote Entity",
"Remote": "Remote",
"entity_sensor": "Sensor Entity",
"Sensor": "Sensor",
"entity_switch": "Switch Entity",
"Switch": "Switch",
"entity_vacuum": "Vacuum Entity",
"Vacuum": "Vacuum",
"entity_weather": "Weather Entity",
"Weather": "Weather",
"external_api_rest": "REST API",
"external_api_server_sent_events": "Server-sent events",
"external_api_websocket": "WebSocket API",
"frontend_add_card": "Adding state card",
"frontend_add_more_info": "Adding more info dialogs",
"frontend_add_websocket_api": "Extending the WebSocket API",
"frontend_architecture": "Home Assistant Frontend Architecture",
"docs": {
"architecture_components": {
"title": "Components Architecture",
"sidebar_label": "Components"
},
"architecture_entities": {
"title": "Entity Architecture",
"sidebar_label": "Entity"
},
"architecture_hassio": {
"title": "Hass.io Architecture",
"sidebar_label": "Hass.io"
},
"architecture_index": {
"title": "Architecture",
"sidebar_label": "Introduction"
},
"asyncio_101": {
"title": "Asyncio 101"
},
"asyncio_categorizing_functions": {
"title": "Categorizing Functions"
},
"asyncio_index": {
"title": "Asynchronous Programming",
"sidebar_label": "Introduction"
},
"asyncio_working_with_async": {
"title": "Working with Async"
},
"auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"auth_auth_module": {
"title": "Multi-factor Authentication Modules"
},
"auth_auth_provider": {
"title": "Authentication Providers"
},
"auth_index": {
"title": "Authentication",
"sidebar_label": "Introduction"
},
"config_entries_config_flow_handler": {
"title": "Config Flow Handlers"
},
"config_entries_index": {
"title": "Config Entries",
"sidebar_label": "Introduction"
},
"configuration_yaml_index": {
"title": "Configuration.yaml",
"sidebar_label": "Introduction"
},
"creating_component_code_review": {
"title": "Checklist for creating a component"
},
"creating_component_deps_and_reqs": {
"title": "Requirements & Dependencies"
},
"creating_component_discovery": {
"title": "Component Discovery"
},
"creating_component_events": {
"title": "Handling events"
},
"creating_component_generic_discovery": {
"title": "Generic Platform Discovery"
},
"creating_component_index": {
"title": "Creating components",
"sidebar_label": "Introduction"
},
"creating_component_loading": {
"title": "Loading your components"
},
"creating_component_states": {
"title": "Handling states"
},
"creating_platform_code_review": {
"title": "Checklist for creating a platform"
},
"creating_platform_example_light": {
"title": "Example light platform"
},
"creating_platform_example_sensor": {
"title": "Example sensor platform"
},
"creating_platform_index": {
"title": "Adding support for a new platform",
"sidebar_label": "Introduction"
},
"data_entry_flow_index": {
"title": "Data Entry Flow",
"sidebar_label": "Introduction"
},
"dev_101_config": {
"title": "Using Config"
},
"dev_101_events": {
"title": "Using Events"
},
"dev_101_hass": {
"title": "Hass object"
},
"dev_101_index": {
"title": "Development 101",
"sidebar_label": "Introduction"
},
"dev_101_services": {
"title": "Using Services"
},
"dev_101_states": {
"title": "Using States"
},
"development_catching_up": {
"title": "Catching up with Reality"
},
"development_checklist": {
"title": "Development Checklist"
},
"development_environment": {
"title": "Set up Development Environment"
},
"development_guidelines": {
"title": "Style guidelines"
},
"development_index": {
"title": "Starting with Development",
"sidebar_label": "Introduction"
},
"development_submitting": {
"title": "Submit your work"
},
"development_testing": {
"title": "Testing your code"
},
"development_typing": {
"title": "Adding type hints to your code"
},
"development_validation": {
"title": "Validate the input"
},
"device_registry_index": {
"title": "Device Registry",
"sidebar_label": "Introduction"
},
"documentation_create_page": {
"title": "Create a new page"
},
"documentation_index": {
"title": "Documentation"
},
"documentation_standards": {
"title": "Standards"
},
"entity_alarm_control_panel": {
"title": "Alarm Control Panel Entity",
"sidebar_label": "Alarm Control Panel"
},
"entity_binary_sensor": {
"title": "Binary Sensor Entity",
"sidebar_label": "Binary Sensor"
},
"entity_climate": {
"title": "Climate Entity",
"sidebar_label": "Climate"
},
"entity_cover": {
"title": "Cover Entity",
"sidebar_label": "Cover"
},
"entity_fan": {
"title": "Fan Entity",
"sidebar_label": "Fan"
},
"entity_index": {
"title": "Entity",
"sidebar_label": "Introduction"
},
"entity_light": {
"title": "Light Entity",
"sidebar_label": "Light"
},
"entity_lock": {
"title": "Lock Entity",
"sidebar_label": "Lock"
},
"entity_media_player": {
"title": "Media Player Entity",
"sidebar_label": "Media Player"
},
"entity_registry_index": {
"title": "Entity Registry",
"sidebar_label": "Introduction"
},
"entity_remote": {
"title": "Remote Entity",
"sidebar_label": "Remote"
},
"entity_sensor": {
"title": "Sensor Entity",
"sidebar_label": "Sensor"
},
"entity_switch": {
"title": "Switch Entity",
"sidebar_label": "Switch"
},
"entity_vacuum": {
"title": "Vacuum Entity",
"sidebar_label": "Vacuum"
},
"entity_weather": {
"title": "Weather Entity",
"sidebar_label": "Weather"
},
"external_api_rest": {
"title": "REST API"
},
"external_api_server_sent_events": {
"title": "Server-sent events"
},
"external_api_websocket": {
"title": "WebSocket API"
},
"frontend_add_card": {
"title": "Adding state card"
},
"frontend_add_more_info": {
"title": "Adding more info dialogs"
},
"frontend_add_websocket_api": {
"title": "Extending the WebSocket API"
},
"frontend_architecture": {
"title": "Home Assistant Frontend Architecture",
"sidebar_label": "Architecture"
},
"frontend_creating_custom_panels": {
"title": "Creating custom panels"
},
"frontend_creating_custom_ui": {
"title": "Creating custom UI"
},
"frontend_data": {
"title": "Frontend data",
"sidebar_label": "Data"
},
"frontend_development": {
"title": "Frontend development",
"sidebar_label": "Development"
},
"frontend_external_auth": {
"title": "External Authentication"
},
"frontend_index": {
"title": "Home Assistant Frontend",
"sidebar_label": "Introduction"
},
"hassio_addon_communication": {
"title": "Add-On Communication"
},
"hassio_addon_config": {
"title": "Add-On Configuration"
},
"hassio_addon_index": {
"title": "Developing an add-on",
"sidebar_label": "Introduction"
},
"hassio_addon_presentation": {
"title": "Presenting your add-on"
},
"hassio_addon_publishing": {
"title": "Publishing your add-on"
},
"hassio_addon_repository": {
"title": "Create an add-on repository"
},
"hassio_addon_security": {
"title": "Add-on security"
},
"hassio_addon_testing": {
"title": "Local add-on testing"
},
"hassio_addon_tutorial": {
"title": "Tutorial: Making your first add-on"
},
"hassio_debugging": {
"title": "Debugging Hass.io"
},
"hassio_hass": {
"title": "Hass.io <> Home Assistant integration development",
"sidebar_label": "HASS Integration development"
},
"integration_quality_scale_index": {
"title": "Integration Quality Scale",
"sidebar_label": "Introduction"
},
"intent_builtin": {
"title": "Built-in intents"
},
"intent_conversation": {
"title": "Registering sentences"
},
"intent_firing": {
"title": "Firing intents"
},
"intent_handling": {
"title": "Handling intents"
},
"intent_index": {
"title": "Intents",
"sidebar_label": "Introduction"
},
"internationalization_backend_localization": {
"title": "Backend Localization"
},
"internationalization_custom_component_localization": {
"title": "Custom Component Localization"
},
"internationalization_index": {
"title": "Internationalization"
},
"internationalization_translation": {
"title": "Translation"
},
"lovelace_custom_card": {
"title": "Lovelace: Custom Cards"
},
"lovelace_index": {
"title": "Lovelace UI",
"sidebar_label": "Introduction"
},
"maintenance": {
"title": "Maintenance"
},
"misc": {
"title": "Miscellaneous"
},
"releasing": {
"title": "Releasing"
},
"version-0.72-architecture_components": {
"title": "Components Architecture",
"sidebar_label": "Components"
},
"version-0.72-architecture_entities": {
"title": "Entity Architecture",
"sidebar_label": "Entity"
},
"version-0.72-architecture_hassio": {
"title": "Hass.io Architecture",
"sidebar_label": "Hass.io"
},
"version-0.72-architecture_index": {
"title": "Architecture",
"sidebar_label": "Introduction"
},
"version-0.72-asyncio_101": {
"title": "Asyncio 101"
},
"version-0.72-asyncio_categorizing_functions": {
"title": "Categorizing Functions"
},
"version-0.72-asyncio_index": {
"title": "Asynchronous Programming",
"sidebar_label": "Introduction"
},
"version-0.72-asyncio_working_with_async": {
"title": "Working with Async"
},
"version-0.72-auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"version-0.72-auth_auth_provider": {
"title": "Authentication Providers"
},
"version-0.72-auth_index": {
"title": "Authentication",
"sidebar_label": "Introduction"
},
"version-0.72-config_entries_config_flow_handler": {
"title": "Config Flow Handlers"
},
"version-0.72-config_entries_index": {
"title": "Config Entries",
"sidebar_label": "Introduction"
},
"version-0.72-configuration_yaml_index": {
"title": "Configuration.yaml",
"sidebar_label": "Introduction"
},
"version-0.72-creating_component_code_review": {
"title": "Checklist for creating a component"
},
"version-0.72-creating_component_deps_and_reqs": {
"title": "Requirements & Dependencies"
},
"version-0.72-creating_component_discovery": {
"title": "Component Discovery"
},
"version-0.72-creating_component_events": {
"title": "Handling events"
},
"version-0.72-creating_component_generic_discovery": {
"title": "Generic Platform Discovery"
},
"version-0.72-creating_component_index": {
"title": "Creating components",
"sidebar_label": "Introduction"
},
"version-0.72-creating_component_loading": {
"title": "Loading your components"
},
"version-0.72-creating_component_states": {
"title": "Handling states"
},
"version-0.72-creating_platform_code_review": {
"title": "Checklist for creating a platform"
},
"version-0.72-creating_platform_example_light": {
"title": "Example light platform"
},
"version-0.72-creating_platform_example_sensor": {
"title": "Example sensor platform"
},
"version-0.72-creating_platform_index": {
"title": "Adding support for a new platform",
"sidebar_label": "Introduction"
},
"version-0.72-data_entry_flow_index": {
"title": "Data Entry Flow",
"sidebar_label": "Introduction"
},
"version-0.72-dev_101_config": {
"title": "Using Config"
},
"version-0.72-dev_101_events": {
"title": "Using Events"
},
"version-0.72-dev_101_hass": {
"title": "Hass object"
},
"version-0.72-dev_101_index": {
"title": "Development 101",
"sidebar_label": "Introduction"
},
"version-0.72-dev_101_services": {
"title": "Using Services"
},
"version-0.72-dev_101_states": {
"title": "Using States"
},
"version-0.72-development_catching_up": {
"title": "Catching up with Reality"
},
"version-0.72-development_checklist": {
"title": "Development Checklist"
},
"version-0.72-development_environment": {
"title": "Set up Development Environment"
},
"version-0.72-development_guidelines": {
"title": "Style guidelines"
},
"version-0.72-development_index": {
"title": "Starting with Development",
"sidebar_label": "Introduction"
},
"version-0.72-development_submitting": {
"title": "Submit your work"
},
"version-0.72-development_testing": {
"title": "Testing your code"
},
"version-0.72-development_typing": {
"title": "Adding type hints to your code"
},
"version-0.72-development_validation": {
"title": "Validate the input"
},
"version-0.72-entity_alarm_control_panel": {
"title": "Alarm Control Panel Entity",
"sidebar_label": "Alarm Control Panel"
},
"version-0.72-entity_binary_sensor": {
"title": "Binary Sensor Entity",
"sidebar_label": "Binary Sensor"
},
"version-0.72-entity_climate": {
"title": "Climate Entity",
"sidebar_label": "Climate"
},
"version-0.72-entity_cover": {
"title": "Cover Entity",
"sidebar_label": "Cover"
},
"version-0.72-entity_fan": {
"title": "Fan Entity",
"sidebar_label": "Fan"
},
"version-0.72-entity_index": {
"title": "Entity",
"sidebar_label": "Introduction"
},
"version-0.72-entity_light": {
"title": "Light Entity",
"sidebar_label": "Light"
},
"version-0.72-entity_lock": {
"title": "Lock Entity",
"sidebar_label": "Lock"
},
"version-0.72-entity_media_player": {
"title": "Media Player Entity",
"sidebar_label": "Media Player"
},
"version-0.72-entity_registry_index": {
"title": "Entity Registry",
"sidebar_label": "Introduction"
},
"version-0.72-entity_remote": {
"title": "Remote Entity",
"sidebar_label": "Remote"
},
"version-0.72-entity_sensor": {
"title": "Sensor Entity",
"sidebar_label": "Sensor"
},
"version-0.72-entity_switch": {
"title": "Switch Entity",
"sidebar_label": "Switch"
},
"version-0.72-entity_vacuum": {
"title": "Vacuum Entity",
"sidebar_label": "Vacuum"
},
"version-0.72-entity_weather": {
"title": "Weather Entity",
"sidebar_label": "Weather"
},
"version-0.72-external_api_rest_python": {
"title": "REST API - Python bindings"
},
"version-0.72-external_api_rest": {
"title": "REST API"
},
"version-0.72-external_api_server_sent_events": {
"title": "Server-sent events"
},
"version-0.72-external_api_websocket": {
"title": "WebSocket API"
},
"version-0.72-frontend_add_card": {
"title": "Adding state card"
},
"version-0.72-frontend_add_more_info": {
"title": "Adding more info dialogs"
},
"version-0.72-frontend_add_websocket_api": {
"title": "Extending the WebSocket API"
},
"version-0.72-frontend_architecture": {
"title": "Home Assistant Frontend Architecture",
"sidebar_label": "Architecture"
},
"version-0.72-frontend_creating_custom_panels": {
"title": "Creating custom panels"
},
"version-0.72-frontend_creating_custom_ui": {
"title": "Creating custom UI"
},
"version-0.72-frontend_development": {
"title": "Frontend development",
"sidebar_label": "Development"
},
"version-0.72-frontend_index": {
"title": "Home Assistant Frontend",
"sidebar_label": "Introduction"
},
"version-0.72-hassio_addon_communication": {
"title": "Add-On Communication"
},
"version-0.72-hassio_addon_config": {
"title": "Add-On Configuration"
},
"version-0.72-hassio_addon_index": {
"title": "Developing an add-on",
"sidebar_label": "Introduction"
},
"version-0.72-hassio_addon_presentation": {
"title": "Presenting your add-on"
},
"version-0.72-hassio_addon_publishing": {
"title": "Publishing your add-on"
},
"version-0.72-hassio_addon_repository": {
"title": "Create an add-on repository"
},
"version-0.72-hassio_addon_testing": {
"title": "Local add-on testing"
},
"version-0.72-hassio_addon_tutorial": {
"title": "Tutorial: Making your first add-on"
},
"version-0.72-hassio_debugging": {
"title": "Debugging Hass.io"
},
"version-0.72-hassio_hass": {
"title": "Hass.io <> Home Assistant integration development",
"sidebar_label": "HASS Integration development"
},
"version-0.72-intent_builtin": {
"title": "Built-in intents"
},
"version-0.72-intent_conversation": {
"title": "Registering sentences"
},
"version-0.72-intent_firing": {
"title": "Firing intents"
},
"version-0.72-intent_handling": {
"title": "Handling intents"
},
"version-0.72-intent_index": {
"title": "Intents",
"sidebar_label": "Introduction"
},
"version-0.72-internationalization_backend_localization": {
"title": "Backend Localization"
},
"version-0.72-internationalization_custom_component_localization": {
"title": "Custom Component Localization"
},
"version-0.72-internationalization_index": {
"title": "Internationalization"
},
"version-0.72-internationalization_translation": {
"title": "Translation"
},
"version-0.72-lovelace_card_types": {
"title": "Type Of Cards",
"sidebar_label": "Cards"
},
"version-0.72-lovelace_custom_card": {
"title": "Custom Cards"
},
"version-0.72-lovelace_index": {
"title": "Lovelace UI",
"sidebar_label": "Introduction"
},
"version-0.72-maintenance": {
"title": "Maintenance"
},
"version-0.72-misc": {
"title": "Miscellaneous"
},
"version-0.72-releasing": {
"title": "Releasing"
},
"version-0.73.0-auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"version-0.73.0-development_guidelines": {
"title": "Style guidelines"
},
"version-0.73.0-documentation_create_page": {
"title": "Create a new page"
},
"version-0.73.0-documentation_index": {
"title": "Documentation"
},
"version-0.73.0-documentation_standards": {
"title": "Standards"
},
"version-0.73.0-frontend_development": {
"title": "Frontend development",
"sidebar_label": "Development"
},
"version-0.73.0-hassio_addon_config": {
"title": "Add-On Configuration"
},
"version-0.73.0-lovelace_custom_card": {
"title": "Custom Cards"
},
"version-0.73.0-lovelace_index": {
"title": "Lovelace UI",
"sidebar_label": "Introduction"
},
"version-0.74.0-asyncio_working_with_async": {
"title": "Working with Async"
},
"version-0.74.0-auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"version-0.74.0-entity_media_player": {
"title": "Media Player Entity",
"sidebar_label": "Media Player"
},
"version-0.74.0-entity_vacuum": {
"title": "Vacuum Entity",
"sidebar_label": "Vacuum"
},
"version-0.74.0-hassio_addon_tutorial": {
"title": "Tutorial: Making your first add-on"
},
"version-0.74.0-internationalization_index": {
"title": "Internationalization"
},
"version-0.74.0-lovelace_custom_card": {
"title": "Lovelace: Custom Cards"
},
"version-0.76.0-auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"version-0.76.0-auth_auth_provider": {
"title": "Authentication Providers"
},
"version-0.76.0-development_environment": {
"title": "Set up Development Environment"
},
"version-0.76.0-documentation_create_page": {
"title": "Create a new page"
},
"version-0.76.0-documentation_standards": {
"title": "Standards"
},
"version-0.76.0-frontend_creating_custom_panels": {
"title": "Creating custom panels"
},
"version-0.76.0-frontend_data": {
"title": "Frontend data",
"sidebar_label": "Data"
},
"version-0.76.0-hassio_addon_config": {
"title": "Add-On Configuration"
},
"version-0.76.0-hassio_debugging": {
"title": "Debugging Hass.io"
},
"version-0.77.0-auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"version-0.77.0-auth_auth_module": {
"title": "Multi-factor Authentication Modules"
},
"version-0.77.0-auth_auth_provider": {
"title": "Authentication Providers"
},
"version-0.77.0-auth_index": {
"title": "Authentication",
"sidebar_label": "Introduction"
},
"version-0.77.0-config_entries_config_flow_handler": {
"title": "Config Flow Handlers"
},
"version-0.77.0-data_entry_flow_index": {
"title": "Data Entry Flow",
"sidebar_label": "Introduction"
},
"version-0.77.0-frontend_data": {
"title": "Frontend data",
"sidebar_label": "Data"
},
"version-0.78.0-asyncio_working_with_async": {
"title": "Working with Async"
},
"version-0.78.0-auth_api": {
"title": "Authentication API",
"sidebar_label": "API"
},
"version-0.78.0-auth_auth_module": {
"title": "Multi-factor Authentication Modules"
},
"version-0.78.0-auth_index": {
"title": "Authentication",
"sidebar_label": "Introduction"
},
"version-0.78.0-creating_component_code_review": {
"title": "Checklist for creating a component"
},
"version-0.78.0-development_guidelines": {
"title": "Style guidelines"
},
"version-0.78.0-device_registry_index": {
"title": "Device Registry",
"sidebar_label": "Introduction"
},
"version-0.78.0-documentation_standards": {
"title": "Standards"
},
"version-0.78.0-external_api_websocket": {
"title": "WebSocket API"
},
"version-0.78.0-frontend_add_more_info": {
"title": "Adding more info dialogs"
},
"version-0.78.0-frontend_external_auth": {
"title": "External Authentication"
},
"version-0.78.0-hassio_addon_communication": {
"title": "Add-On Communication"
},
"version-0.78.0-hassio_addon_config": {
"title": "Add-On Configuration"
},
"version-0.78.0-hassio_addon_security": {
"title": "Add-on security"
}
},
"links": {
"Architecture": "Architecture",
"frontend_creating_custom_panels": "Creating custom panels",
"frontend_creating_custom_ui": "Creating custom UI",
"frontend_data": "Frontend data",
"Data": "Data",
"frontend_development": "Frontend development",
"Development": "Development",
"frontend_external_auth": "External Authentication",
"frontend_index": "Home Assistant Frontend",
"hassio_addon_communication": "Add-On Communication",
"hassio_addon_config": "Add-On Configuration",
"hassio_addon_index": "Developing an add-on",
"hassio_addon_presentation": "Presenting your add-on",
"hassio_addon_publishing": "Publishing your add-on",
"hassio_addon_repository": "Create an add-on repository",
"hassio_addon_security": "Add-on security",
"hassio_addon_testing": "Local add-on testing",
"hassio_addon_tutorial": "Tutorial: Making your first add-on",
"hassio_debugging": "Debugging Hass.io",
"hassio_hass": "Hass.io <> Home Assistant integration development",
"HASS Integration development": "HASS Integration development",
"intent_builtin": "Built-in intents",
"intent_conversation": "Registering sentences",
"intent_firing": "Firing intents",
"intent_handling": "Handling intents",
"intent_index": "Intents",
"internationalization_backend_localization": "Backend Localization",
"internationalization_custom_component_localization": "Custom Component Localization",
"internationalization_index": "Internationalization",
"internationalization_translation": "Translation",
"lovelace_custom_card": "Lovelace: Custom Cards",
"lovelace_index": "Lovelace UI",
"maintenance": "Maintenance",
"misc": "Miscellaneous",
"releasing": "Releasing",
"Frontend": "Frontend",
"Backend": "Backend",
"Misc": "Misc",
"Blog": "Blog",
"Blog": "Blog"
},
"categories": {
"Architecture": "Architecture",
"Entities": "Entities",
"Authentication": "Authentication",
"Configuration.yaml": "Configuration.yaml",
@ -137,20 +836,25 @@
"Data Entry Flow": "Data Entry Flow",
"Entity Registry": "Entity Registry",
"Device Registry": "Device Registry",
"Frontend": "Frontend",
"Extending the frontend": "Extending the frontend",
"Custom UI": "Custom UI",
"Developing a feature": "Developing a feature",
"Development 101": "Development 101",
"Integration Quality Scale": "Integration Quality Scale",
"Creating Platforms": "Creating Platforms",
"Creating Components": "Creating Components",
"Introduction": "Introduction",
"External API": "External API",
"Internationalization": "Internationalization",
"Documentation": "Documentation",
"Intents": "Intents",
"asyncio": "asyncio",
"Hass.io": "Hass.io",
"Hass.io Add-Ons": "Hass.io Add-Ons",
"Maintainer docs": "Maintainer docs",
"Lovelace UI": "Lovelace UI"
}
},
"pages-strings": {
"Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)|no description given": "Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)",

View File

@ -68,7 +68,7 @@ class Versions extends React.Component {
{versions.map(
version =>
version !== latestVersion && (
<tr>
<tr key={version}>
<th>{version}</th>
<td>
<a href={versionUrl(this.props.language, version)}>Documentation</a>

View File

@ -84,6 +84,9 @@
"dev_101_services",
"dev_101_config"
],
"Integration Quality Scale": [
"integration_quality_scale_index"
],
"Creating Platforms": [
"creating_platform_index",
"creating_platform_code_review",