From ae0a676435e227293615c31cdb48dc3374cfa207 Mon Sep 17 00:00:00 2001 From: mgehre <> Date: Wed, 21 Nov 2012 19:57:25 +0000 Subject: [PATCH] MAX: add removeDevice for set git-svn-id: https://svn.fhem.de/fhem/trunk@2151 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_MAXLAN.pm | 15 ++++++++++++++- fhem/FHEM/10_MAX.pm | 10 ++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/fhem/FHEM/00_MAXLAN.pm b/fhem/FHEM/00_MAXLAN.pm index 40bb0e9ca..bbd28c4f0 100755 --- a/fhem/FHEM/00_MAXLAN.pm +++ b/fhem/FHEM/00_MAXLAN.pm @@ -18,6 +18,7 @@ sub MAXLAN_SimpleWrite(@); sub MAXLAN_Poll($); sub MAXLAN_SendDeviceCmd($$); sub MAXLAN_RequestConfiguration($$); +sub MAXLAN_RemoveDevice($$); my %device_types = ( 0 => "Cube", @@ -90,6 +91,7 @@ MAXLAN_Define($$) $hash->{INTERVAL} = @a > 3 ? $a[3] : $defaultPollInterval; #This interface is shared with 14_CUL_MAX.pm $hash->{SendDeviceCmd} = \&MAXLAN_SendDeviceCmd; + $hash->{RemoveDevice} = \&MAXLAN_RemoveDevice; MAXLAN_Connect($hash); @@ -429,6 +431,8 @@ MAXLAN_Parse($$) my ($len,$addr,$devicetype,$groupid,$firmware,$testresult,$serial) = unpack("CH6CCCCa[10]", $bindata); Dispatch($hash, "MAX,define,$addr,$device_types{$devicetype},$serial,$groupid", {RAWMSG => $rmsg}); + + return "Invalid C: response, len does not match" if($len != length($bindata)-1); #devicetype: Cube = 0, HeatingThermostat = 1, HeatingThermostatPlus = 2, WallMountedThermostat = 3, ShutterContact = 4, PushButton = 5 #Seems that ShutterContact does not have any configdata if($devicetype == 0){#Cube @@ -635,7 +639,7 @@ MAXLAN_SendDeviceCmd($$) return MAXLAN_ExpectAnswer($hash, "S:"); } -#Resets the cube (what does that acutally do? Factory reset?) +#Resets the cube, i.e. does a factory reset. All pairings will be lost. sub MAXLAN_RequestReset($) { @@ -644,6 +648,15 @@ MAXLAN_RequestReset($) MAXLAN_ExpectAnswer($hash, "A:"); } +#Remove the device from the cube, i.e. deletes the pairing +sub +MAXLAN_RemoveDevice($$) +{ + my ($hash,$addr) = @_; + MAXLAN_Write($hash,"t:1,1,".encode_base64(pack("H6",$addr),"")); + MAXLAN_ExpectAnswer($hash, "A:"); +} + 1; =pod diff --git a/fhem/FHEM/10_MAX.pm b/fhem/FHEM/10_MAX.pm index 1f8ce3aed..c14a47085 100755 --- a/fhem/FHEM/10_MAX.pm +++ b/fhem/FHEM/10_MAX.pm @@ -95,8 +95,10 @@ MAX_Set($@) $ctrlmode = 0; #auto #TODO: auto mode with temperature is also possible } elsif($args[0] eq "eco") { + return "No ecoTemperature defined" if(!exists($hash->{ecoTemperature})); $temperature = $hash->{ecoTemperature}; } elsif($args[0] eq "comfort") { + return "No comfortTemperature defined" if(!exists($hash->{comfortTemperature})); $temperature = $hash->{comfortTemperature}; } elsif($args[0] eq "on") { $temperature = 30.5; @@ -152,13 +154,15 @@ MAX_Set($@) my $payload = pack("CCCCCCH6C"."CCCCCCC",0x00,0x00,17,0x00,0x00,0x00,$hash->{addr},0x00, $comfort,$eco,$max,$min,$offset,$windowOpenTemp,$windowOpenTime); return ($hash->{IODev}{SendDeviceCmd})->($hash->{IODev},$payload); + }elsif($setting eq "removeDevice") { + return ($hash->{IODev}{RemoveDevice})->($hash->{IODev},$hash->{addr}); }else{ if($hash->{type} eq "HeatingThermostat") { #Create numbers from 4.5 to 30.5 my $templist = join(",",map { $_/2 } (9..61)); - return "Unknown argument $setting, choose one of desiredTemperature:eco,comfort,$templist ecoTemperature comfortTemperature temperatureOffset maximumTemperature minimumTemperature windowOpenTemperature windowOpenDuration groupid"; + return "Unknown argument $setting, choose one of desiredTemperature:eco,comfort,$templist ecoTemperature comfortTemperature temperatureOffset maximumTemperature minimumTemperature windowOpenTemperature windowOpenDuration groupid removeDevice"; } else { - return "Unknown argument $setting"; + return "Unknown argument $setting, choose one of groupid removeDevice"; } } } @@ -326,6 +330,8 @@ MAX_Parse($$)