mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 12:49:34 +00:00
09_CUL_FHTTK.pm: use new battery readings - Forum #87575
git-svn-id: https://svn.fhem.de/fhem/trunk@17032 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
5fe3e4dd2f
commit
9da7170ff2
@ -1,5 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# 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.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- changed: 09_CUL_FHTTK: adapted battery reading to new common reading
|
||||||
|
Forum #87575
|
||||||
- change: 98_dewpoint: adjust log level for FAN/ALARM on/off to 4
|
- change: 98_dewpoint: adjust log level for FAN/ALARM on/off to 4
|
||||||
- bugfix: 82_LGTV_WebOS: fix current program list readings
|
- bugfix: 82_LGTV_WebOS: fix current program list readings
|
||||||
- change: 74_Unifi: changed readings -UC_newClients and -AP_utilization
|
- change: 74_Unifi: changed readings -UC_newClients and -AP_utilization
|
||||||
|
@ -128,13 +128,13 @@ CUL_FHTTK_Initialize($)
|
|||||||
$hash->{SetFn} = "CUL_FHTTK_Set";
|
$hash->{SetFn} = "CUL_FHTTK_Set";
|
||||||
$hash->{DefFn} = "CUL_FHTTK_Define";
|
$hash->{DefFn} = "CUL_FHTTK_Define";
|
||||||
$hash->{UndefFn} = "CUL_FHTTK_Undef";
|
$hash->{UndefFn} = "CUL_FHTTK_Undef";
|
||||||
|
$hash->{AttrFn} = "CUL_FHTTK_Attr";
|
||||||
$hash->{ParseFn} = "CUL_FHTTK_Parse";
|
$hash->{ParseFn} = "CUL_FHTTK_Parse";
|
||||||
$hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:0,1 " .
|
$hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:0,1 " .
|
||||||
"model:FHT80TF,FHT80TF-2,dummy ".
|
"model:FHT80TF,FHT80TF-2,virtual ".
|
||||||
$readingFnAttributes;
|
$readingFnAttributes;
|
||||||
$hash->{AutoCreate}=
|
$hash->{AutoCreate}=
|
||||||
{ "CUL_FHTTK.*" => { GPLOT => "fht80tf:Window,", FILTER => "%NAME" } };
|
{ "CUL_FHTTK.*" => { GPLOT => "fht80tf:Window,", FILTER => "%NAME" } };
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
@ -152,7 +152,11 @@ CUL_FHTTK_Set($@)
|
|||||||
|
|
||||||
# suppress SET option
|
# suppress SET option
|
||||||
if(defined($attr{$name}) && defined($attr{$name}{"model"})) {
|
if(defined($attr{$name}) && defined($attr{$name}{"model"})) {
|
||||||
if($attr{$name}{"model"} ne "dummy") {
|
if($attr{$name}{"model"} eq "dummy") {
|
||||||
|
Log3 $name, 5, "CUL_FHTTK ($name) Attribute was renamed from dummy to virtual! No functional lack.";
|
||||||
|
$attr{$name}{"model"} = "virtual";
|
||||||
|
}
|
||||||
|
if($attr{$name}{"model"} ne "virtual") {
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,9 +192,10 @@ CUL_FHTTK_Set($@)
|
|||||||
} elsif($opt eq "ReSync" ) {
|
} elsif($opt eq "ReSync" ) {
|
||||||
Log3 $name, 3, "CUL_FHTTK ($name) resyncing with FHT80b.";
|
Log3 $name, 3, "CUL_FHTTK ($name) resyncing with FHT80b.";
|
||||||
|
|
||||||
IOWrite($hash, "", sprintf("T%s%s", $hash->{CODE}, $fhttfk_c2b{$opt})); # 0xff - ReSync
|
CUL_FHTTK_ReSync($hash);
|
||||||
# window state switch to closed through cul FW implementation
|
|
||||||
$opt = "Closed";
|
# return, because readingsupdate is perfomred by sub function
|
||||||
|
return $ret;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "Unknown argument $a[1], choose one of Pair ReSync Open Closed"
|
return "Unknown argument $a[1], choose one of Pair ReSync Open Closed"
|
||||||
@ -213,7 +218,7 @@ CUL_FHTTK_Define($$)
|
|||||||
my $u= "wrong syntax: define <name> CUL_FHTTK <sensor>";
|
my $u= "wrong syntax: define <name> CUL_FHTTK <sensor>";
|
||||||
return $u if((int(@a)< 3) || (int(@a)>3));
|
return $u if((int(@a)< 3) || (int(@a)>3));
|
||||||
|
|
||||||
my $name = $a[0];
|
my $name = $hash->{NAME};
|
||||||
my $sensor = lc($a[2]);
|
my $sensor = lc($a[2]);
|
||||||
if($sensor !~ /^[0-9a-f]{6}$/) {
|
if($sensor !~ /^[0-9a-f]{6}$/) {
|
||||||
return "wrong sensor specification $sensor, need a 6 digit hex number!";
|
return "wrong sensor specification $sensor, need a 6 digit hex number!";
|
||||||
@ -232,10 +237,24 @@ sub
|
|||||||
CUL_FHTTK_Undef($$)
|
CUL_FHTTK_Undef($$)
|
||||||
{
|
{
|
||||||
my ($hash, $name) = @_;
|
my ($hash, $name) = @_;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
delete($modules{CUL_FHTTK}{defptr}{$hash->{CODE}}) if($hash && $hash->{CODE});
|
delete($modules{CUL_FHTTK}{defptr}{$hash->{CODE}}) if($hash && $hash->{CODE});
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################
|
||||||
|
sub CUL_FHTTK_Attr($$$) {
|
||||||
|
my ($cmd, $name, $attrName, $attrVal) = @_;
|
||||||
|
|
||||||
|
if( $attrName eq "model" && $attrVal eq "dummy") {
|
||||||
|
$attr{$name}{$attrName} = "virtual";
|
||||||
|
return "$name - Renamed attrubte model from dummy to virtual! No functional lack!";
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
sub
|
sub
|
||||||
@ -253,6 +272,8 @@ CUL_FHTTK_Parse($$)
|
|||||||
my $name = $def->{NAME};
|
my $name = $def->{NAME};
|
||||||
my $state = lc(substr($msg, 7, 2));
|
my $state = lc(substr($msg, 7, 2));
|
||||||
|
|
||||||
|
Log3 $hash, 4, "CUL_FHTTK $sensor RAW message: $msg";
|
||||||
|
|
||||||
return "" if(IsIgnored($name));
|
return "" if(IsIgnored($name));
|
||||||
|
|
||||||
if(!defined($fhttfk_translatedcodes{$state})) {
|
if(!defined($fhttfk_translatedcodes{$state})) {
|
||||||
@ -270,7 +291,7 @@ CUL_FHTTK_Parse($$)
|
|||||||
if($defs{$name}{PREV}{TIMESTAMP} > time()-5) {
|
if($defs{$name}{PREV}{TIMESTAMP} > time()-5) {
|
||||||
if(defined($defs{$name}{PREV}{STATE})) {
|
if(defined($defs{$name}{PREV}{STATE})) {
|
||||||
if($defs{$name}{PREV}{STATE} eq $state) {
|
if($defs{$name}{PREV}{STATE} eq $state) {
|
||||||
Log3 $name, 4, sprintf("FHTTK skipping state $state as last similar telegram was received less than 5 (%s) secs ago", time()-$defs{$name}{PREV}{TIMESTAMP});
|
Log3 $name, 4, sprintf("FHTTK skipping state $state as last similar telegram was received less than 5 (%s) secs ago", $defs{$name}{PREV}{STATE}, time()-$defs{$name}{PREV}{TIMESTAMP});
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,12 +337,26 @@ CUL_FHTTK_Parse($$)
|
|||||||
} else {
|
} else {
|
||||||
readingsBulkUpdate($def, "Reliability", "ok");
|
readingsBulkUpdate($def, "Reliability", "ok");
|
||||||
}
|
}
|
||||||
# Flag the battery warning separately
|
|
||||||
|
# set battery state - Forum #87575
|
||||||
|
my $batteryReading = "batteryState";
|
||||||
|
my $batteryState = "ok";
|
||||||
|
|
||||||
if($state eq "11" || $state eq "12") {
|
if($state eq "11" || $state eq "12") {
|
||||||
readingsBulkUpdate($def, "Battery", "Low");
|
$batteryState = "low";
|
||||||
} else {
|
|
||||||
readingsBulkUpdate($def, "Battery", "ok");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(exists($defs{$name}{READINGS}{"Battery"})) {
|
||||||
|
if(defined($featurelevel) && $featurelevel <= 5.8) {
|
||||||
|
readingsBulkUpdate($def, "Battery", $batteryState);
|
||||||
|
} else {
|
||||||
|
# delete reading
|
||||||
|
readingsDelete($def, "Battery");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readingsBulkUpdate($def, $batteryReading, $batteryState);
|
||||||
|
|
||||||
#CHANGED
|
#CHANGED
|
||||||
readingsBulkUpdate($def, "state", $val);
|
readingsBulkUpdate($def, "state", $val);
|
||||||
|
|
||||||
@ -336,6 +371,66 @@ CUL_FHTTK_Parse($$)
|
|||||||
return $def->{NAME};
|
return $def->{NAME};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#############################
|
||||||
|
sub
|
||||||
|
CUL_FHTTK_ReSync($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
|
Log3 undef, 3, "CUL_FHTTK_ReSync() - ReSync for $hash->{NAME} started!";
|
||||||
|
|
||||||
|
# set resync
|
||||||
|
IOWrite($hash, "", sprintf("T%sff", $hash->{CODE})); # 0xff - ReSync
|
||||||
|
|
||||||
|
# update new state
|
||||||
|
readingsSingleUpdate($hash, "state", "ReSync", 1);
|
||||||
|
readingsSingleUpdate($hash, "Window", "ReSync", 1);
|
||||||
|
|
||||||
|
# finish timer
|
||||||
|
InternalTimer( gettimeofday() + 64, "CUL_FHTTK_ReSyncDone", $hash, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################
|
||||||
|
sub
|
||||||
|
CUL_FHTTK_ReSyncDone($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
|
||||||
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
|
# update new state
|
||||||
|
readingsSingleUpdate($hash, "state", "Closed", 1);
|
||||||
|
readingsSingleUpdate($hash, "Window", "Closed", 1);
|
||||||
|
|
||||||
|
Log3 undef, 3, "CUL_FHTTK_ReSyncDone() - ReSync for $hash->{NAME} done!";
|
||||||
|
}
|
||||||
|
|
||||||
|
#############################
|
||||||
|
sub
|
||||||
|
CUL_FHTTK_ReSyncAll()
|
||||||
|
{
|
||||||
|
my $timeOffset = 0;
|
||||||
|
|
||||||
|
foreach my $culFhtTk ( sort keys %{$modules{CUL_FHTTK}{defptr}} ) {
|
||||||
|
my $hash = $modules{CUL_FHTTK}{defptr}{$culFhtTk};
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
Log3 undef, 4, "CUL_FHTTK_ReSyncAll - Possible device ($hash->{NAME}) found.";
|
||||||
|
|
||||||
|
# check for model virtual
|
||||||
|
if(AttrVal($name, "model", "") eq "virtual") {
|
||||||
|
my $timerRaised = gettimeofday() + $timeOffset;
|
||||||
|
InternalTimer( $timerRaised, "CUL_FHTTK_ReSync", $hash, 0 );
|
||||||
|
Log3 undef, 3, "CUL_FHTTK_ReSyncAll() - ReSync for $hash->{NAME} starts at ".localtime($timerRaised)."!";
|
||||||
|
|
||||||
|
$timeOffset += 3600; # one hour later, the next one, because of LOVF
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log3 undef, 3, "CUL_FHTTK_ReSyncAll done! Devices will be synchronized in steps!";
|
||||||
|
}
|
||||||
|
|
||||||
#############################
|
#############################
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@ -362,7 +457,7 @@ CUL_FHTTK_Parse($$)
|
|||||||
or next official version 1.62 or higher, it is possible to send out FHT80 TF data with a CUL or simular
|
or next official version 1.62 or higher, it is possible to send out FHT80 TF data with a CUL or simular
|
||||||
devices. So it can be simulate up to four window sensor with one device
|
devices. So it can be simulate up to four window sensor with one device
|
||||||
(see <a href="http://www.fhemwiki.de/wiki/CUL_FHTTK">FHEM Wiki</a>). To setup a window sensor, you have to
|
(see <a href="http://www.fhemwiki.de/wiki/CUL_FHTTK">FHEM Wiki</a>). To setup a window sensor, you have to
|
||||||
add and/or change the attribute "model" to dummy. The 6 digit hex number must not equal to FHTID.<br><br>
|
add and/or change the attribute "model" to virtual. The 6 digit hex number must not equal to FHTID.<br><br>
|
||||||
|
|
||||||
<a name="CUL_FHTTKdefine"></a>
|
<a name="CUL_FHTTKdefine"></a>
|
||||||
<b>Define</b>
|
<b>Define</b>
|
||||||
@ -383,21 +478,27 @@ CUL_FHTTK_Parse($$)
|
|||||||
|
|
||||||
<a name="CUL_FHTTKset"></a>
|
<a name="CUL_FHTTKset"></a>
|
||||||
<b>Set</b>
|
<b>Set</b>
|
||||||
<ul> Only available, if model is set to dummy.<br><br>
|
<ul> Only available, if model is set to virtual.<br><br>
|
||||||
<code>set <name> <value></code>
|
<code>set <name> <value></code>
|
||||||
<br><br>
|
<br><br>
|
||||||
where <code>value</code> is one of:<br>
|
where <code>value</code> is one of:<br>
|
||||||
<ul><code>
|
<ul>
|
||||||
Pair # start pairing with FHT80B (activate FHT80B sync mode before) - state after pairing is Closed<br>
|
<li><code>Closed</code><br>set window state to Closed</li><br>
|
||||||
Closed # set window state to Closed<br>
|
<li><code>Open</code><br>set window state to Open</li><br>
|
||||||
Open # set window state to Open<br>
|
<li><code>Pair</code><br>start pairing with FHT80B (activate FHT80B sync mode before) - state after pairing is Closed</li><br>
|
||||||
ReSync # resync virtual sensor with FHT80b after a reset of CUL device. In other words, perform a virtual
|
<li><code>ReSync</code><br>resync virtual sensor with FHT80b after a reset of CUL device. In other words, perform a virtual
|
||||||
battery exchange to synchronize the sensor with FHT80b device again. (at the moment, only
|
battery exchange to synchronize the sensor with FHT80b device again. (at the moment, only
|
||||||
available with prototype cul_fw - see forum 55774)<br>
|
available with prototype cul fw - see forum 55774)</li><br>
|
||||||
</code></ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
<u>Special to the "ReSync" of existing FHT80TFs after a CUL firmware reset:</u><br>
|
||||||
|
After a reset or restart of a CUL device, the connection between the FHT80B and the virtual FHT80TFs is interrupted. This is equivalent to a battery change.
|
||||||
|
The contacts are still registered at the FHT80B. No new pairing is required. If multiple virtual contacts are used, it is recommended to synchronize them at large intervals!<br>
|
||||||
|
Calling the <b>CUL_FHTTK_ReSyncAll()</b> function synchronizes all virtual window contacts successively with the FHT80B.
|
||||||
|
The time interval between the individual sensors is <u>1 hour</u>. This is determined by the 1% rule, since per contact 480 credits are consumed within 64 seconds!<br><br>
|
||||||
|
|
||||||
<b>Get</b>
|
<b>Get</b>
|
||||||
<ul> No get implemented yet ...
|
<ul> No get implemented yet ...
|
||||||
</ul><br>
|
</ul><br>
|
||||||
@ -407,7 +508,7 @@ CUL_FHTTK_Parse($$)
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||||
<li><a href="#verbose">verbose</a></li><br>
|
<li><a href="#verbose">verbose</a></li><br>
|
||||||
<li><a href="#model">model</a><br>Possible values are: FHT80TF, FHT80TF-2, dummy (value, which allow to simulate a window sensor)</li><br>
|
<li><a href="#model">model</a><br>Possible values are: FHT80TF, FHT80TF-2, virtual (value, which allow to simulate a window sensor)</li><br>
|
||||||
<li><a href="#showtime">showtime</a></li><br>
|
<li><a href="#showtime">showtime</a></li><br>
|
||||||
<li><a href="#IODev">IODev</a></li><br>
|
<li><a href="#IODev">IODev</a></li><br>
|
||||||
<li><a href="#ignore">ignore</a></li><br>
|
<li><a href="#ignore">ignore</a></li><br>
|
||||||
@ -438,7 +539,7 @@ CUL_FHTTK_Parse($$)
|
|||||||
oder mit der nächsten offiziellen Version 1.62 oder höher, ist es möglich, FHT80 TF Daten zu senden.
|
oder mit der nächsten offiziellen Version 1.62 oder höher, ist es möglich, FHT80 TF Daten zu senden.
|
||||||
Möglich mit einem CUL oder ähnlichen Geräten. So können bis zu vier Fenstersensoren mit einem Gerät
|
Möglich mit einem CUL oder ähnlichen Geräten. So können bis zu vier Fenstersensoren mit einem Gerät
|
||||||
simuliert werden (siehe <a href="http://www.fhemwiki.de/wiki/CUL_FHTTK">FHEM Wiki</a>). Es muss lediglich das Attribut model mit dem
|
simuliert werden (siehe <a href="http://www.fhemwiki.de/wiki/CUL_FHTTK">FHEM Wiki</a>). Es muss lediglich das Attribut model mit dem
|
||||||
Wert "dummy" hinzugefügt oder geändert werden. Wichtig: Der Devicecode sollte nicht der FHTID entsprechen.<br><br>
|
Wert "virtual" hinzugefügt oder geändert werden. Wichtig: Der Devicecode sollte nicht der FHTID entsprechen.<br><br>
|
||||||
|
|
||||||
<a name="CUL_FHTTKdefine"></a>
|
<a name="CUL_FHTTKdefine"></a>
|
||||||
<b>D</b>
|
<b>D</b>
|
||||||
@ -459,20 +560,27 @@ CUL_FHTTK_Parse($$)
|
|||||||
|
|
||||||
<a name="CUL_FHTTKset"></a>
|
<a name="CUL_FHTTKset"></a>
|
||||||
<b>Set</b>
|
<b>Set</b>
|
||||||
<ul> Nur vorhanden, wenn das Attribut model mit dummy definiert wurde.<br><br>
|
<ul> Nur vorhanden, wenn das Attribut model mit virtual definiert wurde.<br><br>
|
||||||
<code>set <name> <value></code>
|
<code>set <name> <value></code>
|
||||||
<br><br>
|
<br><br>
|
||||||
wobei <code>value</code> folgendes sein kann:<br>
|
wobei <code>value</code> folgendes sein kann:<br>
|
||||||
<ul><code>
|
<ul>
|
||||||
Pair # startet das Anlernen an das FHT80B (FHT80B muss sich im Sync mode befinden) - danach wird der state auf "Closed" gesetzt<br>
|
<li><code>Closed</code><br>setzt den Fensterstatus zu Closed</li><br>
|
||||||
Closed # setzt den Fensterstatus zu Closed<br>
|
<li><code>Open</code><br>setzt den Fensterstatus zu Open</li><br>
|
||||||
Open # setzt den Fensterstatus zu Open<br>
|
<li><code>Pair</code><br>startet das Anlernen an das FHT80B (FHT80B muss sich im Sync mode befinden) - danach wird der state auf "Closed" gesetzt</li><br>
|
||||||
ReSync # neu synchronisieren des virtuellen Sensor mit dem FHT80b Module. Damit wird ein virtueller Batteriewechsel symuliert und der angelernte
|
<li><code>ReSync</code><br>neu synchronisieren des virtuellen Sensor mit dem FHT80b Module. Damit wird ein virtueller Batteriewechsel simuliert und der angelernte
|
||||||
Sensor wieder aufsynchronisiert. (aktuell nur mit Prototyp CUL FW verfügbar Forum 55774)<br>
|
Sensor wieder aufsynchronisiert. (aktuell nur mit Prototyp CUL FW verfügbar Forum 55774)</li><br>
|
||||||
</code></ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
<u>Spezielles zum "ReSync" von vorhanden FHT80TFs nach einem CUL Firmware Reset:</u><br>
|
||||||
|
Nach einem Reset bzw. Neustart eines CUL Devices ist die Verbindung zwischen dem FHT80B und den virtuellen FHT80TFs unterbrochen. Dies kommt einem Batteriewechsel gleich.
|
||||||
|
Die Kontakte sind weiterhin am FHT80B angelernt. Ein neues Pairen entfällt. Wenn mehrere vitruelle Kontakte verwendet werden, empfiehlt es sich diese in großen Abständen
|
||||||
|
wieder zu synchronisieren!<br>
|
||||||
|
Mithilfe des Aufrufes der Funktion <b>CUL_FHTTK_ReSyncAll()</b> werden alle virtuellen Fensterkontakte <u>nacheinander</u> mit den FHT80B wieder synchronisiert.
|
||||||
|
Der Abstand beträgt zwischen den einzelnen Sensoren <u>1 Stunde</u>. Dies wird durch die 1% Regeln bestimmt, da pro Kontakt 480 credits innerhalb von 64 Sekunden verbraucht werden!<br><br>
|
||||||
|
|
||||||
<b>Get</b>
|
<b>Get</b>
|
||||||
<ul> N/A </ul>
|
<ul> N/A </ul>
|
||||||
<br>
|
<br>
|
||||||
@ -482,7 +590,7 @@ CUL_FHTTK_Parse($$)
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||||
<li><a href="#verbose">verbose</a></li><br>
|
<li><a href="#verbose">verbose</a></li><br>
|
||||||
<li><a href="#model">model</a><br>Mögliche Werte sind: FHT80TF, FHT80TF-2, dummy (zum simulieren eines Fensterkontaktes)</li><br>
|
<li><a href="#model">model</a><br>Mögliche Werte sind: FHT80TF, FHT80TF-2, virtual (zum simulieren eines Fensterkontaktes)</li><br>
|
||||||
<li><a href="#showtime">showtime</a></li><br>
|
<li><a href="#showtime">showtime</a></li><br>
|
||||||
<li><a href="#IODev">IODev</a></li><br>
|
<li><a href="#IODev">IODev</a></li><br>
|
||||||
<li><a href="#ignore">ignore</a></li><br>
|
<li><a href="#ignore">ignore</a></li><br>
|
||||||
|
Loading…
Reference in New Issue
Block a user