Notify an Php weiterleiten

Begonnen von Guest, 25 September 2011, 20:19:59

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo,

 ich versuche mich an einem Web Frontend allerdings verzweifel ich
gerade wie ich es hin bekommen bei einem notify Event (zb drücken
eines Tasters) eine Website auf zu rufen und der die notify Daten im
Get zu übergeben (zb http://192.168.1.21/index.phpFormat>).


Installiert ist Fhem auf einer Fritzbox 7390 (noch mit chroot
Umgebung) , der Webserver auf dem das Frontend läuft ist ein Igel
Thin
client im selben Netzwerk (Übrigens wärmstens zu empfehlen der Igel
Thin Client 5200. Läuft Windows& Linux drauf, 100% Geräuschlos und
bei
E-Bay nur 25 Euro. 1Ghz, Erweiterbar bis 2 Gb Ram und hat Pcmcia,Pci,
Ide (2'5 Zoll HD), Usb, DVI  usw und halt komplett passiv)


 Wäre schön wenn mir da einer einen Tipp geben könnten.


 MfG
Rock

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> bei einem notify Event (zb drücken eines Tasters) eine Website auf zu rufen
> und der die notify Daten im Get zu übergeben (zb
> http://192.168.1.21/index.php).

Dank dem 99_updatefhem.pm (ab 5.1) muesste folgendes gehen:

define nweb notify geraet:event\
        { GetHttpFile("192.168.1.21", "/index.php?%NAME&%EVENT");; 0 }

Falls %EVENT Zeichen enthaelt, die nicht in der Web Aufruf enthalten werden
duerfen (space/etc), dann muss man diese vorher behandeln.
Wenn in dem "Einzeler" %NAME oder %EVENT vorkommt, dann muss % nicht mehr mit
%% geschuetzt werden.

Bitte berichten, ob es tut, und wenn ja, bitte in Wiki eintragen.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Bin nicht ganz Perl fitt aber kann das sein das da ein allgemeiner
kleiner Fehler in dem GetHttpFile ist?
$server wird vorher fest deffiniert, der Socketaufruf erfolgt mit der
$server Angabe aber danach erst wird mit $host gearbeitet sodass ein
aufruf einer anderen Seite wie in $server doch nicht möglich ist.
Müßte hier nicht statt $server $host verwendet werden um die
functionsangabe richtig zu nutzen?

my $server = "fhem.de:80";


sub
GetHttpFile($$)
{
  my ($host, $filename) = @_;

  my $server = IO::Socket::INET->new(PeerAddr => $server);
  if(!$server) {
    Log 1, "Can't connect to $server\n";
    return undef;
  }
  $host =~ s/:.*//;
  my $req = "GET $filename HTTP/1.0\r\nHost: $host\r\n\r\n\r\n";
  syswrite $server, $req;
  my ($buf, $ret);
  while(sysread($server, $buf, 65536) > 0) {
    $ret .= $buf;
  }
  $ret=~ s/.*?\r\n\r\n//s;
  Log 1, "Got http://$host$filename , length: ".length($ret);
  return $ret;
}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

> Müßte hier nicht statt $server $host verwendet werden um die
> functionsangabe richtig zu nutzen?

Doch, danke fuer die Fehlermeldung.  Die Zeile:
  my $server = IO::Socket::INET->new(PeerAddr => $server);
muss
  my $server = IO::Socket::INET->new(PeerAddr => $host);

lauten. Ich habe im CVS $server komplett durch $conn ersetzt, damit es nicht
mit dem globalen $server verwirrt wird.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo,

ich habe alles wie hier beschrieben gemacht (auch updatefhem
99_updatefhem.pm):

define nweb notify kse1:on.* { GetHttpFile("192.168.178.22",
"/default.aspx");; 0 }

führt aber immernoch nicht zum Erfolg:

2011.09.29 07:58:41 2: FS20 kse1 on
2011.09.29 07:58:41 1: Can't connect to 192.168.178.22
2011.09.29 07:58:41 3: CUL: Unknown code 810b04xx0101a001c906010011, help
me!

Der Server (192.168.178.22) ist ansonsten intern erreichbar.

Gruß & Danke für jede Hilfe
René

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Selbstantwort - der Port hat gefehlt, es muss also heißen:

define nweb notify kse1:on.* { GetHttpFile("192.168.178.22:80",
"/default.aspx");; 0 }

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Mit dem Aufruf geht es (mit dem Port bei der Adresse, in dem Fall
Port :80 für normalen Http Port):

define nweb notify fbtest {\
 GetHttpFile("192.168.178.234:80", "/th/index.php", "1");;  }

dazu muß aber die Funktion GetHttpFile in der Datei 99_updatefhem.pl
folgendermasen abegändert werden:


sub
GetHttpFile($$;$)
{
  my ($host, $filename, $onlysend) = @_;
  my $conn = IO::Socket::INET->new(PeerAddr => $host);
  if(!$conn) {
    Log 1, "Can't connect to $host\n";
    return undef;
  }
  $host =~ s/:.*//;
  my $req = "GET $filename HTTP/1.0\r\nHost: $host\r\n\r\n\r\n";
  syswrite $conn, $req;
  if ($onlysend)   {
     Log 1, "Only send http://$host$filename ";
   } else {
    my ($buf, $ret);
    while(sysread($conn, $buf, 65536) > 0) {
      $ret .= $buf;
     }
    $ret=~ s/.*?\r\n\r\n//s;
    Log 1, "Got http://$host$filename, length: ".length($ret);
     return $ret;
  }

Grund:
Ruft man mit der Originalfunktion die php Seite auf und diese versucht
wiederrum fhem an zu sprechen erzeugt dies ein Timeout Fehler da fhem
immer noch auf den Rückgabewert der php Datei wartet.
Daher habe ich die Funktion so abgeändert das über einen dritten
optionalen Parameter angegeben werden kann ob die Daten nur gesendet
werden sollen und nicht auf ein Rückgabewert gewartet werden soll.
Wird kein Parameter angegeben so wird auf den Rückgabewert gewartet so
ist die funktion kompatiebel zur Originalversion.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Noch ein Versuch: (Ich blick bei diesem Google Group nicht so ganz
durch ....)

So gehts:
define nweb notify fbtest {\
  GetHttpFile("192.168.178.234:80", "/th/index.php", "1");;  }


Man muß die Funktion GetHttpFile in der Datei 99_updatefhem.pm dazu
wie folgt umändern:

sub
GetHttpFile($$;$)
{
  my ($host, $filename, $onlysend) = @_;
  my $conn = IO::Socket::INET->new(PeerAddr => $host);
  if(!$conn) {
    Log 1, "Can't connect to $host\n";
    return undef;
  }
  $host =~ s/:.*//;
  my $req = "GET $filename HTTP/1.0\r\nHost: $host\r\n\r\n\r\n";
  syswrite $conn, $req;
  if ($onlysend)   {
     Log 1, "Only send http://$host$filename ";
   } else {
    my ($buf, $ret);
    while(sysread($conn, $buf, 65536) > 0) {
      $ret .= $buf;
     }
    $ret=~ s/.*?\r\n\r\n//s;
    Log 1, "Got http://$host$filename, length: ".length($ret);
     return $ret;
  }

Grund:
Beim aufruf der Phpdatei kommt es zu einem timeout Fehler wenn diese
auf fhem zugreifen will da diese noch auf den Rückgabewert der
Phpdatei wartet.
Mit dem dritten optionalen Parameter wird die Phpseite aufgerufen aber
nicht auf den Rückgabewert gewartet.
Die Funktion ist kompatiebel zur original Funktion da ohne Angabe des
neuen Parameters auf den Rückgabewert gewartet wird.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hm, wenn ich nun "update fhem" mache sind die eigenen Änderung (in
99_updatefhem.pl) von oben weg oder? Es werden doch dann alle Dateien
überschrieben wenn ich das richtig sehe.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

rudolfkoenig

                                                   

On Mon, Oct 10, 2011 at 02:58:17AM -0700, Rocktagon wrote:
> Hm, wenn ich nun "update fhem" mache sind die eigenen Änderung (in
> 99_updatefhem.pl) von oben weg oder? Es werden doch dann alle Dateien
> überschrieben wenn ich das richtig sehe.

Man sollte private Aenderungen entweder in eigene Dateien packen, oder
updatefhem nur mit Parameter (d.h. selektiv) ausfuehren.
Oder gar nicht -> "never change a running system" :)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com