diff --git a/fhem/CHANGED b/fhem/CHANGED
index 35b8e8a70..2d6ebddc6 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - bugfix: SOMFY: add module to CUL client list, to set IODev automatically
- feature: sequence: triggerPartial Attribute added
- feature: 36_JeeLink: changed flash command to use fhem firmware
directory (by HCS)
diff --git a/fhem/FHEM/00_CUL.pm b/fhem/FHEM/00_CUL.pm
index 02eaccbee..93902a0db 100755
--- a/fhem/FHEM/00_CUL.pm
+++ b/fhem/FHEM/00_CUL.pm
@@ -41,13 +41,13 @@ my %sets = (
"patable" => "",
);
-my @ampllist = (24, 27, 30, 33, 36, 38, 40, 42); # rAmpl(dB)
+my @ampllist = (24, 27, 30, 33, 36, 38, 40, 42); # rAmpl(dB)
my $clientsSlowRF = ":FS20:FHT.*:KS300:USF1000:BS:HMS: ".
":CUL_EM:CUL_WS:CUL_FHTTK:CUL_HOERMANN: ".
- ":ESA2000:CUL_IR:CUL_TX:Revolt:IT:UNIRoll: ".
+ ":ESA2000:CUL_IR:CUL_TX:Revolt:IT:UNIRoll:SOMFY ".
":STACKABLE_CC:CUL_RFR:";
-my $clientsHomeMatic = ":CUL_HM:HMS:CUL_IR:STACKABLE_CC:";
+my $clientsHomeMatic = ":CUL_HM:HMS:CUL_IR:STACKABLE_CC:";
my $clientsMAX = ":CUL_MAX:HMS:CUL_IR:STACKABLE_CC:";
my $clientsWMBus = ":WMBUS:HMS:CUL_IR:STACKABLE_CC:";
@@ -70,6 +70,7 @@ my %matchListSlowRF = (
"G:IT" => "^i......\$",
"H:STACKABLE_CC"=>"^\\*",
"I:UNIRoll" => "^[0-9A-F]{5}(B|D|E)",
+ "J:SOMFY" => "^Y[r|t|s]:?[A-F0-9]+",
);
my %matchListHomeMatic = (
"1:CUL_HM" => "^A....................",
@@ -124,10 +125,10 @@ sub
CUL_FingerprintFn($$)
{
my ($name, $msg) = @_;
-
+
# Store only the "relevant" part, as the CUL won't compute the checksum
$msg = substr($msg, 8) if($msg =~ m/^81/ && length($msg) > 8);
-
+
return ($name, $msg);
}
@@ -177,7 +178,7 @@ CUL_Define($$)
$attr{$name}{dummy} = 1;
return undef;
}
-
+
$hash->{DeviceName} = $dev;
my $ret = DevIo_OpenDev($hash, 0, "CUL_DoInit");
return $ret;
@@ -202,7 +203,7 @@ CUL_Undef($$)
}
CUL_SimpleWrite($hash, "X00"); # Switch reception off, it may hang up the CUL
- DevIo_CloseDev($hash);
+ DevIo_CloseDev($hash);
return undef;
}
@@ -366,7 +367,7 @@ CUL_Get($@)
$ampllist[$r{"1B"}&7],
4+4*($r{"1D"}&3) #Sens
);
-
+
} else {
CUL_SimpleWrite($hash, $gets{$a[1]}[0] . $arg);
@@ -496,7 +497,7 @@ CUL_ReadAnswer($$$$)
if($^O =~ m/Win/ && $hash->{USBDev}) {
$hash->{USBDev}->read_const_time($to*1000); # set timeout (ms)
# Read anstatt input sonst funzt read_const_time nicht.
- $buf = $hash->{USBDev}->read(999);
+ $buf = $hash->{USBDev}->read(999);
return ("Timeout reading answer for get $arg", undef)
if(length($buf) == 0);
@@ -571,17 +572,17 @@ sub
CUL_XmitDlyHM($$$)
{
my ($hash,$fn,$now) = @_;
-
+
my (undef,$mTy,undef,$id) = unpack 'A8A2A6A6',$fn if(length($fn)>19);
if($id &&
- $modules{CUL_HM}{defptr}{$id} &&
- $modules{CUL_HM}{defptr}{$id}{helper}{io} &&
+ $modules{CUL_HM}{defptr}{$id} &&
+ $modules{CUL_HM}{defptr}{$id}{helper}{io} &&
$modules{CUL_HM}{defptr}{$id}{helper}{io}{nextSend}) {
my $dDly = $modules{CUL_HM}{defptr}{$id}{helper}{io}{nextSend} - $now;
- #$dDly -= 0.04 if ($mTy eq "02");# while HM devices need a rest there are
- # still some devices that need faster
- # reactionfor ack.
+ #$dDly -= 0.04 if ($mTy eq "02");# while HM devices need a rest there are
+ # still some devices that need faster
+ # reactionfor ack.
# Mode needs to be determined
if ($dDly > 0.01){# wait less then 10 ms will not work
$dDly = 0.1 if($dDly > 0.1);
@@ -590,7 +591,7 @@ CUL_XmitDlyHM($$$)
}
}
shift(@{$hash->{helper}{$id}{QUEUE}});
- InternalTimer($now+0.1, "CUL_XmitDlyHMTo", "$hash->{NAME}:$id", 1)
+ InternalTimer($now+0.1, "CUL_XmitDlyHMTo", "$hash->{NAME}:$id", 1)
if (scalar(@{$hash->{helper}{$id}{QUEUE}}));
return 0;
}
@@ -626,7 +627,7 @@ CUL_WriteTranslate($$$)
$msg = substr($msg,6,4) . substr($msg,10);
} elsif($fn eq "cmd") { # internal command
- if($msg eq "speed100") {
+ if($msg eq "speed100") {
$fn = "AR";
} elsif($msg eq "speed10") {
$fn = "Ar";
@@ -758,7 +759,7 @@ CUL_Read($)
my $name = $hash->{NAME};
my $culdata = $hash->{PARTIAL};
- Log3 $name, 5, "CUL/RAW: $culdata/$buf";
+ Log3 $name, 5, "CUL/RAW: $culdata/$buf";
$culdata .= $buf;
while($culdata =~ m/\n/) {
@@ -803,7 +804,7 @@ CUL_Parse($$$$@)
Log3 $name, 5, "CUL_Parse: switched to $dmsg";
return;
}
-
+
if($dmsg =~ m/^[0-9A-F]{4}U./) { # RF_ROUTER
Dispatch($hash, $dmsg, undef);
return;
@@ -858,6 +859,8 @@ CUL_Parse($$$$@)
$dmsg = lc($dmsg);
} elsif($fn eq "i" && $len >= 7) { # IT
$dmsg = lc($dmsg);
+ } elsif($fn eq "Y" && $len >= 3) { # SOMFY RTS
+ ;
} elsif($fn eq "S" && $len >= 33) { # CUL_ESA / ESA2000 / Native
;
} elsif($fn eq "E" && $len >= 11) { # CUL_EM / Native
@@ -869,7 +872,7 @@ CUL_Parse($$$$@)
} elsif($fn eq "A" && $len >= 20) { # AskSin/BidCos/HomeMatic
my $src = substr($dmsg,9,6);
if($modules{CUL_HM}{defptr}{$src}){
- $modules{CUL_HM}{defptr}{$src}{helper}{io}{nextSend} =
+ $modules{CUL_HM}{defptr}{$src}{helper}{io}{nextSend} =
gettimeofday() + 0.100;
}
$dmsg .= "::$rssi:$name" if(defined($rssi));
@@ -933,7 +936,7 @@ CUL_SimpleWrite(@)
{
my ($hash, $msg, $nonl) = @_;
return if(!$hash);
- ($hash, $msg) = CUL_prefix(1, $hash, $msg);
+ ($hash, $msg) = CUL_prefix(1, $hash, $msg);
my $name = $hash->{NAME};
if (AttrVal($name,"rfmode","") eq "HomeMatic"){
@@ -1020,8 +1023,8 @@ CUL_Attr(@)
Log3 $name, 2, $msg;
return $msg;
}
-
-
+
+
} else {
return if($hash->{initString} eq "X21");
$hash->{Clients} = $clientsSlowRF;
@@ -1037,11 +1040,11 @@ CUL_Attr(@)
delete $hash->{".clientArray"};
} elsif($aName eq "hmId"){
if ($cmd eq "set"){
- return "wrong syntax: hmId must be 6-digit-hex-code (3 byte)"
+ return "wrong syntax: hmId must be 6-digit-hex-code (3 byte)"
if ($aVal !~ m/^[A-F0-9]{6}$/i);
- }
+ }
}
-
+
return undef;
}
@@ -1073,7 +1076,7 @@ CUL_prefix($$$)
The CUL/CUN(O) is a family of RF devices sold by busware.de.
- With the opensource firmware
+ With the opensource firmware
culfw they are capable
to receive and send different 433/868 MHz protocols (FS20/FHT/S300/EM/HMS/MAX!).
It is even possible to use these devices as range extenders/routers, see the
@@ -1091,8 +1094,8 @@ CUL_prefix($$$)
It is possible to attach more than one device in order to get better
reception, FHEM will filter out duplicate messages.
- Note: This module may require the Device::SerialPort
or
- Win32::SerialPort
module if you attach the device via USB
+ Note: This module may require the Device::SerialPort
or
+ Win32::SerialPort
module if you attach the device via USB
and the OS sets strange default parameters for serial devices.
Device::SerialPort
is not needed, and FHEM
- opens the device with simple file io. This might work if the operating
- system uses sane defaults for the serial parameters, e.g. some Linux
+ perl module Device::SerialPort
is not needed, and FHEM
+ opens the device with simple file io. This might work if the operating
+ system uses sane defaults for the serial parameters, e.g. some Linux
distributions and OSX.
modprobe usbserial vendor=0x03eb product=0x204b