Hauptmenü

Chart und Skalierung Y-Achse

Begonnen von wolfg, 08 Mai 2023, 20:44:53

Vorheriges Thema - Nächstes Thema

wolfg

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?

binford6000

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

jemu75

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 :)

wolfg

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
}
}