diff --git a/FHEM/10_IT.pm b/FHEM/10_IT.pm index 9fb0c19fc..2db5abd1b 100644 --- a/FHEM/10_IT.pm +++ b/FHEM/10_IT.pm @@ -6,9 +6,12 @@ # Published under GNU GPL License ######################################################package main; +# $Id$ + use strict; use warnings; +use SetExtensions; my %codes = ( "XMIToff" => "off", @@ -90,64 +93,59 @@ IT_Do_On_Till($@) sub IT_Set($@) { - my ($hash, @a) = @_; + my ($hash, $name, @a) = @_; + my $ret = undef; my $na = int(@a); my $message; - return "no set value specified" if($na < 2 || $na > 3); + return "no set value specified" if($na < 1); - my $c = $it_c2b{$a[1]}; - if(!defined($c)) { + my $list = ""; + $list .= "off:noArg on:noArg " if( AttrVal($name, "model", "") ne "itremote" ); + $list .= "dimUp:noArg dimDown:noArg on-till" if( AttrVal($name, "model", "") eq "itdimmer" ); - # Model specific set arguments - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"model"})) { - my $mt = $models{$attr{$a[0]}{"model"}}; - return "Unknown argument $a[1], choose one of " - if($mt && $mt eq "sender"); - return "Unknown argument $a[1], choose one of $it_simple" - if($mt && $mt eq "simple"); - } - return "Unknown argument $a[1], choose one of " . - join(" ", sort keys %it_c2b); - } + return SetExtensions($hash, $list, $name, @a) if( $a[0] eq "?" ); + return SetExtensions($hash, $list, $name, @a) if( !grep( $_ =~ /^$a[0]($|:)/, split( ' ', $list ) ) ); - return IT_Do_On_Till($hash, @a) if($a[1] eq "on-till"); - return "Bad time spec" if($na == 3 && $a[2] !~ m/^\d*\.?\d+$/); + my $c = $it_c2b{$a[0]}; + + return IT_Do_On_Till($hash, @a) if($a[0] eq "on-till"); + return "Bad time spec" if($na == 2 && $a[1] !~ m/^\d*\.?\d+$/); my $io = $hash->{IODev}; ## Do we need to change RFMode to SlowRF?? - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"switch_rfmode"})) { - if ($attr{$a[0]}{"switch_rfmode"} eq "1") { # do we need to change RFMode of IODev + if(defined($attr{$name}) && defined($attr{$name}{"switch_rfmode"})) { + if ($attr{$name}{"switch_rfmode"} eq "1") { # do we need to change RFMode of IODev my $ret = CallFn($io->{NAME}, "AttrFn", "set", ($io->{NAME}, "rfmode", "SlowRF")); } } ## Do we need to change ITrepetition ?? - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"ITrepetition"})) { - $message = "isr".$attr{$a[0]}{"ITrepetition"}; + if(defined($attr{$name}) && defined($attr{$name}{"ITrepetition"})) { + $message = "isr".$attr{$name}{"ITrepetition"}; CUL_SimpleWrite($io, $message); - Log GetLogLevel($a[0],4), "IT set ITrepetition: $message for $io->{NAME}"; + Log GetLogLevel($name,4), "IT set ITrepetition: $message for $io->{NAME}"; } ## Do we need to change ITfrequency ?? - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"ITfrequency"})) { - my $f = $attr{$a[0]}{"ITfrequency"}/26*65536; + if(defined($attr{$name}) && defined($attr{$name}{"ITfrequency"})) { + my $f = $attr{$name}{"ITfrequency"}/26*65536; my $f2 = sprintf("%02x", $f / 65536); my $f1 = sprintf("%02x", int($f % 65536) / 256); my $f0 = sprintf("%02x", $f % 256); my $arg = sprintf("%.3f", (hex($f2)*65536+hex($f1)*256+hex($f0))/65536*26); - Log GetLogLevel($a[0],4), "Setting ITfrequency (0D,0E,0F) to $f2 $f1 $f0 = $arg MHz"; + Log GetLogLevel($name,4), "Setting ITfrequency (0D,0E,0F) to $f2 $f1 $f0 = $arg MHz"; CUL_SimpleWrite($hash, "if$f2$f1$f0"); } - my $v = join(" ", @a); + my $v = $name ." ". join(" ", @a); $message = "is".uc($hash->{XMIT}.$hash->{$c}); ## Log that we are going to switch InterTechno - Log GetLogLevel($a[0],2), "IT set $v"; + Log GetLogLevel($name,2), "IT set $v"; (undef, $v) = split(" ", $v, 2); # Not interested in the name... ## Send Message to IODev and wait for correct answer @@ -159,21 +157,21 @@ IT_Set($@) } ## Do we need to change ITrepetition back?? - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"ITrepetition"})) { + if(defined($attr{$name}) && defined($attr{$name}{"ITrepetition"})) { $message = "isr".$it_defrepetition; CUL_SimpleWrite($io, $message); - Log GetLogLevel($a[0],4), "IT set ITrepetition back: $message for $io->{NAME}"; + Log GetLogLevel($name,4), "IT set ITrepetition back: $message for $io->{NAME}"; } ## Do we need to change ITfrequency back?? - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"ITfrequency"})) { - Log GetLogLevel($a[0],4), "Setting ITfrequency back to 433.92 MHz"; + if(defined($attr{$name}) && defined($attr{$name}{"ITfrequency"})) { + Log GetLogLevel($name,4), "Setting ITfrequency back to 433.92 MHz"; CUL_SimpleWrite($hash, "if0"); } ## Do we need to change RFMode back to HomeMatic?? - if(defined($attr{$a[0]}) && defined($attr{$a[0]}{"switch_rfmode"})) { - if ($attr{$a[0]}{"switch_rfmode"} eq "1") { # do we need to change RFMode of IODev + if(defined($attr{$name}) && defined($attr{$name}{"switch_rfmode"})) { + if ($attr{$name}{"switch_rfmode"} eq "1") { # do we need to change RFMode of IODev my $ret = CallFn($io->{NAME}, "AttrFn", "set", ($io->{NAME}, "rfmode", "HomeMatic")); } } @@ -383,6 +381,7 @@ IT_Parse($$) off on on-till # Special, see the note +
  • set extensions are supported.
  • Examples: - - =end html + +=begin html_DE + + +

    IT - InterTechno

    + + + + +=end html_DE + =cut