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 +
define <name> IT <housecode> <on-code> <off-code>
+ [<dimup-code>] [<dimdown-code>]
+ define <name> IT <ITRotarySwitches|FLS100RotarySwitches>
+ <housecode>
10 Ziffern lange tri-State-Zahl (0/1/F) abhängig vom benutzten Gerät.<on-code>
2 Ziffern lange tri-State-Zahl, die den Einschaltbefehl enthält;
+ die Zahl wird an den housecode angefügt, um den 12-stelligen IT-Sendebefehl zu bilden.<off-code>
2 Ziffern lange tri-State-Zahl, die den Ausschaltbefehl enthält;
+ die Zahl wird an den housecode angefügt, um den 12-stelligen IT-Sendebefehl zu bilden.<dimup-code>
ist eine 2 Ziffern lange tri-State-Zahl, die den Befehl zum Heraufregeln enthält;
+ die Zahl wird an den housecode angefügt, um den 12-stelligen IT-Sendebefehl zu bilden.<dimdown-code>
ist eine 2 Ziffern lange tri-State-Zahl, die den Befehl zum Herunterregeln enthält;
+ die Zahl wird an den housecode angefügt, um den 12-stelligen IT-Sendebefehl zu bilden.define lamp IT 01FF010101 11 00 01 10
define roll1 IT 111111111F 11 00 01 10
define otherlamp IT 000000000F 11 10 00 00
define otherroll1 IT FFFFFFF00F 11 10
define itswitch1 IT A1
define lamp IT J10
define flsswitch1 IT IV1
define lamp IT II2
+ set <name> <value> [<time>]
+ value
eines der folgenden Schlüsselwörter ist:+ dimdown + dimup + off + on + on-till # siehe Anmerkungen +
set lamp on
set lamp1,lamp2,lamp3 on
set lamp1-lamp3 on
set lamp off
+ attr store eventMap on:open off:closed
+ attr store eventMap /on-for-timer 10:open/off:closed/
+ set store open
+
a-z 0-9
und -
(Bindestrich)
+ sollten vermieden werden. Dies ist die Liste der "offiziellen" Modelltypen: