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.
+