HMCCUConf.pm 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389
  1. #########################################################################
  2. #
  3. # HMCCUConf.pm
  4. #
  5. # $Id: HMCCUConf.pm 17372 2018-09-19 11:39:04Z zap $
  6. #
  7. # Version 4.3
  8. #
  9. # Configuration parameters for HomeMatic devices.
  10. #
  11. # (c) 2018 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. "HmIP-BDT" => {
  130. _description => "Dimmaktor",
  131. _channels => "4",
  132. ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|ACTIVITY_STATE|LEVEL)",
  133. ccuscaleval => "LEVEL:0:1:0:100",
  134. controldatapoint => "LEVEL",
  135. hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat",
  136. statedatapoint => "LEVEL",
  137. statevals => "on:100,off:0",
  138. stripnumber => 1,
  139. substexcl => "control",
  140. substitute => "LEVEL!#0-0:off,#1-100:on;ACTIVITY_STATE!0:unknown,1:up,2:down,3:stop;ERROR_OVERHEAT!(0|false):no,(1|true):yes;ACTUAL_TEMPERATURE_STATUS!0:normal,1:unknown,2:overflow,3:underflow",
  141. webCmd => "control:on:off",
  142. widgetOverride => "control:slider,0,10,100"
  143. },
  144. "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" => {
  145. _description => "Funk-Abschnitt-Dimmaktor",
  146. _channels => "1",
  147. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  148. ccuscaleval => "LEVEL:0:1:0:100",
  149. cmdIcon => "on:general_an off:general_aus",
  150. controldatapoint => "LEVEL",
  151. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat;ERROR_OVERLOAD!1:error_overload",
  152. statedatapoint => "LEVEL",
  153. statevals => "on:100,off:0",
  154. stripnumber => 1,
  155. substexcl => "control",
  156. 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",
  157. webCmd => "control:on:off",
  158. widgetOverride => "control:slider,0,10,100"
  159. },
  160. "HM-PB-2-FM" => {
  161. _description => "Funk-Wandtaster 2-fach",
  162. _channels => "1,2",
  163. ccureadingfilter => "PRESS",
  164. statedatapoint => "PRESS_SHORT",
  165. statevals => "press:true",
  166. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  167. },
  168. "HmIP-WRC6" => {
  169. _description => "Wandtaster 6-fach",
  170. _channels => "1,2,3,4,5,6",
  171. ccureadingfilter => "PRESS",
  172. statedatapoint => "PRESS_SHORT",
  173. statevals => "press:true",
  174. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed,(0|false):released"
  175. },
  176. "HM-SwI-3-FM" => {
  177. _description => "Funk-Schalterschnittstelle",
  178. _channels => "1,2,3",
  179. ccureadingfilter => "PRESS",
  180. statedatapoint => "PRESS",
  181. statevals => "press:true",
  182. substitute => "PRESS!(1|true):pressed,(0|false):released"
  183. },
  184. "HM-PBI-4-FM" => {
  185. _description => "Funk-Tasterschnittstelle",
  186. _channels => "1,2,3,4",
  187. ccureadingfilter => "PRESS",
  188. statedatapoint => "PRESS_SHORT",
  189. statevals => "press:true",
  190. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  191. },
  192. "HM-RC-Key4-2|HM-RC-Key4-3|HM-RC-Sec4-2|HM-RC-Sec4-3" => {
  193. _description => "Funk-Handsender",
  194. _channels => "1,2,3,4",
  195. ccureadingfilter => "PRESS",
  196. "event-on-update-reading" => ".*",
  197. statedatapoint => "PRESS_SHORT",
  198. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed"
  199. },
  200. "HM-LC-Sw1PBU-FM" => {
  201. _description => "Unterputz Schaltaktor für Markenschalter",
  202. _channels => "1",
  203. ccureadingfilter => "STATE",
  204. controldatapoint => "STATE",
  205. statedatapoint => "STATE",
  206. statevals => "on:true,off:false",
  207. substitute => "STATE!(true|1):on,(false|0):off",
  208. webCmd => "control",
  209. widgetOverride => "control:uzsuToggle,off,on"
  210. },
  211. "HM-LC-Sw2PBU-FM" => {
  212. _description => "Funk-Schaltaktor 2-fach",
  213. _channels => "1,2",
  214. ccureadingfilter => "STATE",
  215. controldatapoint => "STATE",
  216. statedatapoint => "STATE",
  217. statevals => "on:true,off:false",
  218. substitute => "STATE!(true|1):on,(false|0):off",
  219. webCmd => "control",
  220. widgetOverride => "control:uzsuToggle,off,on"
  221. },
  222. "HmIP-BSM" => {
  223. _description => "Schalt-Mess-Aktor",
  224. _channels => "4",
  225. ccureadingfilter => "STATE",
  226. statedatapoint => "STATE",
  227. controldatapoint => "STATE",
  228. statevals => "on:true,off:false",
  229. substitute => "STATE!(true|1):on,(false|0):off",
  230. webCmd => "control",
  231. widgetOverride => "control:uzsuToggle,off,on"
  232. },
  233. "HM-SCI-3-FM" => {
  234. _description => "3 Kanal Schliesserkontakt",
  235. _channels => "1,2,3",
  236. ccureadingfilter => "STATE",
  237. statedatapoint => "STATE",
  238. statevals => "on:true,off:false",
  239. substitute => "STATE!(1|true):on,(0|false):off"
  240. },
  241. "HM-MOD-Re-8" => {
  242. _description => "8 Kanal Empfangsmodul",
  243. _channels => "1,2,3,4,5,6,7,8",
  244. ccureadingfilter => "(STATE|WORKING)",
  245. statedatapoint => "STATE",
  246. statevals => "on:true,off:false",
  247. substitute => "STATE!(1|true):on,(0|false):off;WORKING!(1|true):yes,(0|false):no"
  248. },
  249. "HM-LC-Sw1-Pl|HM-LC-Sw1-Pl-2|HM-LC-Sw1-SM|HM-LC-Sw1-FM|HM-LC-Sw1-PB-FM|HM-LC-Sw1-DR" => {
  250. _description => "1 Kanal Funk-Schaltaktor",
  251. _channels => "1",
  252. ccureadingfilter => "STATE",
  253. statedatapoint => "STATE",
  254. statevals => "on:true,off:false",
  255. substitute => "STATE!(1|true):on,(0|false):off"
  256. },
  257. "HM-LC-Sw2-SM|HM-LC-Sw2-FM|HM-LC-Sw2-PB-FM|HM-LC-Sw2-DR" => {
  258. _description => "2 Kanal Funk-Schaltaktor",
  259. _channels => "1,2",
  260. ccureadingfilter => "STATE",
  261. statedatapoint => "STATE",
  262. statevals => "on:true,off:false",
  263. substitute => "STATE!(1|true):on,(0|false):off"
  264. },
  265. "HM-LC-Sw4-DR|HM-LC-Sw4-WM|HM-LC-Sw4-PCB|HM-LC-Sw4-SM" => {
  266. _description => "4 Kanal Funk-Schaltaktor",
  267. _channels => "1,2,3,4",
  268. ccureadingfilter => "STATE",
  269. statedatapoint => "STATE",
  270. statevals => "on:true,off:false",
  271. substitute => "STATE!(1|true):on,(0|false):off"
  272. },
  273. "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" => {
  274. _description => "Jalousienaktor",
  275. _channels => "1",
  276. ccureadingfilter => "(LEVEL|INHIBIT|DIRECTION|WORKING)",
  277. ccureadingname => "LEVEL:+pct",
  278. ccuscaleval => "LEVEL:0:1:0:100",
  279. cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down",
  280. controldatapoint => "LEVEL",
  281. eventMap => "/datapoint STOP true:stop/datapoint LEVEL 0:down/datapoint LEVEL 100:up/",
  282. statedatapoint => "LEVEL",
  283. stripnumber => 1,
  284. substexcl => "control|pct",
  285. substitute => "LEVEL!#0-0:closed,#100-100:open;DIRECTION!0:stop,1:up,2:down,3:undefined;WORKING!(0|false):no,(1|true):yes",
  286. webCmd => "control:up:stop:down",
  287. widgetOverride => "control:slider,0,10,100"
  288. },
  289. "HmIP-BROLL" => {
  290. _description => "Rollladenaktor",
  291. _channels => "4",
  292. ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|LEVEL|ACTIVITY_STATE)",
  293. ccureadingname => "LEVEL:+pct",
  294. ccuscaleval => "LEVEL:0:1:0:100",
  295. cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down",
  296. controldatapoint => "LEVEL",
  297. hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat",
  298. eventMap => "/datapoint STOP true:stop/datapoint LEVEL 0:down/datapoint LEVEL 100:up/",
  299. statedatapoint => "LEVEL",
  300. stripnumber => 1,
  301. substexcl => "control|pct",
  302. substitute => "LEVEL!#0-0:closed,#100-100:open;ACTIVITY_STATE!0:unknown,1:up,2:down,3:stop;ERROR_OVERHEAT!(0|false):no,(1|true):yes;ACTUAL_TEMPERATURE_STATUS!0:normal,1:unknown,2:overflow,3:underflow",
  303. webCmd => "control:up:stop:down",
  304. widgetOverride => "control:slider,0,10,100"
  305. },
  306. "HM-WDS40-TH-I|HM-WDS10-TH-O|HM-WDS20-TH-O|IS-WDS-TH-OD-S-R3|ASH550I|ASH550" => {
  307. _description => "Temperatur/Luftfeuchte Sensor",
  308. _channels => "1",
  309. ccureadingfilter => "(^HUMIDITY|^TEMPERATURE)",
  310. statedatapoint => "TEMPERATURE",
  311. stripnumber => 1
  312. },
  313. "HM-WDS100-C6-O-2" => {
  314. _description => "Funk-Kombisensor",
  315. _channels => "1",
  316. ccureadingfilter => "(HUMIDITY|TEMPERATURE|WIND|RAIN|SUNSHINE|BRIGHTNESS)",
  317. statedatapoint => "TEMPERATURE",
  318. stripnumber => 1,
  319. substitute => "RAINING!(1|true):yes,(0|false):no"
  320. },
  321. "HmIP-SWO-PR|HmIP-SWO-B|HmIP-SWO-PL" => {
  322. _description => "Funk-Wettersensor",
  323. _channels => "1",
  324. ccureadingfilter => "1!.*",
  325. stripnumber => 1,
  326. substitute => "RAINING,RAIN_COUNTER_OVERFLOW,SUNSHINEDURATION_OVERFLOW,SUNSHINE_THRESHOLD_OVERRUN,WIND_THRESHOLD_OVERRUN!(0|false):no,(1|true):yes"
  327. },
  328. "HM-Sec-MD|HM-Sec-MDIR|HM-Sec-MDIR-2|HM-Sec-MDIR-3" => {
  329. _description => "Bewegungsmelder",
  330. _channels => "1",
  331. ccureadingfilter => "(BRIGHTNESS|MOTION)",
  332. hmstatevals => "ERROR!1:sabotage",
  333. statedatapoint => "MOTION",
  334. substitute => "MOTION!(0|false):no,(1|true):yes;ERROR!0:no,1:sabotage"
  335. },
  336. "HmIP-SMI" => {
  337. _description => "Bewegungsmelder",
  338. _channels => "1",
  339. ccureadingfilter => "(ILLUMINATION|MOTION)",
  340. eventMap => "/datapoint MOTION_DETECTION_ACTIVE 1:detection-on/datapoint MOTION_DETECTION_ACTIVE 0:detection-off/",
  341. statedatapoint => "MOTION",
  342. substitute => "MOTION!(0|false):no,(1|true):yes"
  343. },
  344. "HmIP-SPI" => {
  345. _description => "Anwesenheitssensor",
  346. _channels => "1",
  347. ccureadingfilter => "(ILLUMINATION|PRESENCE)",
  348. controldatapoint => "PRESENCE_DETECTION_ACTIVE",
  349. eventMap => "/datapoint RESET_PRESENCE 1:reset/datapoint PRESENCE_DETECTION_ACTIVE 1:detection-on/datapoint PRESENCE_DETECTION_ACTIVE 0:detection-off/",
  350. hmstatevals => "SABOTAGE!(1|true):sabotage",
  351. statedatapoint => "PRESENCE_DETECTION_STATE",
  352. stripnumber => 1,
  353. substitute => "PRESENCE_DETECTION_STATE!(0|false):no,(1|true):yes;PRESENCE_DETECTION_ACTIVE!(0|false):off,(1|true):on",
  354. webCmd => "control",
  355. widgetOverride => "control:uzsuToggle,off,on"
  356. },
  357. "HM-Sen-LI-O" => {
  358. _description => "Lichtsensor",
  359. _channels => "1",
  360. ccureadingfilter => "LUX",
  361. statedatapoint => "LUX",
  362. stripnumber => 1
  363. },
  364. "HmIP-SLO" => {
  365. _description => "Lichtsensor",
  366. _channels => "1",
  367. ccureadingfilter => "_ILLUMINATION\$",
  368. statedatapoint => "CURRENT_ILLUMINATION",
  369. stripnumber => 1
  370. },
  371. "HM-CC-SCD" => {
  372. _description => "CO2 Sensor",
  373. _channels => "1",
  374. statedatapoint => "STATE",
  375. substitute => "STATE!0:normal,1:added,2:strong"
  376. },
  377. "HM-Sec-SD-2" => {
  378. _description => "Funk-Rauchmelder",
  379. _channels => "1",
  380. ccureadingfilter => "STATE",
  381. hmstatevals => "ERROR_ALARM_TEST!1:alarm_test_failed;ERROR_SMOKE_CHAMBER!1:degraded_smoke_chamber",
  382. statedatapoint => "STATE",
  383. substitute => "ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded"
  384. },
  385. "HmIP-SWSD" => {
  386. _description => "Funk-Rauchmelder",
  387. _channels => "1",
  388. ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)",
  389. 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/",
  390. statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS",
  391. 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"
  392. },
  393. "HM-Sec-SFA-SM" => {
  394. _description => "Alarmsirene",
  395. _channels => "1",
  396. ccureadingfilter => "STATE",
  397. hmstatevals => "ERROR_POWER!1:power_failure;ERROR_SABOTAGE!1:sabotage;ERROR_BATTERY!1:battery_defect",
  398. statedatapoint => "STATE",
  399. 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"
  400. },
  401. "WS550|WS888|WS550Tech|WS550LCB|WS550LCW|HM-WDC7000" => {
  402. _description => "Wetterstation",
  403. _channels => "10",
  404. ccureadingfilter => "(TEMPERATURE|HUMIDITY|AIR_PRESSURE)",
  405. statedatapoint => "TEMPERATURE",
  406. stripnumber => 1
  407. },
  408. "HM-Sec-WDS|HM-Sec-WDS-2" => {
  409. _description => "Funk-Wassermelder",
  410. _channels => "1",
  411. ccureadingfilter => "STATE",
  412. statedatapoint => "STATE",
  413. substitute => "STATE!0:dry,1:wet,2:water"
  414. },
  415. "HM-WDS30-OT2-SM|HM-WDS30-OT2-SM-2" => {
  416. _description => "Temperaturdifferenz-Sensor",
  417. _channels => "1,2,3,4,5",
  418. ccureadingfilter => "TEMPERATURE",
  419. statedatapoint => "TEMPERATURE",
  420. stripnumber => 1
  421. },
  422. "HM-OU-LED16|HM-OU-X" => {
  423. _description => "Statusanzeige 16 Kanal LED",
  424. _channels => "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16",
  425. ccureadingfilter => "PRESS_SHORT|LED_STATUS",
  426. eventMap => "/datapoint LED_SLEEP_MODE 0:sleep-off/datapoint LED_SLEEP_MODE 1:sleep-on/",
  427. statedatapoint => "LED_STATUS",
  428. statevals => "off:0,red:1,green:2,orange:3",
  429. substitute => "LED_STATUS!0:off,1:red:2:green:3:orange"
  430. }
  431. );
  432. ######################################################################
  433. # Default attributes for Homematic devices of type HMCCUDEV
  434. ######################################################################
  435. %HMCCU_DEV_DEFAULTS = (
  436. "CCU2" => {
  437. _description => "HomeMatic CCU2",
  438. "ccudef-readingfilter" => '^(LOW_?BAT|UNREACH)\$',
  439. "ccudef-readingformat" => 'datapoint',
  440. "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',
  441. "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'
  442. },
  443. "HM-Sec-SCo|HM-Sec-SC|HM-Sec-SC-2|HMIP-SWDO" => {
  444. _description => "Tuer/Fensterkontakt optisch und magnetisch",
  445. ccureadingfilter => "STATE",
  446. hmstatevals => "ERROR!7:sabotage;SABOTAGE!1:sabotage",
  447. statedatapoint => "1.STATE",
  448. substitute => "STATE!(0|false):closed,(1|true):open"
  449. },
  450. "HmIP-SWDO-I" => {
  451. _description => "Tuer/Fensterkontakt verdeckt",
  452. ccureadingfilter => "STATE",
  453. hmstatevals => "SABOTAGE!1:sabotage",
  454. statedatapoint => "1.STATE",
  455. substitute => "STATE!(0|false):closed,(1|true):open"
  456. },
  457. "HM-Sec-RHS|HM-Sec-RHS-2" => {
  458. _description => "Fenster Drehgriffkontakt",
  459. ccureadingfilter => "STATE",
  460. hmstatevals => "ERROR!1:sabotage",
  461. statedatapoint => "1.STATE",
  462. substitute => "STATE!0:closed,1:tilted,2:open;ERROR!0:no,1:sabotage"
  463. },
  464. "HM-Sec-Key|HM-Sec-Key-S|HM-Sec-Key-O|HM-Sec-Key-Generic" => {
  465. _description => "Funk-Tuerschlossantrieb KeyMatic",
  466. ccureadingfilter => "(STATE|INHIBIT)",
  467. eventMap => "/datapoint 1.OPEN true:open/",
  468. hmstatevals => "ERROR!1:clutch_failure,2:motor_aborted",
  469. statedatapoint => "1.STATE",
  470. statevals => "lock:false,unlock:true",
  471. 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"
  472. },
  473. "HM-Sec-Win|HM-Sec-Win-Generic" => {
  474. _description => "WinMatic",
  475. ccureadingfilter => "(STATE_UNCERTAIN|INHIBIT|LEVEL|STATUS)",
  476. ccuscaleval => "LEVEL:0:1:0:100,SPEED:0.1:0:100",
  477. eventMap => "/datapoint 1.STOP true:stop/",
  478. statedatapoint => "1.LEVEL",
  479. statevals => "open:100,close:0",
  480. stripnumber => 1,
  481. 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"
  482. },
  483. "HM-LC-Sw1-Pl-CT-R1" => {
  484. _description => "Schaltaktor mit Klemmanschluss",
  485. ccureadingfilter => "(STATE|WORKING)",
  486. cmdIcon => "press:general_an",
  487. eventMap => "/on-for-timer 1:press/",
  488. statedatapoint => "1.STATE",
  489. statevals => "on:true,off:false",
  490. substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes",
  491. webCmd => "press"
  492. },
  493. "HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => {
  494. _description => "Steckdose",
  495. ccureadingfilter => "STATE",
  496. statedatapoint => "1.STATE",
  497. statevals => "on:true,off:false",
  498. substitute => "STATE!(1|true):on,(0|false):off",
  499. webCmd => "devstate",
  500. widgetOverride => "devstate:uzsuToggle,off,on"
  501. },
  502. "HMIP-PS" => {
  503. _description => "Steckdose IP",
  504. ccureadingfilter => "STATE",
  505. statedatapoint => "3.STATE",
  506. statevals => "on:1,off:0",
  507. substitute => "STATE!(1|true):on,(0|false):off",
  508. webCmd => "devstate",
  509. widgetOverride => "devstate:uzsuToggle,off,on"
  510. },
  511. "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" => {
  512. _description => "Steckdose mit Energiemessung",
  513. ccureadingfilter => "(STATE|CURRENT|ENERGY_COUNTER|POWER)",
  514. controldatapoint => "1.STATE",
  515. statedatapoint => "1.STATE",
  516. statevals => "on:1,off:0",
  517. stripnumber => 1,
  518. substitute => "STATE!(1|true):on,(0|false):off",
  519. webCmd => "control",
  520. widgetOverride => "control:uzsuToggle,off,on"
  521. },
  522. "HMIP-PSM" => {
  523. _description => "Steckdose mit Energiemessung IP",
  524. ccureadingfilter => "(STATE|CURRENT|^ENERGY_COUNTER\$|POWER)",
  525. controldatapoint => "3.STATE",
  526. statedatapoint => "3.STATE",
  527. statevals => "on:true,off:false",
  528. stripnumber => 1,
  529. substitute => "STATE!(true|1):on,(false|0):off",
  530. webCmd => "control",
  531. widgetOverride => "control:uzsuToggle,off,on"
  532. },
  533. "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" => {
  534. _description => "Funk-Anschnitt-Dimmaktor",
  535. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  536. ccuscaleval => "LEVEL:0:1:0:100",
  537. cmdIcon => "on:general_an off:general_aus",
  538. controldatapoint => "1.LEVEL",
  539. hmstatevals => "ERROR!1:load_failure",
  540. statedatapoint => "1.LEVEL",
  541. statevals => "on:100,off:0",
  542. stripnumber => 1,
  543. substexcl => "control",
  544. substitute => "ERROR!0:no,1:load_failure;LEVEL!#0-0:off,#1-100:on",
  545. webCmd => "control:on:off",
  546. widgetOverride => "control:slider,0,10,100"
  547. },
  548. "HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => {
  549. _description => "Funk-PWM-Dimmaktor",
  550. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  551. ccuscaleval => "LEVEL:0:1:0:100",
  552. cmdIcon => "on:general_an off:general_aus",
  553. controldatapoint => "1.LEVEL",
  554. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat",
  555. statedatapoint => "1.LEVEL",
  556. statevals => "on:100,off:0",
  557. stripnumber => 1,
  558. substexcl => "control",
  559. 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",
  560. webCmd => "control:on:off",
  561. widgetOverride => "control:slider,0,10,100"
  562. },
  563. "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" => {
  564. _description => "Funk-Abschnitt-Dimmaktor",
  565. ccureadingfilter => "(^LEVEL\$|DIRECTION)",
  566. ccuscaleval => "LEVEL:0:1:0:100",
  567. cmdIcon => "on:general_an off:general_aus",
  568. controldatapoint => "1.LEVEL",
  569. hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat;ERROR_OVERLOAD!1:error_overload",
  570. statedatapoint => "1.LEVEL",
  571. statevals => "on:100,off:0",
  572. stripnumber => 1,
  573. substexcl => "control",
  574. 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",
  575. webCmd => "control:on:off",
  576. widgetOverride => "control:slider,0,10,100"
  577. },
  578. "HmIP-BDT" => {
  579. _description => "Dimmaktor",
  580. ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|ACTIVITY_STATE|LEVEL)",
  581. ccuscaleval => "LEVEL:0:1:0:100",
  582. controldatapoint => "4.LEVEL",
  583. hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat",
  584. statedatapoint => "4.LEVEL",
  585. statevals => "on:100,off:0",
  586. stripnumber => 1,
  587. substexcl => "control",
  588. substitute => "LEVEL!#0-0:off,#1-100:on;ACTIVITY_STATE!0:unknown,1:up,2:down,3:stop;ERROR_OVERHEAT!(0|false):no,(1|true):yes;ACTUAL_TEMPERATURE_STATUS!0:normal,1:unknown,2:overflow,3:underflow",
  589. webCmd => "control:on:off",
  590. widgetOverride => "control:slider,0,10,100"
  591. },
  592. "HM-PB-2-FM" => {
  593. _description => "Funk-Wandtaster 2-fach",
  594. ccureadingfilter => "PRESS",
  595. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  596. },
  597. "HmIP-WRC6" => {
  598. _description => "Wandtaster 6-fach",
  599. ccureadingfilter => "PRESS",
  600. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed,(0|false):released"
  601. },
  602. "HM-SwI-3-FM" => {
  603. _description => "Funk-Schalterschnittstelle",
  604. ccureadingfilter => "PRESS",
  605. statevals => "press:true",
  606. substitute => "PRESS!(1|true):pressed,(0|false):released"
  607. },
  608. "HM-PBI-4-FM" => {
  609. _description => "Funk-Tasterschnittstelle",
  610. ccureadingfilter => "PRESS",
  611. substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes"
  612. },
  613. "HM-RC-Key4-2|HM-RC-Key4-3|HM-RC-Sec4-2|HM-RC-Sec4-3" => {
  614. _description => "Funk-Handsender",
  615. ccureadingfilter => "PRESS",
  616. "event-on-update-reading" => ".*",
  617. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed"
  618. },
  619. "HM-LC-Sw1PBU-FM" => {
  620. _description => "Unterputz Schaltaktor für Markenschalter",
  621. ccureadingfilter => "STATE",
  622. controldatapoint => "1.STATE",
  623. statedatapoint => "1.STATE",
  624. statevals => "on:true,off:false",
  625. substitute => "STATE!(true|1):on,(false|0):off",
  626. webCmd => "control",
  627. widgetOverride => "control:uzsuToggle,off,on"
  628. },
  629. "HM-LC-Sw2PBU-FM" => {
  630. _description => "Funk-Schaltaktor 2-fach",
  631. ccureadingfilter => "STATE",
  632. controldatapoint => "1.STATE",
  633. statedatapoint => "1.STATE",
  634. statevals => "on:true,off:false",
  635. substitute => "STATE!(true|1):on,(false|0):off",
  636. webCmd => "control",
  637. widgetOverride => "control:uzsuToggle,off,on"
  638. },
  639. "HmIP-BSM" => {
  640. _description => "Schalt-Mess-Aktor",
  641. ccureadingfilter => "(STATE|PRESS)",
  642. statedatapoint => "4.STATE",
  643. controldatapoint => "4.STATE",
  644. statevals => "on:true,off:false",
  645. substitute => "STATE!(true|1):on,(false|0):off",
  646. webCmd => "control",
  647. widgetOverride => "control:uzsuToggle,off,on"
  648. },
  649. "HM-LC-SW4-BA-PCB|HM-SCI-3-FM" => {
  650. _description => "4 Kanal Funk Schaltaktor für Batteriebetrieb, 3 Kanal Schließerkontakt",
  651. ccureadingfilter => "STATE",
  652. statevals => "on:true,off:false",
  653. substitute => "STATE!(1|true):on,(0|false):off"
  654. },
  655. "HM-MOD-Re-8" => {
  656. _description => "8 Kanal Empfangsmodul",
  657. ccureadingfilter => "(STATE|WORKING)",
  658. statevals => "on:true,off:false",
  659. substitute => "STATE!(1|true):on,(0|false):off;WORKING!(1|true):yes,(0|false):no"
  660. },
  661. "HM-LC-Sw1-Pl|HM-LC-Sw1-Pl-2|HM-LC-Sw1-SM|HM-LC-Sw1-FM|HM-LC-Sw1-PB-FM|HM-LC-Sw1-DR" => {
  662. _description => "1 Kanal Funk-Schaltaktor",
  663. ccureadingfilter => "STATE",
  664. statedatapoint => "1.STATE",
  665. statevals => "on:true,off:false",
  666. substitute => "STATE!(1|true):on,(0|false):off"
  667. },
  668. "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" => {
  669. _description => "Jalousienaktor",
  670. ccureadingfilter => "(LEVEL|INHIBIT|DIRECTION|WORKING)",
  671. ccuscaleval => "LEVEL:0:1:0:100",
  672. cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down",
  673. controldatapoint => "1.LEVEL",
  674. eventMap => "/datapoint 1.STOP true:stop/datapoint 1.LEVEL 0:down/datapoint 1.LEVEL 100:up/",
  675. statedatapoint => "1.LEVEL",
  676. stripnumber => 1,
  677. substexcl => "control",
  678. substitute => "LEVEL!#0-0:closed,#100-100:open;DIRECTION!0:none,1:up,2:down,3:undefined;WORKING!(0|false):no,(1|true):yes",
  679. webCmd => "control:up:stop:down",
  680. widgetOverride => "control:slider,0,10,100"
  681. },
  682. "HmIP-BROLL" => {
  683. _description => "Rollladenaktor",
  684. ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|LEVEL|ACTIVITY_STATE|SELF_CALIBRATION_RESULT)",
  685. ccureadingname => "LEVEL:+pct",
  686. ccuscaleval => "LEVEL:0:1:0:100",
  687. cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down",
  688. controldatapoint => "4.LEVEL",
  689. hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat",
  690. eventMap => "/datapoint 4.STOP true:stop/datapoint 4.LEVEL 0:down/datapoint 4.LEVEL 100:up/datapoint 3.SELF_CALIBRATION 0:stopCalibration/datapoint 3.SELF_CALIBRATION 1:startCalibration/",
  691. statedatapoint => "4.LEVEL",
  692. stripnumber => 1,
  693. substexcl => "control|pct",
  694. substitute => "LEVEL!#0-0:closed,#100-100:open;ACTIVITY_STATE!0:unknown,1:up,2:down,3:stop;ERROR_OVERHEAT!(0|false):no,(1|true):yes;ACTUAL_TEMPERATURE_STATUS!0:normal,1:unknown,2:overflow,3:underflow;SELF_CALIBRATION_RESULT!(0|false):failed,(1|true):ok",
  695. webCmd => "control:up:stop:down",
  696. widgetOverride => "control:slider,0,10,100"
  697. },
  698. "HM-TC-IT-WM-W-EU" => {
  699. _description => "Wandthermostat",
  700. ccureadingfilter => "(^HUMIDITY|^TEMPERATURE|^SET_TEMPERATURE|^WINDOW_OPEN)",
  701. cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus",
  702. controldatapoint => "2.SET_TEMPERATURE",
  703. 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/",
  704. genericDeviceType => "thermostat",
  705. statedatapoint => "2.SET_TEMPERATURE",
  706. stripnumber => 1,
  707. substexcl => "control",
  708. 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",
  709. webCmd => "control:Auto:Manu:Boost:on:off",
  710. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  711. },
  712. "HM-CC-RT-DN" => {
  713. _description => "Heizkoerperthermostat",
  714. ccureadingfilter => "(TEMPERATURE|VALVE_STATE|CONTROL|BATTERY_STATE)",
  715. cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus",
  716. controldatapoint => "4.SET_TEMPERATURE",
  717. 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/",
  718. genericDeviceType => "thermostat",
  719. 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",
  720. statedatapoint => "4.SET_TEMPERATURE",
  721. stripnumber => 1,
  722. substexcl => "control",
  723. 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",
  724. webCmd => "control:Auto:Manu:Boost:on:off",
  725. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  726. },
  727. "HmIP-eTRV|HmIP-eTRV-2" => {
  728. _description => "Heizkoerperthermostat HM-IP",
  729. ccureadingfilter => "^ACTUAL_TEMPERATURE|^BOOST_MODE|^SET_POINT_MODE|^SET_POINT_TEMPERATURE|^LEVEL|^WINDOW_STATE",
  730. ccureadingname => "1.LEVEL:valve_position",
  731. ccuscaleval => "LEVEL:0:1:0:100",
  732. controldatapoint => "1.SET_POINT_TEMPERATURE",
  733. 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/",
  734. genericDeviceType => "thermostat",
  735. statedatapoint => "1.SET_POINT_TEMPERATURE",
  736. stripnumber => 1,
  737. substexcl => "control",
  738. substitute => "SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open",
  739. webCmd => "control:Boost:Auto:Manual:Holiday:on:off",
  740. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  741. },
  742. "HmIP-WTH|HmIP-WTH-2|HmIP-BWTH" => {
  743. _description => "Wandthermostat HM-IP",
  744. controldatapoint => "1.SET_POINT_TEMPERATURE",
  745. 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/",
  746. genericDeviceType => "thermostat",
  747. statedatapoint => "1.SET_POINT_TEMPERATURE",
  748. stripnumber => 1,
  749. substexcl => "control",
  750. substitute => "SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open",
  751. webCmd => "control:Boost:Auto:Manual:Holiday:on:off",
  752. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  753. },
  754. "HM-WDS40-TH-I|HM-WDS10-TH-O|HM-WDS20-TH-O|IS-WDS-TH-OD-S-R3|ASH550I|ASH550" => {
  755. _description => "Temperatur/Luftfeuchte Sensor",
  756. ccureadingfilter => "(^HUMIDITY|^TEMPERATURE)",
  757. statedatapoint => "1.TEMPERATURE",
  758. stripnumber => 1
  759. },
  760. "HM-Sen-RD-O" => {
  761. _description => "Regensensor",
  762. ccureadingfilter => "(STATE|WORKING)",
  763. controldatapoint => "2.STATE",
  764. eventMap => "/datapoint 2.STATE 1:on/datapoint 2.STATE 0:off/",
  765. statedatapoint => "1.STATE",
  766. substitute => "1.STATE!(0|false):dry,(1|true):rain;2.STATE!(0|false):off,(1|true):on",
  767. webCmd => "control",
  768. widgetOverride => "control:uzsuToggle,off,on"
  769. },
  770. "HM-WDS100-C6-O-2" => {
  771. _description => "Funk-Kombisensor",
  772. ccureadingfilter => "(HUMIDITY|TEMPERATURE|WIND|RAIN|SUNSHINE|BRIGHTNESS)",
  773. statedatapoint => "1.TEMPERATURE",
  774. stripnumber => 1,
  775. substitute => "RAINING!(1|true):yes,(0|false):no"
  776. },
  777. "HmIP-SWO-PR|HmIP-SWO-B|HmIP-SWO-PL" => {
  778. _description => "Funk-Wettersensor",
  779. ccureadingfilter => "1!.*",
  780. stripnumber => 1,
  781. substitute => "RAINING,RAIN_COUNTER_OVERFLOW,SUNSHINEDURATION_OVERFLOW,SUNSHINE_THRESHOLD_OVERRUN,WIND_THRESHOLD_OVERRUN!(0|false):no,(1|true):yes"
  782. },
  783. "HM-ES-TX-WM" => {
  784. _description => "Energiezaehler Sensor",
  785. ccureadingfilter => "(ENERGY_COUNTER|POWER)"
  786. },
  787. "HM-CC-VG-1" => {
  788. _description => "Heizungsgruppe",
  789. ccucalculate => "dewpoint:DEWPOINT:1.ACTUAL_TEMPERATURE,1.ACTUAL_HUMIDITY",
  790. ccureadingfilter => "1.(^SET_TEMPERATURE|^ACTUAL|^VALVE|^CONTROL);2.^WINDOW_OPEN;4.^VALVE",
  791. cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus",
  792. controldatapoint => "1.SET_TEMPERATURE",
  793. 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/",
  794. statedatapoint => "1.SET_TEMPERATURE",
  795. stateFormat => "T: 1.ACTUAL_TEMPERATURE° H: 1.ACTUAL_HUMIDITY% D: 1.SET_TEMPERATURE° P: DEWPOINT° V: 4.VALVE_STATE% 1.CONTROL_MODE",
  796. stripnumber => 1,
  797. substexcl => "control",
  798. 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",
  799. webCmd => "control:Auto:Manu:Boost:on:off",
  800. widgetOverride => "control:slider,4.5,0.5,30.5,1"
  801. },
  802. "HM-Sec-MD|HM-Sec-MDIR|HM-Sec-MDIR-2|HM-Sec-MDIR-3" => {
  803. _description => "Bewegungsmelder",
  804. ccureadingfilter => "(BRIGHTNESS|MOTION)",
  805. hmstatevals => "ERROR!1:sabotage",
  806. statedatapoint => "1.MOTION",
  807. substitute => "MOTION!(0|false):no,(1|true):yes;ERROR!0:no,1:sabotage"
  808. },
  809. "HmIP-SMI" => {
  810. _description => "Bewegungsmelder",
  811. ccureadingfilter => "(ILLUMINATION|MOTION)",
  812. eventMap => "/datapoint 1.MOTION_DETECTION_ACTIVE 1:detection-on/datapoint 1.MOTION_DETECTION_ACTIVE 0:detection-off/",
  813. statedatapoint => "1.MOTION",
  814. substitute => "MOTION!(0|false):no,(1|true):yes"
  815. },
  816. "HmIP-SMI55" => {
  817. _description => "Bewegungsmelder",
  818. ccureadingfilter => "(ILLUMINATION|MOTION|PRESS)",
  819. "event-on-update-reading" => ".*",
  820. eventMap => "/datapoint 3.MOTION_DETECTION_ACTIVE 1:detection-on/datapoint 3.MOTION_DETECTION_ACTIVE 0:detection-off/datapoint 3.RESET_MOTION 1:reset/",
  821. statedatapoint => "3.MOTION",
  822. substitute => "PRESS_LONG,PRESS_SHORT!(1|true):pressed,(0|false):released;MOTION,MOTION_DETECTION_ACTIVE!(0|false):no,(1|true):yes;ILLUMINATION_STATUS!0:normal,1:unknown,2:overflow"
  823. },
  824. "HmIP-SPI" => {
  825. _description => "Anwesenheitssensor",
  826. ccureadingfilter => "(ILLUMINATION|PRESENCE)",
  827. controldatapoint => "1.PRESENCE_DETECTION_ACTIVE",
  828. eventMap => "/datapoint 1.RESET_PRESENCE 1:reset/datapoint 1.PRESENCE_DETECTION_ACTIVE 1:detection-on/datapoint 1.PRESENCE_DETECTION_ACTIVE 0:detection-off/",
  829. hmstatevals => "SABOTAGE!(1|true):sabotage",
  830. statedatapoint => "1.PRESENCE_DETECTION_STATE",
  831. stripnumber => 1,
  832. substitute => "PRESENCE_DETECTION_STATE!(0|false):no,(1|true):yes;PRESENCE_DETECTION_ACTIVE!(0|false):off,(1|true):on",
  833. webCmd => "control",
  834. widgetOverride => "control:uzsuToggle,off,on"
  835. },
  836. "HM-Sen-LI-O" => {
  837. _description => "Lichtsensor",
  838. ccureadingfilter => "LUX",
  839. statedatapoint => "1.LUX",
  840. stripnumber => 1
  841. },
  842. "HmIP-SLO" => {
  843. _description => "Lichtsensor",
  844. ccureadingfilter => "_ILLUMINATION\$",
  845. statedatapoint => "1.CURRENT_ILLUMINATION",
  846. stripnumber => 1
  847. },
  848. "HM-CC-SCD" => {
  849. _description => "CO2 Sensor",
  850. ccureadingfilter => "STATE",
  851. statedatapoint => "1.STATE",
  852. substitute => "STATE!0:normal,1:added,2:strong"
  853. },
  854. "HM-Sec-SD-2" => {
  855. _description => "Funk-Rauchmelder",
  856. ccureadingfilter => "STATE",
  857. hmstatevals => "ERROR_ALARM_TEST!1:alarm_test_failed;ERROR_SMOKE_CHAMBER!1:degraded_smoke_chamber",
  858. statedatapoint => "1.STATE",
  859. substitute => "STATE!(0|false):ok,(1|true):alarm;ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded"
  860. },
  861. "HM-Sec-SD-2-Team" => {
  862. _description => "Rauchmeldergruppe",
  863. ccureadingfilter => "STATE",
  864. statedatapoint => "1.STATE",
  865. substitute => "STATE!(0|false):ok,(1|true):alarm"
  866. },
  867. "HmIP-SWSD" => {
  868. _description => "Funk-Rauchmelder",
  869. ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)",
  870. 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/",
  871. statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS",
  872. 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"
  873. },
  874. "HM-Sec-SFA-SM" => {
  875. _description => "Alarmsirene",
  876. ccureadingfilter => "STATE",
  877. hmstatevals => "ERROR_POWER!1:power_failure;ERROR_SABOTAGE!1:sabotage;ERROR_BATTERY!1:battery_defect",
  878. statedatapoint => "1.STATE",
  879. 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"
  880. },
  881. "HM-Sec-Sir-WM" => {
  882. _description => "Funk-Innensirene",
  883. ccureadingfilter => "STATE",
  884. ccureadingname => "1.STATE:STATE_SENSOR1;2.STATE:STATE_SENSOR2;3.STATE:STATE_PANIC",
  885. eventMap => "/datapoint 3.STATE true:panic/",
  886. hmstatevals => "ERROR_SABOTAGE!1:sabotage",
  887. statedatapoint => "4.ARMSTATE",
  888. statevals => "disarmed:0,extsens-armed:1,allsens-armed:2,alarm-blocked:3",
  889. substitute => "ERROR_SABOTAGE!(0|false):no,(1|true):yes;ARMSTATE!0:disarmed,1:extsens_armed,2:allsens_armed,3:alarm_blocked"
  890. },
  891. "HM-LC-RGBW-WM" => {
  892. _description => "Funk-RGBW-Controller",
  893. ccureadingfilter => "(COLOR|PROGRAM|LEVEL)",
  894. ccureadingname => "2.COLOR:+color;3.PROGRAM:+prog",
  895. controldatapoint => "1.LEVEL",
  896. ccuscaleval => "LEVEL:0:1:0:100",
  897. eventMap => "/datapoint 3.PROGRAM :prog/datapoint 2.COLOR :color/",
  898. statedatapoint => "1.LEVEL",
  899. statevals => "on:100,off:0",
  900. stripnumber => 1,
  901. substexcl => "control",
  902. substitute => "LEVEL!#0-0:off,#1-100:on",
  903. webCmd => "control:color:prog:on:off",
  904. widgetOverride => "control:slider,0,1,100 prog:0,1,2,3,4,5,6 color:colorpicker,HUE,0,1,100"
  905. },
  906. "WS550|WS888|WS550Tech|WS550LCB|WS550LCW|HM-WDC7000" => {
  907. _description => "Wetterstation",
  908. ccureadingfilter => "(TEMPERATURE|HUMIDITY|AIR_PRESSURE)",
  909. statedatapoint => "10.TEMPERATURE",
  910. stripnumber => 1
  911. },
  912. "HM-Sec-WDS|HM-Sec-WDS-2" => {
  913. _description => "Funk-Wassermelder",
  914. ccureadingfilter => "STATE",
  915. statedatapoint => "1.STATE",
  916. substitute => "STATE!0:dry,1:wet,2:water"
  917. },
  918. "HM-WDS30-OT2-SM|HM-WDS30-OT2-SM-2" => {
  919. _description => "Temperaturdifferenz-Sensor",
  920. ccureadingfilter => "TEMPERATURE",
  921. stripnumber => 1
  922. },
  923. "HM-OU-CF-Pl|HM-OU-CFM-Pl|HM-OU-CFM-TW" => {
  924. _description => "Funk-Gong mit Signalleuchte mit/ohne Batterie und Speicher",
  925. ccureadingfilter => "STATE",
  926. 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",
  927. statedatapoint => "1.STATE",
  928. statevals => "on:true,off:false",
  929. substitute => "STATE!(0|false):ledOff,(1|true):ledOn;2.STATE!(0|false):soundOff,(1|true):soundOn"
  930. },
  931. "HM-PB-4Dis-WM" => {
  932. _description => "Funk-Display Wandtaster",
  933. ccureadingfilter => "(PRESS_SHORT|PRESS_LONG)",
  934. substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed"
  935. },
  936. "HM-Dis-EP-WM55|HM-Dis-WM55" => {
  937. _description => "E-Paper Display, Display Statusanzeige",
  938. ccureadingfilter => "PRESS",
  939. eventMap => "/datapoint 3.SUBMIT:display/",
  940. substitute => "PRESS_LONG,PRESS_SHORT,PRESS_CONT!(1|true):pressed,(0|false):notPressed;PRESS_LONG_RELEASE!(1|true):release",
  941. widgetOverride => "display:textField"
  942. },
  943. "CUX-HM-TC-IT-WM-W-EU" => {
  944. _description => "CUxD Wandthermostat",
  945. ccureadingfilter => "(TEMP|HUM|DEW)",
  946. stripnumber => 1
  947. }
  948. );
  949. ######################################################################
  950. # Homematic scripts.
  951. # Scripts can be executed via HMCCU set command 'hmscript'. Script
  952. # name must be preceeded by a '!'.
  953. # Example:
  954. # set mydev hmscript !CreateStringVariable MyVar test "Test variable"
  955. ######################################################################
  956. %HMCCU_SCRIPTS = (
  957. "ActivateProgram" => {
  958. description => "Activate or deactivate a CCU program",
  959. syntax => "name, mode",
  960. parameters => 2,
  961. code => qq(
  962. object oPR = dom.GetObject("\$name");
  963. if (oPR) {
  964. oPR.Active(\$mode);
  965. }
  966. )
  967. },
  968. "CreateStringVariable" => {
  969. description => "Create CCU system variable of type STRING",
  970. syntax => "name, unit, init, desc",
  971. parameters => 4,
  972. code => qq(
  973. object oSV = dom.GetObject("\$name");
  974. if (!oSV){
  975. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  976. oSV = dom.CreateObject(OT_VARDP);
  977. oSysVars.Add(oSV.ID());
  978. oSV.Name("\$name");
  979. oSV.ValueType(ivtString);
  980. oSV.ValueSubType(istChar8859);
  981. oSV.DPInfo("\$desc");
  982. oSV.ValueUnit("\$unit");
  983. oSV.State("\$init");
  984. oSV.Internal(false);
  985. oSV.Visible(true);
  986. dom.RTUpdate(false);
  987. }
  988. else {
  989. oSV.State("\$init");
  990. }
  991. )
  992. },
  993. "CreateNumericVariable" => {
  994. description => "Create CCU system variable of type FLOAT",
  995. syntax => "name, unit, init, desc, min, max",
  996. parameters => 6,
  997. code => qq(
  998. object oSV = dom.GetObject("\$name");
  999. if (!oSV){
  1000. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  1001. oSV = dom.CreateObject(OT_VARDP);
  1002. oSysVars.Add(oSV.ID());
  1003. oSV.Name("\$name");
  1004. oSV.ValueType(ivtFloat);
  1005. oSV.ValueSubType(istGeneric);
  1006. oSV.ValueMin(\$min);
  1007. oSV.ValueMax(\$max);
  1008. oSV.DPInfo("\$desc");
  1009. oSV.ValueUnit("\$unit");
  1010. oSV.State("\$init");
  1011. oSV.Internal(false);
  1012. oSV.Visible(true);
  1013. dom.RTUpdate(false);
  1014. }
  1015. else {
  1016. oSV.State("\$init");
  1017. }
  1018. )
  1019. },
  1020. "CreateBoolVariable" => {
  1021. description => "Create CCU system variable of type BOOL",
  1022. syntax => "name, unit, init, desc, valtrue, valfalse",
  1023. parameters => 6,
  1024. code => qq(
  1025. object oSV = dom.GetObject("\$name");
  1026. if (!oSV){
  1027. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  1028. oSV = dom.CreateObject(OT_VARDP);
  1029. oSysVars.Add(oSV.ID());
  1030. oSV.Name("\$name");
  1031. oSV.ValueType(ivtBinary);
  1032. oSV.ValueSubType(istBool);
  1033. oSV.ValueName0("\$value1");
  1034. oSV.ValueName1("\$value2");
  1035. oSV.DPInfo("\$desc");
  1036. oSV.ValueUnit("\$unit");
  1037. oSV.State("\$init");
  1038. dom.RTUpdate(false);
  1039. }
  1040. else {
  1041. oSV.State("\$init");
  1042. }
  1043. )
  1044. },
  1045. "CreateListVariable" => {
  1046. description => "Create CCU system variable of type LIST",
  1047. syntax => "name, unit, init, desc, list",
  1048. parameters => 5,
  1049. code => qq(
  1050. object oSV = dom.GetObject("\$name");
  1051. if (!oSV){
  1052. object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
  1053. oSV = dom.CreateObject(OT_VARDP);
  1054. oSysVars.Add(oSV.ID());
  1055. oSV.Name("\$name");
  1056. oSV.ValueType(ivtInteger);
  1057. oSV.ValueSubType(istEnum);
  1058. oSV.ValueList("\$list");
  1059. oSV.DPInfo("\$desc");
  1060. oSV.ValueUnit("\$unit");
  1061. oSV.State("\$init");
  1062. dom.RTUpdate(false);
  1063. }
  1064. else {
  1065. oSV.State("\$init");
  1066. }
  1067. )
  1068. },
  1069. "DeleteObject" => {
  1070. description => "Delete CCU object",
  1071. syntax => "name, type",
  1072. parameters => 2,
  1073. code => qq(
  1074. object oSV = dom.GetObject("\$name");
  1075. if (oSV) {
  1076. if (oSV.IsTypeOf(\$type)) {
  1077. dom.DeleteObject(oSV.ID());
  1078. }
  1079. }
  1080. )
  1081. },
  1082. "GetVariables" => {
  1083. description => "Query system variables",
  1084. syntax => "",
  1085. parameters => 0,
  1086. code => qq(
  1087. object osysvar;
  1088. string ssysvarid;
  1089. foreach (ssysvarid, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs())
  1090. {
  1091. osysvar = dom.GetObject(ssysvarid);
  1092. WriteLine (osysvar.Name() # "=" # osysvar.Variable() # "=" # osysvar.Value());
  1093. }
  1094. )
  1095. },
  1096. "GetDeviceInfo" => {
  1097. description => "Query device info",
  1098. syntax => "devname, ccuget",
  1099. parameters => 2,
  1100. code => qq(
  1101. string chnid;
  1102. string sDPId;
  1103. object odev = dom.GetObject ("\$devname");
  1104. if (odev) {
  1105. foreach (chnid, odev.Channels()) {
  1106. object ochn = dom.GetObject(chnid);
  1107. if (ochn) {
  1108. foreach(sDPId, ochn.DPs()) {
  1109. object oDP = dom.GetObject(sDPId);
  1110. if (oDP) {
  1111. integer op = oDP.Operations();
  1112. string flags = "";
  1113. if (OPERATION_READ & op) { flags = flags # "R"; }
  1114. if (OPERATION_WRITE & op) { flags = flags # "W"; }
  1115. if (OPERATION_EVENT & op) { flags = flags # "E"; }
  1116. WriteLine ("C;" # ochn.Address() # ";" # ochn.Name() # ";" # oDP.Name() # ";" # oDP.ValueType() # ";" # oDP.\$ccuget() # ";" # flags);
  1117. }
  1118. }
  1119. }
  1120. }
  1121. }
  1122. else {
  1123. WriteLine ("ERROR: Device not found");
  1124. }
  1125. )
  1126. },
  1127. "GetDevice" => {
  1128. description => "Query CCU device or channel",
  1129. syntax => "name",
  1130. parameters => 1,
  1131. code => qq(
  1132. object odev=dom.GetObject("\$name");
  1133. if (odev) {
  1134. if (odev.IsTypeOf (OT_CHANNEL)) {
  1135. string devid = odev.Device();
  1136. odev = dom.GetObject (devid);
  1137. }
  1138. string intid=odev.Interface();
  1139. string intna=dom.GetObject(intid).Name();
  1140. string chnid;
  1141. integer cc=0;
  1142. foreach (chnid, odev.Channels()) {
  1143. object ochn=dom.GetObject(chnid);
  1144. WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection());
  1145. cc=cc+1;
  1146. }
  1147. WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc);
  1148. }
  1149. )
  1150. },
  1151. "GetDeviceList" => {
  1152. description => "Query CCU devices, channels and interfaces",
  1153. syntax => "",
  1154. parameters => 0,
  1155. code => qq(
  1156. string devid;
  1157. string chnid;
  1158. string sifid;
  1159. string prgid;
  1160. foreach(devid, root.Devices().EnumUsedIDs()) {
  1161. object odev=dom.GetObject(devid);
  1162. if(odev) {
  1163. var intid=odev.Interface();
  1164. object oiface=dom.GetObject(intid);
  1165. if(oiface) {
  1166. string intna=oiface.Name();
  1167. integer cc=0;
  1168. foreach (chnid, odev.Channels()) {
  1169. object ochn=dom.GetObject(chnid);
  1170. WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection());
  1171. cc=cc+1;
  1172. }
  1173. WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc);
  1174. }
  1175. }
  1176. }
  1177. foreach(sifid, root.Interfaces().EnumIDs()) {
  1178. object oIf=dom.GetObject(sifid);
  1179. if (oIf) {
  1180. WriteLine("I;" # oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl());
  1181. }
  1182. }
  1183. string prgid;
  1184. foreach(prgid, dom.GetObject(ID_PROGRAMS).EnumIDs()) {
  1185. object oProg=dom.GetObject(prgid);
  1186. if(oProg) {
  1187. WriteLine ("P;" # oProg.Name() # ";" # oProg.Active() # ";" # oProg.Internal());
  1188. }
  1189. }
  1190. )
  1191. },
  1192. "GetDatapointsByChannel" => {
  1193. description => "Query datapoints of channel list",
  1194. syntax => "list, ccuget",
  1195. parameters => 2,
  1196. code => qq(
  1197. string sDPId;
  1198. string sChnName;
  1199. string sChnList = "\$list";
  1200. integer c = 0;
  1201. foreach (sChnName, sChnList.Split(",")) {
  1202. object oChannel = dom.GetObject (sChnName);
  1203. if (oChannel) {
  1204. foreach(sDPId, oChannel.DPs()) {
  1205. object oDP = dom.GetObject(sDPId);
  1206. if (oDP) {
  1207. if (OPERATION_READ & oDP.Operations()) {
  1208. if (oDP.TypeName() == "HSSDP") {
  1209. WriteLine (sChnName # "=" # oDP.Name() # "=" # oDP.\$ccuget());
  1210. }
  1211. else {
  1212. WriteLine (sChnName # "=sysvar.link." # oDP.Name() # "=" # oDP.\$ccuget());
  1213. }
  1214. c = c+1;
  1215. }
  1216. }
  1217. }
  1218. }
  1219. }
  1220. WriteLine (c);
  1221. )
  1222. },
  1223. "GetDatapointsByDevice" => {
  1224. description => "Query datapoints of device list",
  1225. syntax => "list, ccuget",
  1226. parameters => 2,
  1227. code => qq(
  1228. string chnid;
  1229. string sDPId;
  1230. string sDevName;
  1231. string sDevList = "\$list";
  1232. integer c = 0;
  1233. foreach (sDevName, sDevList.Split(",")) {
  1234. object odev = dom.GetObject (sDevName);
  1235. if (odev) {
  1236. foreach (chnid, odev.Channels()) {
  1237. object ochn = dom.GetObject(chnid);
  1238. if (ochn) {
  1239. foreach(sDPId, ochn.DPs()) {
  1240. object oDP = dom.GetObject(sDPId);
  1241. if (oDP) {
  1242. if (OPERATION_READ & oDP.Operations()) {
  1243. if (oDP.TypeName() == "HSSDP") {
  1244. WriteLine (ochn.Name() # "=" # oDP.Name() # "=" # oDP.\$ccuget());
  1245. }
  1246. else {
  1247. WriteLine (ochn.Name() # "=sysvar.link." # oDP.Name() # "=" # oDP.\$ccuget());
  1248. }
  1249. c = c+1;
  1250. }
  1251. }
  1252. }
  1253. }
  1254. }
  1255. }
  1256. }
  1257. WriteLine (c);
  1258. )
  1259. },
  1260. "GetDatapointList" => {
  1261. description => "Query datapoint information of device list",
  1262. syntax => "list",
  1263. parameters => 1,
  1264. code => qq(
  1265. string chnid;
  1266. string sDPId;
  1267. string sDevice;
  1268. string sDevList = "\$list";
  1269. foreach (sDevice, sDevList.Split(",")) {
  1270. object odev = dom.GetObject (sDevice);
  1271. if (odev) {
  1272. string intid = odev.Interface();
  1273. string intna = dom.GetObject(intid).Name();
  1274. string sType = odev.HssType();
  1275. foreach (chnid, odev.Channels()) {
  1276. object ochn = dom.GetObject(chnid);
  1277. if (ochn) {
  1278. string sAddr = ochn.Address();
  1279. string sChnNo = sAddr.StrValueByIndex(":",1);
  1280. foreach(sDPId, ochn.DPs()) {
  1281. object oDP = dom.GetObject(sDPId);
  1282. if (oDP) {
  1283. string sDPName = oDP.Name();
  1284. if (sDPName.Find(".") >= 0) {
  1285. sDPName = sDPName.StrValueByIndex(".",2);
  1286. }
  1287. WriteLine (intna # ";" # sAddr # ";" # sType # ";" # sChnNo # ";" # sDPName # ";" # oDP.ValueType() # ";" # oDP.Operations());
  1288. }
  1289. }
  1290. }
  1291. }
  1292. }
  1293. }
  1294. )
  1295. },
  1296. "GetChannel" => {
  1297. description => "Get datapoints of channel list",
  1298. syntax => "list, ccuget",
  1299. parameters => 2,
  1300. code => qq(
  1301. string sDPId;
  1302. string sChannel;
  1303. string sChnList = "\$list";
  1304. foreach (sChannel, sChnList.Split(",")) {
  1305. object oChannel = dom.GetObject (sChannel);
  1306. if (oChannel) {
  1307. foreach(sDPId, oChannel.DPs()) {
  1308. object oDP = dom.GetObject(sDPId);
  1309. if (oDP) {
  1310. WriteLine (sChannel # "=" # oDP.Name() # "=" # oDP.\$ccuget());
  1311. }
  1312. }
  1313. }
  1314. }
  1315. )
  1316. },
  1317. "GetInterfaceList" => {
  1318. description => "Get CCU RPC interfaces",
  1319. syntax => "",
  1320. parameters => 0,
  1321. code => qq(
  1322. string sifId;
  1323. foreach(sifId, root.Interfaces().EnumIDs()) {
  1324. object oIf = dom.GetObject(sifId);
  1325. if (oIf) {
  1326. WriteLine (oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl());
  1327. }
  1328. }
  1329. )
  1330. },
  1331. "ClearUnreachable" => {
  1332. description => "Clear device unreachable alarms in CCU",
  1333. syntax => "",
  1334. parameters => 0,
  1335. code => qq(
  1336. string itemID;
  1337. string address;
  1338. object aldp_obj;
  1339. foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
  1340. address = dom.GetObject(itemID).Address();
  1341. aldp_obj = dom.GetObject("AL-" # address # ":0.STICKY_UNREACH");
  1342. if (aldp_obj) {
  1343. if (aldp_obj.Value()) {
  1344. aldp_obj.AlReceipt();
  1345. }
  1346. }
  1347. }
  1348. )
  1349. },
  1350. "GetNameByAddress" => {
  1351. description => "Get device or channel name by address",
  1352. syntax => "iface, address",
  1353. parameters => 2,
  1354. code => qq(
  1355. object lObjDevice = xmlrpc.GetObjectByHSSAddress(interfaces.Get("\$iface"),"\$address");
  1356. if (lObjDevice) {
  1357. WriteLine (lObjDevice.Name());
  1358. }
  1359. )
  1360. },
  1361. "GetGroupDevices" => {
  1362. description => "Get virtual group configuration",
  1363. syntax => "",
  1364. parameters => 0,
  1365. code => qq(
  1366. string lGetOut = "";
  1367. string lGetErr = "";
  1368. string lCommand = "cat /usr/local/etc/config/groups.gson";
  1369. integer lResult;
  1370. lResult = system.Exec(lCommand,&lGetOut,&lGetErr);
  1371. if(lResult == 0) {
  1372. WriteLine(lGetOut);
  1373. }
  1374. )
  1375. }
  1376. );
  1377. 1;