Das Problem:
Da Readings / Attribute / Kommandos unterschiedlich je nach Gerät sind, funktionieren die Templates von FHEM-App jeweils oft nur für ein Gerät.
Wir können das Problem auf verschiedene Weisen angehen:
- durch ein Mapping
- durch viele Templates
Für 1) spricht: Die Anzahl der Templates bleibt sehr übersichtlich
Für 2) spricht: Es sind keine Code-Anpassungen nötig, und die Inhalte eines Templates sind gar nicht so viel mehr Text als die Readings. Der Anpassungsaufwand ist gering. Außerdem sind die Features der Geräte ja unterschiedlich.
Hier ein Ansatz zu 1)
.... Auf der anderen Seite, muss zukünftig vermieden werden, dass jeder seine eigenen Templates baut und die Arbeit am Ende immer wieder gemacht wird. Es gibt aktuell zwei interessante Ansätze hierfür.
1) universelle Templates die, die verschiedenen Gerätearten unterstützen. (hierfür wäre eine Art Mapping nötig)
2) eine Bibliothek schaffen, in der jeder neue Templates einstellen kann und die jedem Nutzer von FHEMApp zugänglich ist
Ich habe heute mit meinem gebrochenen Javascript noch einmal überlegt, wie dieser Mapper aufgebaut sein könnte.
Ja, auch ich habe MAX-Thermostate, und das Template geht natürlich nicht, weil 2-3 Readings anders heißen.
Ich will nicht das "homebridgeMapping" von alexa - ich hasse jede neu erfundene Syntax.
Ich bin auf das hier gestoßen:
https://github.com/edudavid/json-map-transformWäre das eine "Mapper-Sprache", die allgemeintauglich ist? Ich würde das hilfsweise als Attribut "mapper" in "appOption" sehen: Das Mapper-Template wird geladen und jedes Event vom Device da durchgenudelt. Ein Kommando von fhemApp wird als Objekt "{ "action": "set pct 75" }" instanziert, durch den Mapper gejagt und dann wird "action" an FHEM geschickt.
Beispiel für das Device:
{ "template":"thermostat","room": "Buero","name": "Heizung Büro", "mapper": "thermostat_max" }
thermostat_max.json:
{
"measured-temp": {
"path": "temperature"
},
"pct": {
"path": "valveposition"
},
"desired-temp": {
"path": "desiredTemperature"
}, ...
}
Mein Ansatz zu 2)
Einer der großen Vorteile von github ist, wie simpel es ist, einen Pull-Request zu starten - es kostet Jens nur 1-2 Klicks, ein neues Template zu übernehmen.
Wir sollten uns dann nur auf eine Konvention einigen, wie z.B. "template_(shutter|switchWithKwh|switch|thermostat|...)_(max|shelly|hm|hmip|hue)", wobei die 3. Gruppe vorzugsweise der Modulname in Lowercase sein sollte.
Wie soll es weitergehen?