HMCCUConf.pm 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249
  1. #########################################################################
  2. #
  3. # HMCCUConf.pm
  4. #
  5. # $Id: HMCCUConf.pm 16301 2018-03-01 10:47:08Z zap $
  6. #
  7. # Version 4.2
  8. #
  9. # Configuration parameters for HomeMatic devices.
  10. #
  11. # (c) 2017 by zap (zap01 <at> t-online <dot> de)
  12. #
  13. # Datapoints LOWBAT, LOW_BAT, UNREACH, ERROR.*, SABOTAGE and FAULT.*
  14. # must not be specified in attribute ccureadingfilter. They are always
  15. # stored as readings.
  16. # Datapoints LOWBAT, LOW_BAT and UNREACH must not be specified in
  17. # attribute substitute because they are substituted by default.
  18. # See also documentation of attributes ccudef-readingname and
  19. # ccudef-substitute in module HMCCU.
  20. #
  21. #########################################################################
  22. package HMCCUConf;
  23. use strict;
  24. use warnings;
  25. use vars qw(%HMCCU_CHN_DEFAULTS);
  26. use vars qw(%HMCCU_DEV_DEFAULTS);
  27. use vars qw(%HMCCU_SCRIPTS);
  28. ######################################################################
  29. # Default attributes for Homematic devices of type HMCCUCHN
  30. ######################################################################
  31. %HMCCU_CHN_DEFAULTS = (
  32. "HM-Sec-SCo|HM-Sec-SC|HM-Sec-SC-2|HMIP-SWDO" => {
  33. _description => "Tuer/Fensterkontakt optisch und magnetisch",
  34. _channels => "1",
  35. ccureadingfilter => "STATE",
  36. hmstatevals => "ERROR!7:sabotage;SABOTAGE!1:sabotage",
  37. statedatapoint => "STATE",
  38. substitute => "STATE!(0|false):closed,(1|true):open"
  39. },
  40. "HmIP-SWDO-I" => {
  41. _description => "Tuer/Fensterkontakt verdeckt",
  42. _channels => "1",
  43. ccureadingfilter => "STATE",
  44. hmstatevals => "SABOTAGE!1:sabotage",
  45. statedatapoint => "STATE",
  46. substitute => "STATE!(0|false):closed,(1|true):open"
  47. },
  48. "HM-Sec-RHS|HM-Sec-RHS-2" => {
  49. _description => "Fenster Drehgriffkontakt",
  50. _channels => "1",
  51. ccureadingfilter => "STATE",
  52. hmstatevals => "ERROR!1:sabotage",
  53. statedatapoint => "STATE",
  54. substitute => "STATE!0:closed,1:tilted,2:open;ERROR!0:no,1:sabotage"
  55. },
  56. "HM-Sec-Key|HM-Sec-Key-S|HM-Sec-Key-O|HM-Sec-Key-Generic" => {
  57. _description => "Funk-Tuerschlossantrieb KeyMatic",
  58. _channels => "1",
  59. ccureadingfilter => "(STATE|INHIBIT)",
  60. eventMap => "/datapoint OPEN true:open/",
  61. hmstatevals => "ERROR!1:clutch_failure,2:motor_aborted",
  62. statedatapoint => "STATE",
  63. statevals => "lock:false,unlock:true",
  64. substitute => "STATE!(0|false):locked,(1|true):unlocked,2:open;INHIBIT!(0|false):no,(1|true):yes;STATE_UNCERTAIN!(1|true):manual;DIRECTION!0:none,1:up,2:down,3:undefined;ERROR!0:no,1:clutch_failure,2:motor_aborted"
  65. },
  66. "HM-LC-Sw1-Pl-CT-R1" => {
  67. _description => "Schaltaktor mit Klemmanschluss",
  68. _channels => "1",
  69. ccureadingfilter => "(STATE|WORKING)",
  70. cmdIcon => "press:general_an",
  71. eventMap => "/on-for-timer 1:press/",
  72. statedatapoint => "STATE",
  73. statevals => "on:true,off:false",
  74. substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes",
  75. webCmd => "press"
  76. },
  77. "HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => {
  78. _description => "Steckdose",
  79. _channels => "1",
  80. ccureadingfilter => "STATE",
  81. statedatapoint => "STATE",
  82. statevals => "on:true,off:false",
  83. substitute => "STATE!(1|true):on,(0|false):off",
  84. webCmd => "devstate",
  85. widgetOverride => "devstate:uzsuToggle,off,on"
  86. },
  87. "HMIP-PS" => {
  88. _description => "Steckdose",
  89. _channels => "3",
  90. ccureadingfilter => "STATE",
  91. statedatapoint => "STATE",
  92. statevals => "on:true,off:false",
  93. substitute => "STATE!(1|true):on,(0|false):off",
  94. webCmd => "devstate",
  95. widgetOverride => "devstate:uzsuToggle,off,on"
  96. },
  97. "HM-LC-Dim1L-Pl|HM-LC-Dim1L-Pl-2|HM-LC-Dim1L-CV|HM-LC-Dim2L-CV|HM-LC-Dim2L-SM|HM-LC-Dim1L-Pl-3|HM-LC-Dim1L-CV-2" => {
  98. _description => "Funk-Anschnitt-Dimmaktor",
  99. _channels => "1",
  100. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  101. ccuscaleval => "LEVEL:0:1:0:100",
  102. cmdIcon => "on:general_an off:general_aus",
  103. controldatapoint => "LEVEL",
  104. hmstatevals => "ERROR!1:load_failure",
  105. statedatapoint => "LEVEL",
  106. statevals => "on:100,off:0",
  107. stripnumber => 1,
  108. substexcl => "control",
  109. substitute => "ERROR!0:no,1:load_failure:yes;LEVEL!#0-0:off,#1-100:on",
  110. webCmd => "control:on:off",
  111. widgetOverride => "control:slider,0,10,100"
  112. },
  113. "HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => {
  114. _description => "Funk-PWM-Dimmaktor",
  115. _channels => "1",
  116. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  117. ccuscaleval => "LEVEL:0:1:0:100",
  118. cmdIcon => "on:general_an off:general_aus",
  119. controldatapoint => "LEVEL",
  120. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat",
  121. statedatapoint => "LEVEL",
  122. statevals => "on:100,off:0",
  123. stripnumber => 1,
  124. substexcl => "control",
  125. substitute => "ERROR_REDUCED,ERROR_OVERHEAT!(0|false):no,(1|true):yes;LEVEL!#0-0:off,#1-100:on;DIRECTION!0:none,1:up,2:down,3:undefined",
  126. webCmd => "control:on:off",
  127. widgetOverride => "control:slider,0,10,100"
  128. },
  129. "HM-LC-Dim1T-Pl|HM-LC-Dim1T-CV|HM-LC-Dim1T-FM|HM-LC-Dim1T-CV-2|HM-LC-Dim2T-SM|HM-LC-Dim2T-SM-2|HM-LC-Dim1T-DR|HM-LC-Dim1T-FM-LF|HM-LC-Dim1T-FM-2|HM-LC-Dim1T-Pl-3|HM-LC-Dim1TPBU-FM|HM-LC-Dim1TPBU-FM-2" => {
  130. _description => "Funk-Abschnitt-Dimmaktor",
  131. _channels => "1",
  132. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  133. ccuscaleval => "LEVEL:0:1:0:100",
  134. cmdIcon => "on:general_an off:general_aus",
  135. controldatapoint => "LEVEL",
  136. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat;ERROR_OVERLOAD!1:error_overload",
  137. statedatapoint => "LEVEL",
  138. statevals => "on:100,off:0",
  139. stripnumber => 1,
  140. substexcl => "control",
  141. substitute => "ERROR_OVERHEAT,ERROR_OVERLOAD,ERROR_REDUCED!(0|false):no,(1|true):yes;LEVEL!#0-0:off,#1-100:on;DIRECTION!0:none,1:up,2:down,3:undefined",
  142. webCmd => "control:on:off",
  143. widgetOverride => "control:slider,0,10,100"
  144. },
  145. "HM-PB-2-FM" => {
  146. _description => "Funk-Wandtaster 2-fach",
  147. _channels => "1,2",
  148. ccureadingfilter => "PRESS",
  149. statedatapoint => "PRESS_SHORT",
  150. statevals => "press:true",
  151. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  152. },
  153. "HmIP-WRC6" => {
  154. _description => "Wandtaster 6-fach",
  155. _channels => "1,2,3,4,5,6",
  156. ccureadingfilter => "PRESS",
  157. statedatapoint => "PRESS_SHORT",
  158. statevals => "press:true",
  159. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed,(0|false):released"
  160. },
  161. "HM-SwI-3-FM" => {
  162. _description => "Funk-Schalterschnittstelle",
  163. _channels => "1,2,3",
  164. ccureadingfilter => "PRESS",
  165. statedatapoint => "PRESS",
  166. statevals => "press:true",
  167. substitute => "PRESS!(1|true):pressed,(0|false):released"
  168. },
  169. "HM-PBI-4-FM" => {
  170. _description => "Funk-Tasterschnittstelle",
  171. _channels => "1,2,3,4",
  172. ccureadingfilter => "PRESS",
  173. statedatapoint => "PRESS_SHORT",
  174. statevals => "press:true",
  175. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  176. },
  177. "HM-RC-Key4-2|HM-RC-Key4-3|HM-RC-Sec4-2|HM-RC-Sec4-3" => {
  178. _description => "Funk-Handsender",
  179. _channels => "1,2,3,4",
  180. ccureadingfilter => "PRESS",
  181. "event-on-update-reading" => ".*",
  182. statedatapoint => "PRESS_SHORT",
  183. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed"
  184. },
  185. "HM-LC-Sw1PBU-FM" => {
  186. _description => "Unterputz Schaltaktor für Markenschalter",
  187. _channels => "1",
  188. ccureadingfilter => "STATE",
  189. controldatapoint => "STATE",
  190. statedatapoint => "STATE",
  191. statevals => "on:true,off:false",
  192. substitute => "STATE!(true|1):on,(false|0):off",
  193. webCmd => "control",
  194. widgetOverride => "control:uzsuToggle,off,on"
  195. },
  196. "HM-LC-Sw2PBU-FM" => {
  197. _description => "Funk-Schaltaktor 2-fach",
  198. _channels => "1,2",
  199. ccureadingfilter => "STATE",
  200. controldatapoint => "STATE",
  201. statedatapoint => "STATE",
  202. statevals => "on:true,off:false",
  203. substitute => "STATE!(true|1):on,(false|0):off",
  204. webCmd => "control",
  205. widgetOverride => "control:uzsuToggle,off,on"
  206. },
  207. "HmIP-BSM" => {
  208. _description => "Schalt-Mess-Aktor",
  209. _channels => "4",
  210. ccureadingfilter => "STATE",
  211. statedatapoint => "STATE",
  212. controldatapoint => "STATE",
  213. statevals => "on:true,off:false",
  214. substitute => "STATE!(true|1):on,(false|0):off",
  215. webCmd => "control",
  216. widgetOverride => "control:uzsuToggle,off,on"
  217. },
  218. "HM-SCI-3-FM" => {
  219. _description => "3 Kanal Schliesserkontakt",
  220. _channels => "1,2,3",
  221. ccureadingfilter => "STATE",
  222. statedatapoint => "STATE",
  223. statevals => "on:true,off:false",
  224. substitute => "STATE!(1|true):on,(0|false):off"
  225. },
  226. "HM-MOD-Re-8" => {
  227. _description => "8 Kanal Empfangsmodul",
  228. _channels => "1,2,3,4,5,6,7,8",
  229. ccureadingfilter => "(STATE|WORKING)",
  230. statedatapoint => "STATE",
  231. statevals => "on:true,off:false",
  232. substitute => "STATE!(1|true):on,(0|false):off;WORKING!(1|true):yes,(0|false):no"
  233. },
  234. "HM-LC-Sw1-Pl|HM-LC-Sw1-Pl-2|HM-LC-Sw1-SM|HM-LC-Sw1-FM|HM-LC-Sw1-PB-FM" => {
  235. _description => "1 Kanal Funk-Schaltaktor",
  236. _channels => "1",
  237. ccureadingfilter => "STATE",
  238. statedatapoint => "STATE",
  239. statevals => "on:true,off:false",
  240. substitute => "STATE!(1|true):on,(0|false):off"
  241. },
  242. "HM-LC-Sw2-SM|HM-LC-Sw2-FM|HM-LC-Sw2-PB-FM|HM-LC-Sw2-DR" => {
  243. _description => "2 Kanal Funk-Schaltaktor",
  244. _channels => "1,2",
  245. ccureadingfilter => "STATE",
  246. statedatapoint => "STATE",
  247. statevals => "on:true,off:false",
  248. substitute => "STATE!(1|true):on,(0|false):off"
  249. },
  250. "HM-LC-Sw4-DR|HM-LC-Sw4-WM|HM-LC-Sw4-PCB|HM-LC-Sw4-SM" => {
  251. _description => "4 Kanal Funk-Schaltaktor",
  252. _channels => "1,2,3,4",
  253. ccureadingfilter => "STATE",
  254. statedatapoint => "STATE",
  255. statevals => "on:true,off:false",
  256. substitute => "STATE!(1|true):on,(0|false):off"
  257. },
  258. "HM-LC-Bl1PBU-FM|HM-LC-Bl1-FM|HM-LC-Bl1-SM|HM-LC-BlX|HM-LC-Bl1-SM-2|HM-LC-Bl1-FM-2|HM-LC-Ja1PBU-FM" => {
  259. _description => "Jalousienaktor",
  260. _channels => "1",
  261. ccureadingfilter => "(LEVEL|INHIBIT|DIRECTION|WORKING)",
  262. ccureadingname => "LEVEL:+pct",
  263. ccuscaleval => "LEVEL:0:1:0:100",
  264. cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down",
  265. controldatapoint => "LEVEL",
  266. eventMap => "/datapoint STOP true:stop/datapoint LEVEL 0:down/datapoint LEVEL 100:up/",
  267. statedatapoint => "LEVEL",
  268. stripnumber => 1,
  269. substexcl => "control|pct",
  270. substitute => "LEVEL!#0-0:closed,#100-100:open;DIRECTION!0:stop,1:up,2:down,3:undefined;WORKING!(0|false):no,(1|true):yes",
  271. webCmd => "control:up:stop:down",
  272. widgetOverride => "control:slider,0,10,100"
  273. },
  274. "HM-WDS40-TH-I|HM-WDS10-TH-O|HM-WDS20-TH-O|IS-WDS-TH-OD-S-R3|ASH550I|ASH550" => {
  275. _description => "Temperatur/Luftfeuchte Sensor",
  276. _channels => "1",
  277. ccureadingfilter => "(^HUMIDITY|^TEMPERATURE)",
  278. statedatapoint => "TEMPERATURE",
  279. stripnumber => 1
  280. },
  281. "HM-WDS100-C6-O-2" => {
  282. _description => "Funk-Kombisensor",
  283. _channels => "1",
  284. ccureadingfilter => "(HUMIDITY|TEMPERATURE|WIND|RAIN|SUNSHINE|BRIGHTNESS)",
  285. statedatapoint => "TEMPERATURE",
  286. stripnumber => 1,
  287. substitute => "RAINING!(1|true):yes,(0|false):no"
  288. },
  289. "HM-Sec-MD|HM-Sec-MDIR|HM-Sec-MDIR-2|HM-Sec-MDIR-3" => {
  290. _description => "Bewegungsmelder",
  291. _channels => "1",
  292. ccureadingfilter => "(BRIGHTNESS|MOTION)",
  293. hmstatevals => "ERROR!1:sabotage",
  294. statedatapoint => "MOTION",
  295. substitute => "MOTION!(0|false):no,(1|true):yes;ERROR!0:no,1:sabotage"
  296. },
  297. "HmIP-SMI" => {
  298. _description => "Bewegungsmelder",
  299. _channels => "1",
  300. ccureadingfilter => "(ILLUMINATION|MOTION)",
  301. eventMap => "/datapoint MOTION_DETECTION_ACTIVE 1:detection-on/datapoint MOTION_DETECTION_ACTIVE 0:detection-off/",
  302. statedatapoint => "MOTION",
  303. substitute => "MOTION!(0|false):no,(1|true):yes"
  304. },
  305. "HmIP-SPI" => {
  306. _description => "Anwesenheitssensor",
  307. _channels => "1",
  308. ccureadingfilter => "(ILLUMINATION|PRESENCE)",
  309. controldatapoint => "PRESENCE_DETECTION_ACTIVE",
  310. eventMap => "/datapoint RESET_PRESENCE 1:reset/datapoint PRESENCE_DETECTION_ACTIVE 1:detection-on/datapoint PRESENCE_DETECTION_ACTIVE 0:detection-off/",
  311. hmstatevals => "SABOTAGE!(1|true):sabotage",
  312. statedatapoint => "PRESENCE_DETECTION_STATE",
  313. stripnumber => 1,
  314. substitute => "PRESENCE_DETECTION_STATE!(0|false):no,(1|true):yes;PRESENCE_DETECTION_ACTIVE!(0|false):off,(1|true):on",
  315. webCmd => "control",
  316. widgetOverride => "control:uzsuToggle,off,on"
  317. },
  318. "HM-Sen-LI-O" => {
  319. _description => "Lichtsensor",
  320. _channels => "1",
  321. ccureadingfilter => "LUX",
  322. statedatapoint => "LUX",
  323. stripnumber => 1
  324. },
  325. "HM-CC-SCD" => {
  326. _description => "CO2 Sensor",
  327. _channels => "1",
  328. statedatapoint => "STATE",
  329. substitute => "STATE!0:normal,1:added,2:strong"
  330. },
  331. "HM-Sec-SD-2" => {
  332. _description => "Funk-Rauchmelder",
  333. _channels => "1",
  334. ccureadingfilter => "STATE",
  335. hmstatevals => "ERROR_ALARM_TEST!1:alarm_test_failed;ERROR_SMOKE_CHAMBER!1:degraded_smoke_chamber",
  336. statedatapoint => "STATE",
  337. substitute => "ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded"
  338. },
  339. "HmIP-SWSD" => {
  340. _description => "Funk-Rauchmelder",
  341. _channels => "1",
  342. ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)",
  343. eventMap => "/datapoint SMOKE_DETECTOR_COMMAND 0:reservedAlarmOff/datapoint SMOKE_DETECTOR_COMMAND 1:intrusionAlarmOff/datapoint SMOKE_DETECTOR_COMMAND 2:intrusionAlarmOn/datapoint SMOKE_DETECTOR_COMMAND 3:smokeTest/datapoint SMOKE_DETECTOR_COMMAND 4:comTest/datapoint SMOKE_DETECTOR_COMMAND 5:comTestRepeat/",
  344. statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS",
  345. substitute => "SMOKE_DETECTOR_ALARM_STATUS!0:noAlarm,1:primaryAlarm,2:intrusionAlarm,3:secondaryAlarm;SMOKE_DETECTOR_TEST_RESULT!0:none,1:smokeTestOK,2:smokeTestFailed,3:comTestSent,4:comTestOK"
  346. },
  347. "HM-Sec-SFA-SM" => {
  348. _description => "Alarmsirene",
  349. _channels => "1",
  350. ccureadingfilter => "STATE",
  351. hmstatevals => "ERROR_POWER!1:power_failure;ERROR_SABOTAGE!1:sabotage;ERROR_BATTERY!1:battery_defect",
  352. statedatapoint => "STATE",
  353. substitute => "STATE!(0|false):off,(1|true):alarm;ERROR_POWER!0:no,1:failure;ERROR_SABOTAGE!0:no,1:sabotage;ERROR_BATTERY!0:no,1:defect"
  354. },
  355. "WS550|WS888|WS550Tech|WS550LCB|WS550LCW|HM-WDC7000" => {
  356. _description => "Wetterstation",
  357. _channels => "10",
  358. ccureadingfilter => "(TEMPERATURE|HUMIDITY|AIR_PRESSURE)",
  359. statedatapoint => "TEMPERATURE",
  360. stripnumber => 1
  361. },
  362. "HM-Sec-WDS|HM-Sec-WDS-2" => {
  363. _description => "Funk-Wassermelder",
  364. _channels => "1",
  365. ccureadingfilter => "STATE",
  366. statedatapoint => "STATE",
  367. substitute => "STATE!0:dry,1:wet,2:water"
  368. },
  369. "HM-WDS30-OT2-SM|HM-WDS30-OT2-SM-2" => {
  370. _description => "Temperaturdifferenz-Sensor",
  371. _channels => "1,2,3,4,5",
  372. ccureadingfilter => "TEMPERATURE",
  373. statedatapoint => "TEMPERATURE",
  374. stripnumber => 1
  375. },
  376. "HM-OU-LED16|HM-OU-X" => {
  377. _description => "Statusanzeige 16 Kanal LED",
  378. _channels => "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16",
  379. ccureadingfilter => "PRESS_SHORT|LED_STATUS",
  380. eventMap => "/datapoint LED_SLEEP_MODE 0:sleep-off/datapoint LED_SLEEP_MODE 1:sleep-on/",
  381. statedatapoint => "LED_STATUS",
  382. statevals => "off:0,red:1,green:2,orange:3",
  383. substitute => "LED_STATUS!0:off,1:red:2:green:3:orange"
  384. }
  385. );
  386. ######################################################################
  387. # Default attributes for Homematic devices of type HMCCUDEV
  388. ######################################################################
  389. %HMCCU_DEV_DEFAULTS = (
  390. "CCU2" => {
  391. _description => "HomeMatic CCU2",
  392. "ccudef-readingfilter" => '^(LOW_?BAT|UNREACH)\$',
  393. "ccudef-readingformat" => 'datapoint',
  394. "ccudef-readingname" => '^(.+\.)?AES_KEY\$:sign;^(.+\.)?LOW_?BAT\$:battery;^(.+\.)?BATTERY_STATE\$:batteryLevel;^(.+\.)?UNREACH\$:Activity;^(.+\.)?TEMPERATURE\$:+temperature;^(.+\.)?SET_TEMPERATURE\$:+desired-temp;^(.+\.)?HUMIDITY\$:+humidity;^(.+\.)?LEVEL\$:+pct;^(.+\.)?CONTROL_MODE\$:+controlMode',
  395. "ccudef-substitute" => 'AES_KEY!(0|false):off,(1|true):on;LOWBAT,LOW_BAT!(0|false):ok,(1|true):low;UNREACH!(0|false):alive,(1|true):dead;MOTION!(0|false):noMotion,(1|true):motion;DIRECTION!0:stop,1:up,2:down,3:undefined;WORKING!0:false,1:true;INHIBIT!(0|false):unlocked,(1|true):locked'
  396. },
  397. "HM-Sec-SCo|HM-Sec-SC|HM-Sec-SC-2|HMIP-SWDO" => {
  398. _description => "Tuer/Fensterkontakt optisch und magnetisch",
  399. ccureadingfilter => "STATE",
  400. hmstatevals => "ERROR!7:sabotage;SABOTAGE!1:sabotage",
  401. statedatapoint => "1.STATE",
  402. substitute => "STATE!(0|false):closed,(1|true):open"
  403. },
  404. "HmIP-SWDO-I" => {
  405. _description => "Tuer/Fensterkontakt verdeckt",
  406. ccureadingfilter => "STATE",
  407. hmstatevals => "SABOTAGE!1:sabotage",
  408. statedatapoint => "1.STATE",
  409. substitute => "STATE!(0|false):closed,(1|true):open"
  410. },
  411. "HM-Sec-RHS|HM-Sec-RHS-2" => {
  412. _description => "Fenster Drehgriffkontakt",
  413. ccureadingfilter => "STATE",
  414. hmstatevals => "ERROR!1:sabotage",
  415. statedatapoint => "1.STATE",
  416. substitute => "STATE!0:closed,1:tilted,2:open;ERROR!0:no,1:sabotage"
  417. },
  418. "HM-Sec-Key|HM-Sec-Key-S|HM-Sec-Key-O|HM-Sec-Key-Generic" => {
  419. _description => "Funk-Tuerschlossantrieb KeyMatic",
  420. ccureadingfilter => "(STATE|INHIBIT)",
  421. eventMap => "/datapoint 1.OPEN true:open/",
  422. hmstatevals => "ERROR!1:clutch_failure,2:motor_aborted",
  423. statedatapoint => "1.STATE",
  424. statevals => "lock:false,unlock:true",
  425. substitute => "STATE!(0|false):locked,(1|true):unlocked,2:open;INHIBIT!(0|false):no,(1|true):yes;STATE_UNCERTAIN!(1|true):manual;DIRECTION!0:none,1:up,2:down,3:undefined;ERROR!0:no,1:clutch_failure,2:motor_aborted"
  426. },
  427. "HM-Sec-Win|HM-Sec-Win-Generic" => {
  428. _description => "WinMatic",
  429. ccureadingfilter => "(STATE_UNCERTAIN|INHIBIT|LEVEL|STATUS)",
  430. ccuscaleval => "LEVEL:0:1:0:100,SPEED:0.1:0:100",
  431. eventMap => "/datapoint 1.STOP true:stop/",
  432. statedatapoint => "1.LEVEL",
  433. statevals => "open:100,close:0",
  434. stripnumber => 1,
  435. substitute => "LEVEL!-0.005:locked,#0-0:closed,#100-100:open;INHIBIT!(0|false):no,(1|true):yes;ERROR!0:no,1:motor_turn,2:motor_tilt;STATUS!0:trickle_charge,1:charge,2:discharge,3:unknown"
  436. },
  437. "HM-LC-Sw1-Pl-CT-R1" => {
  438. _description => "Schaltaktor mit Klemmanschluss",
  439. ccureadingfilter => "(STATE|WORKING)",
  440. cmdIcon => "press:general_an",
  441. eventMap => "/on-for-timer 1:press/",
  442. statedatapoint => "1.STATE",
  443. statevals => "on:true,off:false",
  444. substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes",
  445. webCmd => "press"
  446. },
  447. "HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => {
  448. _description => "Steckdose",
  449. ccureadingfilter => "STATE",
  450. statedatapoint => "1.STATE",
  451. statevals => "on:true,off:false",
  452. substitute => "STATE!(1|true):on,(0|false):off",
  453. webCmd => "devstate",
  454. widgetOverride => "devstate:uzsuToggle,off,on"
  455. },
  456. "HMIP-PS" => {
  457. _description => "Steckdose IP",
  458. ccureadingfilter => "STATE",
  459. statedatapoint => "3.STATE",
  460. statevals => "on:1,off:0",
  461. substitute => "STATE!(1|true):on,(0|false):off",
  462. webCmd => "devstate",
  463. widgetOverride => "devstate:uzsuToggle,off,on"
  464. },
  465. "HM-ES-PMSw1-Pl|HM-ES-PMSw1-Pl-DN-R1|HM-ES-PMSw1-Pl-DN-R2|HM-ES-PMSw1-Pl-DN-R3|HM-ES-PMSw1-Pl-DN-R4|HM-ES-PMSw1-Pl-DN-R5" => {
  466. _description => "Steckdose mit Energiemessung",
  467. ccureadingfilter => "(STATE|CURRENT|ENERGY_COUNTER|POWER)",
  468. controldatapoint => "1.STATE",
  469. statedatapoint => "1.STATE",
  470. statevals => "on:1,off:0",
  471. stripnumber => 1,
  472. substitute => "STATE!(1|true):on,(0|false):off",
  473. webCmd => "control",
  474. widgetOverride => "control:uzsuToggle,off,on"
  475. },
  476. "HMIP-PSM" => {
  477. _description => "Steckdose mit Energiemessung IP",
  478. ccureadingfilter => "(STATE|CURRENT|^ENERGY_COUNTER\$|POWER)",
  479. controldatapoint => "3.STATE",
  480. statedatapoint => "3.STATE",
  481. statevals => "on:true,off:false",
  482. stripnumber => 1,
  483. substitute => "STATE!(true|1):on,(false|0):off",
  484. webCmd => "control",
  485. widgetOverride => "control:uzsuToggle,off,on"
  486. }, "HM-LC-Dim1L-Pl|HM-LC-Dim1L-Pl-2|HM-LC-Dim1L-CV|HM-LC-Dim2L-CV|HM-LC-Dim2L-SM|HM-LC-Dim1L-Pl-3|HM-LC-Dim1L-CV-2" => {
  487. _description => "Funk-Anschnitt-Dimmaktor",
  488. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  489. ccuscaleval => "LEVEL:0:1:0:100",
  490. cmdIcon => "on:general_an off:general_aus",
  491. controldatapoint => "1.LEVEL",
  492. hmstatevals => "ERROR!1:load_failure",
  493. statedatapoint => "1.LEVEL",
  494. statevals => "on:100,off:0",
  495. stripnumber => 1,
  496. substexcl => "control",
  497. substitute => "ERROR!0:no,1:load_failure;LEVEL!#0-0:off,#1-100:on",
  498. webCmd => "control:on:off",
  499. widgetOverride => "control:slider,0,10,100"
  500. },
  501. "HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => {
  502. _description => "Funk-PWM-Dimmaktor",
  503. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  504. ccuscaleval => "LEVEL:0:1:0:100",
  505. cmdIcon => "on:general_an off:general_aus",
  506. controldatapoint => "1.LEVEL",
  507. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat",
  508. statedatapoint => "1.LEVEL",
  509. statevals => "on:100,off:0",
  510. stripnumber => 1,
  511. substexcl => "control",
  512. substitute => "ERROR_REDUCED,ERROR_OVERHEAT!(0|false):no,(1|true):yes;LEVEL!#0-0:off,#1-100:on;DIRECTION!0:none,1:up,2:down,3:undefined",
  513. webCmd => "control:on:off",
  514. widgetOverride => "control:slider,0,10,100"
  515. },
  516. "HM-LC-Dim1T-Pl|HM-LC-Dim1T-CV|HM-LC-Dim1T-FM|HM-LC-Dim1T-CV-2|HM-LC-Dim2T-SM|HM-LC-Dim2T-SM-2|HM-LC-Dim1T-DR|HM-LC-Dim1T-FM-LF|HM-LC-Dim1T-FM-2|HM-LC-Dim1T-Pl-3|HM-LC-Dim1TPBU-FM|HM-LC-Dim1TPBU-FM-2" => {
  517. _description => "Funk-Abschnitt-Dimmaktor",
  518. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  519. ccuscaleval => "LEVEL:0:1:0:100",
  520. cmdIcon => "on:general_an off:general_aus",
  521. controldatapoint => "1.LEVEL",
  522. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat;ERROR_OVERLOAD!1:error_overload",
  523. statedatapoint => "1.LEVEL",
  524. statevals => "on:100,off:0",
  525. stripnumber => 1,
  526. substexcl => "control",
  527. substitute => "ERROR_OVERHEAT,ERROR_OVERLOAD,ERROR_REDUCED!(0|false):no,(1|true):yes;LEVEL!#0-0:off,#1-100:on;DIRECTION!0:none,1:up,2:down,3:undefined",
  528. webCmd => "control:on:off",
  529. widgetOverride => "control:slider,0,10,100"
  530. },
  531. "HM-PB-2-FM" => {
  532. _description => "Funk-Wandtaster 2-fach",
  533. ccureadingfilter => "PRESS",
  534. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  535. },
  536. "HmIP-WRC6" => {
  537. _description => "Wandtaster 6-fach",
  538. ccureadingfilter => "PRESS",
  539. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed,(0|false):released"
  540. },
  541. "HM-SwI-3-FM" => {
  542. _description => "Funk-Schalterschnittstelle",
  543. ccureadingfilter => "PRESS",
  544. statevals => "press:true",
  545. substitute => "PRESS!(1|true):pressed,(0|false):released"
  546. },
  547. "HM-PBI-4-FM" => {
  548. _description => "Funk-Tasterschnittstelle",
  549. ccureadingfilter => "PRESS",
  550. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  551. },
  552. "HM-RC-Key4-2|HM-RC-Key4-3|HM-RC-Sec4-2|HM-RC-Sec4-3" => {
  553. _description => "Funk-Handsender",
  554. ccureadingfilter => "PRESS",
  555. "event-on-update-reading" => ".*",
  556. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed"
  557. },
  558. "HM-LC-Sw1PBU-FM" => {
  559. _description => "Unterputz Schaltaktor für Markenschalter",
  560. ccureadingfilter => "STATE",
  561. controldatapoint => "1.STATE",
  562. statedatapoint => "1.STATE",
  563. statevals => "on:true,off:false",
  564. substitute => "STATE!(true|1):on,(false|0):off",
  565. webCmd => "control",
  566. widgetOverride => "control:uzsuToggle,off,on"
  567. },
  568. "HM-LC-Sw2PBU-FM" => {
  569. _description => "Funk-Schaltaktor 2-fach",
  570. ccureadingfilter => "STATE",
  571. controldatapoint => "1.STATE",
  572. statedatapoint => "1.STATE",
  573. statevals => "on:true,off:false",
  574. substitute => "STATE!(true|1):on,(false|0):off",
  575. webCmd => "control",
  576. widgetOverride => "control:uzsuToggle,off,on"
  577. },
  578. "HmIP-BSM" => {
  579. _description => "Schalt-Mess-Aktor",
  580. ccureadingfilter => "(STATE|PRESS)",
  581. statedatapoint => "4.STATE",
  582. controldatapoint => "4.STATE",
  583. statevals => "on:true,off:false",
  584. substitute => "STATE!(true|1):on,(false|0):off",
  585. webCmd => "control",
  586. widgetOverride => "control:uzsuToggle,off,on"
  587. },
  588. "HM-LC-SW4-BA-PCB|HM-SCI-3-FM" => {
  589. _description => "4 Kanal Funk Schaltaktor für Batteriebetrieb, 3 Kanal Schließerkontakt",
  590. ccureadingfilter => "STATE",
  591. statevals => "on:true,off:false",
  592. substitute => "STATE!(1|true):on,(0|false):off"
  593. },
  594. "HM-MOD-Re-8" => {
  595. _description => "8 Kanal Empfangsmodul",
  596. ccureadingfilter => "(STATE|WORKING)",
  597. statevals => "on:true,off:false",
  598. substitute => "STATE!(1|true):on,(0|false):off;WORKING!(1|true):yes,(0|false):no"
  599. },
  600. "HM-LC-Sw1-Pl|HM-LC-Sw1-Pl-2|HM-LC-Sw1-SM|HM-LC-Sw1-FM|HM-LC-Sw1-PB-FM" => {
  601. _description => "1 Kanal Funk-Schaltaktor",
  602. ccureadingfilter => "STATE",
  603. statedatapoint => "1.STATE",
  604. statevals => "on:true,off:false",
  605. substitute => "STATE!(1|true):on,(0|false):off"
  606. },
  607. "HM-LC-Bl1PBU-FM|HM-LC-Bl1-FM|HM-LC-Bl1-SM|HM-LC-BlX|HM-LC-Bl1-SM-2|HM-LC-Bl1-FM-2|HM-LC-Ja1PBU-FM" => {
  608. _description => "Jalousienaktor",
  609. ccureadingfilter => "(LEVEL|INHIBIT|DIRECTION|WORKING)",
  610. ccuscaleval => "LEVEL:0:1:0:100",
  611. cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down",
  612. controldatapoint => "1.LEVEL",
  613. eventMap => "/datapoint 1.STOP true:stop/datapoint 1.LEVEL 0:down/datapoint 1.LEVEL 100:up/",
  614. statedatapoint => "1.LEVEL",
  615. stripnumber => 1,
  616. substexcl => "control",
  617. substitute => "LEVEL!#0-0:closed,#100-100:open;DIRECTION!0:none,1:up,2:down,3:undefined;WORKING!(0|false):no,(1|true):yes",
  618. webCmd => "control:up:stop:down",
  619. widgetOverride => "control:slider,0,10,100"
  620. },
  621. "HM-TC-IT-WM-W-EU" => {
  622. _description => "Wandthermostat",
  623. ccureadingfilter => "(^HUMIDITY|^TEMPERATURE|^SET_TEMPERATURE|^WINDOW_OPEN)",
  624. cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus",
  625. controldatapoint => "2.SET_TEMPERATURE",
  626. eventMap => "/datapoint 2.MANU_MODE 20.0:Manu/datapoint 2.AUTO_MODE 1:Auto/datapoint 2.BOOST_MODE 1:Boost/datapoint 2.MANU_MODE 4.5:off/datapoint 2.MANU_MODE 30.5:on/",
  627. genericDeviceType => "thermostat",
  628. statedatapoint => "2.SET_TEMPERATURE",
  629. stripnumber => 1,
  630. substexcl => "control",
  631. substitute => "CONTROL_MODE!0:AUTO,1:MANU,2:PARTY,3:BOOST;WINDOW_OPEN_REPORTING!(true|1):open,(false|0):closed;SET_TEMPERATURE!#0-3.5:off,#30.5-40:on",
  632. webCmd => "control:Auto:Manu:Boost:on:off",
  633. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  634. },
  635. "HM-CC-RT-DN" => {
  636. _description => "Heizkoerperthermostat",
  637. ccureadingfilter => "(TEMPERATURE|VALVE_STATE|CONTROL)",
  638. cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus",
  639. controldatapoint => "4.SET_TEMPERATURE",
  640. eventMap => "/datapoint 4.MANU_MODE 20.0:Manu/datapoint 4.AUTO_MODE 1:Auto/datapoint 4.BOOST_MODE 1:Boost/datapoint 4.MANU_MODE 4.5:off/datapoint 4.MANU_MODE 30.5:on/",
  641. genericDeviceType => "thermostat",
  642. hmstatevals => "FAULT_REPORTING!1:valve_tight,2:range_too_large,3:range_too_small,4:communication_error,5:other_error,6:battery_low,7:valve_error_pos",
  643. statedatapoint => "4.SET_TEMPERATURE",
  644. stripnumber => 1,
  645. substexcl => "control",
  646. substitute => "CONTROL_MODE!0:AUTO,1:MANU,2:PARTY,3:BOOST;SET_TEMPERATURE!#0-4.5:off,#30.5-40:on;FAULT_REPORTING!0:no,1:valve_tight,2:range_too_large,3:range_too_small,4:communication_error,5:other_error,6:battery_low,7:valve:error_pos",
  647. webCmd => "control:Auto:Manu:Boost:on:off",
  648. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  649. },
  650. "HmIP-eTRV|HmIP-eTRV-2" => {
  651. _description => "Heizkoerperthermostat HM-IP",
  652. ccureadingfilter => "^ACTUAL_TEMPERATURE|^BOOST_MODE|^SET_POINT_MODE|^SET_POINT_TEMPERATURE|^LEVEL|^WINDOW_STATE",
  653. ccureadingname => "1.LEVEL:valve_position",
  654. ccuscaleval => "LEVEL:0:1:0:100",
  655. controldatapoint => "1.SET_POINT_TEMPERATURE",
  656. eventMap => "/datapoint 1.BOOST_MODE true:Boost/datapoint 1.CONTROL_MODE 0:Auto/datapoint 1.CONTROL_MODE 1:Manual/datapoint 1.CONTROL_MODE 2:Holiday/datapoint 1.SET_POINT_TEMPERATURE 4.5:off/datapoint 1.SET_POINT_TEMPERATURE 30.5:on/",
  657. genericDeviceType => "thermostat",
  658. statedatapoint => "1.SET_POINT_TEMPERATURE",
  659. stripnumber => 1,
  660. substexcl => "control",
  661. substitute => "SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open",
  662. webCmd => "control:Boost:Auto:Manual:Holiday:on:off",
  663. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  664. },
  665. "HmIP-WTH|HmIP-WTH-2" => {
  666. _description => "Wandthermostat HM-IP",
  667. controldatapoint => "1.SET_POINT_TEMPERATURE",
  668. eventMap => "/datapoint 1.BOOST_MODE true:Boost/datapoint 1.CONTROL_MODE 0:Auto/datapoint 1.CONTROL_MODE 1:Manual/datapoint 1.CONTROL_MODE 2:Holiday/datapoint 1.SET_POINT_TEMPERATURE 4.5:off/datapoint 1.SET_POINT_TEMPERATURE 30.5:on/",
  669. genericDeviceType => "thermostat",
  670. statedatapoint => "1.SET_POINT_TEMPERATURE",
  671. stripnumber => 1,
  672. substexcl => "control",
  673. substitute => "SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open",
  674. webCmd => "control:Boost:Auto:Manual:Holiday:on:off",
  675. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  676. },
  677. "HM-WDS40-TH-I|HM-WDS10-TH-O|HM-WDS20-TH-O|IS-WDS-TH-OD-S-R3|ASH550I|ASH550" => {
  678. _description => "Temperatur/Luftfeuchte Sensor",
  679. ccureadingfilter => "(^HUMIDITY|^TEMPERATURE)",
  680. statedatapoint => "1.TEMPERATURE",
  681. stripnumber => 1
  682. },
  683. "HM-Sen-RD-O" => {
  684. _description => "Regensensor",
  685. ccureadingfilter => "(STATE|WORKING)",
  686. controldatapoint => "2.STATE",
  687. eventMap => "/datapoint 2.STATE 1:on/datapoint 2.STATE 0:off/",
  688. statedatapoint => "1.STATE",
  689. substitute => "1.STATE!(0|false):dry,(1|true):rain;2.STATE!(0|false):off,(1|true):on",
  690. webCmd => "control",
  691. widgetOverride => "control:uzsuToggle,off,on"
  692. },
  693. "HM-WDS100-C6-O-2" => {
  694. _description => "Funk-Kombisensor",
  695. ccureadingfilter => "(HUMIDITY|TEMPERATURE|WIND|RAIN|SUNSHINE|BRIGHTNESS)",
  696. statedatapoint => "1.TEMPERATURE",
  697. stripnumber => 1,
  698. substitute => "RAINING!(1|true):yes,(0|false):no"
  699. },
  700. "HM-ES-TX-WM" => {
  701. _description => "Energiezaehler Sensor",
  702. ccureadingfilter => "(ENERGY_COUNTER|POWER)"
  703. },
  704. "HM-CC-VG-1" => {
  705. _description => "Heizungsgruppe",
  706. ccureadingfilter => "(^SET_TEMPERATURE|^TEMPERATURE|^HUMIDITY|^VALVE|^CONTROL|^WINDOW_OPEN)",
  707. cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus",
  708. controldatapoint => "1.SET_TEMPERATURE",
  709. eventMap => "/datapoint 1.MANU_MODE 20.0:Manu/datapoint 1.AUTO_MODE 1:Auto/datapoint 1.BOOST_MODE 1:Boost/datapoint 1.MANU_MODE 4.5:off/datapoint 1.MANU_MODE 30.5:on/",
  710. statedatapoint => "1.SET_TEMPERATURE",
  711. stripnumber => 1,
  712. substexcl => "control",
  713. substitute => "CONTROL_MODE!0:AUTO,1:MANU,2:PARTY,3:BOOST;WINDOW_OPEN_REPORTING!(true|1):open,(false|0):closed;SET_TEMPERATURE!#0-4.5:off,#30.5-40:on",
  714. webCmd => "control:Auto:Manu:Boost:on:off",
  715. widgetOverride => "control:slider,3.5,0.5,30.5,1"
  716. },
  717. "HM-Sec-MD|HM-Sec-MDIR|HM-Sec-MDIR-2|HM-Sec-MDIR-3" => {
  718. _description => "Bewegungsmelder",
  719. ccureadingfilter => "(BRIGHTNESS|MOTION)",
  720. hmstatevals => "ERROR!1:sabotage",
  721. statedatapoint => "1.MOTION",
  722. substitute => "MOTION!(0|false):no,(1|true):yes;ERROR!0:no,1:sabotage"
  723. },
  724. "HmIP-SMI" => {
  725. _description => "Bewegungsmelder",
  726. ccureadingfilter => "(ILLUMINATION|MOTION)",
  727. eventMap => "/datapoint 1.MOTION_DETECTION_ACTIVE 1:detection-on/datapoint 1.MOTION_DETECTION_ACTIVE 0:detection-off/",
  728. statedatapoint => "1.MOTION",
  729. substitute => "MOTION!(0|false):no,(1|true):yes"
  730. },
  731. "HmIP-SPI" => {
  732. _description => "Anwesenheitssensor",
  733. ccureadingfilter => "(ILLUMINATION|PRESENCE)",
  734. controldatapoint => "1.PRESENCE_DETECTION_ACTIVE",
  735. eventMap => "/datapoint 1.RESET_PRESENCE 1:reset/datapoint 1.PRESENCE_DETECTION_ACTIVE 1:detection-on/datapoint 1.PRESENCE_DETECTION_ACTIVE 0:detection-off/",
  736. hmstatevals => "SABOTAGE!(1|true):sabotage",
  737. statedatapoint => "1.PRESENCE_DETECTION_STATE",
  738. stripnumber => 1,
  739. substitute => "PRESENCE_DETECTION_STATE!(0|false):no,(1|true):yes;PRESENCE_DETECTION_ACTIVE!(0|false):off,(1|true):on",
  740. webCmd => "control",
  741. widgetOverride => "control:uzsuToggle,off,on"
  742. },
  743. "HM-Sen-LI-O" => {
  744. _description => "Lichtsensor",
  745. ccureadingfilter => "LUX",
  746. statedatapoint => "1.LUX",
  747. stripnumber => 1
  748. },
  749. "HM-CC-SCD" => {
  750. _description => "CO2 Sensor",
  751. ccureadingfilter => "STATE",
  752. statedatapoint => "1.STATE",
  753. substitute => "STATE!0:normal,1:added,2:strong"
  754. },
  755. "HM-Sec-SD-2" => {
  756. _description => "Funk-Rauchmelder",
  757. ccureadingfilter => "STATE",
  758. hmstatevals => "ERROR_ALARM_TEST!1:alarm_test_failed;ERROR_SMOKE_CHAMBER!1:degraded_smoke_chamber",
  759. statedatapoint => "1.STATE",
  760. substitute => "STATE!(0|false):ok,(1|true):alarm;ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded"
  761. },
  762. "HM-Sec-SD-2-Team" => {
  763. _description => "Rauchmeldergruppe",
  764. ccureadingfilter => "STATE",
  765. statedatapoint => "1.STATE",
  766. substitute => "STATE!(0|false):ok,(1|true):alarm"
  767. },
  768. "HmIP-SWSD" => {
  769. _description => "Funk-Rauchmelder",
  770. ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)",
  771. eventMap => "/datapoint 1.SMOKE_DETECTOR_COMMAND 0:reservedAlarmOff/datapoint 1.SMOKE_DETECTOR_COMMAND 1:intrusionAlarmOff/datapoint 1.SMOKE_DETECTOR_COMMAND 2:intrusionAlarmOn/datapoint 1.SMOKE_DETECTOR_COMMAND 3:smokeTest/datapoint 1.SMOKE_DETECTOR_COMMAND 4:comTest/datapoint 1.SMOKE_DETECTOR_COMMAND 5:comTestRepeat/",
  772. statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS",
  773. substitute => "SMOKE_DETECTOR_ALARM_STATUS!0:noAlarm,1:primaryAlarm,2:intrusionAlarm,3:secondaryAlarm;SMOKE_DETECTOR_TEST_RESULT!0:none,1:smokeTestOK,2:smokeTestFailed,3:comTestSent,4:comTestOK"
  774. },
  775. "HM-Sec-SFA-SM" => {
  776. _description => "Alarmsirene",
  777. ccureadingfilter => "STATE",
  778. hmstatevals => "ERROR_POWER!1:power_failure;ERROR_SABOTAGE!1:sabotage;ERROR_BATTERY!1:battery_defect",
  779. statedatapoint => "1.STATE",
  780. substitute => "STATE!(0|false):off,(1|true):alarm;ERROR_POWER!0:no,1:failure;ERROR_SABOTAGE!0:no,1:sabotage;ERROR_BATTERY!0:no,1:defect"
  781. },
  782. "HM-Sec-Sir-WM" => {
  783. _description => "Funk-Innensirene",
  784. ccureadingfilter => "STATE",
  785. ccureadingname => "1.STATE:STATE_SENSOR1;2.STATE:STATE_SENSOR2;3.STATE:STATE_PANIC",
  786. eventMap => "/datapoint 3.STATE true:panic/",
  787. hmstatevals => "ERROR_SABOTAGE!1:sabotage",
  788. statedatapoint => "4.ARMSTATE",
  789. statevals => "disarmed:0,extsens-armed:1,allsens-armed:2,alarm-blocked:3",
  790. substitute => "ERROR_SABOTAGE!(0|false):no,(1|true):yes;ARMSTATE!0:disarmed,1:extsens_armed,2:allsens_armed,3:alarm_blocked"
  791. },
  792. "HM-LC-RGBW-WM" => {
  793. _description => "Funk-RGBW-Controller",
  794. ccureadingfilter => "(COLOR|PROGRAM|LEVEL)",
  795. ccureadingname => "2.COLOR:+color;3.PROGRAM:+prog",
  796. controldatapoint => "1.LEVEL",
  797. ccuscaleval => "LEVEL:0:1:0:100",
  798. eventMap => "/datapoint 3.PROGRAM :prog/datapoint 2.COLOR :color/",
  799. statedatapoint => "1.LEVEL",
  800. statevals => "on:100,off:0",
  801. stripnumber => 1,
  802. substexcl => "control",
  803. substitute => "LEVEL!#0-0:off,#1-100:on",
  804. webCmd => "control:color:prog:on:off",
  805. widgetOverride => "control:slider,0,1,100 prog:0,1,2,3,4,5,6 color:colorpicker,HUE,0,1,100"
  806. },
  807. "WS550|WS888|WS550Tech|WS550LCB|WS550LCW|HM-WDC7000" => {
  808. _description => "Wetterstation",
  809. ccureadingfilter => "(TEMPERATURE|HUMIDITY|AIR_PRESSURE)",
  810. statedatapoint => "10.TEMPERATURE",
  811. stripnumber => 1
  812. },
  813. "HM-Sec-WDS|HM-Sec-WDS-2" => {
  814. _description => "Funk-Wassermelder",
  815. ccureadingfilter => "STATE",
  816. statedatapoint => "1.STATE",
  817. substitute => "STATE!0:dry,1:wet,2:water"
  818. },
  819. "HM-WDS30-OT2-SM|HM-WDS30-OT2-SM-2" => {
  820. _description => "Temperaturdifferenz-Sensor",
  821. ccureadingfilter => "TEMPERATURE",
  822. stripnumber => 1
  823. },
  824. "HM-OU-CF-Pl|HM-OU-CFM-Pl|HM-OU-CFM-TW" => {
  825. _description => "Funk-Gong mit Signalleuchte mit/ohne Batterie und Speicher",
  826. ccureadingfilter => "STATE",
  827. eventMap => "/datapoint 1.STATE 1:led-on/datapoint 1.STATE 0:led-off/datapoint 2.STATE 1:sound-on/datapoint 2.STATE 0:sound-off",
  828. statedatapoint => "1.STATE",
  829. statevals => "on:true,off:false",
  830. substitute => "STATE!(0|false):ledOff,(1|true):ledOn;2.STATE!(0|false):soundOff,(1|true):soundOn"
  831. },
  832. "HM-PB-4Dis-WM" => {
  833. _description => "Funk-Display Wandtaster",
  834. ccureadingfilter => "(PRESS_SHORT|PRESS_LONG)",
  835. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed"
  836. },
  837. "HM-Dis-EP-WM55|HM-Dis-WM55" => {
  838. _description => "E-Paper Display, Display Statusanzeige",
  839. ccureadingfilter => "PRESS",
  840. eventMap => "/datapoint 3.SUBMIT:display/",
  841. substitute => "PRESS_LONG,PRESS_SHORT,PRESS_CONT!(1|true):pressed,(0|false):notPressed;PRESS_LONG_RELEASE!(1|true):release",
  842. widgetOverride => "display:textField"
  843. },
  844. "CUX-HM-TC-IT-WM-W-EU" => {
  845. _description => "CUxD Wandthermostat",
  846. ccureadingfilter => "(TEMP|HUM|DEW)",
  847. stripnumber => 1
  848. }
  849. );
  850. ######################################################################
  851. # Homematic scripts.
  852. # Scripts can be executed via HMCCU set command 'hmscript'. Script
  853. # name must be preceeded by a '!'.
  854. # Example:
  855. # set mydev hmscript !CreateStringVariable MyVar test "Test variable"
  856. ######################################################################
  857. %HMCCU_SCRIPTS = (
  858. "ActivateProgram" => {
  859. description => "Activate or deactivate a CCU program",
  860. syntax => "name, mode",
  861. parameters => 2,
  862. code => qq(
  863. object oPR = dom.GetObject("\$name");
  864. if (oPR) {
  865. oPR.Active(\$mode);
  866. }
  867. )
  868. },
  869. "CreateStringVariable" => {
  870. description => "Create CCU system variable of type STRING",
  871. syntax => "name, unit, init, desc",
  872. parameters => 4,
  873. code => qq(
  874. object oSV = dom.GetObject("\$name");
  875. if (!oSV){
  876. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  877. oSV = dom.CreateObject(OT_VARDP);
  878. oSysVars.Add(oSV.ID());
  879. oSV.Name("\$name");
  880. oSV.ValueType(ivtString);
  881. oSV.ValueSubType(istChar8859);
  882. oSV.DPInfo("\$desc");
  883. oSV.ValueUnit("\$unit");
  884. oSV.State("\$init");
  885. oSV.Internal(false);
  886. oSV.Visible(true);
  887. dom.RTUpdate(false);
  888. }
  889. else {
  890. oSV.State("\$init");
  891. }
  892. )
  893. },
  894. "CreateNumericVariable" => {
  895. description => "Create CCU system variable of type FLOAT",
  896. syntax => "name, unit, init, desc, min, max",
  897. parameters => 6,
  898. code => qq(
  899. object oSV = dom.GetObject("\$name");
  900. if (!oSV){
  901. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  902. oSV = dom.CreateObject(OT_VARDP);
  903. oSysVars.Add(oSV.ID());
  904. oSV.Name("\$name");
  905. oSV.ValueType(ivtFloat);
  906. oSV.ValueSubType(istGeneric);
  907. oSV.ValueMin(\$min);
  908. oSV.ValueMax(\$max);
  909. oSV.DPInfo("\$desc");
  910. oSV.ValueUnit("\$unit");
  911. oSV.State("\$init");
  912. oSV.Internal(false);
  913. oSV.Visible(true);
  914. dom.RTUpdate(false);
  915. }
  916. else {
  917. oSV.State("\$init");
  918. }
  919. )
  920. },
  921. "CreateBoolVariable" => {
  922. description => "Create CCU system variable of type BOOL",
  923. syntax => "name, unit, init, desc, valtrue, valfalse",
  924. parameters => 6,
  925. code => qq(
  926. object oSV = dom.GetObject("\$name");
  927. if (!oSV){
  928. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  929. oSV = dom.CreateObject(OT_VARDP);
  930. oSysVars.Add(oSV.ID());
  931. oSV.Name("\$name");
  932. oSV.ValueType(ivtBinary);
  933. oSV.ValueSubType(istBool);
  934. oSV.ValueName0("\$value1");
  935. oSV.ValueName1("\$value2");
  936. oSV.DPInfo("\$desc");
  937. oSV.ValueUnit("\$unit");
  938. oSV.State("\$init");
  939. dom.RTUpdate(false);
  940. }
  941. else {
  942. oSV.State("\$init");
  943. }
  944. )
  945. },
  946. "CreateListVariable" => {
  947. description => "Create CCU system variable of type LIST",
  948. syntax => "name, unit, init, desc, list",
  949. parameters => 5,
  950. code => qq(
  951. object oSV = dom.GetObject("\$name");
  952. if (!oSV){
  953. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  954. oSV = dom.CreateObject(OT_VARDP);
  955. oSysVars.Add(oSV.ID());
  956. oSV.Name("\$name");
  957. oSV.ValueType(ivtInteger);
  958. oSV.ValueSubType(istEnum);
  959. oSV.ValueList("\$list");
  960. oSV.DPInfo("\$desc");
  961. oSV.ValueUnit("\$unit");
  962. oSV.State("\$init");
  963. dom.RTUpdate(false);
  964. }
  965. else {
  966. oSV.State("\$init");
  967. }
  968. )
  969. },
  970. "DeleteObject" => {
  971. description => "Delete CCU object",
  972. syntax => "name, type",
  973. parameters => 2,
  974. code => qq(
  975. object oSV = dom.GetObject("\$name");
  976. if (oSV) {
  977. if (oSV.IsTypeOf(\$type)) {
  978. dom.DeleteObject(oSV.ID());
  979. }
  980. }
  981. )
  982. },
  983. "GetVariables" => {
  984. description => "Query system variables",
  985. syntax => "",
  986. parameters => 0,
  987. code => qq(
  988. object osysvar;
  989. string ssysvarid;
  990. foreach (ssysvarid, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs())
  991. {
  992. osysvar = dom.GetObject(ssysvarid);
  993. WriteLine (osysvar.Name() # "=" # osysvar.Variable() # "=" # osysvar.Value());
  994. }
  995. )
  996. },
  997. "GetDeviceInfo" => {
  998. description => "Query device info",
  999. syntax => "devname, ccuget",
  1000. parameters => 2,
  1001. code => qq(
  1002. string chnid;
  1003. string sDPId;
  1004. object odev = dom.GetObject ("\$devname");
  1005. if (odev) {
  1006. foreach (chnid, odev.Channels()) {
  1007. object ochn = dom.GetObject(chnid);
  1008. if (ochn) {
  1009. foreach(sDPId, ochn.DPs()) {
  1010. object oDP = dom.GetObject(sDPId);
  1011. if (oDP) {
  1012. integer op = oDP.Operations();
  1013. string flags = "";
  1014. if (OPERATION_READ & op) { flags = flags # "R"; }
  1015. if (OPERATION_WRITE & op) { flags = flags # "W"; }
  1016. if (OPERATION_EVENT & op) { flags = flags # "E"; }
  1017. WriteLine ("C;" # ochn.Address() # ";" # ochn.Name() # ";" # oDP.Name() # ";" # oDP.ValueType() # ";" # oDP.\$ccuget() # ";" # flags);
  1018. }
  1019. }
  1020. }
  1021. }
  1022. }
  1023. else {
  1024. WriteLine ("ERROR: Device not found");
  1025. }
  1026. )
  1027. },
  1028. "GetDevice" => {
  1029. description => "Query CCU device or channel",
  1030. syntax => "name",
  1031. parameters => 1,
  1032. code => qq(
  1033. object odev=dom.GetObject("\$name");
  1034. if (odev) {
  1035. if (odev.IsTypeOf (OT_CHANNEL)) {
  1036. string devid = odev.Device();
  1037. odev = dom.GetObject (devid);
  1038. }
  1039. string intid=odev.Interface();
  1040. string intna=dom.GetObject(intid).Name();
  1041. string chnid;
  1042. integer cc=0;
  1043. foreach (chnid, odev.Channels()) {
  1044. object ochn=dom.GetObject(chnid);
  1045. WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection());
  1046. cc=cc+1;
  1047. }
  1048. WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc);
  1049. }
  1050. )
  1051. },
  1052. "GetDeviceList" => {
  1053. description => "Query CCU devices, channels and interfaces",
  1054. syntax => "",
  1055. parameters => 0,
  1056. code => qq(
  1057. string devid;
  1058. string chnid;
  1059. string sifId;
  1060. foreach(devid, root.Devices().EnumUsedIDs()) {
  1061. object odev=dom.GetObject(devid);
  1062. string intid=odev.Interface();
  1063. string intna=dom.GetObject(intid).Name();
  1064. integer cc=0;
  1065. foreach (chnid, odev.Channels()) {
  1066. object ochn=dom.GetObject(chnid);
  1067. WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection());
  1068. cc=cc+1;
  1069. }
  1070. WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc);
  1071. }
  1072. foreach(sifId, root.Interfaces().EnumIDs()) {
  1073. object oIf=dom.GetObject(sifId);
  1074. if (oIf) {
  1075. WriteLine("I;" # oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl());
  1076. }
  1077. }
  1078. )
  1079. },
  1080. "GetDatapointsByChannel" => {
  1081. description => "Query datapoints of channel list",
  1082. syntax => "list, ccuget",
  1083. parameters => 2,
  1084. code => qq(
  1085. string sDPId;
  1086. string sChnName;
  1087. string sChnList = "\$list";
  1088. integer c = 0;
  1089. foreach (sChnName, sChnList.Split(",")) {
  1090. object oChannel = dom.GetObject (sChnName);
  1091. if (oChannel) {
  1092. foreach(sDPId, oChannel.DPs()) {
  1093. object oDP = dom.GetObject(sDPId);
  1094. if (oDP) {
  1095. if (OPERATION_READ & oDP.Operations()) {
  1096. WriteLine (sChnName # "=" # oDP.Name() # "=" # oDP.\$ccuget());
  1097. c = c+1;
  1098. }
  1099. }
  1100. }
  1101. }
  1102. }
  1103. WriteLine (c);
  1104. )
  1105. },
  1106. "GetDatapointsByDevice" => {
  1107. description => "Query datapoints of device list",
  1108. syntax => "list, ccuget",
  1109. parameters => 2,
  1110. code => qq(
  1111. string chnid;
  1112. string sDPId;
  1113. string sDevName;
  1114. string sDevList = "\$list";
  1115. integer c = 0;
  1116. foreach (sDevName, sDevList.Split(",")) {
  1117. object odev = dom.GetObject (sDevName);
  1118. if (odev) {
  1119. foreach (chnid, odev.Channels()) {
  1120. object ochn = dom.GetObject(chnid);
  1121. if (ochn) {
  1122. foreach(sDPId, ochn.DPs()) {
  1123. object oDP = dom.GetObject(sDPId);
  1124. if (oDP) {
  1125. if (OPERATION_READ & oDP.Operations()) {
  1126. WriteLine (ochn.Name() # "=" # oDP.Name() # "=" # oDP.\$ccuget());
  1127. c = c+1;
  1128. }
  1129. }
  1130. }
  1131. }
  1132. }
  1133. }
  1134. }
  1135. WriteLine (c);
  1136. )
  1137. },
  1138. "GetDatapointList" => {
  1139. description => "Query datapoint information of device list",
  1140. syntax => "list",
  1141. parameters => 1,
  1142. code => qq(
  1143. string chnid;
  1144. string sDPId;
  1145. string sDevice;
  1146. string sDevList = "\$list";
  1147. foreach (sDevice, sDevList.Split(",")) {
  1148. object odev = dom.GetObject (sDevice);
  1149. if (odev) {
  1150. string intid = odev.Interface();
  1151. string intna = dom.GetObject(intid).Name();
  1152. string sType = odev.HssType();
  1153. foreach (chnid, odev.Channels()) {
  1154. object ochn = dom.GetObject(chnid);
  1155. if (ochn) {
  1156. string sAddr = ochn.Address();
  1157. string sChnNo = sAddr.StrValueByIndex(":",1);
  1158. foreach(sDPId, ochn.DPs()) {
  1159. object oDP = dom.GetObject(sDPId);
  1160. if (oDP) {
  1161. string sDPName = oDP.Name().StrValueByIndex(".",2);
  1162. WriteLine (intna # ";" # sAddr # ";" # sType # ";" # sChnNo # ";" # sDPName # ";" # oDP.ValueType() # ";" # oDP.Operations());
  1163. }
  1164. }
  1165. }
  1166. }
  1167. }
  1168. }
  1169. )
  1170. },
  1171. "GetChannel" => {
  1172. description => "Get datapoints of channel list",
  1173. syntax => "list, ccuget",
  1174. parameters => 2,
  1175. code => qq(
  1176. string sDPId;
  1177. string sChannel;
  1178. string sChnList = "\$list";
  1179. foreach (sChannel, sChnList.Split(",")) {
  1180. object oChannel = dom.GetObject (sChannel);
  1181. if (oChannel) {
  1182. foreach(sDPId, oChannel.DPs()) {
  1183. object oDP = dom.GetObject(sDPId);
  1184. if (oDP) {
  1185. WriteLine (sChannel # "=" # oDP.Name() # "=" # oDP.\$ccuget());
  1186. }
  1187. }
  1188. }
  1189. }
  1190. )
  1191. },
  1192. "GetInterfaceList" => {
  1193. description => "Get CCU RPC interfaces",
  1194. syntax => "",
  1195. parameters => 0,
  1196. code => qq(
  1197. string sifId;
  1198. foreach(sifId, root.Interfaces().EnumIDs()) {
  1199. object oIf = dom.GetObject(sifId);
  1200. if (oIf) {
  1201. WriteLine (oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl());
  1202. }
  1203. }
  1204. )
  1205. },
  1206. "ClearUnreachable" => {
  1207. description => "Clear device unreachable alarms in CCU",
  1208. syntax => "",
  1209. parameters => 0,
  1210. code => qq(
  1211. string itemID;
  1212. string address;
  1213. object aldp_obj;
  1214. foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
  1215. address = dom.GetObject(itemID).Address();
  1216. aldp_obj = dom.GetObject("AL-" # address # ":0.STICKY_UNREACH");
  1217. if (aldp_obj) {
  1218. if (aldp_obj.Value()) {
  1219. aldp_obj.AlReceipt();
  1220. }
  1221. }
  1222. }
  1223. )
  1224. },
  1225. "GetNameByAddress" => {
  1226. description => "Get device or channel name by address",
  1227. syntax => "iface, address",
  1228. parameters => 2,
  1229. code => qq(
  1230. object lObjDevice = xmlrpc.GetObjectByHSSAddress(interfaces.Get("\$iface"),"\$address");
  1231. if (lObjDevice) {
  1232. WriteLine (lObjDevice.Name());
  1233. }
  1234. )
  1235. }
  1236. );
  1237. 1;