Statistiken und Wertinfo
Statistiken und Wertinfo in TapHome-Skripten: der Wert einer Statistik, der Zeitpunkt der letzten Änderung, der vorherige und der letzte bekannte Wert und die Werte abgeschlossener Zeiträume.
Außer dem reinen Wert eines Geräts kann eine Skriptvariable eine Statistik des Geräts enthalten oder Informationen über einen Wert: wann er sich zuletzt geändert hat, seinen vorherigen Wert und die Werte abgeschlossener Zeiträume. Beides wird in der Auswahl der Gerätewerte im Skripteditor gewählt.
Statistiken
Außer den reinen Gerätewerten bietet die Auswahl der Gerätewerte auch die Statistiken des Geräts an (Abschnitt Statistiken): die Statistiken, die der Benutzer am Gerät aktiviert hat oder die das Gerät selbst bereitstellt, zum Beispiel Minimum, Maximum, Durchschnitt, Anzahl oder Summe eines Werts über einen Zeitraum. Eine so ausgewählte Variable enthält den Wert dieser Statistik:
- Eine Statistik vom Typ Aktueller Zeitraum, zum Beispiel der Durchschnitt der aktuellen Stunde, wird vom Beginn des laufenden Zeitraums — der Stunde, des Tages oder des Monats — bis jetzt berechnet.
- Eine Statistik vom Typ Zeitraum bis jetzt, zum Beispiel der Durchschnitt der letzten 24 Stunden, wird über ein gleitendes Fenster der angegebenen Länge berechnet, das jetzt endet.
# Se was picked as the 1-hour average of Temperature (current period)
IF Se > 25
RETURN(1);
END
0;Die Werte abgeschlossener Zeiträume sind nicht Teil der Statistik selbst; lesen Sie sie aus der Wertinfo der Statistik.
Wertinfo
Eingangsvariablen der smart rules Gleichung, Formel und Skript, der Begrenzungsbedingung Formel und der Benachrichtigungstexte können auch als Wertinfo ausgewählt werden; die Auswahl zeigt sie als Wertinfo von Name des Werts, sowohl für einen reinen Gerätewert als auch für eine Statistik vom Typ Aktueller Zeitraum. Eine solche Variable enthält keine Zahl, sondern Informationen über den Wert:
| Eigenschaft | Typ | Inhalt |
|---|---|---|
Current | currentvalueinfo | Der aktuelle und der vorherige Wert, siehe Aktueller und vorheriger Wert. Gefüllt bei einem reinen Gerätewert, Null bei einer Statistik. |
History | historyvalues | Werte der abgeschlossenen Zeiträume, siehe Verlauf einer Statistik. Gefüllt bei einer Statistik mit Verlauf, Null bei einem reinen Gerätewert. |
Die Wertinfo enthält nicht den Wert selbst. Um mit dem Wert und seinen Informationen zusammen zu arbeiten, fügen Sie den Gerätewert zweimal zum Skript hinzu: einmal als Wert (zum Beispiel Se) und einmal als Wertinfo (zum Beispiel SeInfo).
Verfügbar — Core 2026.1 in TapHome Next, Build 36599 oder neuer (noch nicht im offiziellen Release).
Aktueller und vorheriger Wert
Current beschreibt die letzte Änderung des Werts:
| Eigenschaft | Typ | Inhalt |
|---|---|---|
CurrentValueTime | datetime | Wann sich der Wert auf seinen aktuellen Wert geändert hat. Sendet das Gerät denselben Wert erneut, verschiebt sich der Zeitpunkt nicht. |
PreviousValue | beliebig | Der Wert vor der letzten Änderung; er kann NaN oder Null sein. |
PreviousValueTime | datetime | Wann sich der Wert auf PreviousValue geändert hat. |
LastKnownValue | beliebig | Der jüngste vorherige Wert, der weder NaN noch Null war. |
LastKnownValueTime | datetime | Wann sich der Wert auf LastKnownValue geändert hat. |
Current ist Null, bis sich der Wert zum ersten Mal ändert — prüfen Sie es mit ISNULL, bevor Sie seine Eigenschaften lesen.
Beispiel — ein Fenster, das länger als 10 Minuten offen ist
# Wi = window contact (1 = open), WiInfo = Value info of the window contact
IF ISNULL(WiInfo.Current)
RETURN(0);
END
IF Wi = 1 AND WiInfo.Current.CurrentValueTime < DATETIMEADD(NOW(), 0, 0, 0, 0, -10)
RETURN(1);
END
0;Beispiel — steigt oder fällt der Wert
# Se = Temperature, SeInfo = Value info of Temperature
IF ISNULL(SeInfo.Current) OR ISNULL(SeInfo.Current.LastKnownValue)
RETURN(0);
END
VAR change := Se - SeInfo.Current.LastKnownValue;
IF change > 0
RETURN(1);
ELSEIF change < 0
RETURN(-1);
END
0;Verlauf einer Statistik
Bei einer Statistik vom Typ Aktueller Zeitraum enthält History die Werte der bereits abgeschlossenen Zeiträume:
| Eigenschaft | Typ | Inhalt |
|---|---|---|
Values | Sammlung | Values[0] ist der letzte abgeschlossene Zeitraum, Values[1] der Zeitraum davor und so weiter. Ein Zeitraum ohne Daten ist Null. Der laufende Zeitraum ist nicht enthalten — er ist der Wert der Statistik selbst. |
FirstPeriodStartTime | datetime | Beginn des Zeitraums von Values[0]. |
Wie viele Zeiträume erhalten bleiben, hängt vom Zeitraum der Statistik ab und davon, ob für sie die Verlaufsaufzeichnung aktiviert ist — der Verlaufsschalter der Statistik auf der Seite Statistiken des Geräts:
| Zeitraum | Erhaltene Zeiträume, Verlaufsaufzeichnung ein | Erhaltene Zeiträume, Verlaufsaufzeichnung aus |
|---|---|---|
| 5 Minuten | 36 (3 Stunden) | 3 |
| 10 Minuten | 18 (3 Stunden) | 3 |
| 15 Minuten | 12 (3 Stunden) | 3 |
| 1 Stunde | 48 (2 Tage) | 3 |
| 3 Stunden | 17 (etwa 2 Tage) | 3 |
| 1 Tag | 35 | 3 |
| 1 Monat | 25 | 3 |
| 1 Jahr | 10 | 3 |
Bei jedem anderen Zeitraum (1, 2, 3 und 30 Minuten, 12 Stunden, 2 und 3 Tage, 1 Woche, 1 Quartal) und bei einer Statistik vom Typ Zeitraum bis jetzt ist History Null. Values kann kürzer sein als die Anzahl der erhaltenen Zeiträume, zum Beispiel kurz nach dem Aktivieren der Statistik — prüfen Sie LENGTH, bevor Sie einen Index lesen, der möglicherweise nicht existiert.
Beispiel — der heutige Verbrauch bis jetzt im Vergleich zum ganzen gestrigen Tag
# En = daily sum of Energy (current period), EnInfo = Value info of the same statistic
VAR yesterday := GETAT(EnInfo.History.Values, 0);
IF ISNULL(yesterday)
RETURN(NaN);
END
En - yesterday;Beispiel — durchschnittlicher Tagesverbrauch der letzten 7 Tage
# EnInfo = Value info of the daily sum of Energy (current period)
AVG(COPY(EnInfo.History.Values, 0, MIN(7, LENGTH(EnInfo.History.Values))));COPY nimmt die ersten 7 Tage — MIN deckt einen Verlauf ab, der kürzer als 7 Tage ist, denn COPY über das Ende der Sammlung hinaus ist ein Fehler — und AVG überspringt die Tage ohne Daten. MIN, MAX und AVG überspringen Null, sodass ein ganzer Verlauf auch direkt verwendet werden kann:
# SeInfo = Value info of the 1-hour maximum of Temperature (current period)
MAX(SeInfo.History.Values);
# Result: the highest temperature of the kept hoursSiehe auch — Variablen und Konstanten, MIN, MAX und AVG, COPY.