diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm index d28811c63..5a50dc24f 100755 --- a/fhem/FHEM/10_ZWave.pm +++ b/fhem/FHEM/10_ZWave.pm @@ -207,7 +207,8 @@ my %zwave_class = ( THERMOSTAT_FAN_MODE => { id => '44' }, THERMOSTAT_FAN_STATE => { id => '45' }, CLIMATE_CONTROL_SCHEDULE => { id => '46', - set => { ccs => 'ZWave_ccsSet("%s")' }, + set => { ccs => 'ZWave_ccsSet("%s")' , + ccsOverride => 'ZWave_ccsSetOverride("%s")'}, get => { ccs => 'ZWave_ccsGet("%s")', ccsAll => 'ZWave_ccsAllGet($hash)', ccsChanged => "04", @@ -2269,6 +2270,34 @@ ZWave_ccsSet($) return ("", "01$ret"); } +sub +ZWave_ccsSetOverride($) +{ + my ($arg) = @_; + + my $override_type; + my $override_state; + my $err = "wrong arguments, see commandref for details"; + + if ($arg =~ m/(no|temporary|permanent) (.*)/) { + $override_type = (lc($1) eq "no" ? 0 : (lc($1) eq "temporary" ? 1 : 2)); + my $state = $2; + if ($state =~ m/(frost|energy)/) { + $override_state = (lc($state) eq "frost" ? 0x79 : 0x7a); + } elsif ($state =~ m/[-+]?[0-9]*\.?[0-9]+/) { + $state *= 10; + $state = 120 if ($state > 120); + $state = -128 if ($state < -128); + $state += 256 if ($state < 0); + $override_state = $state; + } else { + return($err, ""); + } + return ("", sprintf("06%02x%02x", $override_type, $override_state)); + } + return($err, ""); +} + sub ZWave_ccsGet($) { @@ -4845,6 +4874,15 @@ s2Hex($) If only a weekday is specified without any time and tempDiff, then the complete schedule for the specified day is removed and marked as unused. +