2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-21 07:56:03 +00:00

10_IT: Implementation for Intertechno protocol 3 (send/receive)

git-svn-id: https://svn.fhem.de/fhem/trunk@7839 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
dancer0705 2015-02-02 20:25:11 +00:00
parent d9c2dd690d
commit 0a7a50b623
2 changed files with 187 additions and 44 deletions

View File

@ -18,6 +18,9 @@ my %codes = (
"XMITon" => "on", "XMITon" => "on",
"XMITdimup" => "dimup", "XMITdimup" => "dimup",
"XMITdimdown" => "dimdown", "XMITdimdown" => "dimdown",
"XMITgroup" => "group",
"XMITunit" => "unit",
"XMITprotocol" => "protocol",
"99" => "on-till", "99" => "on-till",
); );
@ -37,6 +40,11 @@ my %bintotristate=(
"01" => "F", "01" => "F",
"11" => "1" "11" => "1"
); );
my %bintotristateV3=(
"10" => "1",
"01" => "0",
"11" => "D"
);
sub sub
IT_Initialize($) IT_Initialize($)
{ {
@ -46,14 +54,16 @@ IT_Initialize($)
$it_c2b{$codes{$k}} = $k; $it_c2b{$codes{$k}} = $k;
} }
$hash->{Match} = "^i......\$"; $hash->{Match} = "^i......";
$hash->{SetFn} = "IT_Set"; $hash->{SetFn} = "IT_Set";
$hash->{StateFn} = "IT_SetState"; $hash->{StateFn} = "IT_SetState";
$hash->{DefFn} = "IT_Define"; $hash->{DefFn} = "IT_Define";
$hash->{UndefFn} = "IT_Undef"; $hash->{UndefFn} = "IT_Undef";
$hash->{ParseFn} = "IT_Parse"; $hash->{ParseFn} = "IT_Parse";
$hash->{AttrList} = "IODev ITfrequency ITrepetition switch_rfmode:1,0 do_not_notify:1,0 ignore:0,1 dummy:1,0 model:itremote,itswitch,itdimmer loglevel:0,1,2,3,4,5,6"; $hash->{AttrList} = "IODev ITfrequency ITrepetition switch_rfmode:1,0 do_not_notify:1,0 ignore:0,1 dummy:1,0 model:itremote,itswitch,itdimmer protocol:V1,V3 loglevel:0,1,2,3,4,5,6";
$hash->{AutoCreate}=
{ "IT.*" => { GPLOT => "", FILTER => "%NAME" } };
} }
##################################### #####################################
@ -147,7 +157,11 @@ IT_Set($@)
} }
my $v = $name ." ". join(" ", @a); my $v = $name ." ". join(" ", @a);
$message = "is".uc($hash->{XMIT}.$hash->{$c}); if ($hash->{$it_c2b{"protocol"}} eq "V3") {
$message = "is".uc(substr($hash->{XMIT},0,length($hash->{XMIT})-5).$hash->{$it_c2b{"group"}}.$hash->{$c}.$hash->{$it_c2b{"unit"}});
} else {
$message = "is".uc($hash->{XMIT}.$hash->{$c});
}
## Log that we are going to switch InterTechno ## Log that we are going to switch InterTechno
Log GetLogLevel($name,2), "IT set $v"; Log GetLogLevel($name,2), "IT set $v";
@ -186,8 +200,8 @@ IT_Set($@)
# Look for all devices with the same code, and set state, timestamp # Look for all devices with the same code, and set state, timestamp
my $code = "$hash->{XMIT}"; my $code = "$hash->{XMIT}";
my $tn = TimeNow(); my $tn = TimeNow();
foreach my $n (keys %{ $modules{IT}{defptr}{$code} }) {
foreach my $n (keys %{ $modules{IT}{defptr}{$code} }) {
my $lh = $modules{IT}{defptr}{$code}{$n}; my $lh = $modules{IT}{defptr}{$code}{$n};
$lh->{CHANGED}[0] = $v; $lh->{CHANGED}[0] = $v;
$lh->{STATE} = $v; $lh->{STATE} = $v;
@ -236,21 +250,50 @@ IT_Define($$)
} }
my $u = "wrong syntax: define <name> IT 10-bit-housecode " . my $u = "wrong syntax: define <name> IT 10-bit-housecode " .
"off-code on-code [dimup-code] [dimdown-code]"; "off-code on-code [dimup-code] [dimdown-code] or for protocol V3 " .
"define <name> IT <26 bit Address> <1 bit group bit> <4 bit unit>";
return $u if(int(@a) < 5); return $u if(int(@a) < 5);
return "Define $a[0]: wrong IT-Code format: specify a 10 digits 0/1/f "
if( ($a[2] !~ m/^[f0-1]{10}$/i) );
return "Define $a[0]: wrong ON format: specify a 2 digits 0/1/f " my $housecode;
my $oncode;
my $offcode;
my $unitCode;
my $groupBit;
if (length($a[2]) == 26) {
# Is Protocol V3
return "Define $a[0]: wrong IT-Code format: specify a 26 digits 0/1 "
if( ($a[2] !~ m/^[0-1]{26}$/i) );
return "Define $a[0]: wrong Bit Group format: specify a 1 digits 0/1 "
if( ($a[3] !~ m/^[0-1]{1}$/i) );
return "Define $a[0]: wrong Unit format: specify 4 digits 0/1 "
if( ($a[4] !~ m/^[0-1]{4}$/i) );
#return "Define $a[0]: wrong on/off/dimm format: specify a 1 digits 0/1/d "
# if( ($a[3] !~ m/^[d0-1]{1}$/i) );
$housecode=$a[2].$a[3].$a[4];
$groupBit=$a[3];
$unitCode=$a[4];
$oncode = 1;
$offcode = 0;
$hash->{$it_c2b{"protocol"}} = 'V3';
$hash->{$it_c2b{"unit"}} = $unitCode;
$hash->{$it_c2b{"group"}} = $groupBit;
} else {
return "Define $a[0]: wrong IT-Code format: specify a 10 digits 0/1/f "
if( ($a[2] !~ m/^[f0-1]{10}$/i) );
return "Define $a[0]: wrong ON format: specify a 2 digits 0/1/f "
if( ($a[3] !~ m/^[f0-1]{2}$/i) ); if( ($a[3] !~ m/^[f0-1]{2}$/i) );
return "Define $a[0]: wrong OFF format: specify a 2 digits 0/1/f " return "Define $a[0]: wrong OFF format: specify a 2 digits 0/1/f "
if( ($a[4] !~ m/^[f0-1]{2}$/i) ); if( ($a[4] !~ m/^[f0-1]{2}$/i) );
$housecode = $a[2];
$oncode = $a[3];
$offcode = $a[4];
$hash->{$it_c2b{"protocol"}} = 'V1';
}
my $housecode = $a[2];
my $oncode = $a[3];
my $offcode = $a[4];
$hash->{XMIT} = lc($housecode); $hash->{XMIT} = lc($housecode);
$hash->{$it_c2b{"on"}} = lc($oncode); $hash->{$it_c2b{"on"}} = lc($oncode);
@ -275,6 +318,7 @@ IT_Define($$)
my $ncode = 1; my $ncode = 1;
my $name = $a[0]; my $name = $a[0];
$hash->{CODE}{$ncode++} = $code; $hash->{CODE}{$ncode++} = $code;
$modules{IT}{defptr}{$code}{$name} = $hash; $modules{IT}{defptr}{$code}{$name} = $hash;
@ -292,6 +336,7 @@ IT_Undef($$)
# As after a rename the $name my be different from the $defptr{$c}{$n} # As after a rename the $name my be different from the $defptr{$c}{$n}
# we look for the hash. # we look for the hash.
foreach my $dname (keys %{ $modules{IT}{defptr}{$c} }) { foreach my $dname (keys %{ $modules{IT}{defptr}{$c} }) {
delete($modules{IT}{defptr}{$c}{$dname}) delete($modules{IT}{defptr}{$c}{$dname})
if($modules{IT}{defptr}{$c}{$dname} == $hash); if($modules{IT}{defptr}{$c}{$dname} == $hash);
@ -305,38 +350,95 @@ IT_Parse($$)
{ {
my ($hash, $msg) = @_; my ($hash, $msg) = @_;
my $housecode; my $housecode;
my $unitCode;
my $groupBit;
my $onoffcode; my $onoffcode;
my $def; my $def;
my $newstate; my $newstate;
my @list; my @list;
if (length($msg) != 7) { if (length($msg) != 7 && length($msg) != 17) {
Log3 undef,3,"message \"$msg\" to short!"; Log3 undef,3,"message \"$msg\" to short!";
return "message \"$msg\" to short!"; return "message \"$msg\" to short!";
} }
my $bin=sprintf("%024b",hex(substr($msg,1,length($msg)-1))); my $bin = undef;
if ( length($msg) == 17 ) {
my $bin1=sprintf("%024b",hex(substr($msg,1,length($msg)-1-8)));
while (length($bin1) < 32) {
# suffix 0
$bin1 = '0'.$bin1;
}
my $bin2=sprintf("%024b",hex(substr($msg,1+8,length($msg)-1)));
while (length($bin2) < 32) {
# suffix 0
$bin2 = '0'.$bin2;
}
$bin = $bin1 . $bin2;
}
else {
$bin=sprintf("%024b",hex(substr($msg,1,length($msg)-1)));
}
if ((length($bin) % 2) != 0) {
# suffix 0
$bin = '0'.$bin;
}
#Log3 undef,4,"BIN: $bin";
my $msgcode=""; my $msgcode="";
while (length($bin)>=2) { while (length($bin)>=2) {
if (substr($bin,0,2) != "10") { if (length($msg) == 7) {
$msgcode=$msgcode.$bintotristate{substr($bin,0,2)}; if (substr($bin,0,2) != "10") {
$msgcode=$msgcode.$bintotristate{substr($bin,0,2)};
} else {
Log3 undef,4,"unknown tristate in \"$bin\"";
return "unknown tristate in \"$bin\""
}
} else { } else {
Log3 undef,4,"unknown tristate in \"$bin\""; $msgcode=$msgcode.$bintotristateV3{substr($bin,0,2)};
return "unknown tristate in \"$bin\""
} }
$bin=substr($bin,2,length($bin)-2); $bin=substr($bin,2,length($bin)-2);
} }
$housecode=substr($msgcode,0,length($msgcode)-2); if (length($msg) == 7) {
$onoffcode=substr($msgcode,length($msgcode)-2,2); $housecode=substr($msgcode,0,length($msgcode)-2);
$onoffcode=substr($msgcode,length($msgcode)-2,2);
} elsif (length($msg) == 17) {
$groupBit=substr($msgcode,26,1);
$onoffcode=substr($msgcode,27,1);
$unitCode=substr($msgcode,28,4);
$housecode=substr($msgcode,0,26).$groupBit.$unitCode;
} else {
Log3 undef,4,"Wrong IT message received: $msgcode";
return "Wrong IT message received: $msgcode";
}
#Log3 $hash,3,$msg."->".$msgcode."->".$housecode." ".$onoffcode; if(!defined($modules{IT}{defptr}{lc("$housecode")})) {
if(!defined($modules{IT}{defptr}{lc($housecode)})) { if(length($msg) == 7) {
Log3 undef,4,"$housecode not defined (Switch code: $onoffcode)"; Log3 undef,4,"$housecode not defined (Switch code: $onoffcode)";
return "$housecode not defined (Switch code: $onoffcode)!"; #return "$housecode not defined (Switch code: $onoffcode)!";
if ($onoffcode eq "F0") { # on code IT
Log3 undef,4,"For autocreate please use the on button.";
return "$housecode not defined (Switch code: $onoffcode)! \n For autocreate please use the on button.";
}
my $tmpOffCode = "F0";
my $tmpOnCode = "0F";
if ($onoffcode eq "FF") { # on code IT
$tmpOnCode = "FF";
}
return "UNDEFINED IT_$housecode IT $housecode $tmpOnCode $tmpOffCode" if(!$def);
} else {
Log3 undef,4,"$housecode not defined (Address: ".substr($msgcode,0,26)." Group: $groupBit Unit: $unitCode Switch code: $onoffcode)";
#return "$housecode not defined (Address: ".substr($msgcode,0,26)." Group: $groupBit Unit: $unitCode Switch code: $onoffcode)!";
return "UNDEFINED IT_$housecode IT " . substr($msgcode,0,26) . " $groupBit $unitCode" if(!$def);
}
} }
$def=$modules{IT}{defptr}{lc($housecode)}; $def=$modules{IT}{defptr}{lc($housecode)};
foreach my $name (keys %{$def}) { foreach my $name (keys %{$def}) {
if (length($msg) == 17) {
if ($def->{$name}->{$it_c2b{"group"}} != $groupBit || $def->{$name}->{$it_c2b{"unit"}} != $unitCode) {
next;
}
}
if ($def->{$name}->{$it_c2b{"on"}} eq lc($onoffcode)) { if ($def->{$name}->{$it_c2b{"on"}} eq lc($onoffcode)) {
$newstate="on"; $newstate="on";
} elsif ($def->{$name}->{$it_c2b{"off"}} eq lc($onoffcode)) { } elsif ($def->{$name}->{$it_c2b{"off"}} eq lc($onoffcode)) {
@ -362,9 +464,13 @@ IT_Parse($$)
<h3>IT - InterTechno</h3> <h3>IT - InterTechno</h3>
<ul> <ul>
The InterTechno 433MHZ protocol is used by a wide range of devices, which are either of The InterTechno 433MHZ protocol is used by a wide range of devices, which are either of
the sender/sensor category or the receiver/actuator category. As we right now are only the sender/sensor category or the receiver/actuator category. As we right now
able to SEND InterTechno commands, but CAN'T receive them, this module at the moment able to SEND and RECEIVE InterTechno commands
supports just devices like switches, dimmers, etc. through an <a href="#CUL">CUL</a> device, so this must be defined first. supports just devices like switches, dimmers, etc. through an <a href="#CUL">CUL</a> device, so this must be defined first.
<br>
This module supports Intertechno protocol version 1 and version 3.
New received device packages are add in fhem category IT with autocreate.
Hint: IT protocol 1 devices are only created at pressed on button.
<br><br> <br><br>
@ -375,6 +481,8 @@ IT_Parse($$)
[&lt;dimup-code&gt;] [&lt;dimdown-code&gt;] </code> [&lt;dimup-code&gt;] [&lt;dimdown-code&gt;] </code>
<br>or<br> <br>or<br>
<code>define &lt;name&gt; IT &lt;ITRotarySwitches|FLS100RotarySwitches&gt; </code> <code>define &lt;name&gt; IT &lt;ITRotarySwitches|FLS100RotarySwitches&gt; </code>
<br>or<br>
<code>define &lt;name&gt; IT &lt;address 26 Bit&gt; &lt;group bit&gt; &lt;unit Code&gt;</code>
<br><br> <br><br>
The value of housecode is a 10-digit InterTechno Code, consisting of 0/1/F as it is The value of housecode is a 10-digit InterTechno Code, consisting of 0/1/F as it is
@ -392,7 +500,7 @@ IT_Parse($$)
<br> <br>
The value of ITRotarySwitches and FLS100RotarySwitches is internaly translated The value of ITRotarySwitches and FLS100RotarySwitches is internaly translated
into a houscode value. into a houscode value.
<br>
<ul> <ul>
<li><code>&lt;housecode&gt;</code> is a 10 digit tri-state number (0/1/F) depending on <li><code>&lt;housecode&gt;</code> is a 10 digit tri-state number (0/1/F) depending on
your device setting (see list below).</li> your device setting (see list below).</li>
@ -405,9 +513,8 @@ IT_Parse($$)
<li>The optional <code>&lt;dimdown-code&gt;</code> is a 2 digit tri-state number for dimming your device down; <li>The optional <code>&lt;dimdown-code&gt;</code> is a 2 digit tri-state number for dimming your device down;
It is appended to the housecode to build the 12-digits IT-Message.</li> It is appended to the housecode to build the 12-digits IT-Message.</li>
</ul> </ul>
<br> <br>
Examples:
Examples:
<ul> <ul>
<code>define lamp IT 01FF010101 11 00 01 10</code><br> <code>define lamp IT 01FF010101 11 00 01 10</code><br>
<code>define roll1 IT 111111111F 11 00 01 10</code><br> <code>define roll1 IT 111111111F 11 00 01 10</code><br>
@ -416,8 +523,21 @@ IT_Parse($$)
<code>define itswitch1 IT A1</code><br> <code>define itswitch1 IT A1</code><br>
<code>define lamp IT J10</code><br> <code>define lamp IT J10</code><br>
<code>define flsswitch1 IT IV1</code><br> <code>define flsswitch1 IT IV1</code><br>
<code>define lamp IT II2</code> <code>define lamp IT II2</code><br>
</ul> </ul>
<br>
For Intertechno protocol 3 is the &lt;housecode&gt; a 26-digits number. Additionaly there are a 4-digits unit code and a 1-digit group code used.
<ul>
<li><code>&lt;address&gt;</code> is a 26 digit number (0/1)</li>
<li><code>&lt;group&gt;</code> is a 1 digit number (0/1)</li>
<li><code>&lt;unit&gt;</code> is a 4 digit number (0/1)</li>
</ul>
<br>
Examples:
<ul>
<code>define IT myITSwitch IT 00111100110101010110011111 0 0000</code>
</ul>
</ul> </ul>
<br> <br>
@ -553,10 +673,13 @@ IT_Parse($$)
<ul> <ul>
Das InterTechno 433MHZ Protokoll wird von einer Vielzahl von Ger&auml;ten Das InterTechno 433MHZ Protokoll wird von einer Vielzahl von Ger&auml;ten
benutzt. Diese geh&ouml;ren entweder zur Kategorie Sender/Sensoren oder zur benutzt. Diese geh&ouml;ren entweder zur Kategorie Sender/Sensoren oder zur
Kategorie Empf&auml;nger/Aktoren. Derzeit ist nur das SENDEN von InterTechno Kategorie Empf&auml;nger/Aktoren. Es ist das Senden sowie das Empfangen von InterTechno
Befehlen m&ouml;glich, so dass dieses Modul nur die Bedienung von Ger&auml;ten wie Befehlen m&ouml;glich. Ger&auml;ten können z.B.
Schalter, Dimmer usw. &uuml;ber ein <a href="#CUL">CUL</a> unterst&uuml;tzt; der Schalter, Dimmer usw. sein.
CUL muss daher bereits definiert sein.
Von diesem Modul wird sowohl das Protolkoll 1 sowie das Protokoll 3 unterstützt.
Neu empfangene Pakete werden per Autocreate in Fhem unter der Kategorie IT angelegt.
Hinweis: IT Protokoll 1 devices werden nur beim on Befehl angelegt.
<br><br> <br><br>
@ -567,9 +690,11 @@ IT_Parse($$)
[&lt;dimup-code&gt;] [&lt;dimdown-code&gt;] </code> [&lt;dimup-code&gt;] [&lt;dimdown-code&gt;] </code>
<br>oder<br> <br>oder<br>
<code>define &lt;name&gt; IT &lt;ITRotarySwitches|FLS100RotarySwitches&gt; </code> <code>define &lt;name&gt; IT &lt;ITRotarySwitches|FLS100RotarySwitches&gt; </code>
<br>or<br>
<code>define &lt;name&gt; IT &lt;Adresse 26 Bit&gt; &lt;Group bit&gt; &lt;Unit Code&gt;</code>
<br><br> <br><br>
Der Wert von housecode ist abh&auml;ngig vom verwendeten Ger&auml;t und besteht aus zehn Ziffern InterTechno-Code. Der Wert von housecode ist abh&auml;ngig vom verwendeten Ger&auml;t und besteht aus zehn Ziffern InterTechno-Code Protokoll 1.
Da dieser ein tri-State-Protokoll ist, k&ouml;nnen die Ziffern jeweils 0/1/F annehmen. Da dieser ein tri-State-Protokoll ist, k&ouml;nnen die Ziffern jeweils 0/1/F annehmen.
<br> <br>
Bit 11/12 werden f&uuml;r Schalten oder Dimmen verwendet. Da die Hersteller verschiedene Codes verwenden, k&ouml;nnen hier die Bit 11/12 werden f&uuml;r Schalten oder Dimmen verwendet. Da die Hersteller verschiedene Codes verwenden, k&ouml;nnen hier die
@ -582,6 +707,10 @@ IT_Parse($$)
des InterTechno-Ger&auml;tes zusammen, z.B. I2 oder IV4. des InterTechno-Ger&auml;tes zusammen, z.B. I2 oder IV4.
<br> <br>
Die Werte der ITRotary-Schalter und FLS100Rotary-Schalter werden intern in housecode-Werte umgewandelt. Die Werte der ITRotary-Schalter und FLS100Rotary-Schalter werden intern in housecode-Werte umgewandelt.
<br>
F&uuml;r Intertechno Protokoll 3 besteht der hauscode aus 26 Ziffern. Zusätzlich werden noch 4 Ziffern als Unit Code sowie eine Ziffer als Group code benötigt.
<br>
Neues IT Element in FHEM anlegen: define IT myITSwitch IT <Adresse 26 Bit> <Group bit> <Unit Code>
<br> <br>
<ul> <ul>
<li><code>&lt;housecode&gt;</code> 10 Ziffern lange tri-State-Zahl (0/1/F) abh&auml;ngig vom benutzten Ger&auml;t.</li> <li><code>&lt;housecode&gt;</code> 10 Ziffern lange tri-State-Zahl (0/1/F) abh&auml;ngig vom benutzten Ger&auml;t.</li>
@ -596,7 +725,7 @@ IT_Parse($$)
</ul> </ul>
<br> <br>
Beispiele: Beispiele:
<ul> <ul>
<code>define lamp IT 01FF010101 11 00 01 10</code><br> <code>define lamp IT 01FF010101 11 00 01 10</code><br>
<code>define roll1 IT 111111111F 11 00 01 10</code><br> <code>define roll1 IT 111111111F 11 00 01 10</code><br>
@ -605,7 +734,21 @@ IT_Parse($$)
<code>define itswitch1 IT A1</code><br> <code>define itswitch1 IT A1</code><br>
<code>define lamp IT J10</code><br> <code>define lamp IT J10</code><br>
<code>define flsswitch1 IT IV1</code><br> <code>define flsswitch1 IT IV1</code><br>
<code>define lamp IT II2</code> <code>define lamp IT II2</code><br>
</ul>
<br>
F&uuml;r Intertechno Protokoll 3 ist der &lt;housecode&gt; eine 26-stellige Zahl. Zus&auml;tzlich wird noch ein 1 stelliger Gruppen-Code, sowie
ein 4-stelliger unit code verwendet.
<ul>
<li><code>&lt;address&gt;</code> is a 26 digit number (0/1)</li>
<li><code>&lt;group&gt;</code> is a 1 digit number (0/1)</li>
<li><code>&lt;unit&gt;</code> is a 4 digit number (0/1)</li>
</ul>
<br>
Beispiele:
<ul>
<code>define IT myITSwitch IT 00111100110101010110011111 0 0000</code>
</ul> </ul>
</ul> </ul>
<br> <br>

View File

@ -50,7 +50,7 @@ FHEM/10_FBDECT.pm rudolfkoenig http://forum.fhem.de FRITZ!Box
FHEM/10_FRM.pm ntruchsess http://forum.fhem.de Sonstige Systeme FHEM/10_FRM.pm ntruchsess http://forum.fhem.de Sonstige Systeme
FHEM/10_FS20.pm rudolfkoenig http://forum.fhem.de SlowRF FHEM/10_FS20.pm rudolfkoenig http://forum.fhem.de SlowRF
FHEM/00_HXBDevice.pm borisneubert http://forum.fhem.de Sonstige Systeme FHEM/00_HXBDevice.pm borisneubert http://forum.fhem.de Sonstige Systeme
FHEM/10_IT.pm justme1968 http://forum.fhem.de InterTechno FHEM/10_IT.pm dancer0705/bjoernh http://forum.fhem.de InterTechno
FHEM/10_Itach_IR ulimaass http://forum.fhem.de Sonstige Systeme FHEM/10_Itach_IR ulimaass http://forum.fhem.de Sonstige Systeme
FHEM/10_MAX.pm mgehre http://forum.fhem.de MAX FHEM/10_MAX.pm mgehre http://forum.fhem.de MAX
FHEM/10_MQTT_BRIDGE ntruchsess http://forum.fhem.de Sonstige Systeme FHEM/10_MQTT_BRIDGE ntruchsess http://forum.fhem.de Sonstige Systeme
@ -67,7 +67,7 @@ FHEM/11_OWDevice.pm borisneubert/mfr69bs http://forum.fhem.de 1Wire
FHEM/12_HMS.pm rudolfkoenig http://forum.fhem.de SlowRF FHEM/12_HMS.pm rudolfkoenig http://forum.fhem.de SlowRF
FHEM/13_KS300.pm rudolfkoenig http://forum.fhem.de SlowRF FHEM/13_KS300.pm rudolfkoenig http://forum.fhem.de SlowRF
FHEM/14_CUL_MAX.pm mgehre http://forum.fhem.de MAX FHEM/14_CUL_MAX.pm mgehre http://forum.fhem.de MAX
FHEM/14_CUL_TCM97001.pm dancer0705 http://forum.fhem.de Sonstiges FHEM/14_CUL_TCM97001.pm dancer0705/bjoernh http://forum.fhem.de Sonstiges
FHEM/14_CUL_TX.pm rudolfkoenig http://forum.fhem.de SlowRF FHEM/14_CUL_TX.pm rudolfkoenig http://forum.fhem.de SlowRF
FHEM/14_CUL_WS.pm rudolfkoenig http://forum.fhem.de SlowRF FHEM/14_CUL_WS.pm rudolfkoenig http://forum.fhem.de SlowRF
FHEM/15_CUL_EM.pm rudolfkoenig http://forum.fhem.de SlowRF FHEM/15_CUL_EM.pm rudolfkoenig http://forum.fhem.de SlowRF