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 KNach 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.:
AussenTempDann 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! :)