2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-22 08:11:44 +00:00

10_ZWave.pm: ALARM/NOTIFICATION patch from Andreas (Forum #53389)

git-svn-id: https://svn.fhem.de/fhem/trunk@11794 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2016-07-15 14:11:43 +00:00
parent 729c863221
commit 76fbb433fa
2 changed files with 399 additions and 91 deletions

View File

@ -1,6 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature 93_DbRep: new module added - reporting of database content - changed: 10_ZWave: alarm Events text changed, comma replaced, Forum #53389
- feature: 93_DbRep: new module added - reporting of database content
written by DbLog, see commandref for details written by DbLog, see commandref for details
- feature: new module added: 52_I2C_SHT3x.pm (macs) - feature: new module added: 52_I2C_SHT3x.pm (macs)
- bugfix: 70_Jabber: log OTR empty message if debug-mode == 1 only - bugfix: 70_Jabber: log OTR empty message if debug-mode == 1 only

View File

@ -326,8 +326,23 @@ my %zwave_class = (
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',
get => { alarm => "04%02x" }, set => {
parse => { "..7105(..)(..)(.*)" => 'ZWave_alarmParse($1,$2,$3)'} }, alarmnotification => 'ZWave_ALARM_06_Set("%s")', # >=V2
},
get => {
alarmEventSupported => 'ZWave_ALARM_01_Get("%s")', # >=V3
alarm => 'ZWave_ALARM_04_Get(1, "%s")', # >=V1
alarmWithType => 'ZWave_ALARM_04_Get(2, "%s")', # >=V2
alarmWithTypeEvent => 'ZWave_ALARM_04_Get(3, "%s")', # >=V3
alarmTypeSupported => "07", # >=V2
},
parse => {
"..7102(.*)" => 'ZWave_ALARM_02_Report($1)', # >=V3
"..7105(..)(..)(.*)" =>
'ZWave_ALARM_05_Report($hash, $1, $2, $3)', # >=V1
"..7108(.*)" => 'ZWave_ALARM_08_Report($1)', # >=V2
},
},
MANUFACTURER_SPECIFIC => { id => '72', MANUFACTURER_SPECIFIC => { id => '72',
get => { model => "04" }, get => { model => "04" },
parse => { "0[8a]7205(....)(....)(....)(.*)" parse => { "0[8a]7205(....)(....)(....)(.*)"
@ -488,7 +503,11 @@ my %zwave_classVersion = (
meterReset => { min => 2 }, meterReset => { min => 2 },
meterSupported => { min => 2 }, meterSupported => { min => 2 },
wakeupIntervalCapabilities => { min => 2 }, wakeupIntervalCapabilities => { min => 2 },
alarmTypeSupported => { min => 2 },
alarmnotification => { min => 2 },
alarmWithType => { min => 2 },
alarmWithTypeEvent => { min => 3 },
alarmEventSupported => { min => 3 },
); );
my %zwave_cmdArgs = ( my %zwave_cmdArgs = (
@ -549,7 +568,7 @@ my %zwave_pepperImg;
my $p1_m = "([0-5][0-9])"; # mm 00-59 my $p1_m = "([0-5][0-9])"; # mm 00-59
my $p2_hm = "([01][0-9]|2[0-3]):([0-5][0-9])"; # hh:mm my $p2_hm = "([01][0-9]|2[0-3]):([0-5][0-9])"; # hh:mm
my $p3_hms = "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])"; # hh:mm:ss my $p3_hms = "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])"; # hh:mm:ss
my $p1_b = "([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"; # byte:0-255, 1-3 digits my $p1_b = "(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])"; # byte:0-255, 1-3 digits
my $p1_wd = "(mon|tue|wed|thu|fri|sat|sun)"; # 3 letter weekday my $p1_wd = "(mon|tue|wed|thu|fri|sat|sun)"; # 3 letter weekday
# ymd: yyyy-mm-dd, yyyy 4 digits, mm 2 digits 01-12, dd 2 digits 01-31 # ymd: yyyy-mm-dd, yyyy 4 digits, mm 2 digits 01-12, dd 2 digits 01-31
my $p3_ymd = "([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])"; my $p3_ymd = "([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])";
@ -573,6 +592,7 @@ ZWave_Initialize($)
classes classes
do_not_notify:1,0 do_not_notify:1,0
dummy:1,0 dummy:1,0
extendedAlarmReadings:0,1,2
ignore:1,0 ignore:1,0
noExplorerFrames:1,0 noExplorerFrames:1,0
eventForRaw eventForRaw
@ -2467,24 +2487,24 @@ my %zwave_alarmType = (
"0d"=>"HomeHealth" "0d"=>"HomeHealth"
); );
my %zwave_alarmEvent = ( my %zwave_alarmEvent = ( # no comma allowed in strings
"0101"=>"detected", "0101"=>"detected",
"0102"=>"detected, Unknown Location", "0102"=>"detected - Unknown Location",
"0103"=>"Alarm Test", "0103"=>"Alarm Test",
"0201"=>"detected", "0201"=>"detected",
"0202"=>"detected, Unknown Location", "0202"=>"detected - Unknown Location",
"0301"=>"detected", "0301"=>"detected",
"0302"=>"detected, Unknown Location", "0302"=>"detected - Unknown Location",
"0401"=>"Overheat detected", "0401"=>"Overheat detected",
"0402"=>"Overheat detected, Unknown Location", "0402"=>"Overheat detected - Unknown Location",
"0403"=>"Rapid Temperature Rise", "0403"=>"Rapid Temperature Rise",
"0404"=>"Rapid Temperature Rise, Unknown Location", "0404"=>"Rapid Temperature Rise - Unknown Location",
"0405"=>"Underheat detected", "0405"=>"Underheat detected",
"0406"=>"Underheat detected, Unknown Location", "0406"=>"Underheat detected - Unknown Location",
"0501"=>"Leak detected", "0501"=>"Leak detected",
"0502"=>"Leak detected, Unknown Location", "0502"=>"Leak detected - Unknown Location",
"0503"=>"Level Dropped", "0503"=>"Level Dropped",
"0504"=>"Level Dropped, Unknown Location", "0504"=>"Level Dropped - Unknown Location",
"0505"=>"Replace Filter", "0505"=>"Replace Filter",
"0601"=>"Manual Lock Operation", "0601"=>"Manual Lock Operation",
"0602"=>"Manual Unlock Operation", "0602"=>"Manual Unlock Operation",
@ -2524,13 +2544,13 @@ my %zwave_alarmEvent = (
"064c"=>"Barrier associated with non-Z-wave remote control.", "064c"=>"Barrier associated with non-Z-wave remote control.",
"0700"=>"Previous Events cleared", "0700"=>"Previous Events cleared",
"0701"=>"Intrusion", "0701"=>"Intrusion",
"0702"=>"Intrusion, Unknown Location", "0702"=>"Intrusion - Unknown Location",
"0703"=>"Tampering, product covering removed", "0703"=>"Tampering - product covering removed",
"0704"=>"Tampering, Invalid Code", "0704"=>"Tampering - Invalid Code",
"0705"=>"Glass Breakage", "0705"=>"Glass Breakage",
"0706"=>"Glass Breakage, Unknown Location", "0706"=>"Glass Breakage - Unknown Location",
"0707"=>"Motion Detection", "0707"=>"Motion Detection",
"0708"=>"Motion Detection, Unknown Location", "0708"=>"Motion Detection - Unknown Location",
"0800"=>"Previous Events cleared", "0800"=>"Previous Events cleared",
"0801"=>"Power has been applied", "0801"=>"Power has been applied",
"0802"=>"AC mains disconnected", "0802"=>"AC mains disconnected",
@ -2587,30 +2607,220 @@ my %zwave_alarmEvent = (
"0d06"=>"Volatile Organic Compound level" "0d06"=>"Volatile Organic Compound level"
); );
##############################################
### START: 0x71 ALARM (NOTIFICATION)
### Renamed from ALARM to NOTIFICATION in V3 specification,
### for backward compatibility the name ALARM will be used
### regardless of the version of the class.
sub sub
ZWave_alarmParse($$$) ZWave_ALARM_01_Get($) {
# 0x7101 Alarm/Notification EventSupportedGet >= V3
# alarmEventSupported
my ($arg) = @_;
foreach my $t (keys %zwave_alarmType) {
if (lc($zwave_alarmType{$t}) eq lc($arg)) {
return ("", "01".$t);
}
}
return ("unknown notification type entered, see commandref", "");
}
sub
ZWave_ALARM_02_Report($) {
# 0x7102 Alarm/Notification EventSupportedReport >= V3
# additional flagname "Appliance" in V4
my ($arg) = @_;
if($arg !~ m/(..)(..)(.*)/) {
return ("wrong format received");
}
my $t = $1;
my $rt = "alarmEventSupported_";
$rt .= ($zwave_alarmType{$t}) ? $zwave_alarmType{$t}.":" :
hex($t)."_unknown:";
my $numBitMasks = $2 & 0x1f;
#my $res = ($2 & 0xe0) >> 5; # reserved field
my $e = "";
my $val = $3;
my $delimeter = "";
for (my $i=0; $i<$numBitMasks; $i++) {
my $supported = hex(substr($val, $i*2, 2));
for (my $j=$i*8; $j<$i*8+8; $j++) {
if ($supported & (2 ** ($j-$i*8))) {
$e = sprintf("%s%02x", $t, $j);
$rt .= $delimeter;
$rt .= "(" . $j . ") ";
if (!$zwave_alarmEvent{$e}) {
$rt .= "unknown event";
} else {
$rt .= $zwave_alarmEvent{$e};
}
$delimeter = ", ";
}
}
}
return $rt;
}
sub
ZWave_ALARM_04_Get($$)
{ {
my ($t,$l,$r) = @_; # 0x7104 Alarm/Notification alarmGet >= V1
# alarm (V1), alarmWithType (V2), alarmWithTypeEvent (>=V3)
if($t=="00" && $r && $r =~ m/^..(..)(..)/) { # Forum #35178 my ($v, $arg) = @_;
$l = $1; $t = $2; my $rt = "04";
if ($v == 1) {
if($arg !~ m/^$p1_b$/) {
return ("wrong format, see commandref", "");
}
$rt .= sprintf("%02x", $1);
return ("",$rt);
} elsif ($v == 2) {
if($arg !~ m/(.*)/) {
return ("wrong format, see commandref", "");
}
foreach my $t (keys %zwave_alarmType) {
if (lc($zwave_alarmType{$t}) eq lc($1)) {
$rt .= sprintf("00%s", $t);
return ("", $rt);
}
}
} elsif ($v >= 3) { # V3=V4
if($arg !~ m/(.*) $p1_b/) {
return ("wrong format, see commandref", "");
}
foreach my $t (keys %zwave_alarmType) {
if (lc($zwave_alarmType{$t}) eq lc($1)) {
$rt .= sprintf("00%s%02x", $t, $2);
return ("", $rt);
}
}
}
} }
if(!$r || $r !~ m/......(..)(.*)/ || !$zwave_alarmType{$t}) { # V1 or unknown sub
return "alarm_type_$t:level $l"; ZWave_ALARM_05_Report($$$$)
} {
my ($e, $v4, $s) = ($1, $2, "alarm:$zwave_alarmType{$t}: "); # 0x7105 Alarm/Notification Report >= V1
# additional parameter in V2 and V3
if($l eq "00") { my ($hash, $t, $l, $r) = @_;
$s .= "Event cleared: "; my $name = $hash->{NAME};
$e = $1 if($v4 && $v4 =~ m/..(..)../);
my $rt0 = "";
my $rt1 = "";
my $at = "";
my $level = "";
my $eventname = "";
my $ar = AttrVal($name, "extendedAlarmReadings",0);
if (!$r) { #V1 Answer
$at = $zwave_alarmType{$t} ? $zwave_alarmType{$t} :
sprintf("%d_unknown", hex($t));
$rt0 = "alarm_type_$t:level $l";
$rt1 = "alarm_$at:level $l";
} elsif ($r =~ m/(..)(..)(..)(..)(..)(.*)/) {
my ($zid, $ns, $t2, $e, $prop, $opt) = ($1, $2, $3, $4, $5, $6);
if ($e ne "00") {
if (($t ne "00") && ($l eq "00")) {
$level = "Event cleared: ";
}
} else {
$level = "Event cleared: ";
my $len = hex($prop & 0x1f);
if (($len >= 1) && ($opt =~ m/(..)(.*)/)) {
$e = $1;
}
}
$eventname = $zwave_alarmEvent{"$t2$e"} ? $zwave_alarmEvent{"$t2$e"}
: sprintf("unknown event %d", hex($e));
$at = $zwave_alarmType{$t2} ? $zwave_alarmType{$t2} :
sprintf("%d_unknown", hex($t2));
my $nst = ($ns eq "ff") ? "notificationIsOn" : "notificationIsOff";
my $o = ($opt && ($e ne "00")) ? ", arg $prop$opt" : "";
$rt0 = "alarm:$at: $level $eventname$o";
$rt1 = "alarm_$at: $level $eventname$o, $nst";
} }
$s .= ($zwave_alarmEvent{"$t$e"} ? if ($ar == 0) {
$zwave_alarmEvent{"$t$e"} : "unknown event $e"); return ($rt0);
$s .= ", arg $v4" if($v4 && $l ne "00"); } elsif ($ar == 1) {
return $s; return ($rt1);
} elsif ($ar == 2) {
return ($rt0, $rt1);
} }
}
sub
ZWave_ALARM_06_Set($) {
# 0x7106 Alarm/Notification alarmSet (>=V2)
# alarmnotification
my ($arg) = @_;
if($arg !~ m/^(.*) (on|off)$/i) {
return ("wrong format, see commandref", "");
}
my $status = (lc($2) eq "on") ? "FF" : "00";
foreach my $t (keys %zwave_alarmType) {
if (lc($zwave_alarmType{$t}) eq lc($1)) {
return ("", "06".$t.$status);
}
}
return ("alarm/notification type not defined","");
}
sub
ZWave_ALARM_08_Report($) {
# 0x7108 Alarm/Notification TypeSupportedReport >= V2
# additional flagname "Appliance" in V4
my ($arg) = @_;
if($arg !~ m/(..)(.*)/) {
return ("wrong format received");
}
my $numBitMasks = $1 & 0x1f;
#my $res = ($1 & 0x60) >> 5; # reserved field
my $alarm_v1 = $1 & 0x80; # 0:standard types, 1:V1 non-standard
if ($alarm_v1) {
return ("alarmTypeSupported:non-standard V1 Alarm Types used");
} else {
my $rt = "alarmTypeSupported:";
my $t = "";
my $val = $2;
my $delimeter = "";
for (my $i=0; $i<$numBitMasks; $i++) {
my $supported = hex(substr($val, $i*2, 2));
for (my $j=$i*8; $j<$i*8+8; $j++) {
if ($supported & (2 ** ($j-$i*8))) {
$t = sprintf("%02x", $j);
$rt .= sprintf("$delimeter$zwave_alarmType{$t}");
$delimeter = " ";
}
}
}
return $rt;
}
}
### END: 0x71 ALARM/NOTIFICATION
##############################################
sub sub
ZWave_protectionParse($$) ZWave_protectionParse($$)
@ -4400,6 +4610,21 @@ s2Hex($)
<li>sucRouteDel<br> <li>sucRouteDel<br>
Delete static return routes to SUC/SIS node.</li> Delete static return routes to SUC/SIS node.</li>
<br><br><b>Class ALARM (NOTIFICATION), V4</b>
<li>alarmnotification &lt;alarmType&gt; (on|off)<br>
Enable (on) or disable (off) the sending of unsolicited reports for
the alarm type &lt;alarmType&gt;. A list of supported alarm types of the
device can be obtained with the "alarmTypeSupported" command. The
name of the alarm type is case insensitive. Sending of an unsolicted
notification only work to associated nodes, broadcasting is not
allowed, so associations have to be set up. This command is
specified in version 2.</li>
<li> Note:<br>
The name of the class ALARM was renamend to NOTIFICATION in
version 3 of the Zwave specification. Due to backward compatibility
reasons the class will be always referenced as ALARM in FHEM,
regardless of the version.</li>
<br><br><b>Class ASSOCIATION</b> <br><br><b>Class ASSOCIATION</b>
<li>associationAdd groupId nodeId ...<br> <li>associationAdd groupId nodeId ...<br>
Add the specified list of nodeIds to the association group groupId.<br> Note: Add the specified list of nodeIds to the association group groupId.<br> Note:
@ -4590,6 +4815,13 @@ s2Hex($)
<li>location LOCATION<br> <li>location LOCATION<br>
Store LOCATION in the EEPROM. Note: only ASCII is supported.</li> Store LOCATION in the EEPROM. Note: only ASCII is supported.</li>
<br><br><b>Class NOTIFICATION</b>
<li>Note:<br>
The name of the class ALARM was renamend to NOTIFICATION in
version 3 of the Zwave specification. Due to backward compatibility
reasons the class will be always referenced as ALARM in FHEM,
regardless of the version. Please refer to class ALARM.</li>
<br><br><b>Class POWERLEVEL</b> <br><br><b>Class POWERLEVEL</b>
<li>Class is only used in an installation or test situation</li> <li>Class is only used in an installation or test situation</li>
<li>powerlevel level timeout/s<br> <li>powerlevel level timeout/s<br>
@ -4631,8 +4863,8 @@ s2Hex($)
<li>scheduleEntryLockSet USER_ID ENABLED<br> <li>scheduleEntryLockSet USER_ID ENABLED<br>
enables or disables schedules for a specified user ID (V1)<br> enables or disables schedules for a specified user ID (V1)<br>
<ul> <ul>
USER_ID: id of user, starting from 1 up to the number of supported users, USER_ID: id of user, starting from 1 up to the number of supported
refer also to the USER_CODE class description.<br> users, refer also to the USER_CODE class description.<br>
ENABLED: 0=disabled, 1=enabled<br> ENABLED: 0=disabled, 1=enabled<br>
</ul> </ul>
</li> </li>
@ -4646,9 +4878,10 @@ s2Hex($)
STARTTIME ENDTIME<br> STARTTIME ENDTIME<br>
erase or set a week day schedule for a specified user ID (V1)<br> erase or set a week day schedule for a specified user ID (V1)<br>
<ul> <ul>
ACTION: 0=erase schedule slot, 1=modify the schedule slot for the user<br> ACTION: 0=erase schedule slot, 1=modify the schedule slot for the
USER_ID: id of user, starting from 1 up to the number of supported users, user<br>
refer also to the USER_CODE class description.<br> USER_ID: id of user, starting from 1 up to the number of supported
users, refer also to the USER_CODE class description.<br>
SCHEDULE_ID: schedule slot id (from 1 up to number of supported SCHEDULE_ID: schedule slot id (from 1 up to number of supported
schedule slots)<br> schedule slots)<br>
WEEKDAY: day of week, choose one of: WEEKDAY: day of week, choose one of:
@ -4663,9 +4896,10 @@ s2Hex($)
STARTDATE STARTTIME ENDDATE ENDTIME<br> STARTDATE STARTTIME ENDDATE ENDTIME<br>
erase or set a year day schedule for a specified user ID (V1)<br> erase or set a year day schedule for a specified user ID (V1)<br>
<ul> <ul>
ACTION: 0=erase schedule slot, 1=modify the schedule slot for the user<br> ACTION: 0=erase schedule slot, 1=modify the schedule slot for the
USER_ID: id of user, starting from 1 up to the number of supported users, user<br>
refer also to the USER_CODE class description.<br> USER_ID: id of user, starting from 1 up to the number of supported
users, refer also to the USER_CODE class description.<br>
SCHEDULE_ID: schedule slot id (from 1 up to number of supported SCHEDULE_ID: schedule slot id (from 1 up to number of supported
schedule slots)<br> schedule slots)<br>
STARTDATE: date of schedule start in the format YYYY-MM-DD<br> STARTDATE: date of schedule start in the format YYYY-MM-DD<br>
@ -4685,13 +4919,14 @@ s2Hex($)
(sign is mandatory, minutes: 0 to 127, 1-3 digits)<br> (sign is mandatory, minutes: 0 to 127, 1-3 digits)<br>
</ul> </ul>
</li> </li>
<li>scheduleEntryLockDailyRepeatingSet ACTION USER_ID SCHEDULE_ID WEEKDAYS <li>scheduleEntryLockDailyRepeatingSet ACTION USER_ID SCHEDULE_ID
STARTTIME DURATION<br> WEEKDAYS STARTTIME DURATION<br>
set a daily repeating schedule for the specified user (V3)<br> set a daily repeating schedule for the specified user (V3)<br>
<ul> <ul>
ACTION: 0=erase schedule slot, 1=modify the schedule slot for the user<br> ACTION: 0=erase schedule slot, 1=modify the schedule slot for the
USER_ID: id of user, starting from 1 up to the number of supported users, user<br>
refer also to the USER_CODE class description.<br> USER_ID: id of user, starting from 1 up to the number of supported
users, refer also to the USER_CODE class description.<br>
SCHEDULE_ID: schedule slot id (from 1 up to number of supported SCHEDULE_ID: schedule slot id (from 1 up to number of supported
schedule slots)<br> schedule slots)<br>
WEEKDAYS: concatenated string of weekdays (choose from: WEEKDAYS: concatenated string of weekdays (choose from:
@ -4765,8 +5000,8 @@ s2Hex($)
<ul> <ul>
TEMP: setpoint temperature value, by default the value is used TEMP: setpoint temperature value, by default the value is used
with 1 decimal, see PREC<br> with 1 decimal, see PREC<br>
SCALE: (optional) scale of temperature; [cC]=celsius, [fF]=fahrenheit, SCALE: (optional) scale of temperature; [cC]=celsius,
defaults to celsius<br> [fF]=fahrenheit, defaults to celsius<br>
TYPE: (optional) setpoint type; [1, 15], defaults to 1=heating<br> TYPE: (optional) setpoint type; [1, 15], defaults to 1=heating<br>
<ul> <ul>
1=heating, 1=heating,
@ -4781,18 +5016,21 @@ s2Hex($)
14=awayCooling, 14=awayCooling,
15=fullPower 15=fullPower
</ul> </ul>
PREC: (optional) number of decimals to be used, [1-7], defaults to 1<br> PREC: (optional) number of decimals to be used, [1-7], defaults
to 1<br>
SIZE: (optional) number of bytes used, [1, 2, 4], defaults to 2<br> SIZE: (optional) number of bytes used, [1, 2, 4], defaults to 2<br>
Note: optinal parameters can be ommitted and are used with there default Note: optinal parameters can be ommitted and are used with there
values. If you need or want to specify an optional parameter, ALL default values. If you need or want to specify an optional
parameters in front of this parameter need to be also specified!<br> parameter, ALL parameters in front of this parameter need
to be also specified!<br>
Note: the number of decimals (defined by PREC) and the number of Note: the number of decimals (defined by PREC) and the number of
bytes (defined by SIZE) used for the setpoint influence the usable bytes (defined by SIZE) used for the setpoint influence the usable
range for the temperature. Some device do not support all possible range for the temperature. Some device do not support all possible
values/combinations for PREC/SIZE.<br> values/combinations for PREC/SIZE.<br>
<ul> <ul>
1 byte: 0 decimals [-128, 127], 1 decimal [-12.8, 12.7], ...<br> 1 byte: 0 decimals [-128, 127], 1 decimal [-12.8, 12.7], ...<br>
2 byte: 0 decimals [-32768, 32767], 1 decimal [-3276.8, 3276.7], ...<br> 2 byte: 0 decimals [-32768, 32767], 1 decimal [-3276.8, 3276.7],
...<br>
4 byte: 0 decimals [-2147483648, 2147483647], ...<br> 4 byte: 0 decimals [-2147483648, 2147483647], ...<br>
</ul> </ul>
</ul> </ul>
@ -4848,10 +5086,36 @@ s2Hex($)
Since this information is stored in the dongle, the information will be Since this information is stored in the dongle, the information will be
returned directly even for WAKE_UP devices.</li> returned directly even for WAKE_UP devices.</li>
<br><br><b>Class ALARM</b> <br><br><b>Class ALARM (NOTIFICATION), V4</b>
<li>alarm alarmId<br> <li>alarm &lt;alarmId&gt;<br>
return the value for alarmId. The value is device specific. return the value for the (decimal) alarmId. The value is device
specific. This command is specified in version 1 and should only
be used with old devices that only support version 1.</li>
<li>alarmWithType &lt;alarmType&gt;<br>
return the event for the specified alarm type. This command is
specified in version 2.
</li> </li>
<li>alarmWithTypeEvent &lt;alarmType&gt; &lt;eventnumber&gt;<br>
return the event details for the specified alarm type and
eventnumber. This command is specified in version 3. The eventnumber
is specific for each alarm type, a list of the supported
eventnumbers can be obtained by the "alarmEventSupported" command,
refer also to the documentation of the device.
</li>
<li>alarmTypeSupported<br>
Returns a list of the supported alarm types of the device which are
used as parameters in the "alarmWithType" and "alarmWithTypeEvent"
commands. This command is specified in version 2.</li>
<li>alarmEventSupported &lt;alarmType&gt;<br>
Returns a list of the supported events for the specified alarm type.
The numbers of the events can be used as parameters in the
"alarmWithTypeEvent" command. This command is specified in
version 3.</li>
<li>Note:<br>
The name of the class ALARM was renamend to NOTIFICATION in
version 3 of the Zwave specification. Due to backward compatibility
reasons the class will be always referenced as ALARM in FHEM,
regardless of the version.</li>
<br><br><b>Class ASSOCIATION</b> <br><br><b>Class ASSOCIATION</b>
<li>association groupId<br> <li>association groupId<br>
@ -4959,22 +5223,22 @@ s2Hex($)
<br><br><b>Class METER</b> <br><br><b>Class METER</b>
<li>meter scale<br> <li>meter scale<br>
return the meter report for the requested scale.<br> return the meter report for the requested scale.<br>
Note: protocol V1 does not support the scale parameter, the parameter will Note: protocol V1 does not support the scale parameter, the parameter
be ignored and the default scale will be returned.<br> will be ignored and the default scale will be returned.<br>
For protocol V2 and higher, scale is supported and depends on the type of For protocol V2 and higher, scale is supported and depends on the
the meter (energy, gas or water).<br> type of the meter (energy, gas or water).<br>
The device may not support all scales, see the meterSupported command and The device may not support all scales, see the meterSupported
its output. If the scale parameter is omitted, the default unit will be command and its output. If the scale parameter is omitted, the
reported.<br> default unit will be reported.<br>
Example: For an electric meter, meter 0 will report energy in kWh, Example: For an electric meter, meter 0 will report energy in kWh,
meter 2 will report power in W and meter 6 will report current in A meter 2 will report power in W and meter 6 will report current in A
(if these scales are supported).<br> (if these scales are supported).<br>
</li> </li>
<li>meterSupported<br> <li>meterSupported<br>
request the type of the meter, the supported scales and the capability to request the type of the meter, the supported scales and the
reset the accumulated value.<br> capability to reset the accumulated value.<br>
Note: The output contains the decimal numbers of the supported scales that Note: The output contains the decimal numbers of the supported
can be used as parameter for the meter command. scales that can be used as parameter for the meter command.
</li> </li>
<br><br><b>Class MULTI_CHANNEL</b> <br><br><b>Class MULTI_CHANNEL</b>
@ -5016,6 +5280,13 @@ s2Hex($)
<li>location<br> <li>location<br>
Get the location from the EEPROM. Note: only ASCII is supported.</li> Get the location from the EEPROM. Note: only ASCII is supported.</li>
<br><br><b>Class NOTIFICATION</b>
<li>Note:<br>
The name of the class ALARM was renamend to NOTIFICATION in
version 3 of the Zwave specification. Due to backward compatibility
reasons the class will be always referenced as ALARM in FHEM,
regardless of the version. Please refer to class ALARM.</li>
<br><br><b>Class POWERLEVEL</b> <br><br><b>Class POWERLEVEL</b>
<li>powerlevel<br> <li>powerlevel<br>
Get the current powerlevel and remaining time in this level.</li> Get the current powerlevel and remaining time in this level.</li>
@ -5046,8 +5317,8 @@ s2Hex($)
returns the specified week day schedule for the specified user returns the specified week day schedule for the specified user
(day of week, start time, end time) (V1)<br> (day of week, start time, end time) (V1)<br>
<ul> <ul>
USER_ID: id of user, starting from 1 up to the number of supported users, USER_ID: id of user, starting from 1 up to the number of supported
refer also to the USER_CODE class description.<br> users, refer also to the USER_CODE class description.<br>
SCHEDULE_ID: schedule slot id (from 1 up to number of supported SCHEDULE_ID: schedule slot id (from 1 up to number of supported
schedule slots)<br> schedule slots)<br>
</ul> </ul>
@ -5056,8 +5327,8 @@ s2Hex($)
returns the specified year day schedule for the specified user returns the specified year day schedule for the specified user
(start date, start time, end date, end time) (V1)<br> (start date, start time, end date, end time) (V1)<br>
<ul> <ul>
USER_ID: id of user, starting from 1 up to the number of supported users, USER_ID: id of user, starting from 1 up to the number of supported
refer also to the USER_CODE class description.<br> users, refer also to the USER_CODE class description.<br>
SCHEDULE_ID: schedule slot id (from 1 up to number of supported SCHEDULE_ID: schedule slot id (from 1 up to number of supported
schedule slots)<br> schedule slots)<br>
</ul> </ul>
@ -5066,14 +5337,15 @@ s2Hex($)
returns the specified daily schedule for the specified user returns the specified daily schedule for the specified user
(weekdays, start date, duration) (V3)<br> (weekdays, start date, duration) (V3)<br>
<ul> <ul>
USER_ID: id of user, starting from 1 up to the number of supported users, USER_ID: id of user, starting from 1 up to the number of supported
refer also to the USER_CODE class description.<br> users, refer also to the USER_CODE class description.<br>
SCHEDULE_ID: schedule slot id (from 1 up to number of supported SCHEDULE_ID: schedule slot id (from 1 up to number of supported
schedule slots)<br> schedule slots)<br>
</ul> </ul>
</li> </li>
<li>scheduleEntryLockTimeOffset<br> <li>scheduleEntryLockTimeOffset<br>
returns the time zone offset TZO and the daylight saving time offset (V2) returns the time zone offset TZO and the daylight saving time
offset (V2)
</li> </li>
<br><br><b>Class SECURITY</b> <br><br><b>Class SECURITY</b>
@ -5228,6 +5500,24 @@ s2Hex($)
Generate an an additional event for the RAW message. Can be used if Generate an an additional event for the RAW message. Can be used if
someone fears that critical notifies wont work, if FHEM changes the event someone fears that critical notifies wont work, if FHEM changes the event
text after an update. </li> text after an update. </li>
<li>extendedAlarmReadings<br>
Some devices support more than one alarm type, this attribute
select which type of reading is used for the reports of the ALARM
(or NOTIFICATION) class:<br>
A value of "0" select a combined, single reading ("alarm") for
all alarm types of the device. Subsequent reports of different
alarm types will overwrite each other. This is the default setting
and the former behavior.<br>
A value of "1" select separate alarm readings for each alarm type
of the device. The readingings are named "alarm_&lt;alarmtype&gt;.
This can also be selected if only one alarmtype is supported by
the device. This reading also contain the status of the
alarmnotification. For compatibility reasons this is currently
not supported with the combined reading.<br>
A value of "2" select both of the above and create a combined and
the seperate readings at the same time, this should only be used
if really needed as more or less duplicate events are generated.
</li>
<li><a href="#ignore">ignore</a></li> <li><a href="#ignore">ignore</a></li>
<li><a href="#neighborListPos">neighborListPos</a></li> <li><a href="#neighborListPos">neighborListPos</a></li>
@ -5292,9 +5582,25 @@ s2Hex($)
transmitNoRoute]</li> transmitNoRoute]</li>
<br><b>Class ALARM</b> <br><b>Class ALARM</b>
<li>Note:<br>
Depending on the setting of the attribute "extendedAlarmReadings"
the generated events differ slightly. With a value of "0" or "2" a
combined reading for all alarm types of the device with the name
"alarm" will be used. With a value of "1" or "2" separate readings
for each supported alarm type will be generated with names
"alarm_&lt;alarmType&gt;.</li>
<li>Devices with class version 1 support: alarm_type_X:level Y</li> <li>Devices with class version 1 support: alarm_type_X:level Y</li>
<li>For higher class versions more detailed events with 100+ different <li>For higher class versions more detailed events with 100+ different
strings in the form alarm:<string> are generated.</li> strings in the form alarm:&lt;string&gt;
(or alarm_&lt;alarmType&gt;:&lt;string&gt;) are generated.<br>
For the combined reading, the name of the alarm type is part of
the reading event, for separate readings it is part of the
reading name.<br>
If a cleared event can be identified, the string "Event cleared:"
is reported before the event details.<br>
The seperate readings also contain the status of the
alarmnotification. For compatibility reasons this is currently
not supported with the combined reading. </li>
<br><b>Class APPLICATION_STATUS</b> <br><b>Class APPLICATION_STATUS</b>
<li>applicationStatus: [cmdRejected]</li> <li>applicationStatus: [cmdRejected]</li>
@ -5329,7 +5635,7 @@ s2Hex($)
<br><br><b>Class CLIMATE_CONTROL_SCHEDULE</b> <br><br><b>Class CLIMATE_CONTROL_SCHEDULE</b>
<li>ccsOverride:[no|temporary|permanent], <li>ccsOverride:[no|temporary|permanent],
[frost protection|energy saving|unused]</li> [frost protection|energy saving|unused]</li>
<li>ccsChanged:<number></li> <li>ccsChanged:&lt;number&gt;</li>
<li>ccs_[mon|tue|wed|thu|fri|sat|sun]:HH:MM temp HH:MM temp...</li> <li>ccs_[mon|tue|wed|thu|fri|sat|sun]:HH:MM temp HH:MM temp...</li>
<br><br><b>Class CLOCK</b> <br><br><b>Class CLOCK</b>
@ -5371,7 +5677,7 @@ s2Hex($)
<li>indoorTemperature: %0.1f C</li> <li>indoorTemperature: %0.1f C</li>
<li>indoorHumidity: %s %</li> <li>indoorHumidity: %s %</li>
<li>remainingFilterLife: %s %</li> <li>remainingFilterLife: %s %</li>
<li>supportedStatus: <list of supported stati></li> <li>supportedStatus: &lt;list of supported stati&gt;</li>
<br><br><b>Class INDICATOR</b> <br><br><b>Class INDICATOR</b>
<li>indState:[on|off|dim value]</li> <li>indState:[on|off|dim value]</li>
@ -5453,9 +5759,10 @@ s2Hex($)
<li>scheduleEntryLockDailyRepeating_$userId:userID: $value $weekdays <li>scheduleEntryLockDailyRepeating_$userId:userID: $value $weekdays
$hour:$minute $durationhour:$durationminute<br> $hour:$minute $durationhour:$durationminute<br>
Note: $weekdays is a concatenated string with weekdaynames Note: $weekdays is a concatenated string with weekdaynames
("sun","mon","tue","wed","thu","fri","sat") where inactive weekdays are ("sun","mon","tue","wed","thu","fri","sat") where inactive
represented by "...", e.g. montue...wedfri</li> weekdays are represented by "...", e.g. montue...wedfri</li>
<li>scheduleEntryLockTimeOffset:TZO: $sign$hour:$minute DST: $sign$minutes</li> <li>scheduleEntryLockTimeOffset:TZO: $sign$hour:$minute DST:
$sign$minutes</li>
<br><br><b>Class SECURITY</b> <br><br><b>Class SECURITY</b>
<li>none<br> <li>none<br>