From 2186e3a683596868c008d613f6939c0fcfa3c09a Mon Sep 17 00:00:00 2001 From: mgehre <> Date: Wed, 30 Jan 2013 19:07:27 +0000 Subject: [PATCH] MAX: check arguments to "fake" git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@2610 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/10_MAX.pm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/FHEM/10_MAX.pm b/FHEM/10_MAX.pm index 4d7cf232f..cb1a99640 100755 --- a/FHEM/10_MAX.pm +++ b/FHEM/10_MAX.pm @@ -334,10 +334,19 @@ MAX_Set($@) return ($hash->{IODev}{Send})->($hash->{IODev},"ShutterContactState",$dest,$state,"06",undef,undef,$hash->{addr}); } elsif($hash->{type} eq "WallMountedThermostat") { return "Invalid number of arguments" if(@args != 3); - my $desiredTemperature = $args[1]; - my $measuredTemperature = $args[2]; + + return "desiredTemperature is invalid" if($args[1] < 4.5 || $args[2] > 30.5); + + $args[2] = 0 if($args[2] < 0); #Clamp temperature to minimum of 0 degree + + #Encode into binary form + my $arg2 = int(10*$args[2]); + #First bit is 9th bit of temperature, rest is desiredTemperature + my $arg1 = (($arg2&0x100)>>1) | (int(2*$args[1])&0x7F); + $args2 &= 0xFF; + return ($hash->{IODev}{Send})->($hash->{IODev},"WallThermostatState",$dest, - sprintf("%02x%02x",int($desiredTemperature*2),int($measuredTemperature*10)),"04",undef,undef,$hash->{addr}); + sprintf("%02x%02x",$arg1,$arg2),"04",undef,undef,$hash->{addr}); } else { return "fake does not work for device type $hash->{type}"; }