chore(configuration): enhance development configuration for Home Assistant

Updated the configuration files to improve development experience by explicitly loading useful integrations and adjusting logging levels. Added YAML schemas for configuration and services to ensure proper structure and validation.

Impact: Developers will have a more streamlined setup process and better logging during integration development.
This commit is contained in:
Julian Pawlowski 2026-04-12 14:45:15 +00:00
parent 3ba8e91958
commit dd59c687e3
5 changed files with 1368 additions and 21 deletions

View file

@ -1,20 +1,32 @@
# Development-friendly config that excludes go2rtc which has compatibility issues
# yaml-language-server: $schema=../schemas/yaml/configuration_schema.yaml
# Development-friendly Home Assistant configuration
#
# We don't use default_config to avoid HA OS-specific integrations like go2rtc
# that expect specific container environments. Instead, we explicitly load
# the integrations useful for custom component development.
# https://www.home-assistant.io/integrations/homeassistant/
homeassistant:
debug: true
# Disable analytics, diagnostics and error reporting for development instance
# Debugging integration
# https://www.home-assistant.io/integrations/debugpy/
debugpy:
# Privacy & analytics settings
# https://www.home-assistant.io/integrations/analytics/
analytics:
# Disable usage analytics to prevent skewing production statistics
# https://analytics.home-assistant.io should only reflect real user installations
# Analytics are disabled to prevent development instances from skewing
# production statistics at https://analytics.home-assistant.io
# System monitoring
# https://www.home-assistant.io/integrations/system_health/
system_health:
# Provides system health information in Settings > System > Repairs
# Safe for development - only shows local system status
# https://www.home-assistant.io/integrations/diagnostics/
# Note: Diagnostics integration cannot be disabled, but without analytics
# and with internal_url set, no data is sent externally
# Note: The diagnostics integration is always loaded and cannot be disabled.
# With analytics disabled, diagnostic data stays local and isn't sent anywhere.
# Core integrations
http:
@ -34,19 +46,120 @@ http:
cors_allowed_origins:
- "*"
# Config UI integration - useful for development
config:
# Frontend - required for UI
frontend:
# Optional: Enable custom themes
# themes: !include_dir_merge_named themes
automation:
script:
scene:
# Useful default_config integrations for development
# https://www.home-assistant.io/integrations/history/
history:
# https://www.home-assistant.io/integrations/logbook/
logbook:
# https://www.home-assistant.io/integrations/conversation/
# conversation:
# Note: Uncomment to enable voice assistant/conversation features
# Dependencies (hassil, home-assistant-intents) are pre-installed in bootstrap
# https://www.home-assistant.io/integrations/webhook/
webhook:
# https://www.home-assistant.io/integrations/my/
my:
# https://www.home-assistant.io/integrations/recorder/
recorder:
# Development-friendly database settings
# Reduce database size and improve performance
purge_keep_days: 2
commit_interval: 30
# Exclude entities you don't need history for
exclude:
domains:
# Sun position changes constantly, rarely needed in dev
- sun
# Backups don't need history
- backup
# Updates don't need full history tracking
- update
entity_globs:
# Time sensors change every second/minute
- sensor.time*
- sensor.date*
# Uptime sensors not interesting for development
- sensor.*uptime*
- sensor.*last_boot*
# Memory/CPU sensors create a lot of data
- sensor.*memory*
- sensor.*cpu*
event_types:
# Very frequent, rarely needed in development
- call_service
# System events create lots of noise
- system_log_event
# Component loading events
- component_loaded
energy:
# https://www.home-assistant.io/integrations/logger/
logger:
default: info
logs:
# Main integration logger - applies to ALL sub-loggers by default
# Reduce noise from chatty components
homeassistant.components.recorder: warning
homeassistant.components.recorder.util: warning
homeassistant.components.websocket_api: warning
homeassistant.components.http.ban: warning
homeassistant.components.zeroconf: warning
homeassistant.components.ssdp: warning
homeassistant.components.bluetooth: warning
# Conversation can be noisy with hassil
homeassistant.components.conversation: warning
# Analytics/metrics are not interesting during development
homeassistant.components.analytics: error
# Hide platform setup messages (scene, binary_sensor, sensor, etc.)
homeassistant.components.scene: warning
homeassistant.components.binary_sensor: warning
homeassistant.components.sensor: warning
homeassistant.components.event: warning
homeassistant.components.switch: warning
# HTTP/network
homeassistant.components.http: warning
# Keep loader at warning level to see real issues with our integration
homeassistant.loader: warning
# Hide the verbose "Setting up X" messages during startup
# but keep warnings/errors visible
homeassistant.bootstrap: warning
homeassistant.setup: warning
# Core system - keep visible for important messages
homeassistant.core: info
# IMPORTANT for custom integration development:
# Coordinator issues (API calls, update failures)
homeassistant.helpers.update_coordinator: info
# Entity registration problems
homeassistant.helpers.entity_registry: info
# Config flow debugging (setup, options)
homeassistant.config_entries: info
# Your integration debug logging - shows EVERYTHING from your integration
custom_components.tibber_prices: debug
# Reduce verbosity for details loggers (change to 'debug' for deep debugging)

View file

@ -1,10 +1,14 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Home Assistant integration manifest",
"description": "The manifest for a Home Assistant integration",
"title": "Home Assistant Custom Integration manifest for HACS",
"description": "The manifest.json schema for Home Assistant custom integrations distributed via HACS (Home Assistant Community Store). Extends the official Home Assistant manifest schema with HACS-specific requirements like version and issue_tracker fields.",
"type": "object",
"if": {
"properties": { "integration_type": { "const": "virtual" } },
"properties": {
"integration_type": {
"const": "virtual"
}
},
"required": ["integration_type"]
},
"then": {
@ -129,7 +133,9 @@
"properties": {
"description": "The properties of the Zeroconf advertisement to filter.",
"type": "object",
"additionalProperties": { "type": "string" }
"additionalProperties": {
"type": "string"
}
}
},
"required": ["type"],
@ -160,7 +166,9 @@
"type": "string"
}
},
"additionalProperties": { "type": "string" }
"additionalProperties": {
"type": "string"
}
}
},
"bluetooth": {
@ -300,9 +308,13 @@
}
},
"documentation": {
"description": "The website containing the documentation for the integration. It has to be in the format \"https://www.home-assistant.io/integrations/[domain]\"\nhttps://developers.home-assistant.io/docs/creating_integration_manifest/#documentation",
"description": "The website containing the documentation for the integration. For core integrations, it should be \"https://www.home-assistant.io/integrations/[domain]\". Custom integrations can use any URL.\nhttps://developers.home-assistant.io/docs/creating_integration_manifest/#documentation",
"type": "string",
"format": "uri"
},
"issue_tracker": {
"description": "The issue tracker of your integration, where users can report issues. For custom integrations, this is typically a GitHub issues URL.\nhttps://developers.home-assistant.io/docs/creating_integration_manifest/#issue-tracker",
"type": "string",
"pattern": "^https://www.home-assistant.io/integrations/[0-9a-z_]+$",
"format": "uri"
},
"quality_scale": {
@ -375,15 +387,31 @@
"single_config_entry": {
"description": "Whether the integration only supports a single config entry.\nhttps://developers.home-assistant.io/docs/creating_integration_manifest/#single-config-entry-only",
"const": true
},
"version": {
"description": "The version of the integration. Required for custom integrations, should be omitted for core integrations.\nhttps://developers.home-assistant.io/docs/creating_integration_manifest/#version",
"type": "string",
"pattern": "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(?:[-\\.]([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z-]+)?$"
}
},
"additionalProperties": false,
"required": ["domain", "name", "codeowners", "documentation"],
"required": [
"domain",
"name",
"codeowners",
"documentation",
"issue_tracker",
"version"
],
"dependencies": {
"mqtt": {
"anyOf": [
{ "required": ["dependencies"] },
{ "required": ["after_dependencies"] }
{
"required": ["dependencies"]
},
{
"required": ["after_dependencies"]
}
]
}
}

View file

@ -1,7 +1,7 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Home Assistant Translation File Schema",
"description": "Schema for Home Assistant custom integration translation files based on https://developers.home-assistant.io/docs/internationalization/core",
"title": "Home Assistant Custom Integration Translation (strings.json)",
"description": "JSON schema for Home Assistant custom integration translation files (strings.json and translations/*.json). Defines translations for config flows, entities, services, device automations, and more. Based on the official Home Assistant internationalization specification: https://developers.home-assistant.io/docs/internationalization/core",
"type": "object",
"properties": {
"title": {
@ -187,13 +187,17 @@
},
"sections": {
"type": "object",
"description": "Collapsible section labels",
"description": "Collapsible section labels and descriptions",
"additionalProperties": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Section name"
},
"description": {
"type": "string",
"description": "Section description (optional, supports Markdown)"
}
}
}

View file

@ -0,0 +1,591 @@
# YAML Schema for Home Assistant configuration.yaml
# Based on: https://www.home-assistant.io/docs/configuration/
$schema: http://json-schema.org/draft-07/schema#
title: Home Assistant Configuration
description: Basic schema for Home Assistant configuration.yaml. This covers core configuration structure but individual integrations have their own specific schemas.
type: object
properties:
homeassistant:
type: object
description: Core Home Assistant configuration
properties:
name:
type: string
description: Name of the location
latitude:
type: number
description: Latitude of your location
longitude:
type: number
description: Longitude of your location
elevation:
type: number
description: Elevation in meters
unit_system:
type: string
enum: [metric, imperial, us_customary]
description: Unit system to use
temperature_unit:
type: string
enum: [C, F]
description: Temperature unit (overrides unit_system)
time_zone:
type: string
description: Time zone (e.g., Europe/Berlin)
currency:
type: string
description: Currency code (e.g., EUR, USD)
country:
type: string
description: Country code (ISO 3166-1 alpha-2, e.g., DE, US)
language:
type: string
description: Language code (e.g., en, de)
internal_url:
type: string
format: uri
description: Internal URL for Home Assistant
external_url:
type: string
format: uri
description: External URL for Home Assistant
allowlist_external_dirs:
type: array
items:
type: string
description: List of directories that are allowed for external access
allowlist_external_urls:
type: array
items:
type: string
format: uri
description: List of external URLs that are allowed
packages:
type: object
description: Split configuration into packages
additionalProperties: true
customize:
type: object
description: Customize entities
additionalProperties: true
customize_domain:
type: object
description: Customize all entities in a domain
additionalProperties: true
customize_glob:
type: object
description: Customize entities using glob patterns
additionalProperties: true
auth_providers:
type: array
description: Authentication providers
items:
type: object
auth_mfa_modules:
type: array
description: Multi-factor authentication modules
items:
type: object
debug:
type: boolean
description: Enable debug mode
media_dirs:
type: object
description: Media directories
additionalProperties:
type: string
default_config:
description: Load default integrations. Set to empty object {} to include default_config.
oneOf:
- type: object
additionalProperties: false
- type: "null"
# Common integrations
http:
description: HTTP integration configuration (https://www.home-assistant.io/integrations/http/)
type: [object, "null"]
properties:
server_host:
oneOf:
- type: string
format: ipv4
- type: string
format: ipv6
- type: array
items:
type: string
description: Host to bind to (e.g., 0.0.0.0 for all interfaces)
server_port:
type: integer
minimum: 1
maximum: 65535
description: Port to bind to
base_url:
type: string
format: uri
description: Base URL for external access (deprecated, use homeassistant.external_url)
ssl_certificate:
type: string
description: Path to SSL certificate
ssl_key:
type: string
description: Path to SSL private key
cors_allowed_origins:
type: array
items:
type: string
description: List of allowed CORS origins
use_x_forwarded_for:
type: boolean
description: Enable X-Forwarded-For header processing
trusted_proxies:
type: array
items:
type: string
description: List of trusted proxy IP addresses
ip_ban_enabled:
type: boolean
description: Enable automatic IP banning
login_attempts_threshold:
type: integer
minimum: 1
description: Number of failed login attempts before ban
api:
description: API integration
oneOf:
- type: object
additionalProperties: false
- type: "null"
analytics:
description: Analytics configuration (https://www.home-assistant.io/integrations/analytics/)
oneOf:
- type: object
additionalProperties: false
- type: "null"
logger:
type: object
description: Logger configuration (https://www.home-assistant.io/integrations/logger/)
properties:
default:
type: string
enum: [notset, debug, info, warning, error, critical]
description: Default log level for all components
logs:
type: object
description: Per-component log levels (e.g., homeassistant.components.http, custom_components.your_integration)
patternProperties:
"^(homeassistant\\.components\\.[a-z0-9_.]+|homeassistant\\.[a-z0-9_.]+|custom_components\\.[a-z0-9_.]+|[a-z0-9_.]+)$":
type: string
enum: [notset, debug, info, warning, error, critical]
additionalProperties: false
filters:
type: object
description: Filter log messages
additionalProperties: true
recorder:
description: Recorder (database) configuration (https://www.home-assistant.io/integrations/recorder/)
oneOf:
- type: object
properties:
db_url:
type: string
description: Database URL (e.g., sqlite:///path/to/file.db, postgresql://...)
format: uri
purge_keep_days:
type: integer
minimum: 1
description: Number of days to keep history
commit_interval:
type: integer
minimum: 1
description: Seconds between database commits
auto_purge:
type: boolean
description: Automatically purge old data
auto_repack:
type: boolean
description: Automatically repack database (SQLite only)
exclude:
type: object
description: Exclude entities/domains from recording
properties:
domains:
type: array
items:
type: string
description: Domain names to exclude (e.g., sun, backup)
entities:
type: array
items:
type: string
description: Specific entities to exclude
entity_globs:
type: array
items:
type: string
description: Entity glob patterns to exclude (e.g., sensor.time*)
event_types:
type: array
items:
type: string
description: Event types to exclude (e.g., call_service)
include:
type: object
description: Include only specific entities/domains
properties:
domains:
type: array
items:
type: string
description: Domain names to include
entities:
type: array
items:
type: string
description: Specific entities to include
entity_globs:
type: array
items:
type: string
description: Entity glob patterns to include
- type: "null"
history:
description: History configuration (https://www.home-assistant.io/integrations/history/)
oneOf:
- type: object
properties:
exclude:
type: object
description: Exclude entities from history
properties:
domains:
type: array
items:
type: string
entities:
type: array
items:
type: string
entity_globs:
type: array
items:
type: string
include:
type: object
description: Include only specific entities in history
properties:
domains:
type: array
items:
type: string
entities:
type: array
items:
type: string
entity_globs:
type: array
items:
type: string
- type: "null"
logbook:
description: Logbook configuration (https://www.home-assistant.io/integrations/logbook/)
oneOf:
- type: object
properties:
exclude:
type: object
description: Exclude entities from logbook
properties:
domains:
type: array
items:
type: string
entities:
type: array
items:
type: string
entity_globs:
type: array
items:
type: string
include:
type: object
description: Include only specific entities in logbook
properties:
domains:
type: array
items:
type: string
entities:
type: array
items:
type: string
entity_globs:
type: array
items:
type: string
- type: "null"
frontend:
description: Frontend configuration (https://www.home-assistant.io/integrations/frontend/)
oneOf:
- type: object
properties:
themes:
type: object
description: Custom themes
additionalProperties: true
extra_module_url:
type: array
description: Additional JavaScript modules to load
items:
type: string
format: uri
extra_js_url_es5:
type: array
description: Additional ES5 JavaScript modules
items:
type: string
format: uri
development_repo:
type: string
description: Path to frontend development repository
- type: "null"
config:
description: Configuration panel
oneOf:
- type: object
additionalProperties: false
- type: "null"
map:
description: Map panel
oneOf:
- type: object
additionalProperties: false
- type: "null"
sun:
description: Sun integration
oneOf:
- type: object
additionalProperties: false
- type: "null"
system_health:
description: System health integration
oneOf:
- type: object
additionalProperties: false
- type: "null"
mobile_app:
description: Mobile app integration (https://www.home-assistant.io/integrations/mobile_app/)
oneOf:
- type: object
additionalProperties: false
- type: "null"
# Development integrations
debugpy:
description: Python debugger integration for development (https://www.home-assistant.io/integrations/debugpy/)
oneOf:
- type: object
properties:
start:
type: boolean
description: Auto-start debugger on Home Assistant start
wait:
type: boolean
description: Wait for debugger to attach before continuing
port:
type: integer
minimum: 1
maximum: 65535
description: Port for debugger
host:
type: string
description: Host to bind debugger to
- type: "null"
webhook:
description: Webhook integration (https://www.home-assistant.io/integrations/webhook/)
oneOf:
- type: object
additionalProperties: false
- type: "null"
my:
description: My Home Assistant integration (https://www.home-assistant.io/integrations/my/)
oneOf:
- type: object
additionalProperties: false
- type: "null"
conversation:
description: Conversation/voice assistant integration (https://www.home-assistant.io/integrations/conversation/)
oneOf:
- type: object
properties:
intents:
type: object
description: Custom conversation intents
additionalProperties: true
- type: "null"
person:
type: array
description: Person configuration
items:
type: object
zone:
type: array
description: Zone configuration
items:
type: object
automation:
description: Automation configuration (https://www.home-assistant.io/integrations/automation/)
oneOf:
- type: string
pattern: "^!include"
description: Include from external file (e.g., !include automations.yaml)
- type: array
description: List of automations
items:
type: object
- type: object
description: Named automations
additionalProperties: true
- type: "null"
script:
description: Script configuration (https://www.home-assistant.io/integrations/script/)
oneOf:
- type: string
pattern: "^!include"
description: Include from external file (e.g., !include scripts.yaml)
- type: object
description: Named scripts
additionalProperties: true
- type: "null"
scene:
description: Scene configuration (https://www.home-assistant.io/integrations/scene/)
oneOf:
- type: string
pattern: "^!include"
description: Include from external file (e.g., !include scenes.yaml)
- type: array
description: List of scenes
items:
type: object
- type: object
description: Named scenes
additionalProperties: true
- type: "null"
input_boolean:
type: object
description: Input boolean helpers
input_number:
type: object
description: Input number helpers
input_datetime:
type: object
description: Input datetime helpers
input_text:
type: object
description: Input text helpers
input_select:
type: object
description: Input select helpers
input_button:
type: object
description: Input button helpers
counter:
type: object
description: Counter helpers
timer:
type: object
description: Timer helpers
group:
type: object
description: Group configuration
template:
type: array
description: Template entities
items:
type: object
# Allow any integration not explicitly defined
additionalProperties: true

View file

@ -0,0 +1,611 @@
# YAML Schema for Home Assistant services.yaml
# Based on: https://developers.home-assistant.io/docs/dev_101_services/
$schema: http://json-schema.org/draft-07/schema#
title: Home Assistant Service Actions Definition
description: Schema for Home Assistant services.yaml file that defines service actions for custom integrations
type: object
patternProperties:
"^[a-z][a-z0-9_]*$":
type: object
description: Service action definition (key is the service action name)
additionalProperties: false
properties:
name:
type: string
description: User-visible name of the service action (translated via strings.json)
description:
type: string
description: User-visible description of the service action (translated via strings.json). Supports Markdown.
target:
type: object
description: Allows users to specify entities by entity, device, or area. Do NOT define entity_id in fields if target is specified.
additionalProperties: false
properties:
entity:
type: object
description: Entity selector configuration
additionalProperties: false
properties:
domain:
oneOf:
- type: string
- type: array
items:
type: string
description: Filter entities by domain(s)
integration:
type: string
description: Filter entities by integration
device_class:
oneOf:
- type: string
- type: array
items:
type: string
description: Filter entities by device class(es)
supported_features:
type: array
description: Filter by required supported features. Each item is either a single feature or a list of features (AND logic).
items:
oneOf:
- type: string
- type: number
- type: array
items:
oneOf:
- type: string
- type: number
device:
type: object
description: Device selector configuration
additionalProperties: false
properties:
integration:
type: string
description: Filter devices by integration
manufacturer:
type: string
description: Filter devices by manufacturer
model:
type: string
description: Filter devices by model
area:
type: object
description: Area selector configuration
additionalProperties: false
fields:
type: object
description: Input fields for the service action
additionalProperties: false
patternProperties:
"^[a-z][a-z0-9_]*$":
type: object
description: Service action field definition
additionalProperties: false
properties:
name:
type: string
description: User-visible field name (translated via strings.json)
description:
type: string
description: User-visible field description (translated via strings.json)
required:
type: boolean
default: false
description: Whether the field is required
advanced:
type: boolean
default: false
description: Advanced fields are only shown when advanced mode is enabled
example:
description: Example value for this field
default:
description: Default field value if not provided
selector:
type: object
description: Selector to control the input UI (https://www.home-assistant.io/docs/blueprint/selectors/)
additionalProperties: true
properties:
# Common selectors
action:
type: [object, "null"]
description: Action sequence selector
additionalProperties: true
boolean:
type: [object, "null"]
description: Toggle switch selector
additionalProperties: true
condition:
type: [object, "null"]
description: Condition selector
additionalProperties: true
entity:
type: object
description: Entity selector with filtering options
additionalProperties: false
properties:
domain:
oneOf:
- type: string
- type: array
items:
type: string
integration:
type: string
device_class:
oneOf:
- type: string
- type: array
items:
type: string
supported_features:
type: array
items:
oneOf:
- type: string
- type: number
multiple:
type: boolean
exclude_entities:
type: array
items:
type: string
include_entities:
type: array
items:
type: string
device:
type: object
description: Device selector with filtering options
additionalProperties: false
properties:
integration:
type: string
manufacturer:
type: string
model:
type: string
multiple:
type: boolean
entity:
type: object
properties:
domain:
oneOf:
- type: string
- type: array
items:
type: string
device_class:
oneOf:
- type: string
- type: array
items:
type: string
area:
type: object
description: Area selector with filtering options
additionalProperties: false
properties:
multiple:
type: boolean
entity:
type: object
properties:
domain:
oneOf:
- type: string
- type: array
items:
type: string
integration:
type: string
device:
type: object
properties:
integration:
type: string
manufacturer:
type: string
target:
type: object
description: Target selector (entity/device/area combined)
additionalProperties: false
properties:
entity:
type: object
properties:
domain:
oneOf:
- type: string
- type: array
items:
type: string
device_class:
oneOf:
- type: string
- type: array
items:
type: string
number:
type: object
description: Number input selector
additionalProperties: false
properties:
min:
type: number
max:
type: number
step:
oneOf:
- type: number
- type: string
enum: ["any"]
unit_of_measurement:
type: string
mode:
type: string
enum: ["box", "slider"]
text:
type: [object, "null"]
description: Text input selector
additionalProperties: false
properties:
multiline:
type: boolean
type:
type: string
enum:
[
"color",
"date",
"datetime-local",
"email",
"month",
"number",
"password",
"search",
"tel",
"text",
"time",
"url",
"week",
]
multiple:
type: boolean
prefix:
type: string
suffix:
type: string
select:
type: object
description: Selection dropdown/list selector
additionalProperties: false
properties:
options:
oneOf:
- type: array
items:
type: string
- type: array
items:
type: object
properties:
label:
type: string
value:
type: string
multiple:
type: boolean
custom_value:
type: boolean
mode:
type: string
enum: ["list", "dropdown"]
sort:
type: boolean
translation_key:
type: string
required:
- options
time:
type: [object, "null"]
description: Time picker selector
additionalProperties: true
date:
type: [object, "null"]
description: Date picker selector
additionalProperties: true
datetime:
type: [object, "null"]
description: Date & time picker selector
additionalProperties: true
duration:
type: object
description: Duration selector (days, hours, minutes, seconds)
additionalProperties: false
properties:
enable_day:
type: boolean
enable_millisecond:
type: boolean
color_temp:
type: object
description: Color temperature selector
additionalProperties: false
properties:
unit:
type: string
enum: ["kelvin", "mired"]
min:
type: integer
max:
type: integer
color_rgb:
type: [object, "null"]
description: RGB color picker selector
additionalProperties: true
icon:
type: object
description: Icon picker selector
additionalProperties: false
properties:
placeholder:
type: string
template:
type: [object, "null"]
description: Jinja2 template input selector
additionalProperties: true
object:
type: object
description: YAML object input selector
additionalProperties: false
properties:
multiple:
type: boolean
trigger:
type: [object, "null"]
description: Trigger configuration selector
additionalProperties: true
location:
type: object
description: Location/coordinates picker selector
additionalProperties: false
properties:
radius:
type: boolean
icon:
type: string
media:
type: object
description: Media picker selector
additionalProperties: false
properties:
accept:
type: array
items:
type: string
theme:
type: object
description: Theme selector
additionalProperties: false
properties:
include_default:
type: boolean
# Additional selectors (simplified)
addon:
type: object
description: Add-on selector (HAOS only)
additionalProperties: true
assist_pipeline:
type: object
description: Assist pipeline selector
additionalProperties: true
attribute:
type: object
description: Attribute selector
additionalProperties: false
properties:
entity_id:
type: string
required:
- entity_id
backup_location:
type: object
description: Backup location selector (HAOS only)
additionalProperties: true
config_entry:
type: object
description: Configuration entry selector
additionalProperties: false
properties:
integration:
type: string
constant:
type: object
description: Constant value selector
additionalProperties: false
properties:
value:
description: The constant value
label:
type: string
required:
- value
conversation_agent:
type: object
description: Conversation agent selector
additionalProperties: false
properties:
language:
type: string
country:
type: object
description: Country selector
additionalProperties: false
properties:
countries:
type: array
items:
type: string
no_sort:
type: boolean
floor:
type: object
description: Floor selector
additionalProperties: false
properties:
multiple:
type: boolean
label:
type: object
description: Label selector
additionalProperties: false
properties:
multiple:
type: boolean
language:
type: object
description: Language selector
additionalProperties: false
properties:
languages:
type: array
items:
type: string
native_name:
type: boolean
no_sort:
type: boolean
qr_code:
type: object
description: QR code display (no return value)
additionalProperties: false
properties:
data:
description: Data to encode in QR code
scale:
type: integer
error_correction_level:
type: string
enum: ["low", "medium", "quartile", "high"]
required:
- data
state:
type: object
description: State selector
additionalProperties: false
properties:
entity_id:
type: string
multiple:
type: boolean
statistic:
type: object
description: Statistic selector
additionalProperties: false
properties:
multiple:
type: boolean
filter:
type: object
description: Filter to show field only if selected entities match criteria
additionalProperties: false
properties:
supported_features:
type: array
description: Show field if at least one selected entity supports at least one listed feature
items:
oneOf:
- type: string
- type: number
attribute:
type: object
description: Show field if at least one selected entity's attribute matches one of the listed values
patternProperties:
".*":
type: array
items:
oneOf:
- type: string
- type: number
- type: boolean
oneOf:
- required: [supported_features]
- required: [attribute]
# Collapsible sections for grouping fields (e.g., advanced_fields)
advanced_fields:
type: object
description: Collapsible section for advanced fields
additionalProperties: false
properties:
collapsed:
type: boolean
default: false
description: Whether the section is initially collapsed
fields:
type: object
description: Advanced fields in this section
additionalProperties: false
patternProperties:
"^[a-z][a-z0-9_]*$":
$ref: "#/patternProperties/^[a-z][a-z0-9_]*$/properties/fields/patternProperties/^[a-z][a-z0-9_]*$"
additionalProperties: false