setzen von templates

Begonnen von martinp876, 17 Dezember 2016, 01:03:41

Vorheriges Thema - Nächstes Thema

martinp876

ich habe einmal ein Modul zum definieren/editieren/applizieren von templates angefangen (Anhang)
Es ist ein Editor für templates. Templates werden weiterhin in HMInfo verwaltet.

Um es zu nutzen muss man (nach dem Laden des Moduls)
define ht HMtemplate
ausführen.
dann wählt man ein Kommando

edit: editiert ein vorhandenes template
defTmpl: definiert ein neues template. Als basis verwendet man die Register eines existierenden Device
select: auswählen eines Template welches man einem Device oder Kanal zuweisen will.
delete: um ein Template loszuwerden.

"neu" in der Bedienung ist, dass man die Parameter, welche für die Kommandos genutzt werden in den Attributen einstellt.
Je nachdem "wo" man ist ändern sich die Attribute und die Kommandos. Also aufpassen, was in Internals steht (Hilfestellungen) Kommandos (was kann man machen) und vor allem Attribute!

Ist sicher nicht 100% wasserdicht. Und da ich noch keine Beschreibung erstellt habe ist es auch nicht offiziell.

kommt ihr damit zurecht? Kann man das Bedienkonzept verstehen?

Anmerkung: das ht ist quasi nur temporär. Wenn man ein template definiert hat (defTmpl -> ausfüllen -> save) braucht man ht nicht mehr. Es könnte gelöscht werden. Es ist eben nur der editor!



Pfriemler

OK, das ist doch mal ein schöner Schritt ins Dickicht der Templates! Für mich sind Templates noch ein Buch mit sieben Siegeln. Vielleicht bin ich als Tester daher ideal  :o
Geladen, definiert. Ungewohnt, aber durchaus erklärend.
Erster Fehler: Beispiel "motionOnSw": habe in einem Template Attribut "tpl_params" von "ontime brightness" auf "300 20" gesetzt (was falsch ist, denn die Parameter werden erst bei Anwendung geändert). Das folgende ausgewählte "savAs" mit dem von mir gewählten Namen "motionOnSw5min20" wirft allerdings den Fehler Unknown argument savAs, choose one of dismiss savAs save
"save" funktioniert. Wenn ich das template "dismiss"e und anschließend neu lade (edit), stehen die geänderten Werte drin.
Rückgängig gemacht (weil falsch).
über "select" lade ich dann das template und stelle die Parameter über die Änderung der nun verfügbaren Attribute ein?
in tpl_entity müsste demnach die Lampe, tpl_ePeer der Bewegungsmelder, tpl_param_brightness 20 und tpl_param_ontime auf 300 gesetzt werden (als Beispiel)? Nur tpl_eType erschließt sich mir nicht.
Hier wären Dropdowns der Geräte(channels) (für tpl_entity und tpl_ePeer) natürlich genial!

Mit set ht apply (ohne Parameter?) würden die Register geschrieben?

Bin derzeit nur per VPN mit zu Hause verbunden und möchte daher dort nichts kaputt machen, aber wie war das bis hierher?

Im Log stehen jetzt diese vier Zeilen:
2016.12.17 14:39:39 1: PERL WARNING: sort (...) interpreted as function at ./FHEM/98_HMtemplate.pm line 378.
2016.12.17 14:39:39 1: PERL WARNING: sort (...) interpreted as function at ./FHEM/98_HMtemplate.pm line 389.
2016.12.17 14:42:02 1: PERL WARNING: Use of uninitialized value $_ in pattern match (m//) at ./FHEM/98_HMtemplate.pm line 503.
2016.12.17 14:51:15 1: PERL WARNING: Use of uninitialized value $1 in numeric gt (>) at ./FHEM/98_HMtemplate.pm line 120.

Was hat es mit dem "sort (...) interpreted as ..." auf sich?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

martinp876

zum Verständniss: template parameter
um nicht zu viele templates zu haben kann man diese mit parametern versehen. Beispiel onTime. Ich will ein template als Treppenhausschaltung aber mit unterschiedlichen onTime. Also definiere ich dieses Template und setze den Parameter beim zuweisen des Templates.

Beim erstellen des templates (edit) wird festgelegt, welche parameter es geben soll - das trägst du in das Attribut ein - blank-getrennt. Konnen nicht mehr wie 10 sein (utopisch viele).
Bein "Edit" setzt du nun die Werte der Register. Hier kannst du nun
attr ht Reg_OnTime 10
oder

attr ht tpl_params ontime
attr ht Reg_OnTime ontime

dann wird ontime im template nicht definiert sondern erst beim zuweisen. Ganz wichtig zu wissen!

bei select wird nun das template selektiert. Hier ist es nun notwendig, die Parameter zu füllen, damit diese zugewiesen werden können. Hier ist auch jeder parameter ein eigenes Attribut - sonst geht es ja nicht.
tpl_entity, tpl_peer und tpl_type haben drop-downs. Allerdings werden diese nur gefüllt, wenn benötigt.
tpl_type braucht man nur, wenn das template für short oder long zugewiesen werden kann. Ist das template both, also schreibt short und long braucht man type nicht zu wählen. daher auch kein drop-down.
nach select kannst du den type in Internals tpl_type sehen. warum nicht attr? weil es nicht einstellbar ist. Die definition wird beim Definiren des templates gemacht.
Also beim Definieren des Templates legt man fest:
basic: alle nicht-peer asoziierten Register können geschrieben werden
peer_both: alle peer asoziierten Register können geschrieben werden - man muss short und long setzen
peer_short oder long: alle peer asoziierten Register können geschrieben werden - allerdings ohne short/long kennung. man kann also ein template "off" bauen und dann einmal bei long und ein anderes man als short nutzen.

ZitatMit set ht apply (ohne Parameter?) würden die Register geschrieben?
ja -  das template der entity zugewiesen und die Register werden gesetzt. Du kannst es in den Readings sehen.
und jetzt aufgepasst:zugewiesen bedeuted, dass es per HMinfo geprüft werden kann.
Wichtig ist hierbei das Speichern. Das hat sich nicht geändert - das ist immer noch in HMinfo. Du solltest folgendes in HMInfo einrichten
attr hm autoArchive 1
attr hm autoLoadArchive 1_load
attr hm autoUpdate 0:3
attr hm configFilename regConfig.cfg

im File regConfig.cfg werden nun die templates und deren Anwendung gespeichert. autoLoad stellt sicher, dass es nach dem neustart aus dem File wieder gelesen wird.

Die Fehler werde ich mir ansehen. savAs habe ich schon gefunden.





Pfriemler

Danke Martin, dann kann ich (für mich) bestätigen, dass es verständlich ist. Die dropdowns habe ich vorgeschlagen, weil sie bei mir nicht funktionierten (das Verhalten mit den bedarfsgefüllten Dropdowns kennt man ja von expert und autoReadReg, aber genau das klappte hier nicht - wofür wird sort gebraucht, fehlt mir die Routine vll in meiner MyUtils?

Weiterhin sprichst Du von tpl_peer, ich finde aber nur tpl_ePeer. Versehen?

Die Verknüpfung der Templates mit den Geräten und die nachträgliche Überprüfbarkeit der erforderlichen Registermanipulationen sind in der Tat ein großer Vorteil gegenüber der (bisher von mir bevorzugten) handmade-Methode.

Heiß testen kann ich erst nach Weihnachten, bis dahin habe ich nur vpn-Zugriff - wenn es die Wlans unterwegs überhaupt zulassen. Aber sicher sind hier gleich mehr dabei.

Ich sage nur schon mal n dickes Danke für diese Erleichterung (für den template-Dummy wie mich)!



geht nich gips nich

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

martinp876

tpl_ePeer ist schon korrekt. Ich habe einen 2. Namen gebraucht welcher bei select zum Einsatz kommt.

Das mit templates habe ich schn lange in Betrieb. Neu ist eigentlich nur der Editor - ohne den wohl kaum einer templates nutzen will/kann.

Jetzt - hoffe ich - ist es einfach. Zumal auch die Register (meiner Ansicht nach) einfach zu setzen sind. Es gibt drop-down bei literals und einen Kommentar bei werten wenn man ausserhalb des bereichs setzt.

Ein großer Vorteil meiner ansicht nach ist, identisches Verhalten einfach einstellen zu können. Auch das austauschen von devices - oder wiederherstellen nach reset. Hat man alles durchspezifiziert kann man alles wieder herstellen.

Das Sichern der gespeicherten Templates nicht vergessen. Stellt man autoarchive ein wird es bei neuerungen überschrieben - also auch gelöscht oder verfälscht. also immer wieder einmal eine Sicherung! sonst kann es schief gehen.

martinp876


Wuppi68

Hallo Martin,

danke für das Modul :up:

es kommen aber beim Laden noch ein paar Kleinigkeiten

PERL WARNING: sort (...) interpreted as function at ./FHEM/98_HMtemplate.pm line 378.
PERL WARNING: sort (...) interpreted as function at ./FHEM/98_HMtemplate.pm line 389.
FHEM unter Proxmox als VM

martinp876

Danke, habe ich gesehen. Unproblematisch, werde mich nächste Woche darum kümmern

Pfriemler

#8
Moinsen allseits,
nach dem gestrigen FHEM-Updates (inkl. 98_HMtemplates.pm) bekomme ich bei jedem Aufruf des template-Editors solche Fehlerblöcke in der fhem-jjjj-mm.log:
2016.12.27 13:14:24 1: General start
BlStopDnLg
     :BlStopDnSh
     :BlStopUpLg
     :BlStopUpSh
     :DimOff
     :DimOn
     :SwCondAbove
     :SwCondBelow
     :SwOff
     :SwOn
     :SwOnCond
     :SwToggle
     :autoOff
     :motionOnDim
     :motionOnSw
     :wmClose
     :wmClosed
     :wmLock
     :wmOpen


Das ist allein nicht problematisch, aber im Zusammenhang mit einem neuen Frontend, welches (vermutlich) in allen Entities nach einem Attribut fragt, vermehren sich diese Blöcke im Log bei mir gerade wie blöde...

Mich wundert der verbose-Level. Versehen im letzten Update?

edit:
Der Modulentwickler lässt initial jsonlist2 aufrufen. Das erzeugt auch händisch reproduzierbar das Fehlerbild erneut.

Aufgefallen ist mir zudem, dass ich die Templateeditor-Def nicht (mehr) mit einem "room" attributieren kann - Fehlermeldung "not an option in this state". Hängt vielleicht beides mit der HMtemplate_Attr ab Zeile 80 zusammen?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

martinp876

War nur ein vergessener Log. Morgen Updates.

Pfriemler

Ja, es funktioniert. Eine nette Ausfüllhilfe und ein einfaches Umsetzen dank Dropdownlisten, wennauch ein bisschen störrisch (man muss zuerst das dritte Attribut tpl_entity setzen, dann klappt's auch mit den Peers - eigentlich ganz logisch, so what?).

Zween Dinge für heute:
1. Wie kann ich ein bestehendes template erweitern und Register und Parameter hinzufügen?
2. Nach der Verwendung (select, apply, dismiss) eines templates bleiben "structural changes" in FHEM (rotes Fragezeichen). Speichern ist kontraproduktiv (wird bei mir aber automatisch gemacht), beim Neustart hagelte es dann Fehlermeldungen über unzutreffende Attribute. Kriegt man spätestens durch Löschen und Neuanlegen von hmt geregelt, saveConfig und Neustart tun's auch, kann aber nicht der Weisheit allerletzter Pfiff sein. Beispiel:
Messages collected while initializing FHEM:
configfile: hmted: unknown attribute tpl_ePeer. Type 'attr hmted ?' for a detailed list.
hmted: unknown attribute tpl_eType. Type 'attr hmted ?' for a detailed list.
hmted: unknown attribute tpl_entity. Type 'attr hmted ?' for a detailed list.
hmted: unknown attribute tpl_param_brightness. Type 'attr hmted ?' for a detailed list.
hmted: unknown attribute tpl_param_ontime. Type 'attr hmted ?' for a detailed list.


Gibt es eine Möglichkeit, die "structural changes" händisch zu resetten?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."