FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 12 November 2015, 13:53:53

Titel: senden von daten an einen bestimmten web client
Beitrag von: justme1968 am 12 November 2015, 13:53:53
es gibt ja seit einiger zeit dir möglichkeit per trigger WEB JS:<javascript> javascript kommandos an die offenen fhemweb browser fenster zu senden.

mit der folgenden kleinen ergänzung ist es möglich nur die fenster von einem bestimmten client zu adressieren. damit kann man dann z.b. gezielt ein oder mehrere bestimmtes info displays zu addressieren: trigger WEB JS#<ip regex>:FW_okDialog("test")

Index: TcpServerUtils.pm
===================================================================
--- TcpServerUtils.pm (revision 9866)
+++ TcpServerUtils.pm (working copy)
@@ -113,6 +113,8 @@
   my %nhash;
   $nhash{NR}    = $devcount++;
   $nhash{NAME}  = $cname;
+  $nhash{PEER}  = $caddr;
+  $nhash{PORT}  = $port;
   $nhash{FD}    = $clientinfo[0]->fileno();
   $nhash{CD}    = $clientinfo[0];     # sysread / close won't work on fileno
   $nhash{TYPE}  = $type;


Index: 01_FHEMWEB.pm
===================================================================
--- 01_FHEMWEB.pm (revision 9866)
+++ 01_FHEMWEB.pm (working copy)
@@ -2409,8 +2409,10 @@

   if($dn eq $ntfy->{SNAME} &&
      $dev->{CHANGED} &&
-     $dev->{CHANGED}->[0] =~ m/^JS:(.*)$/) {
-    my $data = FW_longpollInfo($h->{fmt}, "#FHEMWEB:$ntfy->{NAME}",$1,"");
+     $dev->{CHANGED}->[0] =~ m/^JS(#([^:]*))?:(.*)$/) {
+    my $data = $3;
+    return if( $2 && $ntfy->{PEER} !~ m/$2/ );
+    $data = FW_longpollInfo($h->{fmt}, "#FHEMWEB:$ntfy->{NAME}",$data,"");
     addToWritebuffer($ntfy, $data."\n");
     return;
   }
Titel: Antw:senden von daten an einen bestimmten web client
Beitrag von: rudolfkoenig am 12 November 2015, 17:43:01
Habs eingecheckt.

Laut Theorie muesste man PEER:PORT abfragen, das wird aber in der Praxis nicht relevant sein.
Titel: Antw:senden von daten an einen bestimmten web client
Beitrag von: justme1968 am 12 November 2015, 19:29:03
im prinzip schon aber der port wechselt ja dauernd. wenn man ein tablet als info display verwendet wird dort kaum mehr als ein fenster offen sein.