FHEM Forum

FHEM => Frontends => FHEMapp => Thema gestartet von: wolfg am 08 Mai 2023, 20:44:53

Titel: Chart und Skalierung Y-Achse
Beitrag von: wolfg am 08 Mai 2023, 20:44:53
Hallo,

im Moment versuche ich mir ein Chart für meinen Energiestatus (Solarerzeugung, Netzbezug und aktueller Verbrauch) zusammenzubauen.
Alle Werte habe ich in einem FileLog in einer Zeile erfasst.

2023-05-08_14:51:48 power_data log_data: N: 230 C: 503 S: 273
2023-05-08_14:52:02 power_data log_data: N: 230 C: 501 S: 271
2023-05-08_14:52:30 power_data log_data: N: 230 C: 502 S: 272

Das Template habe ich wie folgt definiert:
{
"template": "chart",
"chartDef": [
  ":(7:log_data:):Verbrauch:W:primary:#FF0000::::2",
  ":(9:log_data:):Solar:W:primary no-label:#FFBF00::::2"
],
"setup": { "daysAgo": 0 }
}

Als Visualisierung benutze ich das Template Chart. Da alle Werte in W angegeben sind, dachte ich eigentlich, dass die X-Achse gleich skaliert und angezeigt wird. Die Graphen sollten also im Verhältnis stimmen.

Aber: der Chart skaliert die X-Achse unterschiedlich. Einmal für den ersten maximalen Wert und einmal für den zweiten maximalen Wert. Beide haben unterschiedliche Maxima, die Kurven passen nicht so recht zusammen.

Zitat"chartDef": ["logsource:reading:text:präfix:axis:color:min:max:typ:lineWidth:markers:calc"],

Dabei ist mir noch folgendes aufgefallen: Benutze ich in der ChartDef den gleichen String für :text (siehe Snippet aus Doku), passen die Skalen. Dann aber steht in der Legende zweimal der gleiche Text. Nicht hilfreich. Benutze ich unterschiedliche Texte, passt die Legende, aber die Skalierung ist uneinheitlich. Hier in meiner Definition sind die Strings Verbrauch und Solar.

Was ist der richtige Weg, um zwei Werte mit gleicher Einheit einheitlich skaliert in einer Kurve darzustellen? Mit automatischer Skalierung?
Titel: Aw: Chart und Skalierung Y-Achse
Beitrag von: binford6000 am 09 Mai 2023, 11:00:59
Hallo,
deine chartdef sieht nicht richtig aus.
":(7:log_data:):Verbrauch:W:primary:#FF0000::::2",
":(9:log_data:):Solar:W:primary no-label:#FFBF00::::2"

Das sollte so aussehen:
":download:Download:MBit/s:secondary:#e91e63:0:270:line",
":upload:Upload:MBit/s::#ffc107:0:60:line"

Anstatt (7:log_data:) sollte da nur der Reading-Name stehen. In dem Beispiel darunter kannst du sehen
dass die Readings download und upload aus dem Logfile als Chart dargestellt werden sollen.

VG Sebastian
Titel: Aw: Chart und Skalierung Y-Achse
Beitrag von: jemu75 am 10 Mai 2023, 12:01:53
Hallo,

ich denke der Ansatz von wolfg ist schon korrekt, da in seinem logfile mehrere Werte pro Zeile gespeichert werden. Hier muss man also die richtige "Spalte" angeben, aus welcher der gewünschte Wert gelesen werden soll.

Was die gemeinsame Nutzung der Achsen anbetrifft, so hat das Chart-Template hier Grenzen. Deshalb hatte ich das Chart2-Template erstellt. Über dieses kann man die Achsen deutlich flexibler konfigurieren. Ich würde deshalb Chart2 als Template empfehlen.

Falls du Fragen zu den ChartOptions hast, melde dich gern.

Grüße
Jens :)
Titel: Aw: Chart und Skalierung Y-Achse
Beitrag von: wolfg am 10 Mai 2023, 18:16:36
ok, jetzt habe ich die Lösung.

der erste Schritt war Umstieg auf Chart2. Dann habe ich via SeriesName die Skalierung auf einen meiner Werte gelegt. Jetzt ist die Skalierung einheitlich. Was auch funktioniert hat, war ein hard codierter Min-Max Wert.

{
"template": "chart2",
"chartSeries": [":(7:log_data:):Verbrauch:%n.1 W:line:raw", ":(9:log_data:):Solar:%n.1 W:line:raw"],
"chartOptions": {
"colors": ["#FF0000","#FFBF00"],
"stroke": {
"curve": ["straight", "straight"],
"width": [2, 2]   
},
"markers": ["size:6","size:6"],
"yaxis": [
{ "seriesName": "Verbrauch", "showAlways": true},
{ "seriesName": "Verbrauch", "show": false, "showAlways": false}
]
},
"setup": {
    "daysAgo": 0
}
}