Variable SERVER_NAME

Begonnen von eddie1104, 02 Oktober 2016, 14:14:52

Vorheriges Thema - Nächstes Thema

eddie1104

Gibt es eine Möglichkeit, entweder direkt im fhem.cfg oder in einem Perl-Script die URL des gerade laufenden FHEMs auszulesen. Ich habe das Problem, dass ich bestimmte Webseiten, die auf einem anderen Server im Netz liegen und die ich in FHEM einbinden will von außerhalb oder innerhalb des LANS unterschiedlich aufrufen muss. Mein Router erlaubt es nicht, dass ich mittels einer dyndns-Adresse Seiten innerhalb meines LANs aufzurufen. Stattdessen muss ich innerhalb meines LANS immer die direkte IP-Adresse mit dem entsprechenden Port eingeben. Wenn ich mich woanders befinde, muss ich die dyndns-Adresse mit dem entsprechenden Port eingeben. Leider ist der Router vom Provider vorgegeben (Frankreich) und kann nur mit erheblichen Einschränkungen und Problemen durch eine Fritzbox ersetzt werden.

Jetzt besteht ja in PHP die Möglichkeit, die Variable $SERVER auszulesen und ich habe mir gedacht, dass das mit Perl auch möglich sein müsste. Nach einigem googlen habe ich dann ein Testscript zusammengestellt:


sub test_fkt
{
    my $ret = "Umgebungsvariablen:\n";

    foreach (sort keys %ENV)
    {
        $ret = $ret . "$_  =  $ENV{$_}\n";
    }

    $ret = $ret . "\n";

    $ret = $ret . "Caller = $ENV{HTTP_REFERER}\n";
    return $ret;
}


Leider bekomme ich nur diese Ausgabe:


Umgebungsvariablen:
HOME  =  /root
LD_LIBRARY_PATH  =
OLDPWD  =  /usr/share/webmin/init/
PATH  =  /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin
PERLLIB  =  /usr/share/webmin
PWD  =  /opt/fhem
REMOTE_ADDR  =  192.168.1.4
REMOTE_ADDR_PROTOCOL  =  4
SERVER_REALROOT  =  /usr/share/webmin

Caller =


Am besten wäre es, wenn ich diese Variable im fhem.cfg abfragen könnte und je nach Ergebnis die eine oder andere URL verwenden würde für zusätzliche Webseiten oder Programmschnipsel. Habe ich hier eine Chance?


rudolfkoenig

Da FHEMWEB beim Starten nicht weiss, wie es aufgerufen wird, kann man das nicht in fhem.cfg statisch ablegen.
Ueblicherweise sendet der Browser das im HTTP Header als Host mit, das wird von FHEM in %FW_httpheader hinterlegt.
Probier mal
{ join("\n", @FW_httpheader) }
in der FHEMWEB Kommandozeile einzugeben.

justme1968

$FW_httpheader{Host}sollte liefern was du möchtest.

gruss
  andre

edit: rudi war schneller
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

eddie1104

Cool, beides geht. Danke euch beiden !

eddie1104


$FW_httpheader{Host}


funktioniert super aber ich bekomme das ganze nicht sauber zum Laufen. Ich habe dummerweise meine aktuelle Frage im Anfängerforum gestellt (sorry dafür) :

https://forum.fhem.de/index.php/topic,59795.0.html

Irgendwie muss ich da noch etwas falsch machen. Jedenfalls nach einem shutdown restart oder nach einem Reboot meiner virtuelle Maschine oder nach Restart von FHEM kann ich die Funktion nicht aufrufen. Aber wenn ich einmal 99_myUtils.pm im Editor von FHEM aufrufe und dann ohne Änderung wieder abspeichere, dann geht alles einwandfrei.

justme1968

ich hab dir gerade im anderen thread geantwortet.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968