Hallo zusammen,
gehört nicht unbedingt hier her, aber in FHEM development kann ich keinen neuen Thread eröffnen..
Bei mir läuft FHEM auf dem Router, der natürlich interne und externe Interfaces hat. Web und telnet von FHEM will ich selbverständlich nur im internen Netz anbieten, nicht gegen aussen. global hilft da nicht so recht, da ich ja nicht nur localhost brauche, sondern (in meinem Fall) 192.168.0.1. Ich habe daher TcpServerUtils.pm, 01_FHEMWEB.pm und 98_telnet.pm so gepatched, dass man in der config zusätzlich eine IP mitgeben kann, auf die FHEM bindet. Funzt bei mir seit > 1 Jahr problemlos. Wäre das etwas für upstream?
--- TcpServerUtils.pm.orig 2015-01-13 19:44:56.231081868 +0100
+++ TcpServerUtils.pm 2015-01-13 19:45:29.113924463 +0100
@@ -8,9 +8,9 @@
use Errno qw(:POSIX);
sub
-TcpServer_Open($$$)
+TcpServer_Open($$$$)
{
- my ($hash, $port, $global) = @_;
+ my ($hash, $port, $global, $address) = @_;
my $name = $hash->{NAME};
if($port =~ m/^IPV6:(\d+)$/i) {
@@ -28,6 +28,7 @@
Domain => ($hash->{IPV6} ? AF_INET6() : AF_UNSPEC), # Linux bug
LocalHost => ($global ? undef : "localhost"),
LocalPort => $port,
+ LocalAddr => $address,
Listen => 10,
Blocking => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin
ReuseAddr => 1
--- 01_FHEMWEB.pm.orig 2015-01-13 19:45:59.564556647 +0100
+++ 01_FHEMWEB.pm 2015-01-13 19:46:31.383306930 +0100
@@ -225,7 +225,7 @@
FW_Define($$)
{
my ($hash, $def) = @_;
- my ($name, $type, $port, $global) = split("[ \t]+", $def);
+ my ($name, $type, $port, $global, $address) = split("[ \t]+", $def);
return "Usage: define <name> FHEMWEB [IPV6:]<tcp-portnr> [global]"
if($port !~ m/^(IPV6:)?\d+$/ || ($global && $global ne "global"));
@@ -233,7 +233,7 @@
FW_readIcons($pe);
}
- my $ret = TcpServer_Open($hash, $port, $global);
+ my $ret = TcpServer_Open($hash, $port, $global, $address);
# Make sure that fhem only runs once
if($ret && !$init_done) {
--- 98_telnet.pm.orig 2015-01-13 19:47:12.950899616 +0100
+++ 98_telnet.pm 2015-01-13 19:47:24.663911919 +0100
@@ -135,7 +135,7 @@
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
- my ($name, $type, $port, $global) = split("[ \t]+", $def);
+ my ($name, $type, $port, $global, $address) = split("[ \t]+", $def);
my $isServer = 1 if(defined($port) && $port =~ m/^(IPV6:)?\d+$/);
my $isClient = 1 if($port && $port =~ m/^(IPV6:)?.*:\d+$/);
@@ -148,7 +148,7 @@
# Make sure that fhem only runs once
if($isServer) {
- my $ret = TcpServer_Open($hash, $port, $global);
+ my $ret = TcpServer_Open($hash, $port, $global, $address);
if($ret && !$init_done) {
Log3 $name, 1, "$ret. Exiting.";
exit(1);
danke und viele Grüße,
-Christian