diff --git a/FHEM/53_GHoma.pm b/FHEM/53_GHoma.pm
index db5b05a96..875ae4cbf 100644
--- a/FHEM/53_GHoma.pm
+++ b/FHEM/53_GHoma.pm
@@ -423,13 +423,16 @@ sub GHoma_Set($@) { #
my ($hash, @a) = @_;
my $name = $a[0];
my $type = $a[1];
- return "Unknown argument $type, choose one of ConfigAll" unless (defined $hash->{Id} || $type eq "ConfigAll"); # set fuer den Server
+ return "Unknown argument $type, choose one of ConfigAll ConfigSingle" unless (defined $hash->{Id} || $type eq "ConfigAll" || $type eq "ConfigSingle"); # set fuer den Server
my @sets = ('on:noArg', 'off:noArg');
my $status = ReadingsVal($hash->{NAME},"state","");
if($type eq "ConfigAll") {
- GHoma_udpbroad($hash, defined $a[2] ? $a[2] : undef);
+ GHoma_udpsend($hash, defined $a[2] ? $a[2] : undef, undef );
+ } elsif($type eq "ConfigSingle") {
+ return "$a[2] ist not an correct IP or hostname" unless $a[2] =~ /^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)+(\.([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*))*$)$/;
+ GHoma_udpsend($hash, defined $a[3] ? $a[3] : undef, $a[2] );
} elsif($type eq "on") {
$type = pack('C*', (0xff));
readingsSingleUpdate($hash, "state", "set_on", 1) if ( $status =~ m/([set_]?o[n|ff])$/i );
@@ -465,20 +468,20 @@ sub GHoma_Undef($$) { #
return TcpServer_Close($hash) if defined $hash->{FD};
}
#####################################
-sub GHoma_udpbroad {
+sub GHoma_udpsend{
eval "use IO::Socket::INET;";
return "please install IO::Socket::INET" if($@);
- my ($hash, $ownIP) = @_;
+ my ($hash, $ownIP, $clientIP) = @_;
# flush after every write
$| = 1;
my ($socket,$data);
$socket = new IO::Socket::INET (
- PeerAddr => '255.255.255.255',
+ PeerAddr => (defined $clientIP ? $clientIP : '255.255.255.255'),
PeerPort => '48899',
Proto => 'udp',
- Broadcast => 1
+ Broadcast => (defined $clientIP ? 0 : 1)
) or die "ERROR in Socket Creation : $!\n";
#send operation
@@ -490,12 +493,21 @@ sub GHoma_udpbroad {
return "$ownIP ist not an correct IP or hostname" unless $ownIP =~ /^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)+(\.([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*))*$)$/
}
Log3 $hash, 1, "$hash->{NAME}: setting server address for GHoma plugs to $ownIP:$hash->{PORT}";
+
my @sdata = (
+ "HF-A11ASSISTHREAD",
+ "+ok",
+ "AT+VER\r",
+ "AT+TCPTO\r"
+ );
+
+my @sdata = (
"HF-A11ASSISTHREAD",
"+ok",
"AT+NETP=TCP,Client,$hash->{PORT},$ownIP\r",
"AT+TCPTO=120\r"
);
+
foreach (@sdata) {
$socket->send($_);
Log3 $hash, 1, "$hash->{NAME}: sende Multicast: $_";
@@ -587,9 +599,11 @@ sub GHoma_DbLog_splitFn($) { # Einheiten
The set extensions are also supported.
- For server device:
- set <name> ConfigAll [IP|hostname|FQDN]
+ For server device:
+ set <name> ConfigAll [IP|hostname|FQDN of FHEM]
Setting all GHoma plugs via UDP broadcast to TCP client of FHEM servers address and port of GHoma server device.
+ set <name> ConfigSingle <IP of Plug> [IP|hostname|FQDN of FHEM]
+ Setting an specific GHoma plug via UDP to TCP client of FHEM servers address and port of GHoma server device.
@@ -678,10 +692,12 @@ sub GHoma_DbLog_splitFn($) { # Einheiten
Die set extensions werden auch unterstützt.
- Für Server Device:
- set <name> ConfigAll [IP|hostname|FQDN]
+ Für Server Device:
+ set <name> ConfigAll [IP|hostname|FQDN von FHEM]
Einstellen aller GHoma Zwischenstecker über UDP broadcast auf TCP client mit FHEM Server Adresse und Port des GHoma Server Devices.
-
+ set <name> ConfigSingle <IP des Zwischensteckers> [IP|hostname|FQDN von FHEM]
+ Einstellen eines einzelnen GHoma Zwischensteckers über UDP auf TCP client mit FHEM Server Adresse und Port des GHoma Server Devices.
+