FHEMWEB/MiniChart: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K (Seite Kategorisiert und wikifiziert, Code-Beispiele kompakter dargestellt, teilweise mit syntax-highlighting, Gliederungsebenen bereinigt) |
||
| (5 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
[[Datei:Minichart flex mobile.png]] | [[Datei:Minichart flex mobile.png|Mini|rechts]] | ||
== MiniChart – kompaktes Chart-Widget (Line & Bar) == | == MiniChart – kompaktes Chart-Widget (Line & Bar) == | ||
Das MiniChart-Widget visualisiert Messwertverläufe als kompaktes Liniendiagramm oder Balkendiagramm für die Darstellung im [[FHEMWEB]] ([[PGM2]]) Frontend. | |||
Das MiniChart-Widget visualisiert Messwertverläufe als kompaktes Liniendiagramm oder Balkendiagramm. | Zusätzlich zeigt es drei aktuelle Werte, die aus Label, Reading und Einheit bestehen. Zum Einrichten sind drei Schritte notwendig. | ||
Zusätzlich zeigt es drei aktuelle Werte, die aus Label, Reading und Einheit bestehen. Zum Einrichten sind | |||
=== Hilfe === | === Hilfe === | ||
Forenthread zum | * Forenthread zum {{Link2Forum|Topic=141857|LinkText=MiniChart Widget}} | ||
== 1️⃣ 99_myUtils.pm – Hilfsfunktion zum Speichern von historischen Werten == | == 1️⃣ 99_myUtils.pm – Hilfsfunktion zum Speichern von historischen Werten == | ||
Zuerst wird eine Subroutine in [[99_myUtils_anlegen|99_myUtils.pm]] angelegt, die neue Werte an ein Fixed-Array anhängt und alte Werte entfernt, falls die maximale Größe überschritten wird. | |||
Zuerst wird eine Subroutine angelegt, die neue Werte an ein Fixed-Array anhängt und alte Werte entfernt, falls die maximale Größe überschritten wird. | <syntaxhighlight lang="Perl"> | ||
sub AppendToFixedArray { | sub AppendToFixedArray { | ||
my ($dev, $reading, $newVal, $maxSize) = @_; | my ($dev, $reading, $newVal, $maxSize) = @_; | ||
| Zeile 25: | Zeile 21: | ||
return join(',', @values); | return join(',', @values); | ||
} | } | ||
</syntaxhighlight> | |||
== 2️⃣ at-Timer zum regelmäßigen Aktualisieren == | == 2️⃣ at-Timer zum regelmäßigen Aktualisieren == | ||
Mit einem `[[at]]`-Timer werden die Werte der Messgeräte regelmäßig in die `chartArray`-Readings geschrieben. | |||
Mit einem `at`-Timer werden die Werte der Messgeräte regelmäßig in die `chartArray`-Readings geschrieben. | <syntaxhighlight lang="Perl"> | ||
defmod chartUpdate at +*00:05 {\ | defmod chartUpdate at +*00:05 {\ | ||
my $val = ReadingsVal("Smartmeter_2E1F50", "APOX_Power", 0);;\ | my $val = ReadingsVal("Smartmeter_2E1F50", "APOX_Power", 0);;\ | ||
| Zeile 68: | Zeile 63: | ||
fhem("setreading Heizstab_BW_Pwr chartArray $new8");;\ | fhem("setreading Heizstab_BW_Pwr chartArray $new8");;\ | ||
} | } | ||
</syntaxhighlight> | |||
== 3️⃣ Minichart == | == 3️⃣ Minichart == | ||
=== 1. Widget-Datei aus contrib laden === | |||
Bevor das MiniChart-Widget genutzt werden kann, muss die JS-Datei ins FHEM-Webverzeichnis kopiert werden. | Bevor das MiniChart-Widget genutzt werden kann, muss die JS-Datei ins FHEM-Webverzeichnis kopiert werden. | ||
Dies kann mit der Perlfunktion { Svn_GetFile('from SVN Path', 'to local Path') } direkt in der FHEM Kommandozeile erfolgen. | Dies kann mit der Perlfunktion <code>{ Svn_GetFile('from SVN Path', 'to local Path') }</code> direkt in der FHEM Kommandozeile erfolgen. | ||
<syntaxhighlight lang="Perl"> | |||
{ Svn_GetFile('contrib/fhemweb_minichart.js', 'www/pgm2/fhemweb_minichart.js') } | |||
</syntaxhighlight> | |||
==== Werteanzeige | === 2. Widget im Device mit widgetOverride einrichten === | ||
=== Werteanzeige === | |||
Drei Textzeilen können angezeigt werden, jeweils im Format: | Drei Textzeilen können angezeigt werden, jeweils im Format: | ||
:<code>Label@Reading@Einheit</code> | |||
Beispiel: | Beispiel: | ||
:<code>Jetzt@power@W,Heute@yieldday@kWh,Gesamt@yieldtotal@kWh</code> | |||
==== Ausblenden einzelner Zeilen ==== | |||
Jede der drei Zeilen kann vollständig oder teilweise ausgeblendet werden, indem das jeweilige Element | Jede der drei Zeilen kann vollständig oder teilweise ausgeblendet werden, indem das jeweilige Element leer gelassen wird. Das Widget setzt intern automatisch ein geschütztes Leerzeichen ( ). | ||
leer gelassen wird. Das Widget setzt intern automatisch ein geschütztes Leerzeichen ( ). | |||
Beispiele: | Beispiele: | ||
* Nur Label ausblenden: | * Nur Label ausblenden: | ||
:<code>@reading@W</code> | |||
* Nur Reading ausblenden: | * Nur Reading ausblenden: | ||
:<code>Label@@W</code> | |||
* Nur Einheit ausblenden: | * Nur Einheit ausblenden: | ||
:<code>Label@reading@</code> | |||
* Ganze Zeile ausblenden: | * Ganze Zeile ausblenden: | ||
:<code> </code> | |||
=== Diagrammtypen === | |||
MiniChart unterstützt zwei Diagrammtypen: | MiniChart unterstützt zwei Diagrammtypen: | ||
* line – geglättetes Liniendiagramm mit Farbverlauf | * line – geglättetes Liniendiagramm mit Farbverlauf | ||
* bar – Balkendiagramm mit positiver/negativer Farbgebung | * bar – Balkendiagramm mit positiver/negativer Farbgebung | ||
Das Chart-Reading | Das Chart-Reading benötigt eine kommagetrennte Zahlenliste, z. B.: | ||
:<code>10,20,15,18,25</code> | |||
Chartoptionen: | Chartoptionen: | ||
:<code>chartType@colorPositive@colorNegative</code> | |||
Beispiele: | Beispiele: | ||
:<code>line@#3b82f6@#ff0000</code> | |||
:<code>bar@#00cc88@#cc0044</code> | |||
Fallback (nur ChartReading angegeben): | Fallback (nur ChartReading angegeben): | ||
:<code>dann wird automatisch line@#3b82f6@#3b82f6 gesetzt</code> | |||
=== Einrichtung im Device === | === Einrichtung im Device === | ||
Syntax: | Syntax: | ||
:<code><webCmd>:minichart,Label1@Reading1@Einheit,Label2@Reading2@Einheit,Label3@Reading3@Einheit,ChartReading,chartType@colorPos@colorNeg</code> | |||
Beispiel Liniendiagramm: | Beispiel Liniendiagramm: | ||
<syntaxhighlight lang="Perl" line> | |||
attr <device> webCmd minichart | |||
attr <device> widgetOverride minichart:minichart,Jetzt@power@W,Heute@yieldday@kWh,Gesamt@yieldtotal@kWh,chartArray,line@#3b82f6@#ff0000 | |||
</syntaxhighlight> | |||
Beispiel Balkendiagramm: | Beispiel Balkendiagramm: | ||
:<code>...,chartArray,bar@#00cc88@#cc0044</code> | |||
Fallback (Standard line + Standardfarbe): | Fallback (Standard line + Standardfarbe): | ||
:<code>...,chartArray</code> | |||
=== Parameterübersicht === | === Parameterübersicht === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Abschnitt | ! Abschnitt | ||
| Zeile 164: | Zeile 155: | ||
|- | |- | ||
| <code>ChartReading</code> | | <code>ChartReading</code> | ||
| Datenquelle | | Datenquelle | ||
| | | Liefert Array-Werte für das Diagramm . | ||
|- | |- | ||
| <code>chartType@colorPos@colorNeg</code> | | <code>chartType@colorPos@colorNeg</code> | ||
| Zeile 171: | Zeile 162: | ||
| line oder bar; Farben optional. | | line oder bar; Farben optional. | ||
|} | |} | ||
[[Kategorie:Code Snippets]] | |||
[[Kategorie:FHEM Frontends]] | |||
Aktuelle Version vom 8. Dezember 2025, 16:49 Uhr
MiniChart – kompaktes Chart-Widget (Line & Bar)
Das MiniChart-Widget visualisiert Messwertverläufe als kompaktes Liniendiagramm oder Balkendiagramm für die Darstellung im FHEMWEB (PGM2) Frontend. Zusätzlich zeigt es drei aktuelle Werte, die aus Label, Reading und Einheit bestehen. Zum Einrichten sind drei Schritte notwendig.
Hilfe
- Forenthread zum MiniChart Widget
1️⃣ 99_myUtils.pm – Hilfsfunktion zum Speichern von historischen Werten
Zuerst wird eine Subroutine in 99_myUtils.pm angelegt, die neue Werte an ein Fixed-Array anhängt und alte Werte entfernt, falls die maximale Größe überschritten wird.
sub AppendToFixedArray {
my ($dev, $reading, $newVal, $maxSize) = @_;
$maxSize //= 250; # Standard: 250 Werte
my $current = ReadingsVal($dev, $reading, '');
my @values = split(',', $current);
if (@values >= $maxSize) {
@values = @values[-($maxSize - 1) .. -1]; # Älteste Werte entfernen
}
push @values, $newVal;
return join(',', @values);
}
2️⃣ at-Timer zum regelmäßigen Aktualisieren
Mit einem `at`-Timer werden die Werte der Messgeräte regelmäßig in die `chartArray`-Readings geschrieben.
defmod chartUpdate at +*00:05 {\
my $val = ReadingsVal("Smartmeter_2E1F50", "APOX_Power", 0);;\
my $new = AppendToFixedArray("Smartmeter_2E1F50", "chartArray", $val);;\
fhem("setreading Smartmeter_2E1F50 chartArray $new");;\
\
my $val1 = ReadingsVal("OpenDTU", "power", 0);;\
my $new1 = AppendToFixedArray("OpenDTU", "chartArray", $val1);;\
fhem("setreading OpenDTU chartArray $new1");;\
\
my $val2 = ReadingsVal("Kuehlschrank", "power", 0);;\
my $new2 = AppendToFixedArray("Kuehlschrank", "chartArray", $val2);;\
fhem("setreading Kuehlschrank chartArray $new2");;\
\
my $val3 = ReadingsVal("Luftentfeuchter", "ENERGY_Power", 0);;\
my $new3 = AppendToFixedArray("Luftentfeuchter", "chartArray", $val3);;\
fhem("setreading Luftentfeuchter chartArray $new3");;\
\
my $val4 = ReadingsVal("Geschirrspueler", "power", 0);;\
my $new4 = AppendToFixedArray("Geschirrspueler", "chartArray", $val4);;\
fhem("setreading Geschirrspueler chartArray $new4");;\
\
my $val5 = ReadingsVal("Trockner", "power", 0);;\
my $new5 = AppendToFixedArray("Trockner", "chartArray", $val5);;\
fhem("setreading Trockner chartArray $new5");;\
\
my $val6 = ReadingsVal("Waschmaschine", "power", 0);;\
my $new6 = AppendToFixedArray("Waschmaschine", "chartArray", $val6);;\
fhem("setreading Waschmaschine chartArray $new6");;\
\
my $val7 = ReadingsVal("Pumpe_FBH_Pwr", "power", 0);;\
my $new7 = AppendToFixedArray("Pumpe_FBH_Pwr", "chartArray", $val7);;\
fhem("setreading Pumpe_FBH_Pwr chartArray $new7");;\
\
my $val8 = ReadingsVal("Heizstab_BW_Pwr", "power", 0);;\
my $new8 = AppendToFixedArray("Heizstab_BW_Pwr", "chartArray", $val8);;\
fhem("setreading Heizstab_BW_Pwr chartArray $new8");;\
}
3️⃣ Minichart
1. Widget-Datei aus contrib laden
Bevor das MiniChart-Widget genutzt werden kann, muss die JS-Datei ins FHEM-Webverzeichnis kopiert werden.
Dies kann mit der Perlfunktion { Svn_GetFile('from SVN Path', 'to local Path') } direkt in der FHEM Kommandozeile erfolgen.
{ Svn_GetFile('contrib/fhemweb_minichart.js', 'www/pgm2/fhemweb_minichart.js') }
2. Widget im Device mit widgetOverride einrichten
Werteanzeige
Drei Textzeilen können angezeigt werden, jeweils im Format:
Label@Reading@Einheit
Beispiel:
Jetzt@power@W,Heute@yieldday@kWh,Gesamt@yieldtotal@kWh
Ausblenden einzelner Zeilen
Jede der drei Zeilen kann vollständig oder teilweise ausgeblendet werden, indem das jeweilige Element leer gelassen wird. Das Widget setzt intern automatisch ein geschütztes Leerzeichen ( ).
Beispiele:
- Nur Label ausblenden:
@reading@W
- Nur Reading ausblenden:
Label@@W
- Nur Einheit ausblenden:
Label@reading@
- Ganze Zeile ausblenden:
Diagrammtypen
MiniChart unterstützt zwei Diagrammtypen:
- line – geglättetes Liniendiagramm mit Farbverlauf
- bar – Balkendiagramm mit positiver/negativer Farbgebung
Das Chart-Reading benötigt eine kommagetrennte Zahlenliste, z. B.:
10,20,15,18,25
Chartoptionen:
chartType@colorPositive@colorNegative
Beispiele:
line@#3b82f6@#ff0000bar@#00cc88@#cc0044
Fallback (nur ChartReading angegeben):
dann wird automatisch line@#3b82f6@#3b82f6 gesetzt
Einrichtung im Device
Syntax:
<webCmd>:minichart,Label1@Reading1@Einheit,Label2@Reading2@Einheit,Label3@Reading3@Einheit,ChartReading,chartType@colorPos@colorNeg
Beispiel Liniendiagramm:
attr <device> webCmd minichart
attr <device> widgetOverride minichart:minichart,Jetzt@power@W,Heute@yieldday@kWh,Gesamt@yieldtotal@kWh,chartArray,line@#3b82f6@#ff0000
Beispiel Balkendiagramm:
...,chartArray,bar@#00cc88@#cc0044
Fallback (Standard line + Standardfarbe):
...,chartArray
Parameterübersicht
| Abschnitt | Bedeutung | Beschreibung |
|---|---|---|
<beliebigerName>
|
webCmd-Zuweisung | Definiert die Instanz des Widgets. |
minichart
|
Widget-Typ | Aktiviert das MiniChart-Widget. |
Label1@Reading1@Einheit1
|
Anzeigezeilen | Drei frei definierbare Werte-/Statusfelder; mit komplett ausblendbar.
|
Label2@Reading2@Einheit2
|
Anzeigezeilen | Drei frei definierbare Werte-/Statusfelder; mit komplett ausblendbar.
|
Label3@Reading3@Einheit3
|
Anzeigezeilen | Drei frei definierbare Werte-/Statusfelder; mit komplett ausblendbar.
|
ChartReading
|
Datenquelle | Liefert Array-Werte für das Diagramm . |
chartType@colorPos@colorNeg
|
Chart-Optionen | line oder bar; Farben optional. |
