diff --git a/README.md b/README.md index 58bb86f..409c144 100644 --- a/README.md +++ b/README.md @@ -127,21 +127,15 @@ Alle Geräte die du in FHEM eingebunden hast, können innerhalb von **FHEMApp**
*Beispiel für ein Panel* ## neues Panel erstellen -Über die Einstellungen in **FHEMApp** kannst du neue Panels erstellen. Nachdem du ein **neues Panel** mit einem **eindeutigem Name** erstellt hast, solltest du dieses zuerst mit mindestens einem FHEM-Device verbinden. - -Du kannst ein Panel auch mit mehreren FHEM-Devices verbinden. Jedes FHEM-Device, welches Du mit dem Panel verbindest benötigt dabei einen **Schlüssel**, der innerhalb des Panels eindeutig sein muss. Insbesondere bei der Verwendung von [Vorlagen](#vorlagen) wird somit gewährleistet, dass das gewünschte FHEM-Device angesprochen wird. - -**Beispiel:** -|Panel 1|Panel 2|Beschreibung| -|---|---|---| -|`thermo:temp.eg.wohnen`|`thermo:temp.og.buero`|verbindet das erste Panel mit dem FHEM-Device `temp.eg.wohnen` und ein zweites Panel mit dem FHEM-Device `temp.og.buero`. Für die Konfiguration der Elemente im Panel wurde der Schlüssel `thermo` vergeben.| -|`valve:heiz.eg.wohnen`|`valve:heiz.og.buero`|verbindet das erste Panel mit dem FHEM-Device `heiz.eg.wohnen` und ein zweites Panel mit dem FHEM-Device `heiz.og.buero`. Für die Konfiguration der Elemente im Panel wurde der Schlüssel `valve` vergeben.| - -Nun kann man in der passenden [Vorlage](#vorlagen) oder in den beiden [Panels](#panels) die vergebenen Schlüssel `thermo` bzw. `valve` zum Abrufen von FHEM Readings oder dem Senden von FHEM set-Befehlen verwenden. Ein FHEM set-Befehl kann nun wie folgt geschrieben werden `set valve pct 50`. +Über die Einstellungen in **FHEMApp** kannst du neue Panels erstellen. Nachdem du ein **neues Panel** mit einem **eindeutigem Name** erstellt hast, wählst du eine passende [Vorlage](#vorlagen) aus und verbindest das Panel mit mindestens einem FHEM Device. Je nach Vorlage kann es auch sein, dass du mehrere FHEM Devices verbinden musst. ![](./docs/media/example_element_definition_devices.png)
*Beispiel für die Definition von Devices in einem Panel* +Alternativ kannst du ein Panel auch ohne Verwendung einer Vorlage (Template) konfigurieren. Hier musst du die **erweiterte Ansicht** aktivieren und kannst nur alle Elemente des Panels manuell konfigurieren. + +Wenn du bei Verwendung einer Vorlage einzelne Elemente nur für das aktuelle Panel anpassen möchtest, kannst du ebenfalls die **erweiterte Ansicht** aktivieren. + ## Konfiguration der Elemente Die Konfiguration der Elemente in den verschiedenen Bereichen des Panels erfolgt nach einem einheitlichen Definitions-Schema. `reading:value:prop1:prop2:...` @@ -219,14 +213,14 @@ Ersetzungen bieten die Möglichkeit, Werte innerhalb von Element-Definitionen zu |`state::%t(on)`|on|an|wenn unter [Sprachen](#sprachen) für die Variable `on` im deutschen Sprachschema `an` hinterlegt wurde| |`temp::Temperatur\: %n(1)°C`|18.7|Temperatur: 18,7°C| ## Panel allgemein -In den allgemeinen Einstellungen für Panels wird festgelegt, mit welchen FHEM **Devices** das Panel verknüpft ist und ob eine **Vorlage** zur Darstellung des Panels verwendet werden soll. Weiterhin wird festgelegt, unter welchen Navigationspunkten das Panel zur Anzeige gebracht werden soll. Zusätzlich können verschiedene Einstellung zur Darstellung des Panels erfolgen. +In den allgemeinen Einstellungen für Panels wird festgelegt, ob eine **Vorlage** zur Darstellung des Panels verwendet werden soll und mit welchen FHEM **Devices** das Panel verknüpft ist. Weiterhin wird festgelegt, unter welchen Navigationspunkten das Panel zur Anzeige gebracht werden soll. Zusätzlich können verschiedene Einstellung zur Darstellung des Panels erfolgen. -Wenn für ein Panel keine [Vorlage](#vorlagen) verwendet werden soll, oder bestimmte Einstellungen der Vorlage für das Panel angepasst werden sollen, kann die **erweitere Konfiguration** aktiviert werden. +Wenn für ein Panel keine [Vorlage](#vorlagen) verwendet werden soll, oder bestimmte Einstellungen der Vorlage für das Panel angepasst werden sollen, kann die **erweiterte Ansicht** aktiviert werden. ### Element deviceskeys Die *devicekeys* werden in [Vorlagen](#vorlagen) definiert. Ein *devicekey* ist eine Variable, welche in einer Vorlage (Template) an Stelle eines konkreten FHEM-Devicenamen verwendet wird. Bei der späteren Verwendung der Vorlage, wird in der Panelkonfiguration jeder *devicekey* einem konkreten FHEM-Device zugeordnet. -Somit können [Vorlagen](#vorlagen) für beliebig viele Panels verwendet werden. Die Defintion für einen Button, der einen bestimmten Befehl an FHEM sendet wird dann beispielsweise in Form von `set switch on` statt `set on` in der betreffenden Definition hinterlegt. Die Variable `switch` wird deshalb als *devicekey* definiert und später in der Panelkonfigurtation mit dem tatsächlichen FHEM-Device `` verknüpft. +Somit können [Vorlagen](#vorlagen) für beliebig viele Panels verwendet werden. Die Defintion für einen Button, der einen bestimmten Befehl an FHEM sendet wird dann beispielsweise in Form von `set switch on` statt `set on` in der betreffenden Definition hinterlegt. Die Variable `switch` wird dabei als *devicekey* definiert und später in der Panelkonfigurtation mit dem tatsächlichen FHEM-Device `` verknüpft. Für jede Vorlage muss mindestens ein *devicekey* festgelegt werden. @@ -245,7 +239,7 @@ Liste der FHEM-Devices, die mit dem Panel verknüpft sind. Es muss mindestens ei |key|eindeutiger Schlüssel, der für Element-Definitionen benötigt wird| |device|Name des FHEM Device, mit dem das Panel verknüpft ist| ### Element template -Optional kann eine [Vorlage](#vorlagen) ausgewählt werden, die für die Darstellung des Panels verwendet werden soll. Elemente die im Panel (unter **erweiterte Konfiguration**) definiert wurden, behalten ihre Gültigkeit auch wenn eine Vorlage verwendet wird. In diesem Fall werden die betreffenden Definitionen aus der Vorlage ignoriert. +Optional kann eine [Vorlage](#vorlagen) ausgewählt werden, die für die Darstellung des Panels verwendet werden soll. Elemente die im Panel (unter **erweiterte Ansicht**) definiert wurden, behalten ihre Gültigkeit auch wenn eine Vorlage verwendet wird. In diesem Fall werden die betreffenden Definitionen aus der Vorlage ignoriert. ### Element navigation Liste der Navigationspunkte, unter denen das Panel angezeigt wird. Im Gegensatz zu normalen Definitionen, werden hier **alle** Definitionen verwendet, deren Bedingungen zutreffen. @@ -614,13 +608,13 @@ Es wird ein Text und/oder ein Icon in einem der 6 Spalten (left1, left2, mid1, m |icon||Icon das agezeigt wird. (siehe auch [mdi Icons](https://pictogrammers.com/library/mdi/) und [Icon Mapping](#element-iconmap)) [string]| |color||legt die Farbe für das Icon fest. (siehe auch [Farben](#farben)) [string]| # Vorlagen -Damit Konfigurationen nicht für jedes Panel erstellt werden müssen, können diese auch als Vorlage (template) erstellt und abgespeichert werden. Somit kann man Vorlagen für alle FHEM-Devices eines Typs (z.B. Schalter, Rolladenaktoren, Fensterkontakte, Thermostate...) erstellen. +Mit **FHEMApp** werden verschiedene [Standardvorlagen](#standardvorlagen) bereitgestellt, welche direkt verwendet werden können. + +Zudem gibt es in **FHEMApp** die Möglichkeit eigene Vorlagen (templates) zu erstellen. Somit kann man Vorlagen für alle FHEM-Devices eines Typs (z.B. Schalter, Rolladenaktoren, Fensterkontakte, Thermostate...) erstellen. Nachdem eine Vorlage erstellt wurde, kann diese den gewünschten Panels in der [Panelkonfiguration](#panelkonfiguration) unter den [allgemeinen Einstellungen](#panel-allgemein) im Element [template](#element-template) zugewiesen werden. Grundsätzlich können alle Elemente, die in einem Panel konfigurierbar sind auch in Vorlagen konfiguriert werden. - -Mit **FHEMApp** werden verschiedene [Standardvorlagen](#standardvorlagen) bereitgestellt, welche direkt verwendet werden können. # Navigation Das Navigationsmenü von **FHEMApp** kann individuell angepasst werden. So ist es möglich die Reihenfolge der einzelnen Navigationspunkte festzulegen, Navigationspunkte mit einem Icon zu versehen oder alternative Beschriftungen für die Navigationspunkte festzulegen. @@ -661,8 +655,14 @@ Neben festen Sprachvariablen kann die Ersetzung `%t()` auch mit den Werten von F Mit **FHEMApp** werden verschiedene Standardvorlagen bereitgestellt, die den Einstieg besonders einfach machen. |Beschreibung|Beispiel| |---|---| -|Name: *switch*
Devicekeys: *switch*
Readings: *alias, **room**, group, **state***

Einsatz: Steckdosen
JSON: [switch](./public/templates/switch.json)|![](./docs/media/template_switch.png)| -|Name: *light*
Devicekeys: *light*
Readings: *alias, **room**, group, **state***

Einsatz: Lichtschalter
JSON: [light](./public/templates/light.json)|![](./docs/media/template_light.png)| -|Name: *dimmer*
Devicekeys: *dimmer*
Readings: *alias, **room**, group, **state**, **pct***

Einsatz: Dimmer
JSON: [dimmer](./public/templates/dimmer.json)|![](./docs/media/template_dimmer.png)| -|Name: *contact*
Devicekeys: *contact*
Readings: *alias, **room**, group, **state***

Einsatz: Tür-/Fensterkontakte
JSON: [contact](./public/templates/contact.json)|![](./docs/media/template_contact.png)| -|Name: *blind*
Devicekeys: *blind*
Readings: *alias, **room**, group, **state**, **pct**, motor*

Einsatz: Jalousien
JSON: [blind](./public/templates/blind.json)|![](./docs/media/template_blind.png)| \ No newline at end of file +|Name: *switch*
Devicekeys: *switch*
Readings: *alias, **room**, group, sortby, **state***

Einsatz: Steckdosen
JSON: [switch](./public/templates/switch.json)|![](./docs/media/template_switch.png)| +|Name: *light*
Devicekeys: *light*
Readings: *alias, **room**, group, sortby, **state***

Einsatz: Lichtschalter
JSON: [light](./public/templates/light.json)|![](./docs/media/template_light.png)| +|Name: *dimmer*
Devicekeys: *dimmer*
Readings: *alias, **room**, group, sortby, **state**, **pct***

Einsatz: Dimmer
JSON: [dimmer](./public/templates/dimmer.json)|![](./docs/media/template_dimmer.png)| +|Name: *contact*
Devicekeys: *contact*
Readings: *alias, **room**, group, sortby, **state***

Einsatz: Tür-/Fensterkontakte
JSON: [contact](./public/templates/contact.json)|![](./docs/media/template_contact.png)| +|Name: *blind*
Devicekeys: *blind*
Readings: *alias, **room**, group, sortby, **state**, **pct**, motor*

Einsatz: Jalousien
JSON: [blind](./public/templates/blind.json)|![](./docs/media/template_blind.png)| +|Name: *thermostat*
Devicekeys: *thermo, valve*
Readings: *alias, **room**,
group, sortby, measured-temp,
**desired-temp**, humidity,
R-dayTemp, R-nightTemp,
tempState, controlMode,
state (valve), pct (valve)*

Einsatz: Heizungsthermostate
JSON: [thermostat](./public/templates/thermostat.json)|![](./docs/media/template_thermostat.png)| +|Name: *temperatur*
Devicekeys: *temp*
Readings: *alias, **room**, group, sortby, **temperature**, humidity*

Einsatz: Temperatursensoren
JSON: [temperatur](./public/templates/temperatur.json)|![](./docs/media/template_temperatur.png)| +|Name: *smokedetector*
Devicekeys: *smoke*
Readings: *alias, **room**, group, sortby, **level***

Einsatz: Rauchmelder
JSON: [smokedetector](./public/templates/smokedetector.json)|![](./docs/media/template_smokedetector.png)| +|Name: *motiondetector*
Devicekeys: *sensor*
Readings: *alias, **room**, group, sortby, **motion***

Einsatz: Bewegungsmeldung
JSON: [motiondetector](./public/templates/motiondetector.json)|![](./docs/media/template_motiondetector.png)| +|Name: *sonosplayer*
Devicekeys: *player*
Readings: *alias, **room**, group, sortby,
and other readings...*

Einsatz: SONOS Player
JSON: [sonosplayer](./public/templates/sonosplayer.json)|![](./docs/media/template_sonosplayer.png)| +|Name: *proplanta*
Devicekeys: *weather*
Readings: *alias, **room**, group, sortby,
and other readings...*

Einsatz: Wettervorhersage (Proplanta)
JSON: [proplanta](./public/templates/proplanta.json)|![](./docs/media/template_proplanta.png)| \ No newline at end of file diff --git a/docs/media/example_element_definition_devices.png b/docs/media/example_element_definition_devices.png index 22b7387..cf77b7f 100644 Binary files a/docs/media/example_element_definition_devices.png and b/docs/media/example_element_definition_devices.png differ diff --git a/docs/media/template_motiondetector.png b/docs/media/template_motiondetector.png new file mode 100644 index 0000000..727e88e Binary files /dev/null and b/docs/media/template_motiondetector.png differ diff --git a/docs/media/template_proplanta.png b/docs/media/template_proplanta.png new file mode 100644 index 0000000..c707099 Binary files /dev/null and b/docs/media/template_proplanta.png differ diff --git a/docs/media/template_smokedetector.png b/docs/media/template_smokedetector.png new file mode 100644 index 0000000..a3ce85f Binary files /dev/null and b/docs/media/template_smokedetector.png differ diff --git a/docs/media/template_sonosplayer.png b/docs/media/template_sonosplayer.png new file mode 100644 index 0000000..983976b Binary files /dev/null and b/docs/media/template_sonosplayer.png differ diff --git a/docs/media/template_temperatur.png b/docs/media/template_temperatur.png new file mode 100644 index 0000000..a9fd473 Binary files /dev/null and b/docs/media/template_temperatur.png differ diff --git a/docs/media/template_thermostat.png b/docs/media/template_thermostat.png new file mode 100644 index 0000000..e977bdb Binary files /dev/null and b/docs/media/template_thermostat.png differ diff --git a/public/CHANGELOG.md b/public/CHANGELOG.md index e6d949e..83fb9e8 100644 --- a/public/CHANGELOG.md +++ b/public/CHANGELOG.md @@ -1,3 +1,10 @@ +# v4.0.37-beta (20.04.2024) +## Settings +- Selection of FHEM devices optimised +## App +- adding default templates +## Core +- load all default templates on inizialising FHEMApp # v4.0.36-beta (17.04.2024) ## App - providing default templates diff --git a/public/templates/motiondetector.json b/public/templates/motiondetector.json new file mode 100644 index 0000000..9bd051a --- /dev/null +++ b/public/templates/motiondetector.json @@ -0,0 +1,49 @@ +{ + "name": "motiondetector", + "author": "jemu", + "date": "2024-04-16", + "panel": { + "devicekeys": [ + "sensor:FHEM motiondetector device" + ], + "navigation": [ + "sensor-a-room::Räume->%s", + "sensor-a-group::Gruppen->%s" + ], + "sortby": [ + "sensor-a-sortby::%s" + ] + }, + "status": { + "title": [ + "sensor-a-alias:^.+$:%s", + "sensor-i-NAME::%s" + ], + "imageUrl": [ + "::images/header_01.png" + ], + "bar": [ + "sensor-motion:off:0", + "::100" + ] + }, + "main": [ + { + "level": { + "mid": "info" + }, + "mid": { + "text": [ + "sensor-motion:off:bereit", + "::Bewegung erkannt" + ] + } + } + ], + "info": { + "left1": [ + "sensor-motion:off::mdi-motion-sensor-off", + ":::mdi-motion-sensor" + ] + } +} \ No newline at end of file diff --git a/public/templates/proplanta.json b/public/templates/proplanta.json new file mode 100644 index 0000000..91eb97b --- /dev/null +++ b/public/templates/proplanta.json @@ -0,0 +1,313 @@ +{ + "name": "proplanta", + "author": "jemu75", + "date": "2023-12-08", + "panel": { + "devicekeys": [ + "weather:FHEM Proplanta Device" + ], + "iconmap": [ + "t1.gif:mdi-weather-sunny", + "t2.gif:mdi-weather-sunny", + "t3.gif:mdi-weather-partly-cloudy", + "t4.gif:mdi-weather-partly-cloudy", + "t5.gif:mdi-weather-cloudy", + "t6.gif:mdi-weather-partly-rainy", + "t7.gif:mdi-weather-rainy", + "t8.gif:mdi-weather-lightning", + "t9.gif:mdi-weather-partly-snowy", + "t10.gif:mdi-weather-snowy", + "t11.gif:mdi-weather-snowy-rainy", + "t12.gif:mdi-weather-hazy", + "t13.gif:mdi-weather-fog", + "t14.gif:mdi-weather-rainy", + "n1.gif:mdi-weather-night", + "n2.gif:mdi-weather-night", + "n3.gif:mdi-weather-night-partly-cloudy", + "n4.gif:mdi-weather-night-partly-cloudy", + "n5.gif:mdi-weather-cloudy", + "n6.gif:mdi-weather-partly-rainy", + "n7.gif:mdi-weather-rainy", + "n8.gif:mdi-weather-lightning", + "n9.gif:mdi-weather-partly-snowy", + "n10.gif:mdi-weather-snowy", + "n11.gif:mdi-weather-snowy-rainy", + "n12.gif:mdi-weather-hazy", + "n13.gif:mdi-weather-fog", + "n14.gif:mdi-weather-rainy" + ], + "expandable": [ + "::true:false" + ], + "navigation": [ + "weather-a-group::Gruppen->%s", + "weather-a-room::Räume->%s" + ] + }, + "status": { + "bar": [ + "weather-state:Tmin:100", + "::100:error" + ], + "imageUrl": [ + "::images/header_01.png" + ], + "title": [ + "weather-a-alias:^.+$:%s", + "weather-i-NAME::%s" + ] + }, + "main": [ + { + "level": { + "mid": "info" + }, + "mid": { + "text": [ + "weather-weather::%s" + ] + } + }, + { + "level": { + "left1": "info", + "right2": "info", + "divider": [ + "::true" + ] + }, + "left1": { + "text": [ + "::Luftdruck" + ], + "text2": [ + "weather-pressure::%n()hPa" + ] + }, + "right2": { + "text": [ + "::Wind" + ], + "text2": [ + "weather-wind::%n()km/h" + ] + } + }, + { + "level": { + "divider": [ + "::true" + ], + "left1": "info", + "mid": "info", + "right2": "info" + }, + "left1": { + "text": [ + "::Morgens" + ], + "icon": [ + "weather-fc0_weatherMorningIcon::%s" + ] + }, + "mid": { + "text": [ + "::Mittags" + ], + "icon": [ + "weather-fc0_weatherDayIcon::%s" + ] + }, + "right2": { + "text": [ + "::Abends" + ], + "icon": [ + "weather-fc0_weatherEveningIcon::%s" + ] + } + }, + { + "level": { + "left1": "info", + "mid": "info", + "right2": "info", + "height": [ + "::55px" + ] + }, + "left1": { + "icon": [ + "weather-fc0_weatherDayIcon::%s" + ] + }, + "mid": { + "text": [ + "weather-fc0_date::%d({ \"weekday\"\\: \"long\" }):text-left" + ], + "text3": [ + "weather-fc0_weatherDay::%s:text-left text-caption" + ], + "size": [ + "::7" + ] + }, + "right2": { + "text": [ + "weather-fc0_tempMax::%n()°C" + ], + "text3": [ + "weather-fc0_tempMin::%n()°C" + ] + } + }, + { + "level": { + "left1": "info", + "mid": "info", + "right2": "info", + "height": [ + "::55px" + ] + }, + "left1": { + "icon": [ + "weather-fc1_weatherDayIcon::%s" + ] + }, + "mid": { + "text": [ + "weather-fc1_date::%d({ \"weekday\"\\: \"long\" }):text-left" + ], + "text3": [ + "weather-fc1_weatherDay::%s:text-left text-caption" + ], + "size": [ + "::7" + ] + }, + "right2": { + "text": [ + "weather-fc1_tempMax::%n()°C" + ], + "text3": [ + "weather-fc1_tempMin::%n()°C" + ] + } + }, + { + "level": { + "left1": "info", + "mid": "info", + "right2": "info", + "height": [ + "::55px" + ] + }, + "left1": { + "icon": [ + "weather-fc2_weatherDayIcon::%s" + ] + }, + "mid": { + "text": [ + "weather-fc2_date::%d({ \"weekday\"\\: \"long\" }):text-left" + ], + "text3": [ + "weather-fc2_weatherDay::%s:text-left text-caption" + ], + "size": [ + "::7" + ] + }, + "right2": { + "text": [ + "weather-fc2_tempMax::%n()°C" + ], + "text3": [ + "weather-fc2_tempMin::%n()°C" + ] + } + }, + { + "level": { + "left1": "info", + "mid": "info", + "right2": "info", + "height": [ + "::55px" + ] + }, + "left1": { + "icon": [ + "weather-fc3_weatherDayIcon::%s" + ] + }, + "mid": { + "text": [ + "weather-fc3_date::%d({ \"weekday\"\\: \"long\" }):text-left" + ], + "text3": [ + "weather-fc3_weatherDay::%s:text-left text-caption" + ], + "size": [ + "::7" + ] + }, + "right2": { + "text": [ + "weather-fc3_tempMax::%n()°C" + ], + "text3": [ + "weather-fc3_tempMin::%n()°C" + ] + } + }, + { + "level": { + "left1": "info", + "mid": "info", + "right2": "info", + "height": [ + "::55px" + ] + }, + "left1": { + "icon": [ + "weather-fc4_weatherDayIcon::%s" + ] + }, + "mid": { + "text": [ + "weather-fc4_date::%d({ \"weekday\"\\: \"long\" }):text-left" + ], + "text3": [ + "weather-fc4_weatherDay::%s:text-left text-caption" + ], + "size": [ + "::7" + ] + }, + "right2": { + "text": [ + "weather-fc4_tempMax::%n()°C" + ], + "text3": [ + "weather-fc4_tempMin::%n()°C" + ] + } + } + ], + "info": { + "left1": [ + "weather-weatherIcon:::%s" + ], + "mid1": [ + "weather-state-ts::%d(time)" + ], + "right2": [ + "weather-state:Tmin::mdi-sync", + ":::mdi-sync-off" + ] + } +} \ No newline at end of file diff --git a/public/templates/smokedetector.json b/public/templates/smokedetector.json new file mode 100644 index 0000000..5c40767 --- /dev/null +++ b/public/templates/smokedetector.json @@ -0,0 +1,49 @@ +{ + "name": "smokedetector", + "author": "jemu", + "date": "2024-04-16", + "panel": { + "devicekeys": [ + "smoke:FHEM smokedetector device" + ], + "navigation": [ + "smoke-a-room::Räume->%s", + "smoke-a-group::Gruppen->%s" + ], + "sortby": [ + "smoke-a-sortby::%s" + ] + }, + "status": { + "title": [ + "smoke-a-alias:^.+$:%s", + "smoke-i-NAME::%s" + ], + "imageUrl": [ + "::images/header_01.png" + ], + "bar": [ + "smoke-level:2:n(0):error", + "::100" + ] + }, + "main": [ + { + "level": { + "mid": "info" + }, + "mid": { + "text": [ + "smoke-level:2:Rauchentwicklung", + "::bereit" + ] + } + } + ], + "info": { + "left1": [ + "level:2::mdi-fire", + "level:::mdi-smoke-detector" + ] + } +} \ No newline at end of file diff --git a/public/templates/sonosplayer.json b/public/templates/sonosplayer.json new file mode 100644 index 0000000..5ab81b1 --- /dev/null +++ b/public/templates/sonosplayer.json @@ -0,0 +1,168 @@ +{ + "name": "sonosplayer", + "author": "jemu75", + "date": "2024-04-16", + "panel": { + "devicekeys": [ + "player:FHEM Sonosplayer device" + ], + "navigation": [ + "player-a-room::Räume->%s", + "player-a-group::Gruppen->%s" + ], + "sortby": [ + "player-a-sortby::%s" + ], + "expandable": [ + "::true" + ] + }, + "status": { + "title": [ + "player-a-alias:^.+$:%s", + "player-i-NAME::%s" + ], + "imageUrl": [ + "::images/header_01.png" + ], + "bar": [ + "player-presence:^(?!appeared):0:error", + "player-transportState:^(?!PLAYING):0", + "player-currentTrackPositionSimulatedPercent:0.1:%n()", + "player-transportState:PLAYING:100" + ] + }, + "main": [ + { + "level": { + "left1": "btn", + "mid": "btn", + "right2": "btn" + }, + "left1": { + "btn": [ + "player-presence:disappeared:mdi-skip-previous:true", + "player-nextTrackHandle:.\\\\|:mdi-skip-previous", + "player-nextTrackHandle::mdi-skip-previous:true" + ], + "click": [ + "::set player previous" + ] + }, + "mid": { + "btn": [ + "player-presence:disappeared:mdi-play:true::outlined", + "player-transportState:PLAYING:mdi-pause:false::outlined", + "player-transportState::mdi-play:false::outlined" + ], + "click": [ + "player-transportState:PLAYING:set player Pause", + "::set player Play" + ], + "size": [ + "::6" + ] + }, + "right2": { + "btn": [ + "player-presence:disappeared:mdi-skip-next:true", + "player-nextTrackHandle:\\\\|.:mdi-skip-next", + "player-nextTrackHandle::mdi-skip-next:true" + ], + "click": [ + "::set player next" + ] + } + }, + { + "level": { + "mid": "info", + "left1": null, + "show": [ + "player-currentTitle:^.+$:true", + "player-currentSource:^.+$:true", + "::false" + ] + }, + "mid": { + "text": [ + "player-currentTitle:^.+$:%s:text-h6", + "player-currentSource:^.+$:%s:text-h6" + ], + "text2": [ + "player-currentArtist:^.+$:%s ~ " + ], + "text3": [ + "player-currentAlbum:^.+$:%s" + ] + } + }, + { + "level": { + "left1": "btn", + "mid": "slider", + "right2": "info" + }, + "left1": { + "btn": [ + "player-GroupMute:1:mdi-volume-high", + "player-GroupMute:0:mdi-volume-mute" + ], + "click": [ + "player-GroupMute:1:set player mute 0", + "player-GroupMute:0:set player Mute 1" + ], + "size": [ + "::2" + ] + }, + "mid": { + "slider": [ + "player-GroupVolume::set player GroupVolume %v:%n(0):on:0:40:1" + ] + }, + "right2": { + "size": [ + "::1" + ] + } + }, + { + "level": { + "mid": "image", + "left1": "info", + "right2": "info", + "show": [ + "player-currentAlbumArtURL:empty:false", + "::true" + ], + "height": [ + "::350px" + ] + }, + "mid": { + "image": [ + "player-currentAlbumArtURL::%s" + ], + "size": [ + "::7" + ] + }, + "left1": {}, + "right2": {} + } + ], + "info": { + "left1": [ + "player-Mute:1::mdi-volume-off", + "player-transportState:PLAYING::mdi-play", + ":::mdi-pause" + ], + "mid1": [ + "player-currentTrackProvider:.:%s" + ], + "right2": [ + "player-currentTrackPositionSimulated::%s" + ] + } +} \ No newline at end of file diff --git a/public/templates/temperatur.json b/public/templates/temperatur.json new file mode 100644 index 0000000..ec35a6e --- /dev/null +++ b/public/templates/temperatur.json @@ -0,0 +1,53 @@ +{ + "name": "temperatur", + "author": "jemu", + "date": "2024-04-16", + "panel": { + "devicekeys": [ + "temp:FHEM temperatur device" + ], + "navigation": [ + "temp-a-room::Räume->%s", + "temp-a-group::Gruppen->%s" + ], + "sortby": [ + "temp-a-sortby::%s" + ] + }, + "status": { + "title": [ + "temp-a-alias:^.+$:%s", + "temp-i-NAME::%s" + ], + "imageUrl": [ + "::images/header_01.png" + ], + "bar": [ + "::100" + ] + }, + "main": [ + { + "level": { + "left1": "info", + "right2": "info" + }, + "left1": { + "text": [ + "temp-temperature::%n(1)°C" + ] + }, + "right2": { + "text": [ + "temp-humidity::%n()%" + ] + } + } + ], + "info": { + "left1": [ + "temp-temperature:0::mdi-thermometer", + "temp-temperature:::mdi-snowflake" + ] + } +} \ No newline at end of file diff --git a/public/templates/templates.json b/public/templates/templates.json index adbb501..2856ff1 100644 --- a/public/templates/templates.json +++ b/public/templates/templates.json @@ -1,3 +1,3 @@ [ - "switch", "light", "dimmer", "contact", "blind" + "switch", "light", "dimmer", "contact", "blind", "thermostat", "temperatur", "smokedetector", "motiondetector", "sonosplayer", "proplanta" ] \ No newline at end of file diff --git a/public/templates/thermostat.json b/public/templates/thermostat.json new file mode 100644 index 0000000..b7b48c1 --- /dev/null +++ b/public/templates/thermostat.json @@ -0,0 +1,238 @@ +{ + "name": "thermostat", + "author": "jemu75", + "date": "2024-04-16", + "panel": { + "devicekeys": [ + "thermo:FHEM thermostat device", + "valve:FHEM Valve device" + ], + "navigation": [ + "thermo-a-room::Räume->%s", + "thermo-a-group::Gruppen->%s" + ], + "sortby": [ + "thermo-a-sortby::%s" + ] + }, + "status": { + "title": [ + "thermo-a-alias:^.+$:%s", + "thermo-i-NAME::%s" + ], + "bar": [ + "valve-pct:^.+$:%n(0)", + "valve-state:on:100", + "valve-state::0" + ], + "imageUrl": [ + "::images/header_01.png" + ] + }, + "main": [ + { + "level": { + "left1": "btn", + "mid": "info", + "right2": "btn" + }, + "left1": { + "btn": [ + "::mdi-minus" + ], + "divider": [ + "::true" + ], + "click": [ + "thermo-desired-temp:17.5:set thermo desired-temp %n(1,-0.5)" + ], + "longClick": [ + "thermo-R-nightTemp:^.+$:set thermo desired-temp %n(1,0)" + ] + }, + "mid": { + "divider": [ + "::true" + ], + "text": [ + "thermo-desired-temp:off:aus", + "thermo-desired-temp::%n(1)°C" + ], + "size": [ + "::7" + ] + }, + "right2": { + "btn": [ + "::mdi-plus" + ], + "click": [ + "thermo-desired-temp:25:", + "thermo-desired-temp::set thermo desired-temp %n(1,0.5)" + ], + "longClick": [ + "thermo-R-dayTemp:^.+$:set thermo desired-temp %n(1,0)" + ] + } + }, + { + "level": { + "mid": "chart", + "height": [ + "280px" + ] + }, + "mid": { + "options": { + "legend": { + "show": false + }, + "yAxis": { + "show": false + }, + "grid": { + "top": 0, + "bottom": 0, + "left": 0, + "right": 0 + }, + "series": [ + { + "type": "gauge", + "center": [ + "50%", + "65%" + ], + "startAngle": 200, + "endAngle": -20, + "min": 10, + "max": 30, + "splitNumber": 10, + "itemStyle": { + "color": "#FFAB91" + }, + "progress": { + "show": true, + "overlap": false, + "width": 20 + }, + "pointer": { + "show": false + }, + "axisLine": { + "lineStyle": { + "width": 20 + } + }, + "axisTick": { + "distance": -30, + "splitNumber": 4, + "lineStyle": { + "width": 2, + "color": "#999" + } + }, + "splitLine": { + "distance": -36, + "length": 12, + "lineStyle": { + "width": 3, + "color": "#999" + } + }, + "axisLabel": { + "distance": -10, + "color": "#999", + "fontSize": 10 + }, + "anchor": { + "show": false + }, + "title": { + "show": false + }, + "detail": { + "valueAnimation": true, + "width": "60%", + "lineHeight": 40, + "borderRadius": 8, + "offsetCenter": [ + 0, + "-15%" + ], + "fontSize": 35, + "fontWeight": "bolder", + "color": "inherit" + } + }, + { + "type": "gauge", + "center": [ + "50%", + "65%" + ], + "startAngle": 200, + "endAngle": -20, + "min": 10, + "max": 30, + "itemStyle": { + "color": "#FD7347" + }, + "progress": { + "show": true, + "width": 8 + }, + "pointer": { + "show": false + }, + "axisLine": { + "show": false + }, + "axisTick": { + "show": false + }, + "splitLine": { + "show": false + }, + "axisLabel": { + "show": false + }, + "detail": { + "valueAnimation": true, + "width": "60%", + "lineHeight": 40, + "borderRadius": 8, + "offsetCenter": [ + 0, + "15%" + ], + "fontSize": 20, + "fontWeight": "normal", + "color": "inherit" + } + } + ] + }, + "serie": [ + "thermo-desired-temp::%s:Soll:1:°C:gauge", + "thermo-measured-temp::%s:Temperatur:1:°C:gauge" + ] + } + } + ], + "info": { + "mid1": [ + "thermo-measured-temp::%n(1)°C:mdi-thermometer" + ], + "mid2": [ + "thermo-humidity::%n()%:mdi-water" + ], + "left1": [ + "thermo-tempState:day::mdi-weather-sunny", + "thermo-tempState:night::mdi-weather-night" + ], + "left2": [ + "thermo-controlMode:auto::mdi-clock-time-four-outline" + ] + } +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 5dcf73d..c3ef3aa 100644 --- a/src/App.vue +++ b/src/App.vue @@ -42,7 +42,7 @@