HMtemplate mit Bedingung(en)

Begonnen von arthur_dent_2015, 06 April 2018, 19:39:17

Vorheriges Thema - Nächstes Thema

arthur_dent_2015

Moin zusammen,
ich habe bei mir im Flur einen HM Bewegungsmelder der mit einem HM UP Schalter gepeert ist und so das Licht, unabhängig von FHEM, ein- und ausschaltet:

Schalter_Flur       |BM_HM_Flur:short|motionOnSw|ontime:65 brightness:31

Nun möchte ich zusätzlich den Türkontakt der Wohnungstür mit einbinden, da der BM mehrere Sekunden braucht Bewegung zu erkennen. Dieser soll allerdings auch nur schalten wenn der BM brightness < 31 meldet. Das soll natürlich auch mit peering und templateset gemacht werden. Eine passende Vorlage habe ich leider nicht gefunden :(
Kann mir mal jemand auf die Sprünge helfen?
Danke & Gruß
Arthur

martinp876

Das wir so nicht funktionieren.
Direkte Aktionen (also ohne Zentrale) beschränken sich auf die Informationen welche ein Device oder ein Device-Paar hat.
Du willst (so habe ich es verstanden) dass
BM-Brightness < 31
TürSensor:trigger
Aktion: Lichtschalter: an

Es wäre notwendig, dass der Lichtschalter die Brightness des BM kennt und diesen in die Entscheidung der Reaktion auf den Trigger des TürSensors nutzt. Das kann er nicht.
Notwendig wäre es, dass der Sensor die Brightness zusammen mit dem Trigger schickt. Sensoren tauschen aber keine daten mit anderen Sensoren aus.
Weiter wird der Lichtschalter nicht über die Brightness informiert - ausser bei einem Trigger des BM. Und das ist zu spät.


Du hast also 2 Möglichkeiten:
1) mache es über die Zentrale
2) finde heraus, warum dein BM so langsam ist. Das ist m.e. das eigentliche Problem. Eine solche Verzögerung kann und darf nicht sein.

arthur_dent_2015

Hallo Martin,
ja, hast Du richtig verstanden, genau so soll es sein.
Da der BM nur auf Wärmeschwankungen reagieren kann, kann er erst eine Bewegung erkennen wenn die Tür vollständig geöffnet ist. Und das dauert eine (gefühlte) Ewigkeit :(
Könnte man evtl. den Türkontakt mit dem BM, es ist übrigens ein HM-Sen-MDIR-WM55, peeren und diesen zum Senden des Einschalttriggers, wenn brightness <31, bewegen ?
Oder umgekehrt, der BM übermittelt dem HM-SEC-SCo den Helligkeitswert und dieser tut gegenüber dem Schalter so als wäre er ein BM?
Alternativ bliebe sonst wohl nur die Möglichkeit einen Wandtaster in Türnähe anzubringen und diesen mit dem Schalter zu peeren, wenn man bei einem Absturz von FHEM nicht im Dunklen stehen will..
Die Lösung über FHEM will ich als Backup parallel impementieren.
DOIF (Türkontakt open or BM motion) and BM brigthness < 31 Schalter on-for-timer 65. Kann es da zu Wechselwirkungen kommen? 
Gruß
Arthur

P.S. Wenn ich den brigthness Wert des BM ändern will, kann ich den mit templateset einfach überschreiben?

martinp876

Du kannst das template einfach mit dem neuen wert zuweisen.
Die Benutzer Führung am Device ist schlecht bis nicht vorhanden. Schöner ist es mit hmtemplate. Du kannst das Template selektieren und dann den Kanal, also den bm. Dann aendern und zuweisen.

Für deine Aufgabenstellung kann ich mir recht komplexe lösungen vorstellen. Mit dimmern und virtuellen kanäle . aber alles nichts einfaches, und nicht 100%.

arthur_dent_2015

Hallo Martin,
das hat funktioniert.
Ich gebe Dir Recht, die Benutzerführung im HM_info ist eher nicht vorhanden, ohne Wiki ist man aufgeschmissen. HMtemplate ist da ein guter Ansatz. Allerdings sind die Bezeichnungen eher verwirrend :-[
Das source das eigentliche Ziel und peer der Ausgangspunkt der Aktion ist, musste sich mir erst mal erschließen. Trotzdem habe ich es nicht hinbekommen damit ein template zu basteln  :(
get reginfo zeigt mir eine leere Liste an, apply bietet keine Auswahl auf welche(s) device(s) es angewendet werden soll... Für tpl-type habe ich keine Erklärung gefunden, vermutlich peer-long und peer-short, scheint aber keine Auswirkungen zu haben. Immerhin ist es mir damit gelungen ein funktionierendes template mit on-for-time zu erstellen. Allerdings zeigt mi HMteplate einen Fehler an:

usage_1 Schalter_Flur |HM_WT3_Btn2:lon|OnTime:65 2018-04-08 13:01:17

In der regconfig steht es korrekt drin...
Meine vermurksten Gehversuche habe ich weder in HMTemplate noch hminfo gelöscht bekommen :o Wäre ganz schön wenn die beiden Module etwas gesprächiger würden ;)
template deleted
template in use
template what ever...
oder so.
Die templates sind jedenfalls eine sehr gute Idee  8) Damit kann man einige Grundfunktionen, im Falle eines Ausfalls von FHEM, aufrecht erhalten :) Ich würde mich da gerne weiter einarbeiten, allein mir fehlt die Zeit :(
Vielleicht steuert die FHEM Gemeinde ja auch ein paar mehr Beispiele zu HMtemplate bei....
Mein onfortime sieht übrigens so aus:

set hm templateDef onfortime OnTime "Switch: on-for-time" ActionType:jmpToTarget SwJtOn:no OnTime:p0 OffTime:unused SwJtDlyOn:on SwJtOff:dlyOn SwJtDlyOff:dlyOn

Kannst Du gerne übernehmen.
Gruß
Arthur

P.S. wenn Dir noch was zu meinem Problem einfällt, immer her damit ;)

martinp876

nun, man kann es sicher noch verbessern (ganz sicher!).
ZitatDas source das eigentliche Ziel und peer der Ausgangspunkt der Aktion ist,
Ich hatte mit der Template definition begonnen - nicht der Zuweisung. Source ist die Quelle welche für die "Gundbelegung" der Register genutzt wird. Beim Zuweisen ist es natürlich "Destination".
mit peer verhält es sich ebenso. "Ausgangspunkt" verstehe ich nicht.
ZitatFür tpl-type habe ich keine Erklärung gefunden,
das gibt es zum einen in der Template beschreibung un HMInfo. Und weiter ist
a) in den Internals beschrieben, was man in welcher Reihenfolge machen soll
b) eine Auswahlliste, was man setzen kann in den Attributen.
Ich gehe immernoch davon aus, dass man vorab wissen sollte, was ein peer und was short und long ist. Das muss man einmal generell verstehen - und an einer Zentrale Stelle lernen.
Zitatpeer-long und peer-short, scheint aber keine Auswirkungen zu haben
Ein Template kann "basic" (also ohne peer) oder mit peer sein. Wenn es mit peer ist kann es short/long oder both sein. Bein Definieren des Templates kannst du es auswählen. Wenn das Template definiert ist, kann man es nicht mehr ändern.
Wenn es "both" ist werden Register für short und long beschrieben. Also ein Template für beides in einem.
Wenn es "short" oder "long" ist kannst du es dem peer short ODER long zuweisen. Oder beiden. dann musst du es 2-mal zuweisen.
Ich habe bspw templates für beides (sh und lg). Das erste ist immer die Reaktion auf Short, das 2. auf long
SwToggleIgnore => toggle bei Short, keine Aktion bei long
... das kann ich dann einem Channel/peer zuweisen.
Alternativ kann man es separieren
SwToggle
SwIgnore
... das kann ich nun tauschen, mischen,... Ich muss es einem channel/peer/type zuweisen (
LichtFlur/Taster1/short => SwIgnore
LichtFlur/Taster1/Long=> SwToggle
LichtWohn/Taster1/short => SwToggle
LichtWohn/Taster1/Long => SwIgnore
usw.

ZitatAllerdings zeigt mi HMteplate einen Fehler an:
wo ist der Fehler?
Zitathabe ich weder in HMTemplate noch hminfo gelöscht bekommen
1) löschen geht am Device
set <channel> templateDel <select one of the assigned templates>
=> geht hier am besten, da ich eine ordentliche Pull-Down liste erstellen kann.
2) in HMInfo: templateDel <entity> <template> <peer:[long|short]>
siehe Commandref
3) Parameter im template tauschen: einfach überschreiben.

ZitatWäre ganz schön wenn die beiden Module etwas gesprächiger würden
wenn sich einen Nutzung durchsetzt und ideen und Anfragen kommen wird auch die Motivation und die Ideen kommen, gerne.


ZitatVielleicht steuert die FHEM Gemeinde ja auch ein paar mehr Beispiele zu HMtemplate bei....
das war die Idee

Hier ein paar Beispiele
set hm templateDef motionOnDim ontime:brightness "Dimmer: on for time if MDIR-brightness below level" DimJtOn:on OffTime:unused ActionTypeDim:jmpToTarget CtDlyOn:ltLo DimJtDlyOn:rampOn CtRampOff:ltLo DimJtRampOff:dlyOn CtOn:ltLo DimJtDlyOff:dlyOn CtRampOn:ltLo CtOff:ltLo CtValLo:p1 OnTime:p0 DimJtOff:dlyOn DimJtRampOn:on CtDlyOff:ltLo
set hm templateDef motionOnSw ontime:brightness "Switch: on for time if MDIR-brightness below level" SwJtDlyOn:on CtValLo:p1 SwJtDlyOff:dlyOn CtDlyOn:ltLo CtOff:ltLo SwJtOff:dlyOn OffTime:unused SwJtOn:on CtDlyOff:ltLo ActionType:jmpToTarget OnTime:p0 CtOn:ltLo
set hm templateDef SwToggleToggle timeOn "sh:toggle lg:toggle" shOnTimeMode:absolut lgSwJtOn:dlyOff lgActionType:jmpToTarget shOnTime:p0 shOffTime:unused lgOffDly:0 lgOffTimeMode:absolut lgSwJtDlyOff:off shSwJtDlyOn:on shSwJtOff:dlyOn lgMultiExec:off lgSwJtDlyOn:on lgOnTimeMode:absolut lgOffTime:unused shOffTimeMode:absolut lgOnDly:0 shActionType:jmpToTarget shOnDly:0 lgOnTime:p0 shOffDly:0 shSwJtDlyOff:off shSwJtOn:dlyOff shMultiExec:off lgSwJtOff:dlyOn
set hm templateDef SwToggleIgnore timeOn "sh:toggle lg:ignore" shOffDly:0 shOnTime:p0 shOffTime:unused shActionType:jmpToTarget shOnDly:0 lgActionType:off shOffTimeMode:absolut shOnTimeMode:absolut shMultiExec:off shSwJtDlyOn:on shSwJtOff:dlyOn shSwJtOn:dlyOff shSwJtDlyOff:off
set hm templateDef SwToggle  "Switch: toggle on trigger" SwJtDlyOff:off SwJtDlyOn:on SwJtOn:dlyOff OffTime:unused OnTime:unused SwJtOff:dlyOn ActionType:jmpToTarget
set hm templateDef BlSetDrive up:down:turn "drive times up, down and turn plus gen defaults" localResDis:off confBtnTime:permanent statusInfoRandom:0 sign:off driveUp:p0 statusInfoMinDly:3 driveTurn:p2 driveDown:p1 intKeyVisib:visib refRunCounter:0 transmitTryMax:6
set hm templateDef HeatDefDev BtnLock "Default RT Device register" localResDis:off lowBatLimitRT:2.1 cyclicInfoMsg:on backOnTime:10 burstRx:on modusBtnLock:off globalBtnLock:off btnLock:p0 cyclicInfoMsgDis:0
set hm templateDef HeatDefault boost:valveMax "myDefault RT settings, enter boostTime and valveMax" decalcTime:11:00 tempMin:4.5 reguIntI:20 noMinMax4Manu:off showWeekday:off daylightSaveTime:on valveMaxPos:p1 modePrioParty:all nightTemp:17 reguExtP:25 reguIntPstart:5 showInfo:time boostPeriod:p0 reguIntP:25 regAdaptive:offDeter reguExtI:20 reguExtPstart:5 decalcWeekday:Sat valveErrPos:15 dayTemp:21 boostPos:30 tempOffset:0.0K btnNoBckLight:off valveOffsetRt:0 modePrioManu:all tempMax:30.5
set hm templateDef SwMdirNew brightness:ontime "handle motion detector trigger" SwJtDlyOff:dlyOff CtValLo:70 CtOff:ltHi CtDlyOff:ltHi ActionType:jmpToTarget CtValHi:p0 OnTime:0 OffDly:p1 SwJtDlyOn:no OnTimeMode:minimal CtDlyOn:ltHi OffTime:unused SwJtOff:dlyOff SwJtOn:no OffTimeMode:minimal MultiExec:off OnDly:0 CtOn:ltHi


arthur_dent_2015

Zitat von: martinp876 am 08 April 2018, 16:12:08
"Ausgangspunkt" verstehe ich nicht.
Das auslösende device /peer meine ich damit.
Zitat von: martinp876 am 08 April 2018, 16:12:08
das gibt es zum einen in der Template beschreibung un HMInfo.
Ich habe die Wikis zu Homematic, HMinfo, HMtemplates erstellen, Homematic Registerprogrammierung und (die wenigen) Forenbeiträge dazu gelesen. Je mehr ich gelesen hab, um so verwirrter war ich  :-[ Erst Dein Forenbeitrag mit der step by step Beschreibung hat mir ein Licht aufgehen lassen :)
Eigene Programme zu beschreiben, so das sie unwissende begreifen, ist nahezu unmöglich. Man setzt viel zu viel Wissen voraus, lässt, vermeintlich, unwichtige Dinge weg, etc. Kenn ich aus eigener Erfahrung ;)
Zitat von: martinp876 am 08 April 2018, 16:12:08
Ein Template kann "basic" (also ohne peer) oder mit peer sein. Wenn es mit peer ist kann es short/long oder both sein. Bein Definieren des Templates kannst du es auswählen. Wenn das Template definiert ist, kann man es nicht mehr ändern.
Wenn es "both" ist werden Register für short und long beschrieben. Also ein Template für beides in einem.
Wenn es "short" oder "long" ist kannst du es dem peer short ODER long zuweisen. Oder beiden. dann musst du es 2-mal zuweisen.
Ich habe bspw templates für beides (sh und lg). Das erste ist immer die Reaktion auf Short, das 2. auf long
okay, verstanden :)
Zitat von: martinp876 am 08 April 2018, 16:12:08
wo ist der Fehler?
das long ist abgeschnitten. Ist dann wohl nur ein Schönheitsfehler...
Zitat von: martinp876 am 08 April 2018, 16:12:08
1) löschen geht am Device
set <channel> templateDel <select one of the assigned templates>
=> geht hier am besten, da ich eine ordentliche Pull-Down liste erstellen kann.
2) in HMInfo: templateDel <entity> <template> <peer:[long|short]>
siehe Commandref
3) Parameter im template tauschen: einfach überschreiben.
okay, mein Fehler,  hab ich wohl überlesen... :(
Zitat von: martinp876 am 08 April 2018, 16:12:08
wenn sich einen Nutzung durchsetzt und ideen und Anfragen kommen wird auch die Motivation und die Ideen kommen, gerne.
Das Modul muss bekannter werden. Nagel doch mal Deine Beschreibung dazu im Forum ganz oben an! so Du die Berechtigung dazu hast. Ich bin da auch nur ganz zufällig drauf gestoßen....
Zitat von: martinp876 am 08 April 2018, 16:12:08
das war die Idee
siehe oben.
Zitat von: martinp876 am 08 April 2018, 16:12:08
Hier ein paar Beispiele
Pack die Beispiel doch mal mit in das Modul. Dazu noch eine etwas längere Beschreibung damit auch die ganz Dummen (wie ich) verstehen was das template genau macht und wie man es benutzt..

Das Modul ist Klasse! Danke für Deine Arbeit daran. Aber, Du hast die Einstiegshürde auch ziemlich hoch gelegt ;)
Gruß
Arthur

martinp876

nun, ich habe schon für das Modul geworben.
Ich bin immer noch der Ansicht, dass ein normaler user NUR templates nutzen sollte und ein Fortgeschrittener User templates definieren kann, sie aber auch nutzt. Also
nutzen: jeder und quasi nut
Erstellen: Erfahrene erstellen templates für Anfänger.

Das Verständniss scheint aber zu fehlen, ich kann es nicht rüberbringen, es liest keiner ode rich liege schlicht falsch.

Jedenfalls habe ich nun anstelle von "apply" ein "assign" eingeführt - und ein "unassign" zum Entfernen einer Zuweisung.