Compare commits
19 Commits
b8e46765a1
...
018babc89a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
018babc89a | ||
|
|
c1d6b998e1 | ||
|
|
f6c864232f | ||
|
|
0adb9499fd | ||
|
|
347bf0c500 | ||
|
|
92c5f1e1d2 | ||
|
|
40db2f535f | ||
|
|
ba9ba5dee0 | ||
|
|
fe0715e3ee | ||
|
|
a42816e8aa | ||
|
|
54518d5d6a | ||
|
|
53484b0d1c | ||
|
|
1804e8127a | ||
|
|
e9b166d278 | ||
|
|
e6884da3dd | ||
|
|
7c5599a8c4 | ||
|
|
fb81d977e7 | ||
|
|
62b4c27dc2 | ||
|
|
0956efc439 |
@@ -13,7 +13,7 @@ package main;
|
||||
# EnOcean Serial Protocol 3 (ESP3) (for the TCM310)
|
||||
|
||||
|
||||
# TODO:
|
||||
# TODO:
|
||||
# Check BSC Temp
|
||||
# Check Stick Temp
|
||||
# Check Stick WriteRadio
|
||||
@@ -78,10 +78,21 @@ TCM_Define($$)
|
||||
$attr{$name}{dummy} = 1;
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
$hash->{DeviceName} = $dev;
|
||||
$hash->{MODEL} = $model;
|
||||
my $ret = DevIo_OpenDev($hash, 0, undef);
|
||||
|
||||
if($hash->{STATE} eq "opened") {
|
||||
# Read Base-Id of Enocean-Module
|
||||
my $cnt=0;
|
||||
do { # this does not always work, so we try several times
|
||||
my $answer=TCM_Get($hash, ($name, "idbase") );
|
||||
my @fields=split(/[=,]/, $answer);
|
||||
$hash->{BASEID}=$fields[1];
|
||||
$cnt++;
|
||||
} while ($cnt<3 and $hash->{BASEID} eq "");
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -592,7 +603,7 @@ TCM_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 ("$name Timeout reading answer for $arg", undef)
|
||||
if(length($buf) == 0);
|
||||
|
||||
|
||||
@@ -2965,13 +2965,13 @@ FW_htmlEscape($)
|
||||
attr lamp webCmd on:off:on-for-timer 10<br>
|
||||
define d1 dummy<br>
|
||||
attr d1 webCmd state<br>
|
||||
attr d1 set setList state:on,off<br>
|
||||
attr d1 setList state:on,off<br>
|
||||
define d2 dummy<br>
|
||||
attr d2 webCmd state<br>
|
||||
attr d2 set setList state:slider,0,1,10<br>
|
||||
attr d2 setList state:slider,0,1,10<br>
|
||||
define d3 dummy<br>
|
||||
attr d3 webCmd state<br>
|
||||
attr d3 set setList state:time<br>
|
||||
attr d3 setList state:time<br>
|
||||
</ul>
|
||||
Note: this is an attribute for the displayed device, not for the FHEMWEB
|
||||
instance.
|
||||
|
||||
@@ -12,6 +12,7 @@ sub EnOcean_Initialize($);
|
||||
sub EnOcean_Parse($$);
|
||||
sub EnOcean_Set($@);
|
||||
sub EnOcean_MD15Cmd($$$);
|
||||
sub EnOcean_GetMyDeviceId($);
|
||||
|
||||
my %EnO_rorgname = ("F6"=>"switch", # org 05, RPS
|
||||
"D5"=>"contact", # org 06, 1BS
|
||||
@@ -175,6 +176,7 @@ EnOcean_Initialize($)
|
||||
$hash->{UndefFn} = "EnOcean_Undef";
|
||||
$hash->{ParseFn} = "EnOcean_Parse";
|
||||
$hash->{SetFn} = "EnOcean_Set";
|
||||
$hash->{AttrFn} = "EnOcean_Attr";
|
||||
$hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 dummy:0,1 " .
|
||||
"showtime:1,0 loglevel:0,1,2,3,4,5,6 ".
|
||||
"model:".join(",",@EnO_models)." ".
|
||||
@@ -191,7 +193,28 @@ EnOcean_Initialize($)
|
||||
return undef;
|
||||
}
|
||||
|
||||
# Define
|
||||
# ---------------------------------------------
|
||||
|
||||
sub EnOcean_Attr($)
|
||||
{
|
||||
my @a = @_;
|
||||
|
||||
my $name= $a[1];
|
||||
my $ll2 = GetLogLevel($name, 2);
|
||||
|
||||
if($a[2] eq "subType") {
|
||||
Log $ll2, "EO_Attr subtype";
|
||||
|
||||
if($a[3] eq "eltakoDimmer") {
|
||||
Log $ll2, "EO_Attr subtype dimmer";
|
||||
$attr{$name}{eventMap}="B0:on B1:off"
|
||||
}
|
||||
}
|
||||
return undef;
|
||||
|
||||
}
|
||||
|
||||
#############################
|
||||
sub
|
||||
EnOcean_Define($$)
|
||||
{
|
||||
@@ -273,8 +296,9 @@ EnOcean_Set($@)
|
||||
my $dimVal=$hash->{READINGS}{dimValue}{VAL};
|
||||
|
||||
if($cmd eq "teach") {
|
||||
#my $idSrc=EnOcean_GetMyDeviceId($hash);
|
||||
my $data=sprintf("A502000000%s00", $subDef);
|
||||
Log $ll2, "EnOcean: set $name $cmd";
|
||||
Log $ll2, "EnOcean: set $name $cmd DefID: $hash->{DEF} SenderID: $subDef";
|
||||
# len:000a optlen:00 pakettype:1(radio)
|
||||
IOWrite($hash, "000A0001", $data);
|
||||
|
||||
@@ -349,14 +373,37 @@ EnOcean_Set($@)
|
||||
if($sendDimCmd) {
|
||||
$updateState = 0;
|
||||
$a[0]="on";
|
||||
if($dimVal > 100) { $dimVal=100; }
|
||||
if($dimVal <= 0) { $dimVal=0; $onoff=0; $a[0]="off"; }
|
||||
if($dimVal > 100) { $dimVal=100; }
|
||||
if($dimVal <= 0) { $dimVal=0; $onoff=0; $a[0]="off" }
|
||||
ReadingsVal($name, "dimValue", $dimVal);
|
||||
# EEP: A5/38/08 Central Command ->Typ 0x02: Dimming
|
||||
#my $idSrc=EnOcean_GetMyDeviceId($hash);
|
||||
#my $data=sprintf("A502%02X%02X%02X%s00", $dimVal, $time, $onoff|0x08, $idSrc);
|
||||
my $data=sprintf("A502%02X%02X%02X%s00",
|
||||
$dimVal, $dimTime, $onoff|0x08, $subDef);
|
||||
IOWrite($hash, "000A0001", $data);
|
||||
Log $ll2, "EnOcean: set $name $cmd $dimVal";
|
||||
}
|
||||
|
||||
###########################
|
||||
# } elsif($st eq "eltakoRoll") {
|
||||
# if($cmd eq "teach") {
|
||||
# my $data=sprintf("A5FFF80D80%s00", $hash->{DEF});
|
||||
# Log $ll2, "eltakoRollCtrl.Teach: " . $data;
|
||||
# IOWrite($hash, "000A0001", $data); # len:000a optlen:00 pakettype:1(radio)
|
||||
# } else {
|
||||
# my %eltakoRollCtrlCommands = ( down=>0x02, up=>0x01, stop=>0x00 );
|
||||
# my $usage = "Usage: (" . join("|", sort keys %eltakoRollCtrlCommands) . ")";
|
||||
# my $rollcmd= $eltakoRollCtrlCommands{$cmd};
|
||||
# return $usage if(!defined($rollcmd));
|
||||
# my $time=AttrVal($name, "time", 0);
|
||||
# # EEP: A5/3F/7F Universal ???
|
||||
# my $idSrc=EnOcean_GetMyDeviceId($hash);
|
||||
# my $data=sprintf("A5%02X%02X%02X%02X%s00", 0, $time, $rollcmd, 0x08, $idSrc);
|
||||
# IOWrite($hash, "000A0001", $data);
|
||||
# Log $ll2, "eltakoRoll.$cmd" . $data;
|
||||
# }
|
||||
#
|
||||
} elsif($st eq "eltakoShutter") {
|
||||
# Shutter
|
||||
my $shutTime=AttrVal($name, "shutTime", 0);
|
||||
@@ -364,7 +411,7 @@ EnOcean_Set($@)
|
||||
my $shutCmd = 0x00;
|
||||
if($cmd eq "teach") {
|
||||
my $data=sprintf("A5FFF80D80%s00", $subDef);
|
||||
Log $ll2, "EnOcean: set $name $cmd";
|
||||
Log $ll2, "EnOcean: set $name $cmd DefID: $hash->{DEF} SenderID: $subDef";
|
||||
# len:000a optlen:00 pakettype:1(radio)
|
||||
IOWrite($hash, "000A0001", $data);
|
||||
|
||||
@@ -686,7 +733,7 @@ EnOcean_Parse($$)
|
||||
return "";
|
||||
}
|
||||
|
||||
my $hash = $modules{EnOcean}{defptr}{$id};
|
||||
my $hash = $modules{EnOcean}{defptr}{$id};
|
||||
if(!$hash) {
|
||||
Log 3, "EnOcean Unknown device with ID $id, please define it";
|
||||
return "UNDEFINED EnO_${rorgname}_$id EnOcean $id";
|
||||
@@ -817,7 +864,7 @@ EnOcean_Parse($$)
|
||||
|
||||
if("$fn.$tp" eq "20.01" && $iohash->{pair}) { # MD15
|
||||
select(undef, undef, undef, 0.1); # max 10 Seconds
|
||||
EnOcean_A5Cmd($hash, "800800F0", "00000000");
|
||||
EnOcean_A5Cmd($hash, "800800F0", EnOcean_GetMyDeviceId($hash));
|
||||
select(undef, undef, undef, 0.5);
|
||||
EnOcean_MD15Cmd($hash, $name, 128); # 128 == 20 degree C
|
||||
}
|
||||
@@ -1523,7 +1570,7 @@ EnOcean_MD15Cmd($$$)
|
||||
}
|
||||
if($msg) {
|
||||
select(undef, undef, undef, 0.2);
|
||||
EnOcean_A5Cmd($hash, $msg, "00000000");
|
||||
EnOcean_A5Cmd($hash, $msg, EnOcean_GetMyDeviceId($hash));
|
||||
if($cmd eq "initialize") {
|
||||
delete($defs{$name}{READINGS}{CMD});
|
||||
delete($defs{$name}{READINGS}{$cmd});
|
||||
@@ -1536,8 +1583,8 @@ EnOcean_MD15Cmd($$$)
|
||||
sub
|
||||
EnOcean_A5Cmd($$$)
|
||||
{
|
||||
my ($hash, $msg, $org) = @_;
|
||||
IOWrite($hash, "000A0701", # varLen=0A optLen=07 msgType=01=radio,
|
||||
my ($hash, $msg, $org) = @_;
|
||||
IOWrite($hash, "000A0701", # varLen=0A optLen=07 msgType=01=radio,
|
||||
sprintf("A5%s%s0001%sFF00",$msg,$org,$hash->{DEF}));
|
||||
# type=A5 msg:4 senderId:4 status=00 subTelNum=01 destId:4 dBm=FF Security=00
|
||||
}
|
||||
@@ -1551,6 +1598,26 @@ EnOcean_Undef($$)
|
||||
return undef;
|
||||
}
|
||||
|
||||
# ---------------------------------------------
|
||||
|
||||
#
|
||||
# compose the Src-Id for a command to send
|
||||
#
|
||||
sub EnOcean_GetMyDeviceId($)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
my $myId=0; # default: use Device-ID of EUL
|
||||
my $name = $hash->{NAME};
|
||||
my $baseId=hex($hash->{IODev}{BASEID}) if(defined $hash->{IODev}{BASEID});
|
||||
my $subId = AttrVal($name, "subId", "");
|
||||
if(defined $baseId and defined $subId) {
|
||||
# if there is a base-id an a subid -> use this combination
|
||||
$myId=sprintf("%08X", $baseId | $subId);
|
||||
}
|
||||
return $myId;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
@@ -617,16 +617,16 @@ MAX_Parse($$)
|
||||
}
|
||||
|
||||
}elsif($msgtype ~~ ["WallThermostatState", "WallThermostatControl" ]){
|
||||
my ($bits2,$displayActualTemperature,$desiredTemperature,$null1,$heaterTemperature,$null2,$temperature);
|
||||
my ($bits2,$displayActualTemperature,$desiredTemperatureRaw,$null1,$heaterTemperature,$null2,$temperature);
|
||||
if( length($args[0]) == 4 ) { #WallThermostatControl
|
||||
#This is the message that WallMountedThermostats send to paired HeatingThermostats
|
||||
($desiredTemperature,$temperature) = unpack("CC",pack("H*",$args[0]));
|
||||
($desiredTemperatureRaw,$temperature) = unpack("CC",pack("H*",$args[0]));
|
||||
} elsif( length($args[0]) >= 6 and length($args[0]) <= 14) { #WallThermostatState
|
||||
#len=14: This is the message we get from the Cube over MAXLAN and which is probably send by WallMountedThermostats to the Cube
|
||||
#len=12: Payload of an Ack message, last field "temperature" is missing
|
||||
#len=10: Received by MAX_CUL as WallThermostatState
|
||||
#len=6 : Payload of an Ack message, last four fields (especially $heaterTemperature and $temperature) are missing
|
||||
($bits2,$displayActualTemperature,$desiredTemperature,$null1,$heaterTemperature,$null2,$temperature) = unpack("aCCCCCC",pack("H*",$args[0]));
|
||||
($bits2,$displayActualTemperature,$desiredTemperatureRaw,$null1,$heaterTemperature,$null2,$temperature) = unpack("aCCCCCC",pack("H*",$args[0]));
|
||||
#$heaterTemperature/10 is the temperature measured by a paired HeatingThermostat
|
||||
#we don't do anything with it here, because this value also appears as temperature in the HeatingThermostat's ThermostatState message
|
||||
my $mode = vec($bits2, 0, 2); #
|
||||
@@ -651,9 +651,9 @@ MAX_Parse($$)
|
||||
Log 2, "Invalid $msgtype packet"
|
||||
}
|
||||
|
||||
$desiredTemperature = ($desiredTemperature &0x7F)/2.0; #convert to degree celcius
|
||||
my $desiredTemperature = ($desiredTemperatureRaw &0x7F)/2.0; #convert to degree celcius
|
||||
if(defined($temperature)) {
|
||||
$temperature = ((($desiredTemperature &0x80)<<1) + $temperature)/10; # auch Temperaturen über 25.5 °C werden angezeigt !
|
||||
$temperature = ((($desiredTemperatureRaw &0x80)<<1) + $temperature)/10; # auch Temperaturen über 25.5 °C werden angezeigt !
|
||||
Log GetLogLevel($shash->{NAME}, 5), "desiredTemperature $desiredTemperature, temperature $temperature";
|
||||
readingsBulkUpdate($shash, "temperature", sprintf("%2.1f",$temperature));
|
||||
} else {
|
||||
|
||||
@@ -44,7 +44,7 @@ TRX_ELSE_Initialize($)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
|
||||
$hash->{Match} = "^..(0[0-f]|1[4-f]|2[1-f]|3[0-f]|4[0-f]|53|58|59|5b|5c|5e|5f|[6-f][0-f]).*";
|
||||
$hash->{Match} = "^..(0[0-f]|1[5-f]|2[1-f]|3[0-f]|4[0-f]|53|58|59|5b|5c|5e|5f|[6-f][0-f]).*";
|
||||
$hash->{DefFn} = "TRX_ELSE_Define";
|
||||
$hash->{UndefFn} = "TRX_ELSE_Undef";
|
||||
$hash->{ParseFn} = "TRX_ELSE_Parse";
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
##############################################################################
|
||||
#
|
||||
# 46_TRX_LIGHT.pm
|
||||
#
|
||||
# FHEM module for lighting protocols:
|
||||
# X10 lighting, ARC, ELRO AB400D, Waveman, Chacon EMW200,
|
||||
# IMPULS, AC (KlikAanKlikUit, NEXA, CHACON, HomeEasy UK),
|
||||
@@ -104,7 +103,7 @@ TRX_LIGHT_Initialize($)
|
||||
$light_device_c2b{$light_device_codes{$k}->[0]} = $k;
|
||||
}
|
||||
|
||||
$hash->{Match} = "^..(10|11|12|13|14).*"; # SVN please update!!
|
||||
$hash->{Match} = "^..(10|11|12|13|14).*";
|
||||
$hash->{SetFn} = "TRX_LIGHT_Set";
|
||||
$hash->{DefFn} = "TRX_LIGHT_Define";
|
||||
$hash->{UndefFn} = "TRX_LIGHT_Undef";
|
||||
@@ -525,13 +524,8 @@ sub TRX_LIGHT_parse_X10 {
|
||||
my $sensor = "";
|
||||
|
||||
if ($device_type eq "MS14A") {
|
||||
# for ms14a behave like x10, but flip second deviceid
|
||||
# for ms14a behave like x10
|
||||
$device_type = "X10";
|
||||
if ($firstdevice == 1) {
|
||||
$command = ($command eq "on") ? "alert" : "normal" ;
|
||||
} else {
|
||||
$command = ($command eq "on") ? "off" : "on" ;
|
||||
}
|
||||
}
|
||||
|
||||
if (lc($def->{TRX_LIGHT_devicelog}) eq "window" || lc($def->{TRX_LIGHT_devicelog}) eq "door") {
|
||||
|
||||
@@ -74,6 +74,13 @@ BlockingCall($$@)
|
||||
}
|
||||
|
||||
# Child here
|
||||
|
||||
foreach my $d (sort keys %defs) { # Close all open TCP-Server sockets
|
||||
my $h = $defs{$d};
|
||||
next if(!$h->{SERVERSOCKET});
|
||||
TcpServer_Close($h);
|
||||
}
|
||||
|
||||
no strict "refs";
|
||||
my $ret = &{$blockingFn}($arg);
|
||||
use strict "refs";
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
|
||||
<html>
|
||||
|
||||
@@ -7,7 +6,7 @@
|
||||
<title>fhem reference</title>
|
||||
<link rel="stylesheet" type="text/css" href="../www/pgm2/style.css" />
|
||||
<meta http-equiv="Content-type" content="text/html;charset=ISO-8859-1"/>
|
||||
<link rel="shortcut icon" href="favicon.ico"/>
|
||||
<link rel="shortcut icon" href="/fhem/icons/favicon.ico"/>
|
||||
</head>
|
||||
|
||||
|
||||
@@ -62,7 +61,7 @@
|
||||
<a href="#trigger">trigger</a>
|
||||
<a href="#update">update</a>
|
||||
<a href="#usb">usb</a>
|
||||
<a href="#XmlList">xmllist</a>
|
||||
<a href="#xmllist">xmllist</a>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -76,26 +75,27 @@
|
||||
<br>
|
||||
<b>Helper modules</b>
|
||||
<ul>
|
||||
<a href="#at">at</a>
|
||||
<a href="#autocreate">autocreate</a>
|
||||
<a href="#average">average</a>
|
||||
<a href="#Calendar">Calendar</a>
|
||||
<a href="#DbLog">DbLog</a>
|
||||
<a href="#dewpoint">dewpoint</a>
|
||||
<a href="#dummy">dummy</a>
|
||||
<a href="#FHEM2FHEM">FHEM2FHEM</a>
|
||||
<a href="#FHEMWEB">FHEMWEB</a>
|
||||
<a href="#FB_CALLMONITOR">FB_CALLMONITOR</a>
|
||||
<a href="#FileLog">FileLog</a>
|
||||
<a href="#FLOORPLAN">FLOORPLAN</a>
|
||||
<a href="#PachLog">PachLog</a>
|
||||
<a href="#PRESENCE">PRESENCE</a>
|
||||
<a href="#PID">PID</a>
|
||||
<a href="#SUNRISE_EL">SUNRISE_EL</a>
|
||||
<a href="#at">at</a>
|
||||
<a href="#autocreate">autocreate</a>
|
||||
<a href="#average">average</a>
|
||||
<a href="#dewpoint">dewpoint</a>
|
||||
<a href="#dummy">dummy</a>
|
||||
<a href="#holiday">holiday</a>
|
||||
<a href="#HCS">HCS</a>
|
||||
<a href="#Heating_Control">Heating_Control</a>
|
||||
<a href="#holiday">holiday</a>
|
||||
<a href="#LightScene">LightScene</a>
|
||||
<a href="#notify">notify</a>
|
||||
<a href="#PID">PID</a>
|
||||
<a href="#PRESENCE">PRESENCE</a>
|
||||
<a href="#PachLog">PachLog</a>
|
||||
<a href="#SUNRISE_EL">SUNRISE_EL</a>
|
||||
<a href="#sequence">sequence</a>
|
||||
<a href="#structure">structure</a>
|
||||
<a href="#telnet">telnet</a>
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html><head>
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>FHEM reference</title>
|
||||
<link rel="stylesheet" type="text/css" href="../www/pgm2/style.css" />
|
||||
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
|
||||
<link rel="shortcut icon" href="http://fhem.de/favicon.ico">
|
||||
<link rel="shortcut icon" href="/fhem/icons/favicon.ico"/>
|
||||
|
||||
</head>
|
||||
|
||||
@@ -58,7 +61,7 @@
|
||||
<a href="#trigger">trigger</a>
|
||||
<a href="#update">update</a>
|
||||
<a href="#usb">usb</a>
|
||||
<a href="#XmlList">XmlList</a>
|
||||
<a href="#xmllist">xmllist</a>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -72,26 +75,27 @@
|
||||
<br>
|
||||
<b>Hilfs (Erweiterungs-) Module</b>
|
||||
<ul>
|
||||
<a href="#at">at</a>
|
||||
<a href="#autocreate">autocreate</a>
|
||||
<a href="#average">average</a>
|
||||
<a href="#Calendar">Calendar</a>
|
||||
<a href="#DbLog">DbLog</a>
|
||||
<a href="#dewpoint">dewpoint</a>
|
||||
<a href="#dummy">dummy</a>
|
||||
<a href="#FHEM2FHEM">FHEM2FHEM</a>
|
||||
<a href="#FHEMWEB">FHEMWEB</a>
|
||||
<a href="#FB_CALLMONITOR">FB_CALLMONITOR</a>
|
||||
<a href="#FileLog">FileLog</a>
|
||||
<a href="#FLOORPLAN">FLOORPLAN</a>
|
||||
<a href="#PachLog">PachLog</a>
|
||||
<a href="#PID">PID</a>
|
||||
<a href="#PRESENCE">PRESENCE</a>
|
||||
<a href="#SUNRISE_EL">SUNRISE_EL</a>
|
||||
<a href="#at">at</a>
|
||||
<a href="#autocreate">autocreate</a>
|
||||
<a href="#average">average</a>
|
||||
<a href="#dewpoint">dewpoint</a>
|
||||
<a href="#dummy">dummy</a>
|
||||
<a href="#holiday">holiday</a>
|
||||
<a href="#HCS">HCS</a>
|
||||
<a href="#Heating_Control">Heating_Control</a>
|
||||
<a href="#holiday">holiday</a>
|
||||
<a href="#LightScene">LightScene</a>
|
||||
<a href="#notify">notify</a>
|
||||
<a href="#PID">PID</a>
|
||||
<a href="#PRESENCE">PRESENCE</a>
|
||||
<a href="#PachLog">PachLog</a>
|
||||
<a href="#SUNRISE_EL">SUNRISE_EL</a>
|
||||
<a href="#sequence">sequence</a>
|
||||
<a href="#structure">structure</a>
|
||||
<a href="#telnet">telnet</a>
|
||||
|
||||
14
fhem.pl
14
fhem.pl
@@ -65,6 +65,7 @@ sub IOWrite($@);
|
||||
sub InternalTimer($$$$);
|
||||
sub IsDummy($);
|
||||
sub IsIgnored($);
|
||||
sub IsDisabled($);
|
||||
sub LoadModule($);
|
||||
sub Log($$);
|
||||
sub OpenLogfile($);
|
||||
@@ -516,6 +517,19 @@ IsIgnored($)
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub
|
||||
IsDisabled($)
|
||||
{
|
||||
my $devname = shift;
|
||||
if($devname &&
|
||||
defined($attr{$devname}) &&
|
||||
defined($attr{$devname}{disable})) {
|
||||
Log 4, "Disabled $devname";
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
################################################
|
||||
sub
|
||||
|
||||
Reference in New Issue
Block a user