Fläche unter Kurve (Integral)?

Das Langzeitarchiv für HomeMatic

Moderator: Co-Administratoren

Mathias
Beiträge: 1144
Registriert: 03.11.2010, 10:25
Wohnort: Aachen
Hat sich bedankt: 10 Mal
Danksagung erhalten: 41 Mal
Kontaktdaten:

Re: Fläche unter Kurve (Integral)?

Beitrag von Mathias » 21.05.2020, 17:49

Statistiken können auch über die Skript-Funktionalität (Werkzeuge → Skriptumgebung) des Historians einmalig berechnet werden.

Beispiel-Skript für Mittelwert:

Code: Alles auswählen

// Mit diesem Skript wird der korrekte Mittelwert berechnet, auch wenn die Delta-Kompression
// für einen Datenpunkt aktiviert wurde. Durch die Delta-Kompression ist der Abstand zwischen den
// Messwerten nicht mehr konstant.

// Datenpunkt mit der ID 736 holen (s.a. Datenpunktliste letzte Spalte oder Datenpunktdetails)
def dp=database.getDataPoint(736)
println "Datenpunkt: $dp.displayName"

def end=new Date() // aktueller Zeitpunkt
def duration=24*60*60*1000 // ein Tag zurück in Millisekunden
def begin=new Date(end.time-duration) 
println "Beginn: $begin, Ende: $end"

// Zeitreihe holen
def ts=database.getTimeSeries(dp, begin, end)

// Statistik berechnen
def min=Double.POSITIVE_INFINITY
def max=Double.NEGATIVE_INFINITY
def integr=0
def previous
ts.each { pv ->
  if (pv.value<min) min=pv.value
  if (pv.value>max) max=pv.value
  if (previous!=null) {
    // Teilintegral berechnen: Messwert*Millisekunden
    integr+=previous.value*(pv.timestamp.time-previous.timestamp.time)
  }
  previous=pv
}
// Durchnitt ist Integral/Zeitbereichslänge in Millisekunden.
def avg=integr/duration

println "Einträge: $ts.size, Einträge pro Stunde: ${ts.size/duration*60*60*1000}"
println "Minimum: $min, Maximum: $max, Integral: $integr, Durchschnitt: $avg"
Ausgabe:

Code: Alles auswählen

Datenpunkt: Wetterdaten.ACTUAL_TEMPERATURE
Beginn: Wed May 20 17:41:22 CEST 2020, Ende: Thu May 21 17:41:22 CEST 2020
Einträge: 381, Einträge pro Stunde: 15.8749200000
Minimum: 9.8, Maximum: 29.8, Integral: 1.6266234748000007E9, Durchschnitt: 18.82666058796297
kWh können dann mit der Formel: integr/100/(60*60*1000)*15
(100 wg. Prozent, 60*60*1000 für Millisekunden pro Stunde, 15 wg. 15kW Maximalleistung)

Theoretisch kann das Skript auch über JSON-RPC-API des Historian per CURL ausgeführt werden.

duffy6
Beiträge: 106
Registriert: 14.03.2017, 10:29
Hat sich bedankt: 3 Mal

Re: Fläche unter Kurve (Integral)?

Beitrag von duffy6 » 24.05.2020, 01:04

Das sieht interessant aus!

Wie könnte ich denn das Skript mittels Homematic-Programm aufrufen, z.B. täglich um 23:59 Uhr?

VG duffy6

Antworten

Zurück zu „CCU-Historian“