feat(services): add new services and icons for enhanced functionality and user experience

This commit is contained in:
Julian Pawlowski 2025-12-02 18:46:15 +00:00
parent ab9735928a
commit d6ae931918
7 changed files with 451 additions and 263 deletions

View file

@ -0,0 +1,25 @@
{
"services": {
"get_price": {
"service": "mdi:table-search"
},
"get_chartdata": {
"service": "mdi:chart-bar",
"sections": {
"general": "mdi:identifier",
"selection": "mdi:calendar-range",
"filters": "mdi:filter-variant",
"transformation": "mdi:tune",
"format": "mdi:file-table",
"arrays_of_objects": "mdi:code-json",
"arrays_of_arrays": "mdi:code-brackets"
}
},
"get_apexcharts_yaml": {
"service": "mdi:chart-line"
},
"refresh_user_data": {
"service": "mdi:refresh"
}
}
}

View file

@ -2,7 +2,6 @@ get_price:
name: Get Price Data
description: >-
Fetch price data for a specific time range with automatic routing. Development and testing service for the price_info_for_range API function. Automatically uses PRICE_INFO, PRICE_INFO_RANGE, or both based on the time range boundary.
icon: mdi:table-search
fields:
entry_id:
name: Entry ID
@ -30,9 +29,6 @@ get_apexcharts_yaml:
name: Get ApexCharts Card YAML
description: >-
⚠️ IMPORTANT: This service generates a BASIC EXAMPLE configuration for ApexCharts Card as a starting point. It is NOT a complete solution for all ApexCharts features.
icon: mdi:chart-line
This integration is primarily a DATA PROVIDER. The generated YAML demonstrates how to use the `get_chartdata` service to fetch price data. Due to the segmented nature of our data (different time periods per series) and the use of Home Assistant's service API instead of entity attributes, many advanced ApexCharts features (like in_header, certain transformations) are not compatible or require manual customization.
@ -87,10 +83,10 @@ get_apexcharts_yaml:
get_chartdata:
name: Get Chart Data
description: >-
Returns price data in a simple chart-friendly format compatible with the Tibber Core integration output structure. Perfect for use with popular chart cards like ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card, or the built-in History Graph Card. Field names and data structure can be customized to match your specific chart requirements.
icon: mdi:chart-bar
Returns price data in a chart-friendly format compatible with Tibber Core output. Works with ha-price-timeline-card, ApexCharts, Plotly, Mini Graph Card, and History Graph. Field names and structure are configurable.
fields:
general:
fields:
# === REQUIRED ===
entry_id:
name: Entry ID
description: The config entry ID for the Tibber integration.
@ -99,7 +95,9 @@ get_chartdata:
selector:
config_entry:
integration: tibber_prices
# === DATA SELECTION ===
selection:
collapsed: true
fields:
day:
name: Day
description: >-
@ -126,7 +124,9 @@ get_chartdata:
- interval
- hourly
translation_key: resolution
# === FILTERS ===
filters:
collapsed: true
fields:
level_filter:
name: Level Filter
description: >-
@ -166,43 +166,9 @@ get_chartdata:
- best_price
- peak_price
translation_key: period_filter
# === FILTER BEHAVIOR ===
insert_nulls:
name: Insert NULL Values
description: >-
Control NULL value insertion for filtered data. 'none' (default): No NULL values, only matching intervals. 'segments': Add NULL points at segment boundaries for clean gaps in charts (recommended for stepline charts). 'all': Insert NULL for all timestamps where filter doesn't match (useful for continuous time series visualization).
required: false
default: none
selector:
select:
options:
- none
- segments
- all
translation_key: insert_nulls
connect_segments:
name: Connect Segments
description: >-
[ONLY WITH insert_nulls='segments'] When enabled, adds connecting points at segment boundaries to visually connect different price level segments in stepline charts. When price goes DOWN at a boundary, adds a point with the lower price at the end of the current segment. When price goes UP, adds a hold point before the gap. This creates smooth visual transitions between segments instead of abrupt gaps.
required: false
default: false
selector:
boolean:
# === OUTPUT FORMAT ===
output_format:
name: Output Format
description: >-
Output format for the returned data. Options: 'array_of_objects' (default, array of objects with customizable field names), 'array_of_arrays' (array of [timestamp, price] arrays).
required: false
default: array_of_objects
example: array_of_objects
selector:
select:
options:
- array_of_objects
- array_of_arrays
translation_key: output_format
# === CURRENCY & PRECISION ===
transformation:
collapsed: true
fields:
minor_currency:
name: Minor Currency
description: >-
@ -223,109 +189,156 @@ get_chartdata:
min: 0
max: 10
mode: box
# === ARRAY OF ARRAYS OPTIONS ===
add_trailing_null:
name: Add Trailing Null Point
insert_nulls:
name: Insert NULL Values
description: >-
[BOTH FORMATS] Add a final data point with null values (except timestamp) at the end. Some chart libraries need this to prevent extrapolation/interpolation to the viewport edge when using stepline rendering. Leave disabled unless your chart requires it.
NULL insertion mode for filtered data.
• none (default): only matching intervals
• segments: add NULLs at segment boundaries (clean gaps)
• all: NULL for every non-matching timestamp
required: false
default: none
selector:
select:
options:
- none
- segments
- all
translation_key: insert_nulls
connect_segments:
name: Connect Segments
description: >-
Only with insert_nulls='segments'. Adds boundary points to visually connect segments (stepline).
• Downward boundary: lower price at end of current segment
• Upward boundary: hold previous price before the gap
required: false
default: false
selector:
boolean:
array_fields:
name: Array Fields (array_of_arrays only)
add_trailing_null:
name: Add Trailing Null Point
description: >-
[ONLY FOR array_of_arrays FORMAT] Define which fields to include. Use field names in curly braces, separated by commas. Available fields: start_time, price_per_kwh, level, rating_level, average. Fields will be automatically enabled even if include_* options are not set. Leave empty for default (timestamp and price only).
Add a final data point with null values (except timestamp) at the end. Some chart libraries need this to prevent extrapolation/interpolation to the viewport edge when using stepline rendering. Leave disabled unless your chart requires it.
required: false
default: false
selector:
boolean:
format:
collapsed: true
fields:
output_format:
name: Output Format
description: >-
Output format.
• array_of_objects (default): objects with configurable field names
• array_of_arrays: [timestamp, price] tuples
required: false
default: array_of_objects
example: array_of_objects
selector:
select:
options:
- array_of_objects
- array_of_arrays
translation_key: output_format
data_key:
name: Data Key
description: >-
Custom name for the top-level data key in the response. Defaults to "data" if not specified. For ApexCharts compatibility with array_of_arrays, use "points".
required: false
example: prices
selector:
text:
# === ARRAY OF OBJECTS OPTIONS ===
arrays_of_objects:
collapsed: true
fields:
include_level:
name: Include Level (array_of_objects only)
name: Include Level
description: >-
[ONLY FOR array_of_objects FORMAT] Include the Tibber price level field (VERY_CHEAP, CHEAP, NORMAL, EXPENSIVE, VERY_EXPENSIVE) in each data point.
Include Tibber price level (VERY_CHEAP … VERY_EXPENSIVE).
required: false
default: false
example: true
selector:
boolean:
include_rating_level:
name: Include Rating Level (array_of_objects only)
name: Include Rating Level
description: >-
[ONLY FOR array_of_objects FORMAT] Include the calculated rating level field (LOW, NORMAL, HIGH) based on your configured thresholds in each data point.
Include rating level (LOW/NORMAL/HIGH) based on configured thresholds.
required: false
default: false
example: true
selector:
boolean:
include_average:
name: Include Average (array_of_objects only)
name: Include Average
description: >-
[ONLY FOR array_of_objects FORMAT] Include the daily average price in each data point for comparison.
Include daily average price.
required: false
default: false
selector:
boolean:
# === ARRAY OF OBJECTS - FIELD NAMES ===
start_time_field:
name: Start Time Field Name (array_of_objects only)
name: Start Time Field Name
description: >-
[ONLY FOR array_of_objects FORMAT] Custom name for the start time field in the output. Defaults to "start_time" if not specified.
Custom name for the start time field in the output. Defaults to "start_time" if not specified.
required: false
example: time
selector:
text:
end_time_field:
name: End Time Field Name (array_of_objects only)
name: End Time Field Name
description: >-
[ONLY FOR array_of_objects FORMAT] Custom name for the end time field in the output. Defaults to "end_time" if not specified. Only used with period_filter.
Custom name for the end time field in the output. Defaults to "end_time" if not specified. Only used with period_filter.
required: false
example: end
selector:
text:
price_field:
name: Price Field Name (array_of_objects only)
name: Price Field Name
description: >-
[ONLY FOR array_of_objects FORMAT] Custom name for the price field in the output. Defaults to "price_per_kwh" if not specified.
Custom name for the price field in the output. Defaults to "price_per_kwh" if not specified.
required: false
example: price
selector:
text:
level_field:
name: Level Field Name (array_of_objects only)
name: Level Field Name
description: >-
[ONLY FOR array_of_objects FORMAT] Custom name for the level field in the output. Defaults to "level" if not specified. Only used when include_level is enabled.
Custom name for the level field in the output. Defaults to "level" if not specified. Only used when include_level is enabled.
required: false
selector:
text:
rating_level_field:
name: Rating Level Field Name (array_of_objects only)
name: Rating Level Field Name
description: >-
[ONLY FOR array_of_objects FORMAT] Custom name for the rating_level field in the output. Defaults to "rating_level" if not specified. Only used when include_rating_level is enabled.
Custom name for the rating_level field in the output. Defaults to "rating_level" if not specified. Only used when include_rating_level is enabled.
required: false
selector:
text:
average_field:
name: Average Field Name (array_of_objects only)
name: Average Field Name
description: >-
[ONLY FOR array_of_objects FORMAT] Custom name for the average field in the output. Defaults to "average" if not specified. Only used when include_average is enabled.
Custom name for the average field in the output. Defaults to "average" if not specified. Only used when include_average is enabled.
required: false
selector:
text:
# === Top-Level Response Key (both formats) ===
data_key:
name: Data Key (both formats)
arrays_of_arrays:
collapsed: true
fields:
array_fields:
name: Array Fields
description: >-
[BOTH FORMATS] Custom name for the top-level data key in the response. Defaults to "data" if not specified. For ApexCharts compatibility with array_of_arrays, use "points".
Choose extra fields to include using {field} syntax, comma-separated.
Available: start_time, price_per_kwh, level, rating_level, average.
Empty = default (timestamp + price).
required: false
example: prices
selector:
text:
refresh_user_data:
name: Refresh User Data
description: >-
Forces a refresh of the user data (homes, profile information) from the Tibber API. This can be useful after making changes to your Tibber account or when troubleshooting connectivity issues.
icon: mdi:refresh
fields:
entry_id:
name: Entry ID

View file

@ -810,6 +810,36 @@
"get_chartdata": {
"name": "Diagrammdaten abrufen",
"description": "Gibt Preisdaten in einem einfachen, diagrammfreundlichen Format kompatibel mit der Tibber Core Integration zurück. Perfekt für beliebte Diagramm-Karten wie ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card oder die eingebaute History Graph Card. Feldnamen und Datenstruktur können an die Anforderungen deines Diagramms angepasst werden.",
"sections": {
"general": {
"name": "Allgemein",
"description": "Basisoptionen für das Abrufen von Diagrammdaten."
},
"selection": {
"name": "Auswahl",
"description": "Wähle aus, welche Daten in die Ausgabe aufgenommen werden sollen."
},
"filters": {
"name": "Filter",
"description": "Filtere Daten basierend auf Preisniveaus, Preisbewertungen oder speziellen Zeiträumen."
},
"transformation": {
"name": "Daten transformieren",
"description": "Transformiere die Datenausgabe für bessere Diagrammkompatibilität."
},
"format": {
"name": "Format",
"description": "Passe das Ausgabeformat an."
},
"arrays_of_arrays": {
"name": "Erweiterte Ausgabeeinstellungen: Array von Arrays",
"description": "Einstellungen für das Ausgabeformat bei Verwendung eines Arrays von Arrays."
},
"arrays_of_objects": {
"name": "Erweiterte Ausgabeeinstellungen: Array von Objekten",
"description": "Einstellungen für das Ausgabeformat bei Verwendung eines Arrays von Objekten."
}
},
"fields": {
"entry_id": {
"name": "Eintrag-ID",

View file

@ -806,6 +806,36 @@
"get_chartdata": {
"name": "Get Chart Data",
"description": "Returns price data in a simple chart-friendly format compatible with the Tibber Core integration output structure. Perfect for use with popular chart cards like ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card, or the built-in History Graph Card. Field names and data structure can be customized to match your specific chart requirements.",
"sections": {
"general": {
"name": "General",
"description": "General settings for fetching chart data."
},
"selection": {
"name": "Selection",
"description": "Select which data to include in the output."
},
"filters": {
"name": "Filters",
"description": "Filter data based on price levels, rating levels, or special periods."
},
"transformation": {
"name": "Transform Data",
"description": "Transform the data output for better chart compatibility."
},
"format": {
"name": "Format",
"description": "Customize the output format."
},
"arrays_of_arrays": {
"name": "Advanced Output Settings: Array of Arrays",
"description": "Settings for output format when using an array of arrays."
},
"arrays_of_objects": {
"name": "Advanced Output Settings: Array of Objects",
"description": "Settings for output format when using an array of objects."
}
},
"fields": {
"entry_id": {
"name": "Entry ID",
@ -824,8 +854,8 @@
"description": "Output format for the returned data. Options: 'array_of_objects' (default, array of objects with customizable field names), 'array_of_arrays' (array of [timestamp, price] arrays with trailing null point for stepline charts)."
},
"array_fields": {
"name": "Array Fields (Array of Arrays only)",
"description": "[ONLY FOR Array of Arrays FORMAT] Define which fields to include. Use field names in curly braces, separated by commas. Available fields: start_time, price_per_kwh, level, rating_level, average. Fields will be automatically enabled even if include_* options are not set. Leave empty for default (timestamp and price only)."
"name": "Array Fields",
"description": "Define which fields to include. Use field names in curly braces, separated by commas. Available fields: start_time, price_per_kwh, level, rating_level, average. Fields will be automatically enabled even if include_* options are not set. Leave empty for default (timestamp and price only)."
},
"minor_currency": {
"name": "Minor Currency",
@ -835,17 +865,21 @@
"name": "Round Decimals",
"description": "Number of decimal places to round prices to (0-10). If not specified, uses default precision (4 decimals for major currency, 2 for minor currency)."
},
"data_key": {
"name": "Data Key",
"description": "Custom name for the top-level data key in the response. Defaults to 'data' if not specified. For ApexCharts compatibility with Array of Arrays, use 'points'."
},
"include_level": {
"name": "Include Level (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Include the Tibber price level field (VERY_CHEAP, CHEAP, NORMAL, EXPENSIVE, VERY_EXPENSIVE) in each data point."
"name": "Include Level",
"description": "Include the Tibber price level field (VERY_CHEAP, CHEAP, NORMAL, EXPENSIVE, VERY_EXPENSIVE) in each data point."
},
"include_rating_level": {
"name": "Include Rating Level (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Include the calculated rating level field (LOW, NORMAL, HIGH) based on your configured thresholds in each data point."
"name": "Include Rating Level",
"description": "Include the calculated rating level field (LOW, NORMAL, HIGH) based on your configured thresholds in each data point."
},
"include_average": {
"name": "Include Average (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Include the daily average price in each data point for comparison."
"name": "Include Average",
"description": "Include the daily average price in each data point for comparison."
},
"level_filter": {
"name": "Level Filter",
@ -869,35 +903,31 @@
},
"add_trailing_null": {
"name": "Add Trailing Null Point",
"description": "[BOTH FORMATS] Add a final data point with null values (except timestamp) at the end. Some chart libraries need this to prevent extrapolation/interpolation to the viewport edge when using stepline rendering. Leave disabled unless your chart requires it."
"description": "Add a final data point with null values (except timestamp) at the end. Some chart libraries need this to prevent extrapolation/interpolation to the viewport edge when using stepline rendering. Leave disabled unless your chart requires it."
},
"start_time_field": {
"name": "Start Time Field Name (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Custom name for the start time field in the output. Defaults to 'start_time' if not specified."
"name": "Start Time Field Name",
"description": "Custom name for the start time field in the output. Defaults to 'start_time' if not specified."
},
"end_time_field": {
"name": "End Time Field Name (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Custom name for the end time field in the output. Defaults to 'end_time' if not specified. Only used with period_filter."
"name": "End Time Field Name",
"description": "Custom name for the end time field in the output. Defaults to 'end_time' if not specified. Only used with period_filter."
},
"price_field": {
"name": "Price Field Name (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Custom name for the price field in the output. Defaults to 'price_per_kwh' if not specified."
"name": "Price Field Name",
"description": "Custom name for the price field in the output. Defaults to 'price_per_kwh' if not specified."
},
"level_field": {
"name": "Level Field Name (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Custom name for the level field in the output. Defaults to 'level' if not specified. Only used when include_level is enabled."
"name": "Level Field Name",
"description": "Custom name for the level field in the output. Defaults to 'level' if not specified. Only used when include_level is enabled."
},
"rating_level_field": {
"name": "Rating Level Field Name (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Custom name for the rating_level field in the output. Defaults to 'rating_level' if not specified. Only used when include_rating_level is enabled."
"name": "Rating Level Field Name",
"description": "Custom name for the rating_level field in the output. Defaults to 'rating_level' if not specified. Only used when include_rating_level is enabled."
},
"average_field": {
"name": "Average Field Name (Array of Objects only)",
"description": "[ONLY FOR Array of Objects FORMAT] Custom name for the average field in the output. Defaults to 'average' if not specified. Only used when include_average is enabled."
},
"data_key": {
"name": "Data Key (both formats)",
"description": "[BOTH FORMATS] Custom name for the top-level data key in the response. Defaults to 'data' if not specified. For ApexCharts compatibility with Array of Arrays, use 'points'."
"name": "Average Field Name",
"description": "Custom name for the average field in the output. Defaults to 'average' if not specified. Only used when include_average is enabled."
}
}
},

View file

@ -806,6 +806,36 @@
"get_chartdata": {
"name": "Hent diagramdata",
"description": "Returnerer prisdata i et enkelt diagramvennlig format kompatibelt med Tibber Core-integrasjonens utdatastruktur. Perfekt for bruk med populære diagramkort som ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card eller den innebygde History Graph Card. Feltnavn og datastruktur kan tilpasses for å matche diagrammets krav.",
"sections": {
"general": {
"name": "Generelt",
"description": "Basisalternativer for henting av diagramdata."
},
"selection": {
"name": "Valg",
"description": "Velg hvilke data som skal inkluderes i utdataene."
},
"filters": {
"name": "Filtre",
"description": "Filtrer data basert på prisnivåer, prisvurderinger eller spesielle perioder."
},
"transformation": {
"name": "Transformer data",
"description": "Transformer datautdataene for bedre diagramkompatibilitet."
},
"format": {
"name": "Format",
"description": "Tilpass utdataformatet."
},
"arrays_of_arrays": {
"name": "Avanserte utdatainnstillinger: Array av arrays",
"description": "Innstillinger for utdataformat ved bruk av array av arrays."
},
"arrays_of_objects": {
"name": "Avanserte utdatainnstillinger: Array av objekter",
"description": "Innstillinger for utdataformat ved bruk av array av objekter."
}
},
"fields": {
"entry_id": {
"name": "Oppførings-ID",

View file

@ -806,6 +806,36 @@
"get_chartdata": {
"name": "Haal grafiekgegevens op",
"description": "Geeft prijsgegevens terug in een eenvoudig grafiekvriendelijk formaat compatibel met de Tibber Core-integratie outputstructuur. Perfect voor gebruik met populaire grafiekkaarten zoals ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card of de ingebouwde History Graph Card. Veldnamen en gegevensstructuur kunnen worden aangepast aan de vereisten van je grafiek.",
"sections": {
"general": {
"name": "Algemeen",
"description": "Basisopties voor het ophalen van grafiekgegevens."
},
"selection": {
"name": "Selectie",
"description": "Selecteer welke gegevens in de uitvoer moeten worden opgenomen."
},
"filters": {
"name": "Filters",
"description": "Filter gegevens op basis van prijsniveaus, prijsbeoordelingen of speciale periodes."
},
"transformation": {
"name": "Gegevens transformeren",
"description": "Transformeer de gegevensuitvoer voor betere grafiekcompatibiliteit."
},
"format": {
"name": "Formaat",
"description": "Pas het uitvoerformaat aan."
},
"arrays_of_arrays": {
"name": "Geavanceerde uitvoerinstellingen: Array van arrays",
"description": "Instellingen voor uitvoerformaat bij gebruik van array van arrays."
},
"arrays_of_objects": {
"name": "Geavanceerde uitvoerinstellingen: Array van objecten",
"description": "Instellingen voor uitvoerformaat bij gebruik van array van objecten."
}
},
"fields": {
"entry_id": {
"name": "Item-ID",

View file

@ -806,6 +806,36 @@
"get_chartdata": {
"name": "Hämta diagramdata",
"description": "Returnerar prisdata i ett enkelt diagramvänligt format kompatibelt med Tibber Core-integrationens outputstruktur. Perfekt för användning med populära diagramkort som ha-price-timeline-card, ApexCharts Card, Plotly Graph Card, Mini Graph Card eller den inbyggda History Graph Card. Fältnamn och datastruktur kan anpassas för att matcha diagrammets krav.",
"sections": {
"general": {
"name": "Allmänt",
"description": "Grundalternativ för hämtning av diagramdata."
},
"selection": {
"name": "Val",
"description": "Välj vilka data som ska inkluderas i utdatan."
},
"filters": {
"name": "Filter",
"description": "Filtrera data baserat på prisnivåer, prisvärderingar eller speciella perioder."
},
"transformation": {
"name": "Transformera data",
"description": "Transformera datautdatan för bättre diagramkompatibilitet."
},
"format": {
"name": "Format",
"description": "Anpassa utdataformatet."
},
"arrays_of_arrays": {
"name": "Avancerade utdatainställningar: Array av arrayer",
"description": "Inställningar för utdataformat vid användning av array av arrayer."
},
"arrays_of_objects": {
"name": "Avancerade utdatainställningar: Array av objekt",
"description": "Inställningar för utdataformat vid användning av array av objekt."
}
},
"fields": {
"entry_id": {
"name": "Post-ID",