Templates in FHEM

Begonnen von Dr. Boris Neubert, 05 März 2017, 11:58:33

Vorheriges Thema - Nächstes Thema

KernSani

Hallo Boris,

ich komme jetzt endlich mal dazu, das zu testen... Mein konkreter Anwendungsfall: Ich habe vor, meine Rollläden auf das ROLLO Modul umzustellen.

Meine Erkenntnisse/Wünsche:
1.) Es wäre schon, wenn das Anlegen eines template files aus FHEM heraus unterstützt werden würde, sowas wie:
template create myTemplate.tpl
2.) Ich glaube betateilchen hatte es irgendwo erwähnt: configDB Nutzer müssen das File zunächst importieren (Doku ergänzen?). Mit Punkt 1 dürfte das auch erschlagen werden.
3.) Feste Dateiendung zum Editieren in "Edit Files" (mein template heisst jetzt .layout ;-)
4.) Defaultwerte wären klasse... sowas in der Art wie %meinWert:defaultWert% - wenn "meinWert" bei template use mitgegeben wird, wird dieser Wert genommen, ansonsten der defaultWert 
5.) nachdem ich nun mein Template erstellt hatte, wollte ich es testen, aber:

Error on reading tmpl_rollo.layout from database!


Das File existiert in der DB, ich kann es editieren... Nur der template Befehl findet es nicht...
Das Logfile sagt nicht viel:
2017.03.18 00:09:05 4: WEB_192.168.1.112_52487 POST /fhem&fw_id=1695&room=Unsorted&fwcsrf=csrf_189884894786425&cmd=template+show+tmpl_rollo.layout+; BUFLEN:0
2017.03.18 00:09:05 5: Cmd: >template show tmpl_rollo.layout<
2017.03.18 00:09:05 4: configDB reading file: tmpl_rollo.layout
2017.03.18 00:09:05 4: WEB: /fhem&fw_id=1695&room=Unsorted&fwcsrf=csrf_189884894786425&cmd=template+show+tmpl_rollo.layout+ / RL:1975 / text/html; charset=UTF-8 / Content-Encoding: gzip


Eine Idee, wie ich weiter vorgehen könnte?

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Hi Boris,

ich habe das template file aus der db gelöscht und nochmal neu importiert und jetzt funktioniert es... Keine Ahnung, was da schief stand. Ich dachte, das hätte ich gestern auch schon gemacht...

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Projekt ROLLO abgeschlossen. Template gefällt mir gut. Hab mal einen Wiki Artikel dazu begonnen....
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

igami

Wenn ich das richtig verstehe ist template nur zum anlegen von devices da, spätere Änderungen sind nicht möglich, oder?
Beispiel:
ich nehme das template aus dem wiki

# my Template File ./FHEM/tmpl_example.layout
define %name% dummy
define di_%name% doif ([%name]) (set %device" on)
attr di_%name do always

und merke später, dass ich ja gerne auch ein icon für den dummy hätte

# my Template File ./FHEM/tmpl_example.layout
define %name% dummy
attr %name% icon Icon_Fisch
define di_%name% doif ([%name]) (set %device" on)
attr di_%name do always

Das wirkt sich dann ja nicht auf die bestehenden devices aus.

Wäre es nicht sinnvoller das als

template ./FHEM/tmpl_example.layout name=myDummy

in der config zu speichern, sodass es bei einem neustart auch aktualisiert wird?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

KernSani

Zitat von: igami am 20 März 2017, 06:15:38
Wenn ich das richtig verstehe ist template nur zum anlegen von devices da, spätere Änderungen sind nicht möglich, oder?
Beispiel:
ich nehme das template aus dem wiki

# my Template File ./FHEM/tmpl_example.layout
define %name% dummy
define di_%name% doif ([%name]) (set %device" on)
attr di_%name do always

und merke später, dass ich ja gerne auch ein icon für den dummy hätte

# my Template File ./FHEM/tmpl_example.layout
define %name% dummy
attr %name% icon Icon_Fisch
define di_%name% doif ([%name]) (set %device" on)
attr di_%name do always

Das wirkt sich dann ja nicht auf die bestehenden devices aus.

Wäre es nicht sinnvoller das als

template ./FHEM/tmpl_example.layout name=myDummy

in der config zu speichern, sodass es bei einem neustart auch aktualisiert wird?
Im Gegensatz zu früheren Äußerungen bin ich mir nicht sicher, dass das zielführend wäre. Möglicherweise hsbe ich ja manuell bereits ein anderes Icon gesetzt o.ä.
Ich verpasse meinen mit Hilfe von template erstellten Devices ein user Attribut mit dem Templatenamen, so lassen sie sich schnell identifizieren und ggf. (kontrolliert) ändern
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Dr. Boris Neubert

Zitat von: igami am 20 März 2017, 06:15:38

Wäre es nicht sinnvoller das als

template ./FHEM/tmpl_example.layout name=myDummy

in der config zu speichern, sodass es bei einem neustart auch aktualisiert wird?

So verwende ich es und so habe ich es mir gedacht, als ich es erfunden habe. Ich definiere einmal im Template eine Litanei von zig Zeilen und definiere dann alle gleichartigen Devices im Gleichtakt mit

template Heizung.template name=Wohnzimmer fhtcode=4711
template Heizung.template name=Kinderzimmer fhtcode=4712
template Heizung.template name=Schlafzeimmer fhtcode=4713
template Heizung.template name=Bad fhtcode=4714


Und so steht das dann auch in der fhem.conf.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

#36
Zitat von: Dr. Boris Neubert am 23 März 2017, 19:14:51
Und so steht das dann auch in der fhem.conf.

Wenn Du damit die fhem.cfg meinst, verstösst das gegen bisher geltende Konventionen, die u.a. besagen, dass in den Konfigurationsdaten nur "define", "attr", "include" und Kommentare zulässig sind.

Seit Jahren kämpfen wir damit, den Anwendern beizubringen, dass keine Befehle wie "set" in die Konfiguration gehören, und jetzt kommst Du mit sowas um die Ecke...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KernSani

Ein configdb list wirft mir ganz normale defines für die via template erzeugten devices aus. Kenne aber die Funktionsweise von configdb nicht um jetzt sagen zu können, wie das tstsächlich abgelegt ist.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Dr. Boris Neubert

Zitat von: betateilchen am 23 März 2017, 19:41:11
Wenn Du damit die fhem.cfg meinst, verstösst das gegen bisher geltende Konventionen, die u.a. besagen, dass in den Konfigurationsdaten nur "define", "attr", "include" und Kommentare zulässig sind.

Dann wird die Konvention jetzt um "template" erweitert. "template" ist nichts anderes als "include' mit Parametersubstitution.

Zitat
Seit Jahren kämpfen wir damit, den Anwendern beizubringen, dass keine Befehle wie "set" in die Konfiguration gehören, und jetzt kommst Du mit sowas um die Ecke...

Wie kommst Du bitte darauf, dass ich ein Template benutzen möchte, um einen set-Befehl in die fhem.conf zu schreiben, oder dieses einem Anwender empfehlen würde? Das käme mir nie in den Sinn. Ich sehe auch nicht, dass irgendeines der Beispiele in diesem Thema ein set im Template enthalten würde.

Also bitte!

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

ZitatWenn Du damit die fhem.cfg meinst, verstösst das gegen bisher geltende Konventionen, die u.a. besagen, dass in den Konfigurationsdaten nur "define", "attr", "include" und Kommentare zulässig sind.

Das stimmt insoweit, dass nur diese Befehle wieder mit save gespeichert werden.

Die beschriebene Methode der nachtraeglichen Template-Aenderung ist fuer mehr als 99% der FHEM-Anwender nicht praktikabel: man darf dabei keine FHEM Definitionen oder Attribute live aendern, es muss alles ueber fhem.cfg erfolgen, save darf man nicht verwenden. Das man sowas Anfaengern nicht zeigt, ist selbstverstaendlich.

@KernSani: configdb und fhem.cfg sollte in diesem Fall keinen Unterschied machen, nur dass "configdb manuell editieren" nur was fuer hartgesottene ist.

betateilchen

@Boris: ich bin gegen diese Konventionserweiterung. configDB braucht und benutzt kein includes und wird somit auch Deinen template Befehl nicht unterstützen.

Dass Du irgendwo set Befehle empfiehlst, habe ich nirgends geschrieben, vielleicht solltest Du etwas sorgfältiger lesen. Aber Du beschreibst die Verwendung von template in der Konfiguration, was letztendlich auch nix anderes ist als ein bisher nicht zulässiger Befehl.

Warum erweiterst Du Deine 98_template.pm nicht um eine DefineFn? Nirgends steht, dass ein commanModul sowas nicht haben darf.

Würde es eine DefineFn geben, könnte man sowas machen:

define Wohnzimmer template Heizung.template fhtcode=0815

Und die DefineFn übernimmt den Rest. Damit wären die bisherigen Konventionen eingehalten und die Syntax für die Verwendung fände ich nebenbei gesagt auch noch logischer und besser zu merken.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Zitat von: betateilchen am 23 März 2017, 19:41:11
Seit Jahren kämpfen wir damit, den Anwendern beizubringen, dass keine Befehle wie "set" in die Konfiguration gehören, und jetzt kommst Du mit sowas um die Ecke...

Mein Deutsch-Modul scheint defekt zu sein.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Ja, offensichtlich, denn es reißt Textteile aus ihrem umgebenden Kontext.

Aber das ist ja nicht das erste Mal, dass Du mir aus meinen Beiträgen falsche Unterstellungen präsentierst, weil Du in aus ihrem Kontext gerissenen Textbrocken falsche Inhalte hineininterpretierst. Warum Du das immer wieder tust - keine Ahnung. Aber wenn Dir das so großen Spaß macht - nur zu. Jedem Tierchen sein Pläsierchen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

<offtopic>
Zitat von: betateilchen am 23 März 2017, 23:08:39
Aber das ist ja nicht das erste Mal, dass Du mir aus meinen Beiträgen falsche Unterstellungen präsentierst, weil Du in aus ihrem Kontext gerissenen Textbrocken falsche Inhalte hineininterpretierst. Warum Du das immer wieder tust - keine Ahnung. Aber wenn Dir das so großen Spaß macht

Ich vermute, dass es an der großen Zahl von Du-Botschaften liegt, die ich empfange. Und jetzt reißen wir uns wieder am Riemen und kommen zurück
</offtopic>

zur Sache:

Wenn template in der Konfiguration bei Benutzern des save-Kommandos überleben soll, muss es eine Sonderbehandlung geben. template-Befehle müssen gespeichert werden und die aus Templates generierten Geräte nicht (siehe CommandInclude, $comments; und VOLATILE). Das hat den durchaus erwünschten Nebeneffekt, dass während des Programmlaufs erfolgte Änderungen an den via template definierten Geräten nicht persistent werden.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

ZitatWenn template in der Konfiguration bei Benutzern des save-Kommandos überleben soll, muss es eine Sonderbehandlung geben.
Das ist mir zu viel Aufwand an zentralen Stellen mit unueberschaubaren Nebenwirkungen.

Die gleiche Funktionalitaet kann aber auch im template Modul implementiert werden: wenn template die erzeugten Instanzen merkt, dann koennte der Benutzer die im template Datei durchgefuehrten Aenderungen mit einem "template apply" Befehl aktivieren.