2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-08 01:14:19 +00:00

10_ZWave.pm: implement ZW_APPLICATION_COMMAND_HANLDER_BRIDGE (Forum #134005)

git-svn-id: https://svn.fhem.de/fhem/trunk@27687 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2023-06-18 13:55:34 +00:00
parent 19fdf4dd33
commit e634176953

View File

@ -99,7 +99,7 @@ my %zwave_class = (
"..2607(..)(..)" => "..2607(..)(..)" =>
'sprintf("swmSwitchType:primary %s secondary %s", 'sprintf("swmSwitchType:primary %s secondary %s",
Zwave_switchType($1), Zwave_switchType($2))', }}, #V3 Zwave_switchType($1), Zwave_switchType($2))', }}, #V3
SWITCH_ALL => { id => '27', SWITCH_ALL => { id => '27', obsoleted=>1,
set => { swaIncludeNone => "0100", set => { swaIncludeNone => "0100",
swaIncludeOff => "0101", swaIncludeOff => "0101",
swaIncludeOn => "0102", swaIncludeOn => "0102",
@ -111,8 +111,8 @@ my %zwave_class = (
"03270301" => "swa:off", "03270301" => "swa:off",
"03270302" => "swa:on", "03270302" => "swa:on",
"032703ff" => "swa:on off" } }, "032703ff" => "swa:on off" } },
SWITCH_TOGGLE_BINARY => { id => '28' }, SWITCH_TOGGLE_BINARY => { id => '28', obsoleted=>1 },
SWITCH_TOGGLE_MULTILEVEL => { id => '29' }, SWITCH_TOGGLE_MULTILEVEL => { id => '29', deprecated=>1 },
CHIMNEY_FAN => { id => '2a' }, CHIMNEY_FAN => { id => '2a' },
SCENE_ACTIVATION => { id => '2b', SCENE_ACTIVATION => { id => '2b',
set => { sceneActivate => "01%02x%02x" }, set => { sceneActivate => "01%02x%02x" },
@ -130,7 +130,7 @@ my %zwave_class = (
'"group_".hex($1).":scene ".hex($2)."duration ".hex($3)' } }, '"group_".hex($1).":scene ".hex($2)."duration ".hex($3)' } },
ZIP_CLIENT => { id => '2e' }, ZIP_CLIENT => { id => '2e' },
ZIP_ADV_SERVICES => { id => '2f' }, ZIP_ADV_SERVICES => { id => '2f' },
SENSOR_BINARY => { id => '30', SENSOR_BINARY => { id => '30', deprecated=>1,
get => { sbStatus => "02" }, get => { sbStatus => "02" },
parse => { "03300300" => "state:closed", parse => { "03300300" => "state:closed",
"033003ff" => "state:open", "033003ff" => "state:open",
@ -156,7 +156,7 @@ my %zwave_class = (
"0.3304(..)(..)(.*)"=> '"ccStatus_".hex($1).":".hex($2)', "0.3304(..)(..)(.*)"=> '"ccStatus_".hex($1).":".hex($2)',
"..3304(..)(..)(.*)"=> 'ZWave_ccParse(hex($1),hex($2))' } }, "..3304(..)(..)(.*)"=> 'ZWave_ccParse(hex($1),hex($2))' } },
ZIP_ADV_CLIENT => { id => '34' }, ZIP_ADV_CLIENT => { id => '34' },
METER_PULSE => { id => '35' }, METER_PULSE => { id => '35', deprecated=>1 },
BASIC_TARIFF_INFO => { id => '36' }, BASIC_TARIFF_INFO => { id => '36' },
HRV_STATUS => { id => '37', HRV_STATUS => { id => '37',
get => { hrvStatus => "01%02x", get => { hrvStatus => "01%02x",
@ -291,7 +291,7 @@ my %zwave_class = (
"03450307" => "fanState:upDownCirc", "03450307" => "fanState:upDownCirc",
"03450308" => "fanState:quietCirc" "03450308" => "fanState:quietCirc"
} } , } } ,
CLIMATE_CONTROL_SCHEDULE => { id => '46', CLIMATE_CONTROL_SCHEDULE => { id => '46', deprecated=>1,
set => { ccs => 'ZWave_ccsSet("%s")' , set => { ccs => 'ZWave_ccsSet("%s")' ,
ccsOverride => 'ZWave_ccsSetOverride("%s")'}, ccsOverride => 'ZWave_ccsSetOverride("%s")'},
get => { ccs => 'ZWave_ccsGet("%s")', get => { ccs => 'ZWave_ccsGet("%s")',
@ -310,7 +310,7 @@ my %zwave_class = (
parse => { "034c02(.*)" => '"doorLockLoggingRecordsSupported:".hex($val)', parse => { "034c02(.*)" => '"doorLockLoggingRecordsSupported:".hex($val)',
"..4c04(.*)" => 'ZWave_doorLLRParse($hash, $1)'} }, "..4c04(.*)" => 'ZWave_doorLLRParse($hash, $1)'} },
NETWORK_MANAGEMANT_BASIC => { id => '4d' }, NETWORK_MANAGEMANT_BASIC => { id => '4d' },
SCHEDULE_ENTRY_LOCK => { id => '4e', # V1, V2, V3 SCHEDULE_ENTRY_LOCK => { id => '4e', deprecated=>1, # V1, V2, V3
get => { scheduleEntryLockTypeSupported => '09', get => { scheduleEntryLockTypeSupported => '09',
scheduleEntryLockWeekDay => "04%02x%02x", scheduleEntryLockWeekDay => "04%02x%02x",
scheduleEntryLockYearDay => "07%02x%02x", scheduleEntryLockYearDay => "07%02x%02x",
@ -342,7 +342,7 @@ my %zwave_class = (
'ZWave_scheduleEntryLockDailyRepeatingParse($hash, $1)' 'ZWave_scheduleEntryLockDailyRepeatingParse($hash, $1)'
}}, }},
ZI_6LOWPAN => { id => '4f' }, ZI_6LOWPAN => { id => '4f' },
BASIC_WINDOW_COVERING => { id => '50', BASIC_WINDOW_COVERING => { id => '50', obsoleted=>1,
set => { coveringClose => "0140", set => { coveringClose => "0140",
coveringOpen => "0100", coveringOpen => "0100",
coveringStop => "02" }, coveringStop => "02" },
@ -350,7 +350,7 @@ my %zwave_class = (
"03500100" => "covering:open", "03500100" => "covering:open",
"03500200" => "covering:stop", "03500200" => "covering:stop",
"03500240" => "covering:stop" } }, "03500240" => "covering:stop" } },
MTP_WINDOW_COVERING => { id => '51' }, MTP_WINDOW_COVERING => { id => '51, obsoleted=>1' },
NETWORK_MANAGEMENT_PROXY => { id => '52' }, NETWORK_MANAGEMENT_PROXY => { id => '52' },
NETWORK_SCHEDULE => { id => '53', # V1, Schedule NETWORK_SCHEDULE => { id => '53', # V1, Schedule
get => { scheduleSupported => "01", get => { scheduleSupported => "01",
@ -362,10 +362,10 @@ my %zwave_class = (
parse => { "..5302(.*)" => 'ZWave_scheduleSupportedParse($hash, $1)', parse => { "..5302(.*)" => 'ZWave_scheduleSupportedParse($hash, $1)',
"..5305(.*)" => 'ZWave_scheduleParse($hash, $1)', "..5305(.*)" => 'ZWave_scheduleParse($hash, $1)',
"..5309(.*)" => 'ZWave_scheduleStateParse($hash, $1)' } }, "..5309(.*)" => 'ZWave_scheduleStateParse($hash, $1)' } },
NETWORK_MANAGEMENT_PRIMARY=>{ id => '54' }, NETWORK_MANAGEMENT_PRIMARY=>{ id => '54', obsoleted=>1 },
TRANSPORT_SERVICE => { id => '55' }, TRANSPORT_SERVICE => { id => '55' },
CRC_16_ENCAP => { id => '56' }, # Parse is handled in the code CRC_16_ENCAP => { id => '56', deprecated=>1 }, # Parse in code
APPLICATION_CAPABILITY => { id => '57' }, APPLICATION_CAPABILITY => { id => '57', obsoleted=>1 },
ZIP_ND => { id => '58' }, ZIP_ND => { id => '58' },
ASSOCIATION_GRP_INFO => { id => '59', ASSOCIATION_GRP_INFO => { id => '59',
get => { associationGroupName => "01%02x", get => { associationGroupName => "01%02x",
@ -443,7 +443,7 @@ my %zwave_class = (
get => { config => "05%02x", get => { config => "05%02x",
configAll => 'ZWave_configAllGet($hash)' }, configAll => 'ZWave_configAllGet($hash)' },
parse => { "^..70..(..)(..)(.*)" => 'ZWave_configParse($hash,$1,$2,$3)'} }, parse => { "^..70..(..)(..)(.*)" => 'ZWave_configParse($hash,$1,$2,$3)'} },
ALARM => { id => '71', ALARM => { id => '71', deprecated=>1,
set => { set => {
alarmnotification => 'ZWave_ALARM_06_Set("%s")', # >=V2 alarmnotification => 'ZWave_ALARM_06_Set("%s")', # >=V2
}, },
@ -490,7 +490,7 @@ my %zwave_class = (
"03750301" => "protection:seq", "03750301" => "protection:seq",
"03750302" => "protection:on", "03750302" => "protection:on",
"047503(..)(..)" => 'ZWave_protectionParse($1, $2)'} }, "047503(..)(..)" => 'ZWave_protectionParse($1, $2)'} },
LOCK => { id => '76' }, LOCK => { id => '76', deprecated=>1 },
NODE_NAMING => { id => '77', NODE_NAMING => { id => '77',
set => { name => '(undef, "0100".unpack("H*", "%s"))', set => { name => '(undef, "0100".unpack("H*", "%s"))',
location => '(undef, "0400".unpack("H*", "%s"))' }, location => '(undef, "0400".unpack("H*", "%s"))' },
@ -514,9 +514,9 @@ my %zwave_class = (
get => { fwMetaData => 'ZWave_firmware($hash, "")' }, get => { fwMetaData => 'ZWave_firmware($hash, "")' },
set => { fwUpdate => 'ZWave_firmware($hash, "%s")'}, set => { fwUpdate => 'ZWave_firmware($hash, "%s")'},
parse => { "..7a(..)(.*)" => 'ZWave_firmwareUpdateParse($hash, $1, $2)' } }, parse => { "..7a(..)(.*)" => 'ZWave_firmwareUpdateParse($hash, $1, $2)' } },
GROUPING_NAME => { id => '7b' }, GROUPING_NAME => { id => '7b', deprecated=>1 },
REMOTE_ASSOCIATION_ACTIVATE=>{id => '7c' }, REMOTE_ASSOCIATION_ACTIVATE=>{id => '7c', obsoleted=>1 },
REMOTE_ASSOCIATION => { id => '7d' }, REMOTE_ASSOCIATION => { id => '7d', obsoleted=>1 },
BATTERY => { id => '80', BATTERY => { id => '80',
get => { battery => "02" }, get => { battery => "02" },
parse => { "0.8003(..)"=> 'ZWave_battery($1)'} } , parse => { "0.8003(..)"=> 'ZWave_battery($1)'} } ,
@ -526,7 +526,7 @@ my %zwave_class = (
parse => { "028105" => "clock:get", parse => { "028105" => "clock:get",
"048106(..)(..)"=> 'ZWave_clockParse($1,$2)' }}, "048106(..)(..)"=> 'ZWave_clockParse($1,$2)' }},
HAIL => { id => '82', HAIL => { id => '82',
parse => { "028201" => "hail:01"}}, parse => { "028201" => "hail:01", obsoleted=>1}},
WAKE_UP => { id => '84', WAKE_UP => { id => '84',
set => { wakeupInterval => "04%06x%02x", set => { wakeupInterval => "04%06x%02x",
wakeupNoMoreInformation => "08" }, wakeupNoMoreInformation => "08" },
@ -575,7 +575,7 @@ my %zwave_class = (
parse => { "038703(..)" => '($1 eq "00" ? "indState:off" : parse => { "038703(..)" => '($1 eq "00" ? "indState:off" :
($1 eq "ff" ? "indState:on" : ($1 eq "ff" ? "indState:on" :
"indState:dim ".hex($1)))'} }, "indState:dim ".hex($1)))'} },
PROPRIETARY => { id => '88' }, PROPRIETARY => { id => '88', deprecated=>1 },
LANGUAGE => { id => '89' }, LANGUAGE => { id => '89' },
TIME => { id => '8a' , TIME => { id => '8a' ,
set => { timeOffset => 'ZWave_timeOffsetSet($hash, "%s")' }, set => { timeOffset => 'ZWave_timeOffsetSet($hash, "%s")' },
@ -618,16 +618,20 @@ my %zwave_class = (
"..9881(.*)"=> 'ZWave_secDecrypt($hash, $1, 0)', "..9881(.*)"=> 'ZWave_secDecrypt($hash, $1, 0)',
"..98c1(.*)"=> 'ZWave_secDecrypt($hash, $1, 1)' } }, "..98c1(.*)"=> 'ZWave_secDecrypt($hash, $1, 1)' } },
AV_TAGGING_MD => { id => '99' }, AV_TAGGING_MD => { id => '99' },
IP_CONFIGURATION => { id => '9a' }, IP_CONFIGURATION => { id => '9a', obsoleted=>1 },
ASSOCIATION_COMMAND_CONFIGURATION ASSOCIATION_COMMAND_CONFIGURATION
=> { id => '9b' }, => { id => '9b' },
SENSOR_ALARM => { id => '9c', SENSOR_ALARM => { id => '9c', deprecated=>1,
get => { alarm => "01%02x" }, get => { alarm => "01%02x" },
parse => { "..9c02(..)(..)(..)(....)" => parse => { "..9c02(..)(..)(..)(....)" =>
'"alarm_type_$2:level ".hex($3)." node ".hex($1)." seconds ".hex($4)'} }, '"alarm_type_$2:level ".hex($3)." node ".hex($1)." seconds ".hex($4)'} },
SILENCE_ALARM => { id => '9d' }, SILENCE_ALARM => { id => '9d' },
SENSOR_CONFIGURATION => { id => '9e' }, SENSOR_CONFIGURATION => { id => '9e', obsoleted=>1 },
SECURITY_S2 => { id => '9f' }, SECURITY_S2 => { id => '9f' },
IR_REPEATER => { id => 'a0' },
AUTHENTICATION => { id => 'a1' },
AUTHENTICATION_MEDIA_WRITE=>{ id => 'a2' },
GENERIC_SCHEDULE => { id => 'a3' },
MARK => { id => 'ef' }, MARK => { id => 'ef' },
NON_INTEROPERABLE => { id => 'f0' }, NON_INTEROPERABLE => { id => 'f0' },
); );
@ -5379,6 +5383,12 @@ ZWave_Parse($$@)
if($cmd eq "ZW_CONTROLLER_CHANGE" && $evt eq "protocolDone") { if($cmd eq "ZW_CONTROLLER_CHANGE" && $evt eq "protocolDone") {
AnalyzeCommand(undef, "set $ioName addNode off"); AnalyzeCommand(undef, "set $ioName addNode off");
} }
} elsif($cmd eq "ZW_APPLICATION_COMMAND_HANLDER_BRIDGE") {#134005 experimental
$arg =~ m/^(..)(..)/;
$id = $1;
$arg = substr($arg, 2, hex($2)*2+2);
$cmd = "APPLICATION_COMMAND_HANDLER";
} }
if($evt) { if($evt) {