Perl Script über Browser aufrufen

Begonnen von Johannes, 28 Januar 2013, 19:04:24

Vorheriges Thema - Nächstes Thema

Johannes

Hallo,

Perl Anfängerfrage:
Ich habe ein Script geschrieben, welches ich über den Webbrowser aufrufen will. Dabei sollen angehängte Argumente in dem Script ausgewertet werden.
Meine Frage, wo sollte das Script abgelegt werden und wie kann ich es im Kontext von FHEM aufrufen?
Über Apache könnte man ja cgi(-bin) nutzen, aber wie das in FHEM klappt ist mir nicht ganz klar.
Danke schonmal für Antwort...

Johannes

Achja, das Script produziert eine Antwort, die ich ungefiltert zurück bekommen muss

UliM

Hi,
das script in 99_myUtils.pm ablegen, zB meinScript()

Einen dummy definieren, der nur als "trojanisches Pferd" zum Aufruf benutzt wird, zB
define meinScriptTrigger dummy

Ein notify definieren, das Dein script jedes mal aufruft,, wenn ein event für meinScriptTrigger ausgelöst wird:
define losgehts notify meinScriptTrigger.* { meinScript() }

Von aussen den Link zum (ein)schalten des dummy absetzen, um das script aufzurufen:
http://ip:8083/fhem?cmd.meinScriptTrigger=set%20meinScriptTrigger%20on&room=all

Wenn Dein script html-code mittels return zurückgibt, wird dies auf der zurückgegebenen html-Seite ausgegeben und Du kannst es rausparsen.


Geht's damit?

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Johannes

Hallo Uli,

Bisher stellt sich leider kein Erfolg ein.

Meine fhem.cfg am Ende:

define meinScriptTrigger dummy
define losgehts notify meinScriptTrigger.* { 99_Utils() }

FHEM Neustart und Aufruf von
http://192.168.0.111:8083/fhem?cmd.meinScriptTrigger=set%20meinScriptTrigger%20on&room=all

bringt mich wieder auf die Startsteite von FHEM. In der Webkonsole sehe ich, dass die GET Anfrage nicht beantwortet wurde.
Das Script auf Konsole aufgerufen bringt aber Output.

Hier ein einfaches Beispiel:

package main;

use strict;
use warnings;
use POSIX;

sub
Utils_Initialize()
{
  return "hallo";
}
print &Utils_Initialize;
1;


Gibt es eigentlich auch andere Methoden, ein Modul / Script über Browser zu triggern oder ist das der "way to go" in FHEM?

UliM

Hi,
Zitatdefine losgehts notify meinScriptTrigger.* { 99_Utils() }
Wenn Dui ein leeres Programm aufrufst, ist klar, dass nix zurückkommt.

Du musst eine Routine INNERHALB 99_myUtils.pm aufrufen, die fehlt bei Dir noch.

Schau Dir mal den Wiki-Beitrag dazu an:
http://www.fhemwiki.de/wiki/99_myUtils_anlegen

Ob es andere Wege gbt, weiss ich nicht...

Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Johannes

Das Logfile sagt dazu:

2013.01.28 21:11:30 2: dummy set meinScriptTrigger on
Misplaced _ in number at (eval 1090) line 1.
Bareword found where operator expected at (eval 1090) line 1, near "99_Utils"
   (Missing operator before Utils?)
2013.01.28 21:11:30 3: losgehts return value: syntax error at (eval 1090) line 1, near "99_Utils"

Johannes

Ok, wenn ich also die Initiliaze Methode von oben aufrufe,

define losgehts notify meinScriptTrigger.* { Utils_Initialize() }


dann sollte doch "hallo" zurückkommen, oder?

http://192.168.0.111:8083/fhem?cmd.meinScriptTrigger=set%20meinScriptTrigger%20on&room=all&XHR=1

bringt aber eine leere Seite, das Log scheint aber zufrieden zu sein und gibt schonmal keinen Fehler mehr...

UliM

die initialize-routine hat einen anderen zweck, da hat das nix  verloren.
definier doch ne eigene routine und ruf die auf.
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Johannes

Danke Uli, ich hab jetzt mein Ziel erreicht.

Es reicht aus, das Script wie von dir und im Wiki erwähnt anzulegen (99_meinnameUtils.pm).

Danach kann man es direkt über den Browser aufrufen, ohne vorher trigger und dummys zu definieren, z.B: so:

http://192.168.0.111:8083/fhem?cmd={meineRoutine()}&XHR=1

Danke nochmal!