oh.. hab mal statt oben auf das copy, direkt markiert und kopiert… das hat wohl geklappt.
nun muss ich meine daten noch setzen
oh.. hab mal statt oben auf das copy, direkt markiert und kopiert… das hat wohl geklappt.
nun muss ich meine daten noch setzen
wenn du das Beispiel 1:1 umsetzt genauso wie es da steht sollte dann auf Knopfdruck der Wert berechnet werden.
so, alles bereinigt..
anscheinend fehlt der name im beispiel script..
wie und wo hast du den im yaml getzt?
welcher Name ?
Wenn du Code richtig kopiert hast und alle Stellen an deine Sensornamen angepasst hast dann sollte da kein Fehler kommen.
wo hast du mein script durchlaufen lassen?
in den entwickler werkzeugen?
aktionen oder template ?
Ein Script kann im GUI Editor erzeugt werden, das hier ist z.B. das Script von dir das bei mir im GUI Editor durchläuft :
sequence:
# 1. SCHRITT: Statistik abrufen und in 'stats' speichern
- action: recorder.get_statistics
data:
start_time: "{{ states('input_datetime.datum') }}"
end_time: "{{ now().isoformat() }}"
period: day
types:
- sum
statistic_ids:
- sensor.balkon_solar_heutige_erzeugung
response_variable: stats # <-- Hier endet die Aktion!
# 2. SCHRITT: Variablen separat definieren (Achten Sie auf das neue '-' Zeichen)
- variables:
daten: "{{ stats['sensor.balkon_solar_heutige_erzeugung'] }}"
erste_summe: "{{ daten[0]['sum'] | float(0) if daten else 0 }}"
letzte_summe: "{{ daten[-1]['sum'] | float(0) if daten else 0 }}"
differenz: "{{ (letzte_summe - erste_summe) | round(2) }}"
Läuft den inzwischen das Beispiel von Orkson bei dir ?
hi
nein leider nicht… wenn ich das script in den template-editor einfüge, gibt es rot..
wenn ich es in aktionen kopiere kann ich es laufen lassen (blau) aber
Keine Aktion definiert. Bitte definiere einen ‘action:’-Schlüssel.
welches ist denn das, was du gui-editor nennst.. ist ja beides gui.
Einstellungen → Automationen&Szenen->Scripte
Wenn das Orginal Beispiel nicht läuft machst du immer noch was falsch.
Welche Fehlermeldung kommt denn da ?
Scripte sind sowas :
sequence:
das ist ein Template :
template:
- triggers:
- trigger: state
entity_id:
- input_button.statistik_berechnen
actions:
- action: recorder.get_statistics
data:
start_time: "{{ states('input_datetime.statistik_start') }}"
end_time: "{{ states('input_datetime.statistik_ende') }}"
period: day
statistic_ids:
- sensor.hauptstromzahler_energy
types:
- state
response_variable: stats
sensor:
- name: Statistik Auswertung
unit_of_measurement: kWh
unique_id: fe77f5a5-04a9-468c-9f69-3d3e6f750f49
state: |
{% set anfang = stats.statistics['sensor.hauptstromzahler_energy'][0].state | float %}
{% set ende = stats.statistics['sensor.hauptstromzahler_energy'][-1].state | float %}
{{ (ende - anfang) | round(3) }}
Ein Template wird in der Configuration.yaml eingefügt und ist kein Script also bitte auch nicht so bezeichnen sonst verwirrst du nur.
Wenn du das Template korrekt in der Configuration.yaml ein gefügt hast dann hast du unter
Geräte&Dienste->Entitäten eine Entität mit dem Namen Statistik Auswertung.
Die wird jedesmal aktualisiert wenn du den Button input_button.statistik_berechnen drückst.
Dazu werden die Werte der Inputhelfer input_datetime.statistik_start und input_datetime.statistik_ende benutzt.
hi das orkson script, mit den für mich nicht interessanten helpern interessiert mich im moment gar nicht..
ich habe ein gui datums set und die daraus resultierenden tage erstellt
mir fehlt jetz nur die durchnitts berechnung vom eingegebenen datum bis heute (was mein, was auch immer) machen soll.. das ist mein problem..
action: recorder.get_statistics
data:
statistic_ids:
- sensor.balkon_solar_heutige_erzeugung
start_time: "{{ states('input_datetime.datum') }}"
end_time: "{{ now().isoformat() }}"
period: day
types:
- sum
response_variable: stats
{% set daten = stats['sensor.balkon_solar_heutige_erzeugung'] %}
{% set erste_summe = daten[0]['sum'] | float(0) %}
{% set letzte_summe = daten[-1]['sum'] | float(0) %}
{{ (letzte_summe - erste_summe) | round(2) }}
Hi
den oberen teil bis response variable, habe ich in der config.
und bekomme im protokoll
TemplateError('UndefinedError: 'stats' is undefined') while processing template 'Template<template=(response_variable: stats {% set daten = stats\['sensor.balkon_solar_heutige_erzeugung'\] %} {% set erste_summe = daten\[0\]\['sum'\] | float(0) %} {% set letzte_summe = daten\[-1\]\['sum'\] | float(0) %} {{ (letzte_summe - erste_summe) | round(2) }}) renders=4>' for attribute '\_attr_native_value' in entity 'None'
hänge immer wieder, was auch immer ich mache an der stats variable, die dann natürlich nicht durch andere helfer auswertbar ist.
so wie ich es immer wieder gelesen und verstanden habe ist response var im laufenden system vorhanden. so kenne ich das von anderen systemen. warum ich immer die not definiert meldung bekomme ist mir schleierhaft.
evtl. kann mir da jemand dieses merkwürdige verhalten erklären.. oder einfache frage. wie initialisiere ich eine variabel die im system preäent ist, damit ich sie in anderen programm threads auswerten kann.
by HarryP:
. Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“anstatt „Antworten“ zu nutzen)
. Code-/Logzeilen formatiert (bitte immer in </> einbinden)
. s.a.: (Neues Update & Features - Hier in der Community 🫶)
Das ist eine Variable, in der das Ergebnis von recorder.get_statistics gespeichert ist. Und dies gilt es dann herauszuholen.
Das hier muß in einem Teil sein, der die Stats auswertet wie z.B. in einer eigenen Variablenberechnung, die Stats verwendet:
- action: recorder.get_statistics
data:
statistic_ids:
- sensor.balkon_solar_heutige_erzeugung
start_time: "{{ states('input_datetime.datum') }}"
end_time: "{{ now().isoformat() }}"
period: day
types:
- sum
response_variable: stats
- variables:
durchschnitt: |
{% set daten = stats['sensor.balkon_solar_heutige_erzeugung'] %}
{% if daten | count > 1 %}
{% set erste_summe = daten[0]['sum'] | float(0) %}
{% set letzte_summe = daten[-1]['sum'] | float(0) %}
{% set gesamt = letzte_summe - erste_summe %}
{% set tage = (
now().date() -
(states('input_datetime.datum') | as_datetime).date()
).days %}
{{ (gesamt / tage) | round(2) if tage > 0 else 0 }}
{% else %}
0
{% endif %}
Mich beschleicht schon vorher, daß Gefühl Du solltest Dich noch etwas mit HA-Grundlagen beschäftigen - die müssen sitzen wenn Copy/Paste nicht mehr ausreicht.
Und deshalb ist Osorkon sein Beispiel wieder richtig gut nachzubauen. Und oft ist er hier auch im Forum und würde helfen.
Manchmal muß man einfach 2 Schritte zurückgehen um dann 3 nach vorne.
ich gebe dir mit den grundlagen absolut recht.. nur finde ich all überall keine erklärung wie man die response variable initiert, (stats im beispiel). da sie bei allem was ich mache angemeckert wird.
mir ist schon klar wir die weitere auswertung funktioniert. nur ohne eine stats variable die ich irgendwo auswerten kann komme ich nicht weiter… hilfe ich möchte nur das die ausgabe von recorder als auswertbare variable weiter nutzbar ist
Ich hab mir schnell ein Beispielscript zusammengeklickt.
get_statistics die Werte der letzten 10 Tage (now() - timedelta(days=10)) (bei Dir ist das Dein input_date)sequence:
- action: recorder.get_statistics
data:
statistic_ids:
- sensor.om_help_vz_solar
start_time: "{{ (now() - timedelta(days=10)).isoformat() }}"
end_time: "{{ now().isoformat() }}"
period: day
types:
- sum
response_variable: stats
- action: notify.gmxolaf3
metadata: {}
data:
message: >
{{stats}}
-------
{% set daten = stats.statistics['sensor.om_help_vz_solar'] %}
{% set erste = daten[0]['sum'] | float %}
{% set letzte = daten[-1]['sum'] | float %}
Der Durchschnitt beträgt: {{ ((letzte - erste) / (daten | count - 1)) |
round(2) }}
title: Test stats
alias: 1 forum stats test
description: ""
Und in Email steht
-----Ursprüngliche Nachricht-----
Von: Homeassi <xxx>
Gesendet: Donnerstag, 4. Juni 2026 21:38
An: Olaf <xxx>
Betreff: Test stats
{'statistics': {'sensor.om_help_vz_solar': [{'start': '2026-05-24T22:00:00+00:00', 'end': '2026-05-25T22:00:00+00:00', 'sum': 2104.287269999957}, {'start': '2026-05-25T22:00:00+00:00', 'end': '2026-05-26T22:00:00+00:00', 'sum': 2108.570080999958}, {'start': '2026-05-26T22:00:00+00:00', 'end': '2026-05-27T22:00:00+00:00', 'sum': 2113.086659999959}, {'start': '2026-05-27T22:00:00+00:00', 'end': '2026-05-28T22:00:00+00:00', 'sum': 2117.5654299999596}, {'start': '2026-05-28T22:00:00+00:00', 'end': '2026-05-29T22:00:00+00:00', 'sum': 2121.1688659999595}, {'start': '2026-05-29T22:00:00+00:00', 'end': '2026-05-30T22:00:00+00:00', 'sum': 2124.7556309999595}, {'start': '2026-05-30T22:00:00+00:00', 'end': '2026-05-31T22:00:00+00:00', 'sum': 2128.429828999964}, {'start': '2026-05-31T22:00:00+00:00', 'end': '2026-06-01T22:00:00+00:00', 'sum': 2131.946452999964}, {'start': '2026-06-01T22:00:00+00:00', 'end': '2026-06-02T22:00:00+00:00', 'sum': 2134.939951999964}, {'start': '2026-06-02T22:00:00+00:00', 'end': '2026-06-03T22:00:00+00:00', 'sum': 2137.6330659999635}, {'start': '2026-06-03T22:00:00+00:00', 'end': '2026-06-04T22:00:00+00:00', 'sum': 2139.5566159999635}]}}
-------
Der Durchschnitt beträgt: 3.53
Versuche dieses Script nachzubauen und wenn Du auch so eine Mail bekommst, mach Dich noch einmal an Dein Beispiel.
EDIT
Ich glaube jetzt weiß ich wo es ein Mißverständnis geben könnte am Variablen Scope. Diese Variable stats lebt nur im Scope des Aufrufes (bei mir mein Script) und kann auch nur in diesem ausgewertet wertet. Es ist keine globale sondern lokale Variable. Irgendwas hatte sich hier geändert mit irgendeinem Update in den letzten Monaten hin zu mehr global aber ich müßte nachlesen was das war aber heute reichts mir ![]()
EDIT
Ich bin die Release Note der letzten 12 Monate durchgegangen und ich denke ein Satz im Juli Update war bei mir falsch hängengeblieben und nehme die Aussage zurück.
Globale Variable sind eher einige Helfer wie input_text
Lokale Variablen sind die in Scripts und Automatisationen oder Templates und gelten nur während des Aufrufes bzw. Beim Templates während des Rendern.
Wenn man den Inhalt der lokalen Variablen Variablen stats wirklich global haben wollte, müßte sie in einen Helfer gespeichert werden oder wie Osorkon in einen Sensor. In meinem obigen Testscript versende ich per Email den Durschnitt und danach sind die Daten weg.
hi
danke .. mache ich morgen… wo muss welches hin.. helfer oder script unter automationen?
Anforderungen 2.0
Bitte beschreibe mit dem Wissen der letzten Diskussionen noch einmal was genau Du erreichen willst. Was soll wann passieren und wo soll das Ergebnis angezeigt bzw. verwendet werden?
Hi ![]()
ziel
datumseingabe input_datetime.datum funktioniert
errechng der tage seit datum funktioniert
auslesen der langzeitstatistik mit recorder
ermittlung wert am datum 1ster wert
ermittlung wert heute
berechnung erzeugung seit datum (wert heute - 1ster wert
durchnittsberechnung erzeugung durch tage
das ist alles
ausgabe recorder brauche 1 und letzen wert daran hängt es. ohne button drücken oder automatisierung.
`action: recorder.get_statistics`
`data:`
`start_time: “{{ states(‘input_datetime.datum’) }}”`
`end_time: “{{ now().isoformat() }}”`
`period: day`
`types:`
`- sum`
`statistic_ids:`
`- sensor.balkon_solar_heutige_erzeugung`
`response_variable: stats`
`statistics:`
`sensor.balkon_solar_heutige_erzeugung:`
`- start: “2026-05-29T22:00:00+00:00”`
`end: “2026-05-30T22:00:00+00:00”`
`sum: 195.39438000000328`
`- start: “2026-05-30T22:00:00+00:00”`
`end: “2026-05-31T22:00:00+00:00”`
`sum: 196.35990000000336`
`- start: “2026-05-31T22:00:00+00:00”`
`end: “2026-06-01T22:00:00+00:00”`
`sum: 198.59705000000343`
`- start: “2026-06-01T22:00:00+00:00”`
`end: “2026-06-02T22:00:00+00:00”`
`sum: 200.70618000000343`
anzeige im dashboard
by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)
@harryp
hi schon klar… habe nur die erste ausgabe zur veranschaulichung kopiert. richtige posts sind im thread vorhanden.
oder bist du ein bot?
Das ist zu 99 % genau was Osorkon in seinem Beitrag Statistik Auswertung ohne SQL - Templates Sammlung - SmartHome for Dummies Du aber nicht nachbauen willst, sorry der mußte sein ![]()
Hier der Durchscnittsteil aus seinem Code.
{% elif typ == "mean" %}
{% set anzahl = stats.statistics[sensor] | length %}
{% set total = namespace(sum=0) %}
{% for item in stats.statistics[sensor] %}
{% if 'mean' in item %}
{% set total.sum = total.sum + item.mean %}
{% endif %}
{% endfor %}
{{ ((total.sum / anzahl) | round(2)) | string + " " + unit}}
Die Frage ist was soll bei Dir diesen Befehl anstoßen?
recorder.get_statistics einmalig ausgeführt.Mit diesem Sensor Wert kannst Du überall anzeigen oder etwas berechnen lassen.
Nein, bin ich nicht!!
Hi
anstossen… veränderung der werte. tage ist auch ohne weitere buttons oder automatisierungen sofort aktuell.
könnte mir aber eine automatisierung vorstellen, morgens einmal die berechnung als systemvariable setzt,
so das man sie entität ins dashbord, wie angedacht (siehe shot), setzen kann.
tage ist als gui erstelltes template (sensor.tage) erstellt und ist immer aktuell
{{ ((as_timestamp(now()) - as_timestamp(states('input_datetime.datum'))) / 86400) | int }}
btw. wie schon x mal erwähnt, laufe ich mit dem beispiel immer in den response_variable: stats fehler