Darstellung lokaler PWS-Daten mit FOSHKplugin auf einem MagicMirror
Verfasst: 21 Nov 2025, 16:44
Hi!
Ich habe bzgl. MagicMirror noch etwas herumgespielt und möchte die gefundenen Lösungen wie üblich als ein Rezept veröffentlichen, damit Nutzer das möglichst leicht nachbasteln können.
Ist das aus Eurer Sicht soweit verständlich und zielführend?
Achja,
die Dokumentation ist in einigen Teilen noch der eigentlichen verfügbaren programmtechnischen Umsetzung voraus.
Die erweiterten observation-Felder sowie der Abruf vorhandener Tagfile-Produkte per http sind Betandteil meiner intern genutzten FOSHKplugin-Version, die noch nicht veröffentlicht wurde (Beta auf Anfrage).
Und auch mein MMM-WunderGround-PWS-Observations müsste noch ein paar Erweiterungen erhalten, um die neuen Funktionen von FOSHKplugin überhaupt zu nutzen.
Aber vielleicht ist das auch gar nicht mehr nötig, wenn die JsonTable-Lösung so wunderbar funktioniert.
Was meint ihr (Du)?
Oliver
MagicMirror und FOSHKplugin
MagicMirror² ist eine Open-Source-Software, mit der man ein "Smart Mirror" – also einen intelligenten Spiegel – bauen kann. Dabei zeigt die Software auf einem Monitor hinter einem halbtransparenten Spiegel verschiedenen konfigurierbare Dinge an wie Nachrichten, Kalendereinträge, Verkehrsmeldungen und das Wetter.
Mit sogenannten MagicMirror²-Modulen lassen sich weitere Funktionialitäten zur Anzeige nachrüsten.
Um die Daten der eigenen Wetterstation (PWS) direkt auf lokalem Wege per FOSHKplugin auf dem MagicMirror anzuzeigen, bieten sich mehrere Möglichkeiten an.
Eine ganz einfache Möglichkeit ohne viel Konfigurationsarbeit bietet meine Spezialversion von MMM-WunderGround-PWS-Observations. Dabei wird die bereits im FOSHKplugin implementierte Emulation der API-Schnittstelle für observations von Weather Underground genutzt.
Da hier die Daten von FOSHKplugin abgeholt werden (pull) ist keine weitere Konfiguration für FOSHKplugin nötig.
Einzig die Konfiguration des MagicMirror-Moduls ist erforderlich - siehe Modul-Webseite.
Bei Angabe von pws=FOSHKplugin und apiKey=MMM werden zusätzliche - nicht im WU-Format vereinbarte - Felder wie indoorTemp, indoorHumidity, lightningTime, lightningCount, lightningDistance, AqPM10, AqCO2, AqPM1 und AqPM4 übertragen und stehen somit zur Ausgabe durch das Modul und Anzeige auf dem MagicMirror zur Verfügung.
Eine weitere - leicht kompliziertere - Möglichkeit der Anzeige von FOSHKplugin-Werten auf dem MagicMirror stellt die Nutzung des JsonTable-Moduls dar.
Dabei kommt FOSHKplugin-seitig die TAGFILE-Option zum Tragen - ein spezielles vorab definiertes Template wird durch FOSHKplugin mit den aktuellen Werten gefüllt. Siehe dazu unbedingt auch das Rezept Definition of user-defined output formats - TAGFILE (from v0.10).
In der foshkplugin.conf ist ein entsprechender Forward anzulegen:
Zusätzlich sind die template-Datei tag-jsontable.template
sowie die Tagfile-Konfigurations tag-jsontable.conf
im Verzeichnis von FOSHKplugin (an der Stelle, an der die foshkplugin.conf liegt) zu erstellen.
Nach der Installation des JsonTable-Moduls auf dem MagicMirror muss gemäß Anleitung die Konfigurationsdatei config.js im config-Verzeichnis angepasst werden:
Mit dem JsonTable-Module sind auch tabelarische Darstellungen möglich - siehe ]Hauptseite des Moduls.
Zu Demonstrationszwecken hier ein Beispiel:
Der erforderliche Forward in der foshkplugin.conf:
Das erforderliche Template tag-jsontable2.conf:
Sowie der Codeblock, der in die Config-Section der MagicMirror-Konfigurationsdatei config/config.js eingefügt werden muss:
Zu beachten ist, dass diese Modul-Konfigurationsblöcke jeweils durch ein Komma voneinander getrennt werden müssen.
Also:
Der Vorteil der Lösungen mit JsonTable ist, dass man die Struktur, Reihenfolge und Inhalte beinahe beliebig selbst vorgeben kann.
Selbst farbliche Hervorhebungen (etwa zeige die Temperatur in roter Schrift an, wenn unter 0°C) sollten möglich sein.
Alle nutzbaren Platzhalter für das Template (die Inhalte der Tags) finden sich - mit aktuellem Wert - auf der keyhelp-Seite von FOSHKplugin unter http://ipaddress:port/FOSHKplugin/keyhelp.
Die Namen der Keys sind zum großen Teil selbsterklärend. Ansonsten lassen sich die Namen und deren Inhalt meist über den Wert erraten.
Hier ein Screenshot der hier vorgestellten Lösungen:
Screenshot
Die observation-Lösung auf Grundlage des MMM-WunderGround-PWS-Observations findet sich auf der rechten Seite des Screenshots; die beiden Forwards für das JsonTable-Modul sind auf der linken Seite zu sehen (1 oben und 2 unten).
Grundsätzlich funktioniert das JsonTable-Modul natürlich auch ohne FOSHKplugin - sofern eine Konsole mit WebUI zur Verfügung steht, kann diese jederzeit per http mit http://console-ip-address/get_livedata_info? abgefragt werden, was ein JSON erzeugt, dass weiterverarbeitet werden kann.
Allerdings sind da dann keine Umrechnungen oder Anpassungen möglich.
Ich habe bzgl. MagicMirror noch etwas herumgespielt und möchte die gefundenen Lösungen wie üblich als ein Rezept veröffentlichen, damit Nutzer das möglichst leicht nachbasteln können.
Ist das aus Eurer Sicht soweit verständlich und zielführend?
Achja,
die Dokumentation ist in einigen Teilen noch der eigentlichen verfügbaren programmtechnischen Umsetzung voraus.
Die erweiterten observation-Felder sowie der Abruf vorhandener Tagfile-Produkte per http sind Betandteil meiner intern genutzten FOSHKplugin-Version, die noch nicht veröffentlicht wurde (Beta auf Anfrage).
Und auch mein MMM-WunderGround-PWS-Observations müsste noch ein paar Erweiterungen erhalten, um die neuen Funktionen von FOSHKplugin überhaupt zu nutzen.
Aber vielleicht ist das auch gar nicht mehr nötig, wenn die JsonTable-Lösung so wunderbar funktioniert.
Was meint ihr (Du)?
Oliver
MagicMirror und FOSHKplugin
MagicMirror² ist eine Open-Source-Software, mit der man ein "Smart Mirror" – also einen intelligenten Spiegel – bauen kann. Dabei zeigt die Software auf einem Monitor hinter einem halbtransparenten Spiegel verschiedenen konfigurierbare Dinge an wie Nachrichten, Kalendereinträge, Verkehrsmeldungen und das Wetter.
Mit sogenannten MagicMirror²-Modulen lassen sich weitere Funktionialitäten zur Anzeige nachrüsten.
Um die Daten der eigenen Wetterstation (PWS) direkt auf lokalem Wege per FOSHKplugin auf dem MagicMirror anzuzeigen, bieten sich mehrere Möglichkeiten an.
Eine ganz einfache Möglichkeit ohne viel Konfigurationsarbeit bietet meine Spezialversion von MMM-WunderGround-PWS-Observations. Dabei wird die bereits im FOSHKplugin implementierte Emulation der API-Schnittstelle für observations von Weather Underground genutzt.
Da hier die Daten von FOSHKplugin abgeholt werden (pull) ist keine weitere Konfiguration für FOSHKplugin nötig.
Einzig die Konfiguration des MagicMirror-Moduls ist erforderlich - siehe Modul-Webseite.
Bei Angabe von pws=FOSHKplugin und apiKey=MMM werden zusätzliche - nicht im WU-Format vereinbarte - Felder wie indoorTemp, indoorHumidity, lightningTime, lightningCount, lightningDistance, AqPM10, AqCO2, AqPM1 und AqPM4 übertragen und stehen somit zur Ausgabe durch das Modul und Anzeige auf dem MagicMirror zur Verfügung.
Eine weitere - leicht kompliziertere - Möglichkeit der Anzeige von FOSHKplugin-Werten auf dem MagicMirror stellt die Nutzung des JsonTable-Moduls dar.
Dabei kommt FOSHKplugin-seitig die TAGFILE-Option zum Tragen - ein spezielles vorab definiertes Template wird durch FOSHKplugin mit den aktuellen Werten gefüllt. Siehe dazu unbedingt auch das Rezept Definition of user-defined output formats - TAGFILE (from v0.10).
In der foshkplugin.conf ist ein entsprechender Forward anzulegen:
Code: Alles auswählen
[Forward-75]
FWD_ENABLE = True
FWD_CMT = TAGFILE for JsonTable (MMM)
FWD_URL =
FWD_OPTION = config=tag-jsontable.conf
FWD_INTERVAL = 30
FWD_IGNORE =
FWD_TYPE = TAGFILE
FWD_SID =
FWD_PWD =
FWD_EXEC =
Code: Alles auswählen
{
"items": [
{
"name": "runtime",
"value": "[[@runtime]] sec"
},
{
"name": "tempinc",
"value": "[[@tempinc]] °C"
},
{
"name": "humidityin",
"value": "[[@humidityin]] %"
},
{
"name": "tempc",
"value": "[[@tempc]] °C"
},
{
"name": "humidity",
"value": "[[@humidity]] %"
},
{
"name": "baromrelhpa",
"value": "[[@baromrelhpa]] hPa"
},
{
"name": "winddir",
"value": "[[@winddir]] "
},
{
"name": "winddir_text",
"value": "[[@winddir_text]]"
},
{
"name": "windspeedkmh",
"value": "[[@windspeedkmh]] kmh"
},
{
"name": "windgustkmh",
"value": "[[@windgustkmh]] kmh"
},
{
"name": "maxdailygustkmh",
"value": "[[@maxdailygustkmh]] kmh"
},
{
"name": "windgustkmh",
"value": "[[@windgustkmh]] %"
},
{
"name": "solarradiation",
"value": "[[@solarradiation]] W/m²"
},
{
"name": "uv",
"value": "[[@uv]] %"
},
{
"name": "rainratemm",
"value": "[[@rainratemm]] mm/h"
},
{
"name": "eventrainmm",
"value": "[[@eventrainmm]] mm"
},
{
"name": "hourlyrainmm",
"value": "[[@hourlyrainmm]] mm"
},
{
"name": "dailyrainmm",
"value": "[[@dailyrainmm]] mm"
},
{
"name": "weeklyrainmm",
"value": "[[@weeklyrainmm]] mm"
},
{
"name": "monthlyrainmm",
"value": "[[@monthlyrainmm]] mm"
},
{
"name": "yearlyrainmm",
"value": "[[@yearlyrainmm]] mm"
},
{
"name": "temp1c",
"value": "[[@temp1c]] °C"
},
{
"name": "humidity1",
"value": "[[@humidity1]] %"
}
]
}
Code: Alles auswählen
[Tagfile]
infile = tag-jsontable.template # mandatory! - name of the template file with embedded tags (default: "")
outfile = tag-jsontable.json # name of the final output file (default: "")
append = False # determines whether outfile is overwritten or appended in each interval (default: False)
task = save # processing - SAVE for writing a file, GET for sending via http(s)/GET, and POST for sending via http/POST (default: save)
tag = [[@keyname]] # of string is searched for in the infile and replaced with the corresponding value (default: <!-- @keyname -->)
postscript = "" # possibility to specify a bash script to be started after saving the output file but before sending it (default: "")
dtime_format = %d-%m-%y %H:%M # sets output format for values with a date/time - use "%d.%m.%Y %H:%M:%S" for european 24h display - Python like - see https://www.w3schools.com/python/python_datetime.asp (default: %d.%m.%Y %H:%M:%S)
locale_format = "" # defines the language of the names of the weekdays and months - use en_US.utf8 for English terms in dates (default: "")
pre_count = "" # length of the output value - padded with spaces if necessary (default: "")
dec_count = "" # number of decimal places (default: "" = as is)
dec_separator default = . # you may define a comma as a decimal separator (default: .)
Nach der Installation des JsonTable-Moduls auf dem MagicMirror muss gemäß Anleitung die Konfigurationsdatei config.js im config-Verzeichnis angepasst werden:
Code: Alles auswählen
{
module: 'MMM-JsonTable',
position: 'top_left',
header: 'JsonTable FOSHKplugin',
config: {
url: 'http://ipaddress:port/gettagfile=tag-jsontable.json', // Required
arrayName: 'items' // Optional
}
}
Zu Demonstrationszwecken hier ein Beispiel:
Der erforderliche Forward in der foshkplugin.conf:
Code: Alles auswählen
[Forward-76]
FWD_ENABLE = True
FWD_CMT = TAGFILE for JsonTable (MMM) 2
FWD_URL =
FWD_OPTION = config=tag-jsontable2.conf
FWD_INTERVAL = 30
FWD_IGNORE =
FWD_TYPE = TAGFILE
FWD_SID =
FWD_PWD =
FWD_EXEC =
Code: Alles auswählen
[Tagfile]
infile = tag-jsontable2.template # mandatory! - name of the template file with embedded tags (default: "")
outfile = tag-jsontable2.json # name of the final output file (default: "")
append = False # determines whether outfile is overwritten or appended in each interval (default: False)
task = save # processing - SAVE for writing a file, GET for sending via http(s)/GET, and POST for sending via http/POST (default: save)
tag = [[@keyname]] # of string is searched for in the infile and replaced with the corresponding value (default: <!-- @keyname -->)
postscript = "" # possibility to specify a bash script to be started after saving the output file but before sending it (default: "")
dtime_format = %H:%M:%S # sets output format for values with a date/time - use "%d.%m.%Y %H:%M:%S" for european 24h display - Python like - see https://www.w3schools.com/python/python_datetime.asp (default: %d.%m.%Y %H:%M:%S)
locale_format = "" # defines the language of the names of the weekdays and months - use en_US.utf8 for English terms in dates (default: "")
pre_count = "" # length of the output value - padded with spaces if necessary (default: "")
dec_count = "" # number of decimal places (default: "" = as is)
dec_separator default = . # you may define a comma as a decimal separator (default: .)
Code: Alles auswählen
{
module: 'MMM-JsonTable',
position: 'top_left',
header: 'JsonTable FOSHKplugin #2',
config: {
url: 'http://192.168.15.100:8096/gettagfile=tag-jsontable2.json', // Required
arrayName: 'items', // Optional
descriptiveRow: '<tr><td>what</td><td>min</td><td>max</td><td>now</td></tr>',
tryFormatDate: false
}
}
Also:
Code: Alles auswählen
{
module: 'das erste Modul',
position: 'top_left',
...
config: {
}
}, // hier gehört ein Komma hin!
{
module: 'das erste Modul',
position: 'top_left',
...
config: {
}
} // der letzt Modulblock darf kein Komma haben!
Selbst farbliche Hervorhebungen (etwa zeige die Temperatur in roter Schrift an, wenn unter 0°C) sollten möglich sein.
Alle nutzbaren Platzhalter für das Template (die Inhalte der Tags) finden sich - mit aktuellem Wert - auf der keyhelp-Seite von FOSHKplugin unter http://ipaddress:port/FOSHKplugin/keyhelp.
Die Namen der Keys sind zum großen Teil selbsterklärend. Ansonsten lassen sich die Namen und deren Inhalt meist über den Wert erraten.
Hier ein Screenshot der hier vorgestellten Lösungen:
Screenshot
Die observation-Lösung auf Grundlage des MMM-WunderGround-PWS-Observations findet sich auf der rechten Seite des Screenshots; die beiden Forwards für das JsonTable-Modul sind auf der linken Seite zu sehen (1 oben und 2 unten).
Grundsätzlich funktioniert das JsonTable-Modul natürlich auch ohne FOSHKplugin - sofern eine Konsole mit WebUI zur Verfügung steht, kann diese jederzeit per http mit http://console-ip-address/get_livedata_info? abgefragt werden, was ein JSON erzeugt, dass weiterverarbeitet werden kann.
Allerdings sind da dann keine Umrechnungen oder Anpassungen möglich.