diff --git a/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm b/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm new file mode 100644 index 000000000..fd23ac807 --- /dev/null +++ b/fhem/contrib/HMCCU/FHEM/HMCCUConf.pm @@ -0,0 +1,1673 @@ +######################################################################### +# +# HMCCUConf.pm +# +# $Id: HMCCUConf.pm 18552 2019-02-10 11:52:28Z zap $ +# +# Version 4.7 +# +# Configuration parameters for HomeMatic devices. +# +# (c) 2020 by zap (zap01 t-online de) +# +######################################################################### + +package HMCCUConf; + +use strict; +use warnings; + +use vars qw(%HMCCU_ROLES); +use vars qw(%HMCCU_ATTR); +use vars qw(%HMCCU_CHN_DEFAULTS); +use vars qw(%HMCCU_DEV_DEFAULTS); +use vars qw(%HMCCU_SCRIPTS); + +###################################################################### +# Channel roles with commands and state values +###################################################################### + +%HMCCU_ROLES = ( + 'KEY' => { + 'PRESS_SHORT' => 'on:true press:true' + }, + 'BLIND' => { + 'LEVEL' => 'pct:?level level:?level open:100 close:0', + 'STOP' => 'stop:true' + }, + 'SWITCH' => { + 'STATE' => 'on:true off:false' + }, + 'DIMMER' => { + 'LEVEL' => 'pct:?level level:?level on:100 off:0', + 'RAMP_STOP' => 'stop:true' + }, + 'THERMALCONTROL_TRANSMIT' => { + 'SET_TEMPERATURE' => 'desiredTemp:?temperature', + 'MANU_MODE' => 'manu:?temperature on:30.5 off=4.5', + 'AUTO_MODE' => 'auto:true', + 'BOOST_MODE' => 'boost:true' + }, + 'CLIMATECONTROL_RT_TRANSCEIVER' => { + 'SET_TEMPERATURE' => 'desiredTemp:?temperature', + 'MANU_MODE' => 'manu:?temperature on:30.5 off=4.5', + 'AUTO_MODE' => 'auto:true', + 'BOOST_MODE' => 'boost:true' + } +); + +###################################################################### +# Channel roles with attributes +###################################################################### + +%HMCCU_ATTR = ( + 'BLIND' => { + 'webCmd' => 'up:down:stop:control', + 'widgetOverride' => 'control:slider,0,10,100' + }, + 'SWITCH' => { + 'webCmd' => 'control', + 'widgetOverride' => 'control:uzsuToggle,off,on' + }, + 'DIMMER' => { + 'webCmd' => 'control', + 'widgetOverride' => 'pct:slider,0,10,100 level:slider,0,10,100 control:slider,0,10,100' + }, + 'THERMALCONTROL_TRANSMIT' => { + 'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus', + 'webCmd' => 'desiredTemp:auto:manu:boost:on:off', + 'widgetOverride' => 'control:slider,4.5,0.5,30.5,1 desiredTemp:slider,4.5,0.5,30.5,1' + }, + 'CLIMATECONTROL_RT_TRANSCEIVER' => { + 'cmdIcon' => 'auto:sani_heating_automatic manu:sani_heating_manual boost:sani_heating_boost on:general_an off:general_aus', + 'webCmd' => 'desiredTemp', + 'widgetOverride' => 'control:slider,4.5,0.5,30.5,1 desiredTemp:slider,4.5,0.5,30.5,1' + } +); + +###################################################################### +# Default attributes for Homematic devices of type HMCCUCHN +###################################################################### + +%HMCCU_CHN_DEFAULTS = ( + "HM-Sec-SCo|HM-Sec-SC|HM-Sec-SC-2|HMIP-SWDO" => { + _description => "Tuer/Fensterkontakt optisch und magnetisch", + _channels => "1", + ccureadingfilter => "STATE", + hmstatevals => "ERROR!7:sabotage;SABOTAGE!1:sabotage", + statedatapoint => "STATE", + substitute => "STATE!(0|false):closed,(1|true):open" + }, + "HmIP-SWDO-I" => { + _description => "Tuer/Fensterkontakt verdeckt", + _channels => "1", + ccureadingfilter => "STATE", + hmstatevals => "SABOTAGE!1:sabotage", + statedatapoint => "STATE", + substitute => "STATE!(0|false):closed,(1|true):open" + }, + "HM-Sec-RHS|HM-Sec-RHS-2" => { + _description => "Fenster Drehgriffkontakt", + _channels => "1", + ccureadingfilter => "STATE", + hmstatevals => "ERROR!1:sabotage", + statedatapoint => "STATE", + substitute => "STATE!0:closed,1:tilted,2:open;ERROR!0:no,1:sabotage" + }, + "HmIP-SRH" => { + _description => "Fenster Drehgriffkontakt", + _channels => "1", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + substitute => "STATE!0:closed,1:tilted,2:open" + }, + "HmIP-SAM" => { + _description => "Beschleunigungssensor", + _channels => "1", + ccureadingfilter => "MOTION", + statedatapoint => "MOTION", + substitute => "MOTION!(0|false):no,(1|true):yes" + }, + "HM-Sec-Key|HM-Sec-Key-S|HM-Sec-Key-O|HM-Sec-Key-Generic" => { + _description => "Funk-Tuerschlossantrieb KeyMatic", + _channels => "1", + ccureadingfilter => "(STATE|INHIBIT)", + eventMap => "/datapoint OPEN true:open/", + hmstatevals => "ERROR!1:clutch_failure,2:motor_aborted", + statedatapoint => "STATE", + statevals => "lock:false,unlock:true", + 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" + }, + "HM-LC-Sw1-Pl-CT-R1" => { + _description => "Schaltaktor mit Klemmanschluss", + _channels => "1", + ccureadingfilter => "(STATE|WORKING)", + cmdIcon => "press:general_an", + eventMap => "/on-for-timer 1:press/", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes", + webCmd => "press" + }, + "HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => { + _description => "Steckdose", + _channels => "1", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off", + webCmd => "devstate", + widgetOverride => "devstate:uzsuToggle,off,on" + }, + "HmIP-PS" => { + _description => "Steckdose", + _channels => "3", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off", + webCmd => "devstate", + widgetOverride => "devstate:uzsuToggle,off,on" + }, + "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" => { + _description => "Funk-Anschnitt-Dimmaktor", + _channels => "1", + ccureadingfilter => "(^LEVEL\$|DIRECTION)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "on:general_an off:general_aus", + controldatapoint => "LEVEL", + hmstatevals => "ERROR!1:load_failure", + statedatapoint => "LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + substitute => "ERROR!0:no,1:load_failure:yes;LEVEL!#0-0:off,#1-100:on", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => { + _description => "Funk-PWM-Dimmaktor", + _channels => "1", + ccureadingfilter => "(^LEVEL\$|DIRECTION)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "on:general_an off:general_aus", + controldatapoint => "LEVEL", + hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat", + statedatapoint => "LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "HmIP-BDT" => { + _description => "Dimmaktor", + _channels => "4", + ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|ACTIVITY_STATE|LEVEL)", + ccuscaleval => "LEVEL:0:1:0:100", + controldatapoint => "LEVEL", + hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat", + statedatapoint => "LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "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" => { + _description => "Funk-Abschnitt-Dimmaktor", + _channels => "1", + ccureadingfilter => "(^LEVEL\$|DIRECTION)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "on:general_an off:general_aus", + controldatapoint => "LEVEL", + hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat;ERROR_OVERLOAD!1:error_overload", + statedatapoint => "LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "HmIP-FCI6" => { + _description => "IP Kontaktschnittstelle Unterputz 6-fach", + _channels => "1,2,3,4,5,6", + ccureadingfilter => "STATE", + controldatapoint => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(0|false):off,(1|true):on", + webCmd => "devstate", + widgetOverride => "devstate:uzsuToggle,off,on" + }, + "HM-PB-2-FM" => { + _description => "Funk-Wandtaster 2-fach", + _channels => "1,2", + ccureadingfilter => "PRESS", + statedatapoint => "PRESS_SHORT", + statevals => "press:true", + substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes" + }, + "HmIP-WRC6" => { + _description => "Wandtaster 6-fach", + _channels => "1,2,3,4,5,6", + ccureadingfilter => "PRESS", + statedatapoint => "PRESS_SHORT", + statevals => "press:true", + substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed,(0|false):released" + }, + "HM-SwI-3-FM" => { + _description => "Funk-Schalterschnittstelle", + _channels => "1,2,3", + ccureadingfilter => "PRESS", + statedatapoint => "PRESS", + statevals => "press:true", + substitute => "PRESS!(1|true):pressed,(0|false):released" + }, + "HM-PBI-4-FM" => { + _description => "Funk-Tasterschnittstelle", + _channels => "1,2,3,4", + ccureadingfilter => "PRESS", + statedatapoint => "PRESS_SHORT", + statevals => "press:true", + substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes" + }, + "HM-RC-Key4-2|HM-RC-Key4-3|HM-RC-Sec4-2|HM-RC-Sec4-3" => { + _description => "Funk-Handsender", + _channels => "1,2,3,4", + ccureadingfilter => "PRESS", + "event-on-update-reading" => ".*", + statedatapoint => "PRESS_SHORT", + substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed" + }, + "HM-LC-Sw1PBU-FM" => { + _description => "Unterputz Schaltaktor für Markenschalter", + _channels => "1", + ccureadingfilter => "STATE", + controldatapoint => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-LC-Sw2PBU-FM" => { + _description => "Funk-Schaltaktor 2-fach", + _channels => "1,2", + ccureadingfilter => "STATE", + controldatapoint => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HmIP-BSM" => { + _description => "Schalt-Mess-Aktor", + _channels => "4", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + controldatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-SCI-3-FM" => { + _description => "3 Kanal Schliesserkontakt", + _channels => "1,2,3", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off" + }, + "HM-MOD-Re-8" => { + _description => "8 Kanal Empfangsmodul", + _channels => "1,2,3,4,5,6,7,8", + ccureadingfilter => "(STATE|WORKING)", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off;WORKING!(1|true):yes,(0|false):no" + }, + "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" => { + _description => "1 Kanal Funk-Schaltaktor", + _channels => "1", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off" + }, + "HM-LC-Sw2-SM|HM-LC-Sw2-FM|HM-LC-Sw2-PB-FM|HM-LC-Sw2-DR" => { + _description => "2 Kanal Funk-Schaltaktor", + _channels => "1,2", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off" + }, + "HM-LC-Sw4-DR|HM-LC-Sw4-WM|HM-LC-Sw4-PCB|HM-LC-Sw4-SM" => { + _description => "4 Kanal Funk-Schaltaktor", + _channels => "1,2,3,4", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off" + }, + "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" => { + _description => "Jalousienaktor", + _channels => "1", + ccureadingfilter => "(LEVEL|INHIBIT|DIRECTION|WORKING)", + ccureadingname => "LEVEL:+pct", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down", + controldatapoint => "LEVEL", + eventMap => "/datapoint STOP true:stop/datapoint LEVEL 0:down/datapoint LEVEL 100:up/", + statedatapoint => "LEVEL", + stripnumber => 1, + substexcl => "control|pct", + substitute => "LEVEL!#0-0:closed,#100-100:open;DIRECTION!0:stop,1:up,2:down,3:undefined;WORKING!(0|false):no,(1|true):yes", + webCmd => "control:up:stop:down", + widgetOverride => "control:slider,0,10,100" + }, + "HmIP-BROLL|HmIP-FROLL" => { + _description => "Rollladenaktor", + _channels => "4", + ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|LEVEL|ACTIVITY_STATE)", + ccureadingname => "LEVEL:+pct", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down", + controldatapoint => "LEVEL", + hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat", + eventMap => "/datapoint STOP true:stop/datapoint LEVEL 0:down/datapoint LEVEL 100:up/", + statedatapoint => "LEVEL", + stripnumber => 1, + substexcl => "control|pct", + 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", + webCmd => "control:up:stop:down", + widgetOverride => "control:slider,0,10,100" + }, + "HM-WDS40-TH-I|HM-WDS10-TH-O|HM-WDS20-TH-O|IS-WDS-TH-OD-S-R3|ASH550I|ASH550" => { + _description => "Temperatur/Luftfeuchte Sensor", + _channels => "1", + ccureadingfilter => "(^HUMIDITY|^TEMPERATURE)", + statedatapoint => "TEMPERATURE", + stripnumber => 1 + }, + "HM-WDS100-C6-O-2" => { + _description => "Funk-Kombisensor", + _channels => "1", + ccureadingfilter => "(HUMIDITY|TEMPERATURE|WIND|RAIN|SUNSHINE|BRIGHTNESS)", + statedatapoint => "TEMPERATURE", + stripnumber => 1, + substitute => "RAINING!(1|true):yes,(0|false):no" + }, + "HmIP-SWO-PR|HmIP-SWO-B|HmIP-SWO-PL" => { + _description => "Funk-Wettersensor", + _channels => "1", + ccureadingfilter => "1!.*", + stripnumber => 1, + substitute => "RAINING,RAIN_COUNTER_OVERFLOW,SUNSHINEDURATION_OVERFLOW,SUNSHINE_THRESHOLD_OVERRUN,WIND_THRESHOLD_OVERRUN!(0|false):no,(1|true):yes" + }, + "HM-Sec-MD|HM-Sec-MDIR|HM-Sec-MDIR-2|HM-Sec-MDIR-3|Hm-Sen-MDIR-O-3" => { + _description => "Bewegungsmelder", + _channels => "1", + ccureadingfilter => "(BRIGHTNESS|MOTION)", + hmstatevals => "ERROR!1:sabotage", + statedatapoint => "MOTION", + substitute => "MOTION!(0|false):no,(1|true):yes;ERROR!0:no,1:sabotage" + }, + "HmIP-SMI" => { + _description => "Bewegungsmelder", + _channels => "1", + ccureadingfilter => "(ILLUMINATION|MOTION)", + controldatapoint => "MOTION_DETECTION_ACTIVE", + eventMap => "/datapoint RESET_MOTION 1:reset/datapoint MOTION_DETECTION_ACTIVE 1:detection-on/datapoint MOTION_DETECTION_ACTIVE 0:detection-off/", + hmstatevals => "SABOTAGE!(1|true):sabotage", + statedatapoint => "MOTION", + substitute => "MOTION!(0|false):no,(1|true):yes;MOTION_DETECTION_ACTIVE!(0|false):off,(1|true):on", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HmIP-SPI" => { + _description => "Anwesenheitssensor", + _channels => "1", + ccureadingfilter => "(ILLUMINATION|PRESENCE)", + controldatapoint => "PRESENCE_DETECTION_ACTIVE", + eventMap => "/datapoint RESET_PRESENCE 1:reset/datapoint PRESENCE_DETECTION_ACTIVE 1:detection-on/datapoint PRESENCE_DETECTION_ACTIVE 0:detection-off/", + hmstatevals => "SABOTAGE!(1|true):sabotage", + statedatapoint => "PRESENCE_DETECTION_STATE", + stripnumber => 1, + substitute => "PRESENCE_DETECTION_STATE!(0|false):no,(1|true):yes;PRESENCE_DETECTION_ACTIVE!(0|false):off,(1|true):on", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-Sen-LI-O" => { + _description => "Lichtsensor", + _channels => "1", + ccureadingfilter => "LUX", + statedatapoint => "LUX", + stripnumber => 1 + }, + "HmIP-SLO" => { + _description => "Lichtsensor", + _channels => "1", + ccureadingfilter => "_ILLUMINATION\$", + statedatapoint => "CURRENT_ILLUMINATION", + stripnumber => 1 + }, + "HM-CC-SCD" => { + _description => "CO2 Sensor", + _channels => "1", + statedatapoint => "STATE", + substitute => "STATE!0:normal,1:added,2:strong" + }, + "HM-Sec-SD-2" => { + _description => "Funk-Rauchmelder", + _channels => "1", + ccureadingfilter => "STATE", + hmstatevals => "ERROR_ALARM_TEST!1:alarm_test_failed;ERROR_SMOKE_CHAMBER!1:degraded_smoke_chamber", + statedatapoint => "STATE", + substitute => "ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded" + }, + "HmIP-SWSD" => { + _description => "Funk-Rauchmelder", + _channels => "1", + ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)", + 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/", + statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS", + 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" + }, + "HM-Sec-SFA-SM" => { + _description => "Alarmsirene", + _channels => "1", + ccureadingfilter => "STATE", + hmstatevals => "ERROR_POWER!1:power_failure;ERROR_SABOTAGE!1:sabotage;ERROR_BATTERY!1:battery_defect", + statedatapoint => "STATE", + 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" + }, + "WS550|WS888|WS550Tech|WS550LCB|WS550LCW|HM-WDC7000" => { + _description => "Wetterstation", + _channels => "10", + ccureadingfilter => "(TEMPERATURE|HUMIDITY|AIR_PRESSURE)", + statedatapoint => "TEMPERATURE", + stripnumber => 1 + }, + "HM-Sec-WDS|HM-Sec-WDS-2" => { + _description => "Funk-Wassermelder", + _channels => "1", + ccureadingfilter => "STATE", + statedatapoint => "STATE", + substitute => "STATE!0:dry,1:wet,2:water" + }, + "HM-WDS30-OT2-SM|HM-WDS30-OT2-SM-2" => { + _description => "Temperaturdifferenz-Sensor", + _channels => "1,2,3,4,5", + ccureadingfilter => "TEMPERATURE", + statedatapoint => "TEMPERATURE", + stripnumber => 1 + }, + "HM-OU-LED16|HM-OU-X" => { + _description => "Statusanzeige 16 Kanal LED", + _channels => "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16", + ccureadingfilter => "PRESS_SHORT|LED_STATUS", + eventMap => "/datapoint LED_SLEEP_MODE 0:sleep-off/datapoint LED_SLEEP_MODE 1:sleep-on/", + statedatapoint => "LED_STATUS", + statevals => "off:0,red:1,green:2,orange:3", + substitute => "LED_STATUS!0:off,1:red:2:green:3:orange" + } +); + +###################################################################### +# Default attributes for Homematic devices of type HMCCUDEV +###################################################################### + +%HMCCU_DEV_DEFAULTS = ( + "CCU2" => { + _description => "HomeMatic CCU2", + "ccudef-readingformat" => 'datapoint', + "ccudef-readingname" => '^(.+\.)?BATTERY_STATE\$:batteryLevel;^(.+\.)?TEMPERATURE\$:+temperature;^(.+\.)?SET_TEMPERATURE\$:+desired-temp;^(.+\.)?HUMIDITY\$:+humidity;^(.+\.)?LEVEL\$:+pct;^(.+\.)?CONTROL_MODE\$:+controlMode' + }, + "HM-Sec-SCo|HM-Sec-SC|HM-Sec-SC-2|HMIP-SWDO" => { + _description => "Tuer/Fensterkontakt optisch und magnetisch", + ccureadingfilter => "STATE", + hmstatevals => "ERROR!7:sabotage;SABOTAGE!1:sabotage", + statedatapoint => "1.STATE", + substitute => "STATE!(0|false):closed,(1|true):open" + }, + "HmIP-SWDO-I" => { + _description => "Tuer/Fensterkontakt verdeckt", + ccureadingfilter => "STATE", + hmstatevals => "SABOTAGE!1:sabotage", + statedatapoint => "1.STATE", + substitute => "STATE!(0|false):closed,(1|true):open" + }, + "HM-Sec-RHS|HM-Sec-RHS-2" => { + _description => "Fenster Drehgriffkontakt", + ccureadingfilter => "STATE", + hmstatevals => "ERROR!1:sabotage", + statedatapoint => "1.STATE", + substitute => "STATE!0:closed,1:tilted,2:open;ERROR!0:no,1:sabotage" + }, + "HMIP-SRH" => { + _description => "Fenster Drehgriffkontakt", + ccureadingfilter => "STATE", + statedatapoint => "1.STATE", + substitute => "STATE!0:closed,1:tilted,2:open" + }, + "HmIP-SAM" => { + _description => "Beschleunigungssensor", + ccureadingfilter => "1.MOTION", + statedatapoint => "1.MOTION", + substitute => "MOTION!(0|false):no,(1|true):yes" + }, + "HM-Sec-Key|HM-Sec-Key-S|HM-Sec-Key-O|HM-Sec-Key-Generic" => { + _description => "Funk-Tuerschlossantrieb KeyMatic", + ccureadingfilter => "(STATE|INHIBIT)", + eventMap => "/datapoint 1.OPEN true:open/", + hmstatevals => "ERROR!1:clutch_failure,2:motor_aborted", + statedatapoint => "1.STATE", + statevals => "lock:false,unlock:true", + 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" + }, + "HM-Sec-Win|HM-Sec-Win-Generic" => { + _description => "WinMatic", + ccureadingfilter => "(STATE_UNCERTAIN|INHIBIT|LEVEL|STATUS)", + ccuscaleval => "LEVEL:0:1:0:100,SPEED:0.1:0:100", + eventMap => "/datapoint 1.STOP true:stop/", + statedatapoint => "1.LEVEL", + statevals => "open:100,close:0", + stripnumber => 1, + 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" + }, + "HM-LC-Sw1-Pl-CT-R1" => { + _description => "Schaltaktor mit Klemmanschluss", + ccureadingfilter => "(STATE|WORKING)", + cmdIcon => "press:general_an", + eventMap => "/on-for-timer 1:press/", + statedatapoint => "1.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(0|false):off,(1|true):on;WORKING!(0|false):no,(1|true):yes", + webCmd => "press" + }, + "HM-LC-Sw1-Pl-2|HM-LC-Sw1-Pl-DN-R1" => { + _description => "Steckdose", + ccureadingfilter => "STATE", + statedatapoint => "1.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off", + webCmd => "devstate", + widgetOverride => "devstate:uzsuToggle,off,on" + }, + "HMIP-PS" => { + _description => "Steckdose IP", + ccureadingfilter => "STATE", + statedatapoint => "3.STATE", + statevals => "on:1,off:0", + substitute => "STATE!(1|true):on,(0|false):off", + webCmd => "devstate", + widgetOverride => "devstate:uzsuToggle,off,on" + }, + "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" => { + _description => "Steckdose mit Energiemessung", + ccureadingfilter => "(STATE|CURRENT|ENERGY_COUNTER|POWER)", + controldatapoint => "1.STATE", + statedatapoint => "1.STATE", + statevals => "on:1,off:0", + stripnumber => 1, + substitute => "STATE!(1|true):on,(0|false):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HMIP-PSM" => { + _description => "Steckdose mit Energiemessung IP", + ccureadingfilter => "3.STATE;6.(CURRENT|^ENERGY_COUNTER\$|POWER)", + controldatapoint => "3.STATE", + statedatapoint => "3.STATE", + statevals => "on:true,off:false", + stripnumber => 1, + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "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" => { + _description => "Funk-Anschnitt-Dimmaktor", + ccureadingfilter => "(^LEVEL\$|DIRECTION)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "on:general_an off:general_aus", + controldatapoint => "1.LEVEL", + hmstatevals => "ERROR!1:load_failure", + statedatapoint => "1.LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + substitute => "ERROR!0:no,1:load_failure;LEVEL!#0-0:off,#1-100:on", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "HM-LC-Dim1PWM-CV|HM-LC-Dim1PWM-CV-2" => { + _description => "Funk-PWM-Dimmaktor", + ccureadingfilter => "(^LEVEL\$|DIRECTION)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "on:general_an off:general_aus", + controldatapoint => "1.LEVEL", + hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat", + statedatapoint => "1.LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "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" => { + _description => "Funk-Abschnitt-Dimmaktor", + ccureadingfilter => "(^LEVEL\$|DIRECTION)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "on:general_an off:general_aus", + controldatapoint => "1.LEVEL", + hmstatevals => "ERROR_REDUCED!1:error_reduced;ERROR_OVERHEAT!1:error_overheat;ERROR_OVERLOAD!1:error_overload", + statedatapoint => "1.LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "HmIP-BDT" => { + _description => "Dimmaktor", + ccureadingfilter => "(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|ACTIVITY_STATE|LEVEL)", + ccuscaleval => "LEVEL:0:1:0:100", + controldatapoint => "4.LEVEL", + hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat", + statedatapoint => "4.LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:on:off", + widgetOverride => "control:slider,0,10,100" + }, + "HM-PB-2-FM" => { + _description => "Funk-Wandtaster 2-fach", + ccureadingfilter => "PRESS", + substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes" + }, + "HmIP-WRC6" => { + _description => "Wandtaster 6-fach", + ccureadingfilter => "PRESS", + substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed,(0|false):released" + }, + "HmIP-BSL" => { + _description => "Schaltaktor mit Signalleuchte", + ccureadingfilter => "(LEVEL|STATE|COLOR|PRESS)", + ccuscaleval => "LEVEL:0:1:0:100", + statedatapoint => "4.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(0|false):off,(1|true):on;COLOR!0:black,1:blue,2:green,3:turquoise,4:red,5:purple,6:yellow,7:white" + }, + "HM-SwI-3-FM" => { + _description => "Funk-Schalterschnittstelle", + ccureadingfilter => "PRESS", + statevals => "press:true", + substitute => "PRESS!(1|true):pressed,(0|false):released" + }, + "HM-PBI-4-FM" => { + _description => "Funk-Tasterschnittstelle", + ccureadingfilter => "PRESS", + substitute => "PRESS_SHORT,PRESS_LONG,PRESS_CONT!(1|true):pressed,(0|false):released;PRESS_LONG_RELEASE!(0|false):no,(1|true):yes" + }, + "HM-RC-Key4-2|HM-RC-Key4-3|HM-RC-Sec4-2|HM-RC-Sec4-3" => { + _description => "Funk-Handsender", + ccureadingfilter => "PRESS", + "event-on-update-reading" => ".*", + substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed" + }, + "HM-LC-Sw1PBU-FM" => { + _description => "Unterputz Schaltaktor für Markenschalter", + ccureadingfilter => "STATE", + controldatapoint => "1.STATE", + statedatapoint => "1.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-LC-Sw2PBU-FM" => { + _description => "Funk-Schaltaktor 2-fach", + ccureadingfilter => "STATE", + controldatapoint => "1.STATE", + statedatapoint => "1.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HmIP-BSM" => { + _description => "Schalt-Mess-Aktor", + ccureadingfilter => "(STATE|PRESS)", + statedatapoint => "4.STATE", + controldatapoint => "4.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(true|1):on,(false|0):off", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-LC-SW4-BA-PCB|HM-SCI-3-FM" => { + _description => "4 Kanal Funk Schaltaktor für Batteriebetrieb, 3 Kanal Schließerkontakt", + ccureadingfilter => "STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off" + }, + "HM-MOD-Re-8" => { + _description => "8 Kanal Empfangsmodul", + ccureadingfilter => "(STATE|WORKING)", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off;WORKING!(1|true):yes,(0|false):no" + }, + "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" => { + _description => "1 Kanal Funk-Schaltaktor", + ccureadingfilter => "STATE", + statedatapoint => "1.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(1|true):on,(0|false):off" + }, + "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" => { + _description => "Jalousienaktor", + ccureadingfilter => "(LEVEL|INHIBIT|DIRECTION|WORKING)", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down", + controldatapoint => "1.LEVEL", + eventMap => "/datapoint 1.STOP true:stop/datapoint 1.LEVEL 0:down/datapoint 1.LEVEL 100:up/", + statedatapoint => "1.LEVEL", + stripnumber => 1, + substexcl => "control", + substitute => "LEVEL!#0-0:closed,#100-100:open;DIRECTION!0:none,1:up,2:down,3:undefined;WORKING!(0|false):no,(1|true):yes", + webCmd => "control:up:stop:down", + widgetOverride => "control:slider,0,10,100" + }, + "HmIP-BROLL|HmIP-FROLL" => { + _description => "Rollladenaktor", + ccureadingfilter => "3.LEVEL;(ERROR_CODE|ERROR_OVERHEAT|ACTUAL_TEMPERATURE|ACTIVITY_STATE|SELF_CALIBRATION_RESULT)", + ccureadingname => "3.LEVEL\$:+control,+pct", + ccuscaleval => "LEVEL:0:1:0:100", + cmdIcon => "up:fts_shutter_up stop:fts_shutter_manual down:fts_shutter_down", + controldatapoint => "4.LEVEL", + hmstatevals => "ACTUAL_TEMPERATURE_STATUS!2:tempOverflow,3:tempUnderflow;ERROR_OVERHEAT!(1|true):overheat", + 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/", + statedatapoint => "3.LEVEL", + stripnumber => 1, + substexcl => "control|pct", + 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", + webCmd => "control:up:stop:down", + widgetOverride => "control:slider,0,10,100" + }, + "HM-TC-IT-WM-W-EU" => { + _description => "Wandthermostat", + ccureadingfilter => "(^HUMIDITY|^TEMPERATURE|^SET_TEMPERATURE|^WINDOW_OPEN)", + cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus", + controldatapoint => "2.SET_TEMPERATURE", + 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/", + genericDeviceType => "thermostat", + statedatapoint => "2.SET_TEMPERATURE", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:Auto:Manu:Boost:on:off", + widgetOverride => "control:slider,4.5,0.5,30.5,1" + }, + "HM-CC-RT-DN" => { + _description => "Heizkoerperthermostat", + ccureadingfilter => "(TEMPERATURE|VALVE_STATE|CONTROL|BATTERY_STATE)", + cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus", + controldatapoint => "4.SET_TEMPERATURE", + 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/", + genericDeviceType => "thermostat", + 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", + statedatapoint => "4.SET_TEMPERATURE", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:Auto:Manu:Boost:on:off", + widgetOverride => "control:slider,4.5,0.5,30.5,1" + }, + "HmIP-eTRV|HmIP-eTRV-2|HmIP-eTRV-B1" => { + _description => "Heizkoerperthermostat HM-IP", + ccureadingfilter => "^ACTUAL_TEMPERATURE|^BOOST_MODE|^SET_POINT_MODE|^SET_POINT_TEMPERATURE|^LEVEL|^WINDOW_STATE", + ccureadingname => "1.LEVEL:valve_position", + ccuscaleval => "LEVEL:0:1:0:100", + controldatapoint => "1.SET_POINT_TEMPERATURE", + 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.CONTROL_MODE 1 1.SET_POINT_TEMPERATURE 4.5:off/datapoint 1.CONTROL_MODE 0 1.SET_POINT_TEMPERATURE 30.5:on/", + genericDeviceType => "thermostat", + statedatapoint => "1.SET_POINT_TEMPERATURE", + stripnumber => 1, + substexcl => "control", + substitute => "SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open", + webCmd => "control:Boost:Auto:Manual:Holiday:on:off", + widgetOverride => "control:slider,4.5,0.5,30.5,1" + }, + "HmIP-WTH|HmIP-WTH-2|HmIP-BWTH" => { + _description => "Wandthermostat HM-IP", + ccureadingfilter => ".*", + controldatapoint => "1.SET_POINT_TEMPERATURE", + 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/", + genericDeviceType => "thermostat", + statedatapoint => "1.SET_POINT_TEMPERATURE", + stripnumber => 1, + substexcl => "control", + substitute => "SET_POINT_TEMPERATURE!#0-4.5:off,#30.5-40:on;WINDOW_STATE!(0|false):closed,(1|true):open", + webCmd => "control:Boost:Auto:Manual:Holiday:on:off", + widgetOverride => "control:slider,4.5,0.5,30.5,1" + }, + "HM-WDS40-TH-I|HM-WDS10-TH-O|HM-WDS20-TH-O|IS-WDS-TH-OD-S-R3|ASH550I|ASH550" => { + _description => "Temperatur/Luftfeuchte Sensor", + ccureadingfilter => "(^HUMIDITY|^TEMPERATURE)", + statedatapoint => "1.TEMPERATURE", + stripnumber => 1 + }, + "HM-Sen-RD-O" => { + _description => "Regensensor", + ccureadingfilter => "(STATE|WORKING)", + controldatapoint => "2.STATE", + eventMap => "/datapoint 2.STATE 1:on/datapoint 2.STATE 0:off/", + statedatapoint => "1.STATE", + substitute => "1.STATE!(0|false):dry,(1|true):rain;2.STATE!(0|false):off,(1|true):on", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-WDS100-C6-O-2" => { + _description => "Funk-Kombisensor", + ccureadingfilter => "(HUMIDITY|TEMPERATURE|WIND|RAIN|SUNSHINE|BRIGHTNESS)", + statedatapoint => "1.TEMPERATURE", + stripnumber => 1, + substitute => "RAINING!(1|true):yes,(0|false):no" + }, + "HmIP-SWO-PR|HmIP-SWO-B|HmIP-SWO-PL" => { + _description => "Funk-Wettersensor", + ccureadingfilter => "1!.*", + stripnumber => 1, + substitute => "RAINING,RAIN_COUNTER_OVERFLOW,SUNSHINEDURATION_OVERFLOW,SUNSHINE_THRESHOLD_OVERRUN,WIND_THRESHOLD_OVERRUN!(0|false):no,(1|true):yes" + }, + "HM-ES-TX-WM" => { + _description => "Energiezaehler Sensor", + ccureadingfilter => "(ENERGY_COUNTER|POWER)" + }, + "HM-CC-VG-1" => { + _description => "Heizungsgruppe", + ccucalculate => "dewpoint:DEWPOINT:1.ACTUAL_TEMPERATURE,1.ACTUAL_HUMIDITY", + ccureadingfilter => "1.(^SET_TEMPERATURE|^ACTUAL|^VALVE|^CONTROL);2.^WINDOW_OPEN;4.^VALVE", + cmdIcon => "Auto:sani_heating_automatic Manu:sani_heating_manual Boost:sani_heating_boost on:general_an off:general_aus", + controldatapoint => "1.SET_TEMPERATURE", + 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/", + statedatapoint => "1.SET_TEMPERATURE", + stateFormat => "T: 1.ACTUAL_TEMPERATURE° H: 1.ACTUAL_HUMIDITY% D: 1.SET_TEMPERATURE° P: DEWPOINT° V: 4.VALVE_STATE% 1.CONTROL_MODE", + stripnumber => 1, + substexcl => "control", + 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", + webCmd => "control:Auto:Manu:Boost:on:off", + widgetOverride => "control:slider,4.5,0.5,30.5,1" + }, + "HM-Sec-MD|HM-Sec-MDIR|HM-Sec-MDIR-2|HM-Sec-MDIR-3|Hm-Sen-MDIR-O-3" => { + _description => "Bewegungsmelder", + ccureadingfilter => "(BRIGHTNESS|MOTION)", + hmstatevals => "ERROR!1:sabotage", + statedatapoint => "1.MOTION", + substitute => "MOTION!(0|false):no,(1|true):yes;ERROR!0:no,1:sabotage" + }, + "HmIP-SMI" => { + _description => "Bewegungsmelder", + ccureadingfilter => "(ILLUMINATION|MOTION)", + controldatapoint => "1.MOTION_DETECTION_ACTIVE", + eventMap => "/datapoint 1.RESET_MOTION 1:reset/datapoint 1.MOTION_DETECTION_ACTIVE 1:detection-on/datapoint 1.MOTION_DETECTION_ACTIVE 0:detection-off/", + hmstatevals => "SABOTAGE!(1|true):sabotage", + statedatapoint => "1.MOTION", + substitute => "MOTION!(0|false):no,(1|true):yes;MOTION_DETECTION_ACTIVE!(0|false):off,(1|true):on", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HmIP-SMI55" => { + _description => "Bewegungsmelder", + ccureadingfilter => "(ILLUMINATION|MOTION|PRESS)", + "event-on-update-reading" => ".*", + eventMap => "/datapoint 3.MOTION_DETECTION_ACTIVE 1:detection-on/datapoint 3.MOTION_DETECTION_ACTIVE 0:detection-off/datapoint 3.RESET_MOTION 1:reset/", + statedatapoint => "3.MOTION", + 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" + }, + "HmIP-SPI" => { + _description => "Anwesenheitssensor", + ccureadingfilter => "(ILLUMINATION|PRESENCE)", + controldatapoint => "1.PRESENCE_DETECTION_ACTIVE", + eventMap => "/datapoint 1.RESET_PRESENCE 1:reset/datapoint 1.PRESENCE_DETECTION_ACTIVE 1:detection-on/datapoint 1.PRESENCE_DETECTION_ACTIVE 0:detection-off/", + hmstatevals => "SABOTAGE!(1|true):sabotage", + statedatapoint => "1.PRESENCE_DETECTION_STATE", + stripnumber => 1, + substitute => "PRESENCE_DETECTION_STATE!(0|false):no,(1|true):yes;PRESENCE_DETECTION_ACTIVE!(0|false):off,(1|true):on", + webCmd => "control", + widgetOverride => "control:uzsuToggle,off,on" + }, + "HM-Sen-LI-O" => { + _description => "Lichtsensor", + ccureadingfilter => "LUX", + statedatapoint => "1.LUX", + stripnumber => 1 + }, + "HmIP-SLO" => { + _description => "Lichtsensor", + ccureadingfilter => "_ILLUMINATION\$", + statedatapoint => "1.CURRENT_ILLUMINATION", + stripnumber => 1 + }, + "HM-CC-SCD" => { + _description => "CO2 Sensor", + ccureadingfilter => "STATE", + statedatapoint => "1.STATE", + substitute => "STATE!0:normal,1:added,2:strong" + }, + "HM-Sec-SD-2" => { + _description => "Funk-Rauchmelder", + ccureadingfilter => "STATE", + hmstatevals => "ERROR_ALARM_TEST!1:alarm_test_failed;ERROR_SMOKE_CHAMBER!1:degraded_smoke_chamber", + statedatapoint => "1.STATE", + substitute => "STATE!(0|false):ok,(1|true):alarm;ERROR_ALARM_TEST!0:no,1:failed;ERROR_SMOKE_CHAMBER!0:no,1:degraded" + }, + "HM-Sec-SD-2-Team" => { + _description => "Rauchmeldergruppe", + ccureadingfilter => "STATE", + statedatapoint => "1.STATE", + substitute => "STATE!(0|false):ok,(1|true):alarm" + }, + "HmIP-SWSD" => { + _description => "Funk-Rauchmelder", + ccureadingfilter => "(ALARM_STATUS|TEST_RESULT|ERROR_CODE)", + 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/", + statedatapoint => "SMOKE_DETECTOR_ALARM_STATUS", + 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" + }, + "HM-Sec-SFA-SM" => { + _description => "Alarmsirene", + ccureadingfilter => "STATE", + hmstatevals => "ERROR_POWER!1:power_failure;ERROR_SABOTAGE!1:sabotage;ERROR_BATTERY!1:battery_defect", + statedatapoint => "1.STATE", + 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" + }, + "HM-Sec-Sir-WM" => { + _description => "Funk-Innensirene", + ccureadingfilter => "STATE", + ccureadingname => "1.STATE:STATE_SENSOR1;2.STATE:STATE_SENSOR2;3.STATE:STATE_PANIC", + eventMap => "/datapoint 3.STATE true:panic/", + hmstatevals => "ERROR_SABOTAGE!1:sabotage", + statedatapoint => "4.ARMSTATE", + statevals => "disarmed:0,extsens-armed:1,allsens-armed:2,alarm-blocked:3", + substitute => "ERROR_SABOTAGE!(0|false):no,(1|true):yes;ARMSTATE!0:disarmed,1:extsens_armed,2:allsens_armed,3:alarm_blocked" + }, + "HM-LC-RGBW-WM" => { + _description => "Funk-RGBW-Controller", + ccureadingfilter => "(COLOR|PROGRAM|LEVEL)", + ccureadingname => "2.COLOR:+color;3.PROGRAM:+prog", + controldatapoint => "1.LEVEL", + ccuscaleval => "LEVEL:0:1:0:100", + eventMap => "/datapoint 3.PROGRAM :prog/datapoint 2.COLOR :color/", + statedatapoint => "1.LEVEL", + statevals => "on:100,off:0", + stripnumber => 1, + substexcl => "control", + substitute => "LEVEL!#0-0:off,#1-100:on", + webCmd => "control:color:prog:on:off", + widgetOverride => "control:slider,0,1,100 prog:0,1,2,3,4,5,6 color:colorpicker,HUE,0,1,100" + }, + "WS550|WS888|WS550Tech|WS550LCB|WS550LCW|HM-WDC7000" => { + _description => "Wetterstation", + ccureadingfilter => "(TEMPERATURE|HUMIDITY|AIR_PRESSURE)", + statedatapoint => "10.TEMPERATURE", + stripnumber => 1 + }, + "HM-Sec-WDS|HM-Sec-WDS-2" => { + _description => "Funk-Wassermelder", + ccureadingfilter => "STATE", + statedatapoint => "1.STATE", + substitute => "STATE!0:dry,1:wet,2:water" + }, + "HM-WDS30-OT2-SM|HM-WDS30-OT2-SM-2" => { + _description => "Temperaturdifferenz-Sensor", + ccureadingfilter => "TEMPERATURE", + stripnumber => 1 + }, + "HM-OU-CF-Pl|HM-OU-CFM-Pl|HM-OU-CFM-TW" => { + _description => "Funk-Gong mit Signalleuchte mit/ohne Batterie und Speicher", + ccureadingfilter => "STATE", + 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", + statedatapoint => "1.STATE", + statevals => "on:true,off:false", + substitute => "STATE!(0|false):ledOff,(1|true):ledOn;2.STATE!(0|false):soundOff,(1|true):soundOn" + }, + "HM-PB-4Dis-WM" => { + _description => "Funk-Display Wandtaster", + ccureadingfilter => "(PRESS_SHORT|PRESS_LONG)", + substitute => "PRESS_SHORT,PRESS_LONG!(1|true):pressed" + }, + "HM-Dis-EP-WM55|HM-Dis-WM55" => { + _description => "E-Paper Display, Display Statusanzeige", + ccureadingfilter => "PRESS", + eventMap => "/datapoint 3.SUBMIT:display/", + substitute => "PRESS_LONG,PRESS_SHORT,PRESS_CONT!(1|true):pressed,(0|false):notPressed;PRESS_LONG_RELEASE!(1|true):release", + widgetOverride => "display:textField" + }, + "CUX-HM-TC-IT-WM-W-EU" => { + _description => "CUxD Wandthermostat", + ccureadingfilter => "(TEMP|HUM|DEW)", + stripnumber => 1 + } +); + +###################################################################### +# Homematic scripts. +# Scripts can be executed via HMCCU set command 'hmscript'. Script +# name must be preceeded by a '!'. +# Example: +# set mydev hmscript !CreateStringVariable MyVar test "Test variable" +###################################################################### + +%HMCCU_SCRIPTS = ( + "ActivateProgram" => { + description => "Activate or deactivate a CCU program", + syntax => "name, mode", + parameters => 2, + code => qq( +object oPR = (dom.GetObject(ID_PROGRAMS)).Get("\$name"); +if (oPR) { + oPR.Active(\$mode); +} + ) + }, + "CreateStringVariable" => { + description => "Create CCU system variable of type STRING", + syntax => "name, unit, init, desc", + parameters => 4, + code => qq( +object oSV = dom.GetObject("\$name"); +if (!oSV) { + object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES); + oSV = dom.CreateObject(OT_VARDP); + oSysVars.Add(oSV.ID()); + oSV.Name("\$name"); + oSV.ValueType(ivtString); + oSV.ValueSubType(istChar8859); + oSV.DPInfo("\$desc"); + oSV.ValueUnit("\$unit"); + oSV.State("\$init"); + oSV.Internal(false); + oSV.Visible(true); + dom.RTUpdate(0); +} +else { + oSV.State("\$init"); +} + ) + }, + "CreateNumericVariable" => { + description => "Create CCU system variable of type FLOAT", + syntax => "name, unit, init, desc, min, max", + parameters => 6, + code => qq( +object oSV = dom.GetObject("\$name"); +if (!oSV) { + object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES); + oSV = dom.CreateObject(OT_VARDP); + oSysVars.Add(oSV.ID()); + oSV.Name("\$name"); + oSV.ValueType(ivtFloat); + oSV.ValueSubType(istGeneric); + oSV.ValueMin(\$min); + oSV.ValueMax(\$max); + oSV.DPInfo("\$desc"); + oSV.ValueUnit("\$unit"); + oSV.State("\$init"); + oSV.Internal(false); + oSV.Visible(true); + dom.RTUpdate(0); +} +else { + oSV.State("\$init"); +} + ) + }, + "CreateBoolVariable" => { + description => "Create CCU system variable of type BOOL", + syntax => "name, unit, init, desc, valtrue, valfalse", + parameters => 6, + code => qq( +object oSV = dom.GetObject("\$name"); +if (!oSV) { + object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES); + oSV = dom.CreateObject(OT_VARDP); + oSysVars.Add(oSV.ID()); + oSV.Name("\$name"); + oSV.ValueType(ivtBinary); + oSV.ValueSubType(istBool); + oSV.ValueName0("\$value1"); + oSV.ValueName1("\$value2"); + oSV.DPInfo("\$desc"); + oSV.ValueUnit("\$unit"); + oSV.State("\$init"); + dom.RTUpdate(0); +} +else { + oSV.State("\$init"); +} + ) + }, + "CreateListVariable" => { + description => "Create CCU system variable of type LIST", + syntax => "name, unit, init, desc, list", + parameters => 5, + code => qq( +object oSV = dom.GetObject("\$name"); +if (!oSV){ + object oSysVars = dom.GetObject(ID_SYSTEM_VARIABLES); + oSV = dom.CreateObject(OT_VARDP); + oSysVars.Add(oSV.ID()); + oSV.Name("\$name"); + oSV.ValueType(ivtInteger); + oSV.ValueSubType(istEnum); + oSV.ValueList("\$list"); + oSV.DPInfo("\$desc"); + oSV.ValueUnit("\$unit"); + oSV.State("\$init"); + dom.RTUpdate(0); +} +else { + oSV.State("\$init"); +} + ) + }, + "DeleteObject" => { + description => "Delete CCU object", + syntax => "name, type", + parameters => 2, + code => qq( +object oSV = dom.GetObject("\$name"); +if (oSV) { + if (oSV.IsTypeOf(\$type)) { + dom.DeleteObject(oSV.ID()); + } +} + ) + }, + "GetVariables" => { + description => "Query system variables", + syntax => "", + parameters => 0, + code => qq( +object osysvar; +string ssysvarid; +foreach (ssysvarid, (dom.GetObject(ID_SYSTEM_VARIABLES)).EnumUsedIDs()) { + osysvar = dom.GetObject(ssysvarid); + Write(osysvar.Name()); + if(osysvar.ValueSubType() == 6) { + Write ("=" # osysvar.AlType()); + } + else { + Write ("=" # osysvar.Variable()); + } + WriteLine ("=" # osysvar.Value()); +} + ) + }, + "GetVariablesExt" => { + description => "Query system variables", + syntax => "", + parameters => 0, + code => qq( +string sSysVarId; +foreach (sSysVarId, (dom.GetObject(ID_SYSTEM_VARIABLES)).EnumUsedIDs()) { + object oSysVar = dom.GetObject(sSysVarId); + Write(oSysVar.Name()); + if (oSysVar.ValueSubType() == 6) { + Write(";" # oSysVar.AlType()); + } else { + Write(";" # oSysVar.Variable()); + } + Write(";" # oSysVar.Value() # ";"); + if (oSysVar.ValueType() == 16) { + Write(oSysVar.ValueList()); + } + Write(";" # oSysVar.ValueMin() # ";" # oSysVar.ValueMax()); + Write(";" # oSysVar.ValueUnit() # ";" # oSysVar.ValueType() # ";" # oSysVar.ValueSubType()); + Write(";" # oSysVar.DPArchive() # ";" # oSysVar.Visible()); + Write(";" # oSysVar.Timestamp().ToInteger()); + if (oSysVar.ValueType() == 2) { + Write(";" # oSysVar.ValueName0()); + } + if (oSysVar.ValueType() == 2) { + Write(";" # oSysVar.ValueName1()); + } + WriteLine(""); +} + ) + }, + "GetDeviceInfo" => { + description => "Query device info", + syntax => "devname, ccuget", + parameters => 2, + code => qq( +string chnid; +string sDPId; +object odev = (dom.GetObject(ID_DEVICES)).Get("\$devname"); +if (odev) { + foreach (chnid, odev.Channels()) { + object ochn = dom.GetObject(chnid); + if (ochn) { + foreach(sDPId, ochn.DPs()) { + object oDP = dom.GetObject(sDPId); + if (oDP) { + integer op = oDP.Operations(); + string flags = ""; + if (OPERATION_READ & op) { flags = flags # "R"; } + if (OPERATION_WRITE & op) { flags = flags # "W"; } + if (OPERATION_EVENT & op) { flags = flags # "E"; } + WriteLine ("C;" # ochn.Address() # ";" # ochn.Name() # ";" # oDP.Name() # ";" # oDP.ValueType() # ";" # oDP.\$ccuget() # ";" # flags); + } + } + } + } +} +else { + WriteLine ("ERROR: Device not found"); +} + ) + }, + "GetDevice" => { + description => "Query CCU device or channel", + syntax => "name", + parameters => 1, + code => qq( +object odev = (dom.GetObject(ID_DEVICES)).Get("\$name"); +if (!odev) { + object ochn = (dom.GetObject(ID_CHANNELS)).Get("\$name"); + if(ochn) { + string devid = ochn.Device(); + odev = dom.GetObject (devid); + } +} +if(odev) { + string intid=odev.Interface(); + string intna=dom.GetObject(intid).Name(); + string chnid; + integer cc=0; + foreach (chnid, odev.Channels()) { + object ochn=dom.GetObject(chnid); + WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection()); + cc=cc+1; + } + WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc); +} + ) + }, + "GetDeviceList" => { + description => "Query CCU devices, channels and interfaces", + syntax => "", + parameters => 0, + code => qq( +string devid; +string chnid; +string sifid; +string prgid; +foreach(devid, root.Devices().EnumUsedIDs()) { + object odev=dom.GetObject(devid); + if(odev) { + var intid=odev.Interface(); + object oiface=dom.GetObject(intid); + if(oiface) { + string intna=oiface.Name(); + integer cc=0; + foreach (chnid, odev.Channels()) { + object ochn=dom.GetObject(chnid); + WriteLine("C;" # ochn.Address() # ";" # ochn.Name() # ";" # ochn.ChnDirection()); + cc=cc+1; + } + WriteLine("D;" # intna # ";" # odev.Address() # ";" # odev.Name() # ";" # odev.HssType() # ";" # cc); + } + } +} +foreach(sifid, root.Interfaces().EnumIDs()) { + object oIf=dom.GetObject(sifid); + if (oIf) { + WriteLine("I;" # oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl()); + } +} +string prgid; +foreach(prgid, dom.GetObject(ID_PROGRAMS).EnumIDs()) { + object oProg=dom.GetObject(prgid); + if(oProg) { + WriteLine ("P;" # oProg.Name() # ";" # oProg.Active() # ";" # oProg.Internal()); + } +} + ) + }, + "GetDatapointsByChannel" => { + description => "Query datapoints of channel list", + syntax => "list, ccuget", + parameters => 2, + code => qq( +string sDPId; +string sChnName; +string sChnList = "\$list"; +integer c = 0; +foreach (sChnName, sChnList.Split(",")) { + object oChannel = dom.GetObject (sChnName); + if (oChannel) { + foreach(sDPId, oChannel.DPs()) { + object oDP = dom.GetObject(sDPId); + if (oDP) { + if (OPERATION_READ & oDP.Operations()) { + if (oDP.TypeName() == "HSSDP") { + WriteLine (sChnName # "=" # oDP.Name() # "=" # oDP.\$ccuget()); + } + else { + WriteLine (sChnName # "=sysvar.link." # oDP.Name() # "=" # oDP.\$ccuget()); + } + c = c+1; + } + } + } + } +} +WriteLine (c); + ) + }, + "GetDatapointsByDevice" => { + description => "Query datapoints of device list", + syntax => "list, ccuget", + parameters => 2, + code => qq( +string chnid; +string sDPId; +string sDevName; +string sDevList = "\$list"; +integer c = 0; +foreach (sDevName, sDevList.Split(",")) { + object odev = (dom.GetObject(ID_DEVICES)).Get(sDevName); + if (odev) { + foreach (chnid, odev.Channels()) { + object ochn = dom.GetObject(chnid); + if (ochn) { + foreach(sDPId, ochn.DPs()) { + object oDP = dom.GetObject(sDPId); + if (oDP) { + if (OPERATION_READ & oDP.Operations()) { + if (oDP.TypeName() == "HSSDP") { + WriteLine (ochn.Name() # "=" # oDP.Name() # "=" # oDP.\$ccuget()); + } + else { + WriteLine (ochn.Name() # "=sysvar.link." # oDP.Name() # "=" # oDP.\$ccuget()); + } + c = c+1; + } + } + } + } + } + } +} +WriteLine (c); + ) + }, + "GetDatapointList" => { + description => "Query datapoint information of device list", + syntax => "list", + parameters => 1, + code => qq( +string chnid; +string sDPId; +string sDevice; +string sDevList = "\$list"; +foreach (sDevice, sDevList.Split(",")) { + object odev = (dom.GetObject(ID_DEVICES)).Get(sDevice); + if (odev) { + string intid = odev.Interface(); + string intna = dom.GetObject(intid).Name(); + string sType = odev.HssType(); + foreach (chnid, odev.Channels()) { + object ochn = dom.GetObject(chnid); + if (ochn) { + string sAddr = ochn.Address(); + string sChnNo = sAddr.StrValueByIndex(":",1); + foreach(sDPId, ochn.DPs()) { + object oDP = dom.GetObject(sDPId); + if (oDP) { + string sDPName = oDP.Name(); + if (sDPName.Find(".") >= 0) { + sDPName = sDPName.StrValueByIndex(".",2); + } + WriteLine (intna # ";" # sAddr # ";" # sType # ";" # sChnNo # ";" # sDPName # ";" # oDP.ValueType() # ";" # oDP.Operations()); + } + } + } + } + } +} + ) + }, + "GetChannel" => { + description => "Get datapoints of channel list", + syntax => "list, ccuget", + parameters => 2, + code => qq( +string sDPId; +string sChannel; +string sChnList = "\$list"; +foreach (sChannel, sChnList.Split(",")) { + object oChannel = (dom.GetObject(ID_CHANNELS)).Get(sChannel); + if (oChannel) { + foreach(sDPId, oChannel.DPs()) { + object oDP = dom.GetObject(sDPId); + if (oDP) { + WriteLine (sChannel # "=" # oDP.Name() # "=" # oDP.\$ccuget()); + } + } + } +} + ) + }, + "GetInterfaceList" => { + description => "Get CCU RPC interfaces", + syntax => "", + parameters => 0, + code => qq( +string sifId; +foreach(sifId, root.Interfaces().EnumIDs()) { + object oIf = dom.GetObject(sifId); + if (oIf) { + WriteLine (oIf.Name() # ';' # oIf.InterfaceInfo() # ';' # oIf.InterfaceUrl()); + } +} + ) + }, + "ClearUnreachable" => { + description => "Clear device unreachable alarms in CCU", + syntax => "", + parameters => 0, + code => qq( +string itemID; +string address; +object aldp_obj; +foreach(itemID, dom.GetObject(ID_DEVICES).EnumUsedIDs()) { + address = dom.GetObject(itemID).Address(); + aldp_obj = dom.GetObject("AL-" # address # ":0.STICKY_UNREACH"); + if (aldp_obj) { + if (aldp_obj.Value()) { + aldp_obj.AlReceipt(); + } + } +} + ) + }, + "GetNameByAddress" => { + description => "Get device or channel name by address", + syntax => "iface, address", + parameters => 2, + code => qq( +object lObjDevice = xmlrpc.GetObjectByHSSAddress(interfaces.Get("\$iface"),"\$address"); +if (lObjDevice) { + WriteLine (lObjDevice.Name()); +} + ) + }, + "GetGroupDevices" => { + description => "Get virtual group configuration", + syntax => "", + parameters => 0, + code => qq( +string lGetOut = ""; +string lGetErr = ""; +string lCommand = "cat /usr/local/etc/config/groups.gson"; +integer lResult; +lResult = system.Exec(lCommand,&lGetOut,&lGetErr); +if(lResult == 0) { + WriteLine(lGetOut); +} + ) + }, + "GetServiceMessages" => { + description => "Read list of CCU service messages", + syntax => "", + parameters => 0, + code => qq( +integer c = 0; +object oTmpArray = dom.GetObject(ID_SERVICES); +if(oTmpArray) { + string sTmp; + string sdesc; + string stest; + foreach(sTmp, oTmpArray.EnumIDs()) { + object oTmp = dom.GetObject(sTmp); + if (oTmp) { + if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) { + object trigDP = dom.GetObject(oTmp.AlTriggerDP()); + object och = dom.GetObject((trigDP.Channel())); + object odev = dom.GetObject((och.Device())); + var ival = trigDP.Value(); + time sftime = oTmp.AlOccurrenceTime(); ! erste Meldezeit + time sltime = oTmp.LastTriggerTime();!letze Meldezeit + var sdesc = trigDP.HssType(); + var sserial = odev.Address(); + var sname = odev.Name(); + WriteLine(sftime.Format("%d.%m.%y %H:%M") # ";" # sltime.Format("%d.%m.%y %H:%M") # ";" # sserial # ";" # sname # ";" # sdesc); + c = c+1; + } + } + } +} +Write(c); + ) + }, + "GetAlarms" => { + description => "Read list of CCU alarm messages", + syntax => "", + parameters => 0, + code => qq( +integer c = 0; +object oTmpArray = dom.GetObject( ID_SYSTEM_VARIABLES ); +if(oTmpArray) { + string sTmp; + foreach(sTmp,oTmpArray.EnumIDs()) { + object oTmp = dom.GetObject(sTmp); + if(oTmp) { + if(oTmp.IsTypeOf(OT_ALARMDP) && (oTmp.AlState() == asOncoming)) { + c = c+1; + object oSV = oTmp; + Write(oSV.AlOccurrenceTime()); + Write(";" # oSV.Timestamp()); + object oDestDP = dom.GetObject( oSV.AlDestMapDP() ); + string sDestDPName = ""; + if(oDestDP) { + sDestDPName = oDestDP.Name(); + } + else { + sDestDPName = "none"; + } + Write(";" # sDestDPName); + + string sAlarmName = oSV.Name(); + if(!sAlarmName.Length()) { + sAlarmName = "none"; + } + Write(";" # sAlarmName); + + string sAlarmDescription = oSV.DPInfo(); + if(!sAlarmDescription.Length()) { + sAlarmDescription = "none"; + } + Write(";" # sAlarmDescription); + + string sRooms = ""; + string sLastTriggerName = ""; + string sLastTriggerMessage = ""; + string sLastTriggerKey = ""; + integer iTmpTriggerID = oSV.LastTriggerID(); + if(iTmpTriggerID == ID_ERROR) { + iTmpTriggerID = oSV.AlTriggerDP(); + } + + string sAlarmMessage = ""; + string sChannelName = "none"; + object oLastTrigger = dom.GetObject(iTmpTriggerID); + if(oLastTrigger) { + object oLastTriggerChannel = dom.GetObject(oLastTrigger.Channel()); + if(oLastTriggerChannel) { + sChannelName = oLastTriggerChannel.Name(); + string sLastTriggerName = sChannelName; + string sRID; + foreach(sRID, oLastTriggerChannel.ChnRoom()) { + object oRoom = dom.GetObject(sRID); + if(oRoom) { + sRooms = sRooms # "," # oRoom.Name(); + } + } + + if(oLastTrigger.IsTypeOf(OT_HSSDP)) { + string sLongKey = oLastTriggerChannel.ChnLabel()#"|"#oLastTrigger.HSSID(); + string sShortKey = oLastTrigger.HSSID(); + if((oLastTrigger.ValueType() == ivtInteger) && (oLastTrigger.ValueSubType() == istEnum)) { + sLongKey = sLongKey#"="#web.webGetValueFromList( oLastTrigger.ValueList(), oSV.Value() ); + sShortKey = sShortKey#"="#web.webGetValueFromList( oLastTrigger.ValueList(), oSV.Value() ); + } + sAlarmMessage = web.webKeyFromStringTable(sLongKey); + if(!sAlarmMessage.Length()) { + sAlarmMessage = web.webKeyFromStringTable(sShortKey); + if(!sAlarmMessage.Length()) { + sAlarmMessage = sShortKey; + } + } + } + } + } + else { + if (oSV.IsTypeOf(OT_ALARMDP)) { + if ((oSV.Value() == false) || (oSV.Value() == "")) { + sAlarmMessage = oSV.ValueName0(); + } + else { + sAlarmMessage = oSV.ValueName1(); + } + } + } + if(sRooms == "") { + sRooms = "none"; + } + + Write(";" # sAlarmMessage # ";" # sRooms # ";" # sChannelName); + WriteLine(""); + } + } + } +} +Write(c); + ) + } +); + +1;