SVG Plot aus Komma getrennten Werten erstellen

Begonnen von Udomatic, 10 Oktober 2021, 17:08:59

Vorheriges Thema - Nächstes Thema

Udomatic

Hallo,

ich möchte ein SVG meiner Solarerträge pro Tag erstellen. Leider scheitere ich daran den Logeintrag im Plot auszuwerten. Die Werte werden Komma getrennt in einer 7-Tages Zeitscheibe fortgeschrieben. Kommt also ein neuer Wert dazu wird dieser vorne angestellt. Hier der Log Auszug.

7.2 ist in diesem Beispiel der neueste Wert

2021-10-01_10:33:04 Vitodens Solarproduktion/Tag: 7.2,39.5,25.7,35.9,29.4,21.3,39.3,38.9

Wie muss ich das im SVG einstellen, dass immer der vordere Wert pro Tag genommen wird aus der entsprechenden Log Zeile, um einen Trend erstellen zu könne?

Danke vorab für den Support!

Gruß
Udo
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

frank

baust du den string selbst zusammen?
weil ein einzeln geloggter aktueller wert am richtigen tag wäre ja ziehmlich einfach.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

rudolfkoenig

Wie der Vorposter schreibt, am besten erzeugt man die Daten passend, z.Bsp. mit userReadings.

Wenn das zu umstaendlich sein sollte, dann koennte Folgendes in der Funktionsspalte helfen:
my@x=split(",",$fld[3]);$x[0]
Alternativ:
$fld[3]=~m/^([^,]*),/?$1:0
Achtung:
- ungestet
- Leerzeichen sind nicht erlaubt.

Man kann auch eine Funktion in 99_myUtils.pm definieren, und sie aus der Funktionsspalte mit $fld[3] aufrufen.
Das kann man sinnvoll kommentieren, oder mit Leerzeichen versehen.

<off-topic>Kriegt jemand den ersten Ausdruck auch ohne eine temporaere Variable hin?</off-topic>

Udomatic

Zitat von: frank am 10 Oktober 2021, 17:29:27
baust du den string selbst zusammen?
weil ein einzeln geloggter aktueller wert am richtigen tag wäre ja ziehmlich einfach.

Nein, die Werte werden so in das Reading des Device geschrieben.
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

frank

Zitat<off-topic>Kriegt jemand den ersten Ausdruck auch ohne eine temporaere Variable hin?</off-topic>

ebenfalls ungetestet hätte ich probiert:
(split(",",$fld[3],1))[0]
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

rudolfkoenig

Zitat(split(",",$fld[3],1))[0]
Danke, funktioniert. Auf die Idee mit dem  Klammer bin ich nicht gekommen. Ich habe es ohne, mit -> und mit @{} probiert...

Udomatic

Zitat von: frank am 10 Oktober 2021, 18:13:16
ebenfalls ungetestet hätte ich probiert:
(split(",",$fld[3],1))[0]

Vielen Dank euch beiden. Ich traue mich gar nicht zu Fragen. Den Ausdruck setze ich jetzt im Attribut UserReading?

Wie muss man den Code im Übrigen lesen damit ich versuchen kann zu verstehen, was geschrieben wurde?
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

frank

die funktion ist für die Function-spalte im svg editor oder entsprechend im gplot file.
=> der wert aus der 4. spalte ($fld[3]) im logfile wird einmal am 1. komma gespalten und der erste dadurch erzeugte teilstring angezeigt.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Udomatic

#8
Zitat von: frank am 11 Oktober 2021, 09:23:53
die funktion ist für die Function-spalte im svg editor oder entsprechend im gplot file.
=> der wert aus der 4. spalte ($fld[3]) im logfile wird einmal am 1. komma gespalten und der erste dadurch erzeugte teilstring angezeigt.

Habe die Funktion in der function Spalte eingetragen. Leider bekomme ich keinen Trend angezeigt (Siehe Bild)

get FileLog_Vitodens CURRENT INT 2021-10-10_00:00:00 2021-10-16_23:59:59 3:Vitodens.Solarproduktion/Tag\x3a:(split(",",$fld[3],1))[0]:

2021-10-10_00:00:00 (split(",",$fld[3],1))[0]
#3:Vitodens.Solarproduktion/Tag\x3a:(split(",",$fld[3],1))[0]:


Woran könnte es liegen?
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

rudolfkoenig

Sehe ich richtig, dass es nur eine Zeile Vitodens.Solarproduktion/Tag gibt, und die Aufgabe ist die Werte in dieser Zeile anzuzeigen?
Wenn ja, dann ist das gewaehlte Verfahren falsch.
Wird diese Zeile jeden Tag einmal geschrieben, mit jeweils einen Wert mehr?

Udomatic

#10
Zitat von: rudolfkoenig am 11 Oktober 2021, 21:02:29
Sehe ich richtig, dass es nur eine Zeile Vitodens.Solarproduktion/Tag gibt, und die Aufgabe ist die Werte in dieser Zeile anzuzeigen?
Wenn ja, dann ist das gewaehlte Verfahren falsch.
Wird diese Zeile jeden Tag einmal geschrieben, mit jeweils einen Wert mehr?

Ja, In der Zeile stehen immer die letzten 8 Werte. Vorne links steht der aktuelle Wert von Heute. Gestern waren es 35.8.
Mein Ziel ist die Anzeige einer langfristigen Entwicklung von zum Beispiel 3, 6, 9 oder 12 Monaten
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

rudolfkoenig

Kannst Du bitte einen Auszug aus dem Log liefern, mit mindestens 10 unterschiedlichen Zeilen?

Udomatic

Zitat von: rudolfkoenig am 12 Oktober 2021, 09:41:52
Kannst Du bitte einen Auszug aus dem Log liefern, mit mindestens 10 unterschiedlichen Zeilen?

Anbei die Logeinträge der letzten 12 Tage

2021-10-01_18:03:37 Vitodens Solarproduktion/Tag: 34.3,39.5,25.7,35.9,29.4,21.3,39.3,38.9
2021-10-02_17:37:10 Vitodens Solarproduktion/Tag: 46.1,34.3,39.5,25.7,35.9,29.4,21.3,39.3
2021-10-03_17:09:57 Vitodens Solarproduktion/Tag: 4.6,46.1,34.3,39.5,25.7,35.9,29.4,21.3
2021-10-04_17:41:25 Vitodens Solarproduktion/Tag: 8,4.6,46.1,34.3,39.5,25.7,35.9,29.4
2021-10-05_17:33:04 Vitodens Solarproduktion/Tag: 20.7,8,4.6,46.1,34.3,39.5,25.7,35.9
2021-10-06_17:35:18 Vitodens Solarproduktion/Tag: 22.9,20.7,8,4.6,46.1,34.3,39.5,25.7
2021-10-07_17:07:18 Vitodens Solarproduktion/Tag: 27.6,22.9,20.7,8,4.6,46.1,34.3,39.5
2021-10-08_17:09:23 Vitodens Solarproduktion/Tag: 32.8,27.6,22.9,20.7,8,4.6,46.1,34.3
2021-10-09_17:41:25 Vitodens Solarproduktion/Tag: 30.1,32.8,27.6,22.9,20.7,8,4.6,46.1
2021-10-10_17:58:42 Vitodens Solarproduktion/Tag: 35.8,30.1,32.8,27.6,22.9,20.7,8,4.6
2021-10-11_17:30:54 Vitodens Solarproduktion/Tag: 4.6,35.8,30.1,32.8,27.6,22.9,20.7,8
2021-10-12_16:32:55 Vitodens Solarproduktion/Tag: 6.1,4.6,35.8,30.1,32.8,27.6,22.9,20.7

Mir ist noch aufgefallen, dass mehrmals am Tag der Tageswert aktualisiert wird. Der letzte Log war in den Beispielen meistens zwischen 17 und 18 Uhr. Aber im ersten Beispiel auch nach 18 Uhr und im letzten Beispiel vor 17 Uhr.

Wahrscheinlich muss man dann auch Abfragen, wann der letzte Log am jeweiligen Tag erstellt wird?

Hoffe das hilft dir weiter?




2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

rudolfkoenig

Komischerweise funktioniert die nette Variante von Frank nicht, und ich habe keine Erklaerung dafuer.
Meine zwei Varianten funktionieren, siehe Anhang.

Mini-Howto:
Daten nach log/123341.log kopieren, fhem.cfg erstellen:
define w FHEMWEB 8083
define fl FileLog log/123341.log Blubb

FHEM starten, in fl Details auf "Create SVG plot" klicken, hier die Funktion $fld[3]=~m/^([^,]*),/?$1:0 einfuegen, und fixedrange 10days setzen.

frank

ZitatKomischerweise funktioniert die nette Variante von Frank nicht, und ich habe keine Erklaerung dafuer.
vielleicht so:
$fld[3]=(split(",",$fld[3],1))[0]
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Udomatic

Zitat von: rudolfkoenig am 13 Oktober 2021, 17:20:35
Komischerweise funktioniert die nette Variante von Frank nicht, und ich habe keine Erklaerung dafuer.
Meine zwei Varianten funktionieren, siehe Anhang.

Mini-Howto:
Daten nach log/123341.log kopieren, fhem.cfg erstellen:
define w FHEMWEB 8083
define fl FileLog log/123341.log Blubb

FHEM starten, in fl Details auf "Create SVG plot" klicken, hier die Funktion $fld[3]=~m/^([^,]*),/?$1:0 einfuegen, und fixedrange 10days setzen.

Ganz Herzlichen Dank für deine Unterstützung als auch die von Frank!!!

Die Funktion hätte ich so nie selbst erstellt bekommen, was mich zu einem etwas ärgert, weil mir das Know-How fehlt, auf der anderen Seite ich aber sehr dankbar bin, dass es die Community wie euch gibt, die sich die Zeit für solche Anfragen nehmen!

Ich ziehe den Hut!
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

rudolfkoenig

Zitatvielleicht so:
Auch nicht, aber wenn man den dritten Parameter spart: (split(",",$fld[3]))[0] dann schon :)

frank

Zitat von: rudolfkoenig am 14 Oktober 2021, 08:56:19
Auch nicht, aber wenn man den dritten Parameter spart: (split(",",$fld[3]))[0] dann schon :)
prima.
hört sich irgendwie nach einer schlaflosen nacht an.  ;)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html