[GELÖST] MyThz Plot aus DBLog mit Werten aus Reading

Begonnen von pettibone2002, 02 November 2021, 20:22:06

Vorheriges Thema - Nächstes Thema

pettibone2002

Ich bin kurz vorm Verzweifeln, vielleicht kann mir einer helfen:

Ich versuche aus den DBLog-Daten meiner Thz einen Plot zu schreiben. Aus Mythz nehme ich z.B. den Wert aus dem Reading sGlobal für die WW-Temperatur (dhwTemp). Wie muss dann Device:Reading im Ploteditor lauten, wenn ich zum Beispiel die WW-Temperatur plotten möchte?

Mythz:sGlobal:::$val=~s/dhwTemp..([\d.]*).*/$1/e

führt bei mir nur zu einer geraden Linie.  ???

pettibone2002

#1
Zitat von: pettibone2002 am 02 November 2021, 20:22:06Wie muss dann [tt]Device:Reading[/tt] im Ploteditor lauten, wenn ich zum Beispiel die WW-Temperatur plotten möchte?

Mythz:sGlobal:::$val=~s/dhwTemp..([\d.]*).*/$1/e
führt bei mir nur zu einer geraden Linie.  ???

Ich antworte mir mal selbst, nachdem ich alles reverse engineered habe  ;)

Als erstes das Reading (verkürzt):

sGlobal: outsideTemp: 10.5 flowTemp: 35 returnTemp: 35.8 hotGasTemp: 29.6 dhwTemp:
Und der Code etwas einfacher geschrieben und statt dhwTemp für die Warmwassertemperatur jetzt outsideTemp für die Außentemperatur, da es für das Beispiel besser passt:

Mythz:sGlobal:::$val=~s/outsideTemp..([-\d.])/$1/
Einmal aufgeschlüsselt:

Mythz:sGlobal device:reading (war klar  ;D)

::: Müssen sein, keine Ahnung, warum

$val Ist der String, bzw. das Reading, also hier: sGlobal in dem sich der Wert befindet, der für den Plot verwendet werden soll. Hier soll nach outsideTemp gesucht werden, denn dahinter steht der gesuchte Wert.

=~s/outsideTemp..([-\d.])/$1/ heißt frei übersetzt:

suche den Wert zwischen den Schrägstrichen (/ Slashs) und ersetze ihn mit Wert dem hinter dem zweiten Schrägstrich (/ Slash).

outsideTemp..([-\d.]) heißt: die Zeichenkette outsideTemp gefolgt von zwei willkürlichen Zeichen danach (deswegen die zwei ..) gefolgt von der Zahl hinter diesen Zeichen:

([-\d.]) sucht eine Zeichenkette, die eine Ziffer oder ein Minuszeichen enthält, hier also unseren gemessenen Wert im Reading.

$1/ bedeutet: der gefundene Wert wird in die Spezialvariable $1 geschrieben. In $1 ist damit der Inhalt der runden Klammer ([-\d.]) gespeichert. Dieser ersetzt nun den Wert in $val und kann so für das Schreiben des Plots verwendet werden.


B O N U S T R A C K:

Mythz:sGlobal:::$val=~s/.*returnTemp..([-\d.]*).*/$1/e
Was ist hier anders?

Da die im Reading gesuchte Zeichenkette returnTemp weiter hinten steht, muss vor returnTemp noch .* eingefügt werden.

.* heißt: vor returnTemp befinden sich null oder mehrere willkürliche Zeichen. Würde man das weglassen, würde immer nur der erste Wert im Reading gefunden werden (hier: outsideTemp).

E X T R A  B O N U S  T R A C K

Nach dem ich fertig war, habe ich noch die folgende Vereinfachung gefunden:

Aus dem Wiki habe das folgende userreading:

AussenTemp:sGlobal.* {(split ' ',ReadingsVal("Mythz","sGlobal",0))[1]}, VorlaufTemp:sGlobal.* {(split ' ',ReadingsVal("Mythz","sGlobal",0))[3]}, RuecklaufTemp:sGlobal.* {(split ' ',ReadingsVal("Mythz","sGlobal",0))[5]}, WWTemp:sGlobal.* {(split ' ',ReadingsVal("Mythz","sGlobal",0))[9]}, KollektorTemp:sGlobal.* {(split ' ',ReadingsVal("Mythz","sGlobal",0))[79]}
Dies führt nun praktischerweise dazu, dass die Datenbank Einzelwerte loggt, z.B.:

AussenTemp

Dann reicht es, als Device Mythz und als Reading Außentemp im gplot-Editor einzutragen, damit der Plot gezeichnet wird!!! Keine komplizierten Formeln mehr 8)


Das ist für die Perl-Spezialisten sicher alles nichts neues.
Aber nachdem ich mir das in den letzten Stunden mit Hilfe des Internets und Perl für Dummies  8) erschlossen habe, wollte ich es für mich und für alle, die ebenso auf dem Schlauch stehen, mal aufschreiben.

Kommentare und Verbesserungen ausdrücklich erwünscht! :)