HMCCUConf.pm 41 KB

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