HomeMatic HMinfo Templates erstellen
Mit diesem kleinen HowTo soll gezeigt werden, wie ein eigenes Template für die Konfiguration von Aktoren (Type switch) mit Tastern (Type remote) erstellt werden kann.
Grundlegende Infos findet man hier: HomeMatic_HMInfo
Kurzerklärung Templates
Templates erleichtern den Umgang mit Register. Wie in HMinfo erläutert muss man den möglichen Umfang eines einzelnen Templates verstehen. Ein Template beinhaltet mindestens ein Register, typisch sicher mehrere. Maximal beschränkt sich ein einzelnes Template auf
- eine Entity (einen Kanal)
- 0-Template: alle Register die NICHT einem Peer zugeordnet sind
- peer-Template: Register die einem Peer zugeordnet sind
- short/long-Template: Alle Register eines Peers für short ODER long. Beschrieben wird das short ODER long Verhalten
- both-Template: Alle Register eines Peers - beschrieben wird short UND long Verhalten
Wie feingranular man ein Template erstellt ist Geschmackssache. Man kann einer Entity beliebig viele Templates zuweisen. Wenn sich Inhalte überschneiden kommt es zu Problemen, welche mit configCheck aufgedeckt werden.
Erstellen eines Templates
Ziel ist es die Funktion der Tasten zu ändern/tauschen. Peert man das Tastenpaar 5/6 eines HM-PB-6-WM55 mit dem Channel 1 von einem HM-LC-SW2-FM mittels
set RC61_5 peerChan 0 SW01_Sw01 dual set both
entsteht der Ausgangszustand: Taste 5 RC61_5 schaltet SW01_Sw01 aus. Taste 6 RC61_6 schaltet SW01_Sw01 ein.
Die regTable dazu sieht so aus:
RC61_5 RC61_6 lg sh lg sh ActionType jmpToTarget jmpToTarget jmpToTarget jmpToTarget CtDlyOff geLo geLo geLo geLo CtDlyOn geLo geLo geLo geLo CtOff geLo geLo geLo geLo CtOn geLo geLo geLo geLo CtValHi 100 100 100 100 CtValLo 50 50 50 50 MultiExec on off on off OffDly [s] 0 0 0 0 OffTime unused unused unused unused OffTimeMode absolut absolut absolut absolut OnDly [s] 0 0 0 0 OnTime unused unused unused unused OnTimeMode absolut absolut absolut absolut SwJtDlyOff off off on on SwJtDlyOn off off on on SwJtOff off off dlyOn dlyOn SwJtOn dlyOff dlyOff on on
Damit der gewünschte Effekt entsteht sollen die Register wie folgt geändert werden, es werden nur die Register für sh geändert!
SwJtDlyOff off no on no SwJtDlyOn off no on no SwJtOff off on dlyOn no SwJtOn dlyOff no on off
Jetzt werden zwei Templates definiert
set hminfo templateDef tmpl_SwOnOnly 0 "Template für nur an" ActionType:jmpToTarget SwJtDlyOff:no SwJtDlyOn:no SwJtOff:on SwJtOn:no set hminfo templateDef tmpl_SwOffOnly 0 "Template für nur aus" ActionType:jmpToTarget SwJtDlyOff:no SwJtDlyOn:no SwJtOff:no SwJtOn:off
und entsprechend übertragen
set hm templateSet SW01_Sw01 tmpl_SwOnOnly RC61_5:short set hm templateSet SW01_Sw01 tmpl_SwOffOnly RC61_6:short
Die Konfiguration kann auf unterschiedliche Art gesichert werden, z.B:
set hm saveConfig config.txt
schreibt alles (Die gesamte Konfiguration die hmInfo aus FHEM ermitteln kann - also nicht aus den Geräten selbst) in eine Datei /opt/fhem/config.txt.
Aus der Datei können im Bedarfsfall einzelne Befehle zum Setzen der Register herausgezogen werden.
Weitere Möglichkeiten bietet das Modul mit archConfig
Templates Repository
Hier werden einige Templates angeboten, welche im System integriert werden können
Generelle Einstellungen
define hm HMinfo attr hm autoArchive 1 attr hm autoLoadArchive 1_load attr hm autoUpdate 0:3 attr hm configFilename regConfig.cfg
switch Templates
long-short
Templates zum Setzen der Condition-Table
set hm templateDef SwOnCond level:cond "switch: execute only if condition [geLo|ltLo] level is below limit" CtValLo:p0 CtOn:p1 CtOff:p1 CtDlyOn:p1 CtDlyOff:p1 set hm templateDef SwCondAbove condition "Switch: execute only if condition level is above limit" CtValLo:p0 CtOn:geLo CtOff:geLo CtDlyOn:geLo CtDlyOff:geLo set hm templateDef SwCondBelow condition "Switch: execute only if condition level is below limit" CtValLo:p0 CtOn:ltLo CtOff:ltLo CtDlyOn:ltLo CtDlyOff:ltLo set hm templateDef autoOff time "staircase - auto off after -time-, extend time with each trigger" SwJtDlyOn:no ActionType:jmpToTarget SwJtDlyOff:dlyOn OnTime:p0 OffTime:unused SwJtOn:on SwJtOff:dlyOn
Templates zur Definition einer Aktion
set hm templateDef SwIgnore 0 "ignore event" ActionType:off set hm templateDef SwOff 0 "Switch: off if trigger" SwJtDlyOn:dlyOff ActionType:jmpToTarget SwJtDlyOff:off OnTime:unused OffTime:unused SwJtOn:dlyOff SwJtOff:no set hm templateDef SwOn 0 "Switch: on if trigger" SwJtDlyOn:on ActionType:jmpToTarget SwJtDlyOff:dlyOn OnTime:unused OffTime:unused SwJtOn:no SwJtOff:dlyOn set hm templateDef SwToggle 0 "Switch: toggle on trigger" SwJtDlyOn:on ActionType:jmpToTarget SwJtDlyOff:off OnTime:unused OffTime:unused SwJtOn:dlyOff SwJtOff:dlyOn
Beispiel Nutzung: nutze den Trigger "short" des Peers "MeinPeer" wenn der Level größer als 30 ist. Als Aktion ist ein 2. Template zum Einschalten aktiviert. Bei langem Trigger soll ausgeschaltet werden
set hm templateSet <MeinLicht> SwOnCond <MeinPeer:short> 30 gtLo set hm templateSet <MeinLicht> SwOn <MeinPeer:short> set hm templateSet <MeinLicht> SwOff <MeinPeer:long>
both
Both ist ein kompakterer Ansatz - man definiert das komplette Verhalten eines Peers, also short und long in einem.
set hm templateDef SwMdir onTime:minBright "switch action when peered motionDetector" shOnDly:0 shSwJtOn:no shOffDly:p0 lgActionType:off shCtDlyOff:ltHi shOffTimeMode:minimal shCtValLo:p1 lgMultiExec:off shOnTime:0 shCtValHi:255 shOffTime:unused shMultiExec:off shOnTimeMode:minimal shSwJtOff:dlyOff shSwJtDlyOff:dlyOff shCtOff:ltLo shActionType:jmpToTarget shCtOn:ltLo shSwJtDlyOn:no shCtDlyOn:ltLo set hm templateDef SwSonLoff 0 "Switch: shortOn, long Off" lgSwJtOff:no lgOffTime:unused shOffTime:unused shSwJtOn:no lgSwJtOn:dlyOff lgActionType:jmpToTarget shSwJtOff:dlyOn shSwJtDlyOff:dlyOn shActionType:jmpToTarget lgSwJtDlyOff:off shSwJtDlyOn:on lgSwJtDlyOn:dlyOff lgOnTime:unused shOnTime:unused set hm templateDef SwSoffLignore 0 "Switch: shortOff, long Ignore" shOffTime:unused shSwJtOn:dlyOff lgActionType:off shSwJtDlyOff:off shSwJtOff:no shActionType:jmpToTarget shSwJtDlyOn:dlyOff shOnTime:unused
Beispiel: Konfiguration eines Aussenlichts mit Motion-Detector. Erzielt werden soll das Einschalten bei Dunkelheit (brght kleiner 70) für 30sec. Per Tastendruck soll das Licht eingeschaltet werden und endlos anbleiben (Ausschalten nicht vergessen). Alternativ einschalten für einige Stunden - das sollte auch reichen - und es geht irgendwann doch aus. Im Beispiel für Button2 4 Stunden.
set hm templateSet <MeinLicht> SwMdir <MotionPeer:both> 30 70 set hm templateSet <MeinLicht> SwSonLoff <ButtonPeer:both> set hm templateSet <MeinLicht> autoOff <Button2Peer:short> 14400
Dimmer Templates
long-short
set hm templateDef DimDown rampTime "ramp down to 0, ramp valiable" DimJtRampOff:off OnTime:unused DimJtOn:dlyOff OffTime:unused OffDlyStep:5 DimJtOff:rampOff OffTimeMode:absolut OffDlyBlink:on OnDlyMode:setToOff DimJtRampOn:dlyOff OffDlyOldTime:0.4 RampOnTime:p0 DimMaxLvl:100 OnTimeMode:absolut RampSstep:5 OnLvlPrio:high DimMinLvl:0 DimStep:5 DimJtDlyOff:rampOff OffLevel:0 OnMinLevel:10 ActionTypeDim:jmpToTarget OnDly:0 OffDly:0 OffDlyNewTime:0.4 RampOffTime:p0 OnLevel:100 DimJtDlyOn:dlyOff set hm templateDef DimOff 0 "Dimmer: off if trigger" DimJtDlyOff:off DimJtRampOff:dlyOff DimJtOn:dlyOff OnTime:unused ActionTypeDim:jmpToTarget DimJtOff:no OffTime:unused DimJtRampOn:dlyOff DimJtDlyOn:dlyOff set hm templateDef DimOn 0 "Dimmer: on if trigger" DimJtDlyOff:dlyOn DimJtRampOff:dlyOn DimJtOn:no OnTime:unused ActionTypeDim:jmpToTarget DimJtOff:dlyOn OffTime:unused DimJtRampOn:dlyOn DimJtDlyOn:on set hm templateDef DimUp onLevel:rampTime:onTime "ramp up soft" DimJtRampOff:dlyOn OnTime:p2 DimJtOn:rampOn OffTime:unused OffDlyStep:5 DimJtOff:dlyOn OffTimeMode:absolut OffDlyBlink:on OnDlyMode:setToOff DimJtRampOn:on OffDlyOldTime:0.4 RampOnTime:p1 DimMaxLvl:p0 OnTimeMode:absolut RampSstep:5 OnLvlPrio:high DimMinLvl:0 DimStep:5 DimJtDlyOff:dlyOn OffLevel:0 OnMinLevel:10 ActionTypeDim:jmpToTarget OnDly:0 OffDly:0 OffDlyNewTime:0.4 RampOffTime:p1 OnLevel:p0 DimJtDlyOn:rampOn
both
Blind (Rollo) Templates
devicelevel
set hm templateDef BlSetDrive up:down:turn "drive times up, down and turn plus gen defaults" statusInfoRandom:0 localResDis:off refRunCounter:0 statusInfoMinDly:3 driveUp:p0 driveDown:p1 transmitTryMax:6 driveTurn:p2 intKeyVisib:visib confBtnTime:permanent sign:off set hm templateSet Blind BlSetDrive 100 105 0.5 # Setze Fahrzeiten auf 100s, runter 105s, turn 0.5s
long-short
set hm templateDef BlStopDnLg 0 "Blind: stop drive on any key - for long drive down" BlJtOn:dlyOff BlJtDlyOff:refOff BlJtDlyOn:dlyOff ActionType:jmpToTarget BlJtOff:dlyOff BlJtRampOff:rampOff BlJtRampOn:on BlJtRefOn:on BlJtRefOff:rampOff set hm templateDef BlStopDnSh 0 "Blind: stop drive on any key - for short drive down" BlJtOn:dlyOff BlJtDlyOff:refOff BlJtDlyOn:dlyOff ActionType:jmpToTarget BlJtOff:dlyOff BlJtRampOff:off BlJtRampOn:on BlJtRefOn:on BlJtRefOff:rampOff set hm templateDef BlStopUpLg 0 "Blind: stop drive on any key - for long drive up" BlJtOn:dlyOn BlJtDlyOff:dlyOn BlJtDlyOn:refOn ActionType:jmpToTarget BlJtOff:dlyOn BlJtRampOff:off BlJtRampOn:rampOn BlJtRefOn:rampOn BlJtRefOff:off set hm templateDef BlStopUpSh 0 "Blind: stop drive on" BlJtOn:dlyOn BlJtDlyOff:dlyOn BlJtDlyOn:refOn ActionType:jmpToTarget BlJtOff:dlyOn BlJtRampOff:off BlJtRampOn:on BlJtRefOn:rampOn BlJtRefOff:off set hm templateDef BlToggle 0 "toggle mein Rollo" BlJtDlyOff:no BlJtOn:dlyOff ActionType:jmpToTarget BlJtDlyOn:no BlJtOff:dlyOn BlJtRampOff:dlyOn BlJtRampOn:dlyOff BlJtRefOn:dlyOff BlJtRefOff:dlyOn
both
set hm templateDef BlSmartStopDn 0 "from Master BlSmartStopDn > FB_09:both" shBlJtOff:dlyOff lgCtDlyOff:geLo lgDriveMode:direct lgOffLevel:0 lgActionType:jmpToTarget shBlJtDlyOn:dlyOff shOffLevel:0 lgCtValLo:50 lgCtRefOn:geLo lgBlJtOff:dlyOff shCtDlyOff:geLo shOffTimeMode:absolut lgOnLevel:100 lgBlJtDlyOn:dlyOff lgBlJtDlyOff:refOff shBlJtDlyOff:refOff lgMultiExec:on lgOffDly:0 lgBlJtRefOff:rampOff shCtValHi:100 lgMaxTimeF:0.5 shBlJtRefOn:on lgCtValHi:100 shBlJtRampOff:off shCtRefOff:geLo shCtRampOn:geLo shMaxTimeF:unused shOnTimeMode:absolut shBlJtRefOff:rampOff lgOnTime:unused lgCtRefOff:geLo lgOnTimeMode:absolut lgCtRampOff:geLo shOnDly:0 lgCtRampOn:geLo lgOffTime:unused lgBlJtRefOn:on shOffDly:0 shCtRefOn:geLo lgCtOff:geLo lgCtOn:geLo shCtValLo:50 lgBlJtOn:dlyOff lgOnDly:0 lgOffTimeMode:absolut shBlJtRampOn:on shBlJtOn:dlyOff shOnTime:unused shDriveMode:direct shOffTime:unused lgCtDlyOn:geLo shOnLevel:100 lgBlJtRampOn:on shCtRampOff:geLo shMultiExec:off shCtOff:geLo shActionType:jmpToTarget shCtOn:geLo shCtDlyOn:geLo lgBlJtRampOff:rampOff set hm templateDef BlSmartStopUp 0 "from Master BlSmartStopUp > FB_10:both" shBlJtOff:dlyOn lgCtDlyOff:geLo lgDriveMode:direct lgOffLevel:0 lgActionType:jmpToTarget shBlJtDlyOn:refOn shOffLevel:0 lgCtValLo:50 lgCtRefOn:geLo lgBlJtOff:dlyOn shCtDlyOff:geLo lgOnLevel:100 shOffTimeMode:absolut lgBlJtDlyOff:dlyOn lgBlJtDlyOn:refOn shBlJtDlyOff:dlyOn lgMultiExec:on lgOffDly:0 lgBlJtRefOff:off shCtValHi:100 lgMaxTimeF:0.5 shBlJtRefOn:rampOn lgCtValHi:100 shCtRefOff:geLo shCtRampOn:geLo shBlJtRampOff:off shMaxTimeF:unused shBlJtRefOff:off shOnTimeMode:absolut lgCtRefOff:geLo lgOnTime:unused lgOnTimeMode:absolut lgCtRampOff:geLo lgCtRampOn:geLo shOnDly:0 lgOffTime:unused lgBlJtRefOn:rampOn shOffDly:0 shCtRefOn:geLo lgCtOff:geLo lgCtOn:geLo shCtValLo:50 lgBlJtOn:dlyOn lgOnDly:0 lgOffTimeMode:absolut shBlJtRampOn:on shBlJtOn:dlyOn shOnTime:unused shDriveMode:direct shOffTime:unused lgCtDlyOn:geLo shOnLevel:100 lgBlJtRampOn:rampOn shCtRampOff:geLo shMultiExec:off shCtOff:geLo shActionType:jmpToTarget shCtOn:geLo shCtDlyOn:geLo lgBlJtRampOff:off
Heizung RT Templates
Man muss hier die einzelnen Kanäle unterscheiden. Da sich die Register unterscheiden sind für jeden Kanal eigene Templates erstellt worden. Achtung: Die Templates sind in diesem Fall Beispiele. Evtl sind andere Einstellungen gewünscht.
RT-device
Selektierbar ist, ob Buttonlock ein oder ausgeschaltet sein soll. Mit Beispielnutzung
set hm templateDef HeatDefDev BtnLock "Default RT Device register" globalBtnLock:off modusBtnLock:off localResDis:off cyclicInfoMsg:on backOnTime:10 lowBatLimitRT:2.1 burstRx:on cyclicInfoMsgDis:0 btnLock:p0
set hm templateSet rtDevice HeatDefDev 0 on # buttonLock ist eingeschaltet
Eine Alternative - wenn man auch den Batterielevel selektiv einstellen will. Da es bei allen meinen RTs identisch ist stelle ich es im Define ein, nicht im Set. Aber dennoch hier das Beispiel
set hm templateDef HeatDefDev BtnLock:BatLevel "Default RT Device register" globalBtnLock:off modusBtnLock:off localResDis:off cyclicInfoMsg:on backOnTime:10 lowBatLimitRT:p1 burstRx:on cyclicInfoMsgDis:0 btnLock:p0
set hm templateSet rtDevice HeatDefDev 0 2.3 on # buttonLock ist eingeschaltet, BatMinLevel ist 2.3V
RT-Clima
set hm templateDef HeatDefault boost "myDefault RT settings, enter boostTime" reguIntI:20 regAdaptive:offDeter nightTemp:17 tempOffset:0.0K dayTemp:21 reguIntPstart:5 reguExtI:20 reguIntP:25 reguExtP:25 showWeekday:off tempMin:4.5 tempMax:30.5 valveMaxPos:15 valveOffsetRt:0 modePrioManu:all daylightSaveTime:on boostPos:30 showInfo:time decalcWeekday:Sat btnNoBckLight:off decalcTime:11:00 noMinMax4Manu:off reguExtPstart:5 valveErrPos:15 modePrioParty:all boostPeriod:p0 set hm templateSet RT1_Clima HeatDefault 20 on # Clima-defaults - Boost fpr RT1 ist auf 20 min eingestellt set hm templateSet RT2_Clima HeatDefault 5 on # Clima-defaults - Boost fpr RT1 ist auf 5 min eingestellt
RT-Remote
Um mit einem Button "gute Nacht" zu sagen und alle Lichter auszuschalten kann man den Button auch mit den RTs koppeln und auf Nachttemp zu schalten. Man muss hier - wie beim Switch - long/short und both unterscheiden. Im Beispiel ist ein long/short template genutzt.
set hm templateDef HeatRemote temp "heatRemote set temperature CtrlRc:autoAndTemp" TempRC:p0
set hm templateSet RT1_Remote HeatRemote <Button1:long> 18 # schalte bei trigger long auf 18 Grad(Nacht) set hm templateSet RT1_Remote HeatRemote <Button1:short> 23 # schalte bei trigger short auf 23 Grad(Tag) set hm templateSet RT1_Remote HeatRemote <Button2:long> 15 # schalte bei trigger long auf 15 Grad set hm templateSet RT1_Remote HeatRemote <Button2:short> 28 # schalte bei trigger short auf 28 Grad
SmokeDetector SD2
Entschieden, ob der Repeater eingeschaltet werden soll oder nicht.
set hm templateDef sd2Rep repeat "SD2 setup as repeater (1) or not (0)" devRepeatCntMax:p0
Links
- commandref/HMinfo
- hmInfo Wiki: HomeMatic_HMInfo