eigenes html auf fhem hosten

2,302 views
Skip to first unread message

Hans-Georg Winkler

unread,
Aug 24, 2012, 12:09:20 PM8/24/12
to fhem-de...@googlegroups.com
Hallo Leute,

ich arbeite an einer kleinen UI für fhem und wollte mir direkt von fhem html, js und css ausliefern lassen. Rudi hatte mir dazu folgendes geschrieben: 

FHEMWEB liefert .html aus FHEM (oder www/...) direkt aus, also myFrontend.html neben commandref.html hinlegen, und es mit  http://host:port/fhem/myFrontend.html aufrufen. 

Leider geht das so aber nicht, ich komme immer auf die Startseite von fhem wenn ich das oben beschriebene versuche :-/ 

Ich habe mir mal angeschaut wie commandref verlinkt ist und das wird mit http://host:port/fhem/docs/commandref.html geladen, wenn ich dann  http://host:port/fhem/docs/myFrontend.html versuche geht es. Aber das ist natürlich nicht so schön. Kann mir jemand sagen wo /docs configuriert ist?

Grüße Georg

Hans-Georg Winkler

unread,
Aug 24, 2012, 12:30:59 PM8/24/12
to fhem-de...@googlegroups.com
Ich habe das ganze noch ein bisschen untersucht und es scheint das irgendwo im FHEM /css und /js so konfiguriert sind das sie in  /fhem/www/pgm2/ suchen, sprich ich muss meine CSS und JS files dort ablegen und dann finde ich sie unter 

 http://host:port/fhem/css/
 http://host:port/fhem/js/

ich würde da aber gerne ein eigenes Verzeichnis habe in dem ich meine Dateien (js, css und html) halten kann. z.B.  http://host:port/fhem/myUI/  (http://host:port/fhem/myUI/js/ und http://host:port/fhem/myUI/css/was sich Analog dazu in /fhem/www/myUI/ niederschlägt. Kann mir jemand sagen wo sich das konfigurieren lässt?

Viele Grüße Georg

Dr. Boris Neubert

unread,
Aug 24, 2012, 8:04:27 PM8/24/12
to fhem-de...@googlegroups.com
Hallo Georg,

hoffentlich beantworten Dir

http://fhemwiki.de/wiki/DevelopmentDirectoryStructure
http://fhemwiki.de/wiki/DevelopmentFHEMWEB

einen Teil Deiner Fragen.

Wenn Du Dir von fhem Dateien ausliefern lassen willst, meinst Du
eigentlich FHEMWEB, welches an die oben bezeichnete Dateistruktur
gebunden ist. Du kannst aber das Axel-Plugin verwenden, um Dich in die
Server-Struktur mit eigenen Modulen einzuklinken. Es existieren mit
FLOORPLAN und RSS zwei Beispiele daf�r.

Gr��e
Boris

Hans-Georg Winkler

unread,
Aug 24, 2012, 11:46:59 PM8/24/12
to fhem-de...@googlegroups.com
Hallo Borris,

Vielen Dank für deine Antwort :-) über die oben genannten Links bin ich während meiner Recherchen auch gestolpert, doch leider konnte ich damit nicht all zuviel anfangen. Eigentlich wollte ich nicht unbedingt im FHEM ein neues Modul bauen um meine html, js und css Dateien ausliefern zu können. Ich habe mir jetzt erst einmal damit geholfen das ich mir auf meinem Apache eine Proxy Regel eingerichtet habe. So kann ich mir meine Dateien vom Apache ausliefern lassen, aber auch unter der gleichen URL den FHEM zugreifen. 

Du/ihr fragt euch jetzt vielleicht nach dem Sinn/Unsinn des ganzen? ;-) Nun ich möchte gerne mit jquery-mobile eine javascript client für FHEM bauen. Sprich die UI soll komplett Clientseitig gebaut werden. Alle Daten dazu ziehe ich mir von FHEM mit jsonlist. Das ist zumindest der Plan. Um nun einen Ajaxcall auf FHEM zu machen muss ich diesen unter der gleichen URL ansprechen ansonsten verbietet das der Browser. Deshalb hatte ich versucht den HTML Content für den Client gleich von FHEM mit ausliefern zu lassen. Da das anscheinend ohne größeren Aufwand so nicht geht arbeite ich erst mal mit dem oben beschriebenen Workarround ;-)

Wenn ich was zu zeigen habe (zur Zeit bin ich bei Grundlegenden Tests) bzw. spätestens wenn ich Fragen habe werde ich mich sicherlich nochmal speziell zu dem gerade beschriebenen Projekt hier melden :-)

Viele Grüße Georg 

Rudolf Koenig

unread,
Aug 25, 2012, 1:58:16 AM8/25/12
to fhem-de...@googlegroups.com
> http://fhemwiki.de/wiki/DevelopmentFHEMWEB

Georgs Start-Datei ist keine Dokumentation, FHEMWEB liefert aber html z.Zt. nur
aus dem doc Verzeichnis aus. Auch unschoen, dass der Benutzer seines Frontends
den Pfad mit /doc/ in dem Broweser eingeben muss. Beide Punkte sind technisch
nicht zwingend, und ich meine wir sollten es fuer Ihn aendern.

Dr. Boris Neubert

unread,
Aug 25, 2012, 5:09:51 AM8/25/12
to fhem-de...@googlegroups.com
Reizvoll ist das schon...

3 Varianten:

1. http://myserver:8083/fhem/user/irgendwas.html serviert Daten aus
einem festgelegten Verzeichnis
2. Wie 1., wobei der Teil "user" in der URL sowie das Verzeichnis �ber
attr am FHEMWEB konfiguriert werden k�nnen
3. Ein Metamodul zur Kapselung des Axel-Plugins

define MyOwnWeb METAWEB user /usr/share/fhem/www/myownweb

(serviert http://myserver:8083/fhem/user/irgendwas.html aus
usr/share/fhem/www/myownweb/irgendwas.html)


1 geht sofort, 2 nachdem wir FHEMWEB/updatefhem getestet haben, 3
irgendwann mal.

Was sollen wir tun?

Gr��e
Boris

Hans-Georg Winkler

unread,
Aug 25, 2012, 5:25:49 AM8/25/12
to fhem-de...@googlegroups.com
Hallo und vielen Dank für eure Mühen! :-)

Am besten wäre es man könnte in der fhem.cfg das BasisVerzeichnis (und vielleicht auch den Port?) konfigurieren (ähnlich der Config für WEBPhone) sodass der Entwickler dann dort all seinen Content für die WebAnwendung wie html, css, js images etc. hinlegen könnte und gut. So wäre es auch möglich das ganze schön zu kapseln denn zur Zeit liegen ja alle Dateien im www/pgms/

Viele Grüße Georg

Prof. Dr. Peter A. Henning

unread,
Aug 26, 2012, 3:36:02 AM8/26/12
to fhem-de...@googlegroups.com
Das geht aber einen Weg, den ich nur verwunderlich finde.

Wenn FHEM als Webserver für statisches HTML fungieren soll, müssen natürlich alle Sicherheitsfeatures daraufhin angepasst werden etc. Außerdem ist zu klären, ob die Performance bei den eher schwächeren Systemen dann noch ausreicht

Dann doch lieber eine FHEM-Variante, die _hinter_ einem schönen, etablierten und schlanken Webserver liegt wie etwa einem Jetty.

LG

pah

Rudolf Koenig

unread,
Aug 26, 2012, 6:59:29 AM8/26/12
to fhem-de...@googlegroups.com
> @Boris:
> 3 Varianten:

Mir gefaellt keiner der drei, weil es unnoetige User-Konfiguration benoetigt.
Ich wuerde stattdessen die unterschiedliche Behandlung von css/js/html
zusammenfassen, und beliebige Verzeichnisse zulassen, macht den Code auch noch
(ein ganz bisschen) schlanker. Dann kann der Aufruf
http://xxx:8083/fhem/jsfrontend/main.html
lauten, und sein kompletter Code (.js/.css/.html) wird in einem Verzeichnis
(fhem/www/jfrontend) gespeichert.



> @pah
> Dann doch lieber eine FHEM-Variante, die _hinter_ einem sch�nen,
> etablierten und schlanken Webserver liegt wie etwa einem Jetty.

Nein. Georg braucht ein wrapper-html, damit er sein JS Programm laden kann.
Wenn man dafuer jetty/etc installieren muss, dann wird das nur von einer
Minderheit verwendet. Es geht hier nicht um Performance des Web-Servers,
sondern eine einfache Installation / Verwendung. Und gehen tut das auch jetzt,
nur mit einem un-intuitiven Pfad: http://xxx:8083/fhem/doc/frontend.html

Prof. Dr. Peter A. Henning

unread,
Aug 26, 2012, 1:13:32 PM8/26/12
to fhem-de...@googlegroups.com
Wieso eigentlich HTML-Wrapper ?

Wenn ich das richtig verstehe, hat die eigentliche Anforderung mit HTML gar nichts zu tun. Der MIME-Type der http-Response ist entweder text/javascript oder text/css - und das wars.

LG

pah

Dr. Boris Neubert

unread,
Aug 26, 2012, 1:44:23 PM8/26/12
to fhem-de...@googlegroups.com
Am 26.08.2012 12:59, schrieb Rudolf Koenig:
Mir gefaellt keiner der drei, weil es unnoetige User-Konfiguration benoetigt. Ich wuerde stattdessen die unterschiedliche Behandlung von css/js/html zusammenfassen, und beliebige Verzeichnisse zulassen, macht den Code auch noch (ein ganz bisschen) schlanker. Dann kann der Aufruf http://xxx:8083/fhem/jsfrontend/main.html lauten, und sein kompletter Code (.js/.css/.html) wird in einem Verzeichnis (fhem/www/jfrontend) gespeichert.

Die Special URLs für css js svg zusammenzufassen ist wohl in Ordnung. Aber welches Infix soll das bekommen?

http://xxx:8083/fhem/pgm2/bla.css?

Wie unterscheiden wir zwischem dem
- statischen Infix pgm2
- den dynamischen Infixen (Axel-Plugin, derzeit: floorplan, RSS), und
- dem benutzerdefinierten Infix ("Jsfrontend")?

Grüße
Boris

Rudolf Koenig

unread,
Aug 27, 2012, 2:11:49 AM8/27/12
to fhem-de...@googlegroups.com
> Wieso eigentlich HTML-Wrapper ?

Das Problem ist das Javascript Frontend in einem Browser zu starten.
MWn kann man dafuer eine javascript Datei nicht direkt angeben.

UliM

unread,
Aug 27, 2012, 5:09:40 AM8/27/12
to fhem-de...@googlegroups.com
Hi,
Wie wärs mit sowas wie
define <name> HTMLpgae <infix> <ordner> <startdatei>
das dann ein Axel-Plugin definiert, das $modpath/<ordner>/<startdatei>.html serviert, wenn über http://:80xx/fhem/<infix> aufgerufen?

So ein define schafft intern einheitliche Struktur. Hat aber dasselbe Manko wie floorplan, dass es sich nit an Konventionen der fhemweb-Instanz hält.

Gruß Uli

Dr. Boris Neubert

unread,
Aug 27, 2012, 10:48:06 AM8/27/12
to fhem-de...@googlegroups.com
genau mein Vorschlag!
Boris
--
sent from my WePad - apologies for brevity


Von: UliM <uli....@gmail.com>
Gesendet: Mon Aug 27 11:09:40 MESZ 2012
An: fhem-de...@googlegroups.com
Betreff: Re: [FHEM-devel] Re: eigenes html auf fhem hosten

-- 
Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe FHEM developers beigetreten sind.
Besuchen Sie https://groups.google.com/d/msg/fhem-developers/-/V_GB4o1KtpoJ, um diese Diskussion im Web anzuzeigen.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-de...@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-develope...@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-developers?hl=de, um weitere Optionen zu erhalten.

Rudolf Koenig

unread,
Aug 27, 2012, 10:56:21 AM8/27/12
to fhem-de...@googlegroups.com
> genau mein Vorschlag!

Na gut, dann ergebe ich mich.

Dr. Boris Neubert

unread,
Aug 27, 2012, 1:53:45 PM8/27/12
to fhem-de...@googlegroups.com
Am 27.08.2012 16:56, schrieb Rudolf Koenig:
>> genau mein Vorschlag!
> Na gut, dann ergebe ich mich.
>
Neues Modul 02_HTTPSRV.pm im SVN eingecheckt. Weniger als 100 Zeilen.
Unglaublich, was dieses Framework zu leisten imstande ist?

Doku in commandref.html.

Georg, Du kannst das jetzt testen.

Viele Gr��e
Boris

Hans-Georg Winkler

unread,
Aug 27, 2012, 2:08:25 PM8/27/12
to fhem-de...@googlegroups.com
Schicke Sache :-)

Ich schaue es mir gleich morgen an!

Grüße Georg

UliM

unread,
Aug 29, 2012, 5:20:45 AM8/29/12
to fhem-de...@googlegroups.com
Viele Gr��e
Boris

Hi Boris,
Du bist ne Wucht :)
Gruß Uli

Hans-Georg Winkler

unread,
Aug 30, 2012, 11:21:34 AM8/30/12
to fhem-de...@googlegroups.com
Work like a charm! :-)

Eine Sache noch, wenn ich <friendlyname> definiere so kann ich dort aber keine eigene start-html-datei angeben, sprich der Link im Fhem Menu geht immer auf index.html. Kann man da noch irgendwo eine eigene Start Datei für den Link-Menu mit angeben?

Viele Grüße Georg
Viele Gr��e
Boris

Hans-Georg Winkler

unread,
Aug 30, 2012, 12:23:17 PM8/30/12
to fhem-de...@googlegroups.com
Hallo,

da gibt es doch noch ein Problem.....

Wenn ich versuche auf foo.html über Opera zuzugreifen (Android Version) dann wird jede *.html Seite als Text Datei angezeigt. Sprich ich sehe den HTML Code auf dem Schirm. Firefox (Linux), Safari(IOS) Chrome (Windows) oder Dolphin (Android) haben dieses Problem nicht und rendern die  html Dateien ohne Probleme. Ich habe keine Ahnung woran das liegen kann aber ich denke es liegt am FHEM Webserver. Lasse ich foo.html über Apache an Opera ausliefern rendert er diese ohne Probleme. 

Viele Grüße Georg 

Dr. Boris Neubert

unread,
Aug 30, 2012, 1:08:46 PM8/30/12
to fhem-de...@googlegroups.com
Hallo,

es freut mich, daß es auf fast allen Browsern tut, was Du Dir gewünscht hast.


Am 30.08.2012 18:23, schrieb Hans-Georg Winkler:
da gibt es doch noch ein Problem.....

Die zentrale Stelle im Code von 02_HTTPSRV.pm, welche die Dateien serviert, ist

     if(open(INPUTFILE, $filename)) {
        binmode(INPUTFILE);
        @contents= <INPUTFILE>;
        close(INPUTFILE);
        return("", join("", @contents));
      }


in HTTPSRV_CGI(). Der Code gibt keinen MIME-Type zurück. Bitte versuche mal, die return-Zeile durch

        return("text/html; charset=utf-8", join("", @contents));


zu ersetzen (geht dann aber nur für HTML-Dateien!) und prüfe, ob Du danach in Opera weiterhin den HTML-Code siehst.

Falls dem so wäre, würde ich das Mapping Extension -> MIME-Type, das irgendwo in 01_FHEMWEB.pm schon verwendet wird, nach HttpUtils auslagern und auch hier verwenden.

Weiß jemand, ob die erwachsenen Webserver dieselbe oder eine andere Methode hierfür verwenden?

Viele Grüße
Boris

Hans-Georg Winkler

unread,
Aug 30, 2012, 1:20:39 PM8/30/12
to fhem-de...@googlegroups.com
Jo, wenn ich die Zeile unten einbaue geht es :-) aber eben nur für *.html Dateien.....

Viele Grüße Georg

--
Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe FHEM developers beigetreten sind.

Hans-Georg Winkler

unread,
Aug 31, 2012, 3:07:28 AM8/31/12
to fhem-de...@googlegroups.com
Hallo Boris, 

mir ist da noch etwas aufgefallen.....und zwar scheint es Probleme mit Unterverzeichnissen zu geben. Wenn ich direkt über die URL auf eines zugreife (http://fhem:8080/fhem/mobile/images/ajax_loader.gif) bekomme ich eine Weise Seite mit "Unknown HTTPSRV device: mobile/images"). So gehe ich davon aus das Unterverzeichnisse nicht gefunden werden also habe ich versucht dieses Extra zu definieren mit 

define images HTTPSRV mobile/images <Pfad dahin>

doch ohne Erfolg :-( kann es sein das in der Pfad Konfiguration nur eine Tiefe möglich ist?

define images HTTPSRV images <Pfad dahin> 

geht aber das ist natürlich unschön da man so nur eine Verzeichnis-tiefe hat.....dann kann man alles auch gleich aus einem Verzeichnis ausliefern ;-)

Ein anderer Weg wäre alle Dateien (js, css, images und html) ohne Unterverzeichnisse abzulegen, was aber aus meiner Sicht auch nicht wirklich schön ist.....

Meine Frage, kann man das HTTPSRV so erweitern das er auch automatisch Unterverzeichnisse des definierten Verzeichnisses Berücksichtigt und Dateien daraus ausliefert? Ich vermute mal man müsste Rekursiv durch die Verzeichnisstruktur gehen um das erwünschte Ergebnis zu erzielen. Keine Ahnung wie komplex das ist aber wenn es so nicht geht dann wäre es gut man könnte in der Konfiguration Unterverzeichnisse der Wahl konfigurieren....

Viele Grüße Georg

Dr. Boris Neubert

unread,
Sep 1, 2012, 1:11:03 PM9/1/12
to fhem-de...@googlegroups.com
Hallo,

letzte Änderungen eingecheckt:

- new helper functions ext2MIMEType(), filename2MIMEType()

- 02_HTTPSRV also serves files from subdirectories

- 02_HTTPSRV sends MIME types



Viele Grüße
Boris

Hans-Georg Winkler

unread,
Sep 3, 2012, 7:10:57 AM9/3/12
to fhem-de...@googlegroups.com
Funktioniert soweit wunderbar, alle Bilder in den Unterverzeichnissen werden einwandfrei geladen :-)

Wegen Opera, das kann ich erst heute Abend testen, melde mich dann nochmal.

Noch eine andere Sache.....den Link den man im FHEM Menu mit <friendlyname> konfigurieren kann geht immer nur auf index.html, kann man dieses Verhalten noch in der Konfiguration mit einem eigenen Namen überschreiben?

Viele Grüße Georg

Hans-Georg Winkler

unread,
Sep 5, 2012, 2:37:14 AM9/5/12
to fhem-de...@googlegroups.com
Hallo,

leider waren die Tests mit dem Opera unter Android negativ :-( wenn ich eine html Seite aufrufe bekomme ich den Code zu sehen, sprich die html Seite wird nicht vom Opera gerendert.

Viele Grüße Georg

--
Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe FHEM developers beigetreten sind.
Besuchen Sie https://groups.google.com/d/msg/fhem-developers/-/Z3vir0Pbo_wJ, um diese Diskussion im Web anzuzeigen.

Dr. Boris Neubert

unread,
Sep 5, 2012, 2:44:06 PM9/5/12
to fhem-de...@googlegroups.com
Hallo,

Am 05.09.2012 08:37, schrieb Hans-Georg Winkler:
> leider waren die Tests mit dem Opera unter Android negativ :-( wenn
> ich eine html Seite aufrufe bekomme ich den Code zu sehen, sprich die
> html Seite wird nicht vom Opera gerendert.

sorry, der Bug ist mir beim Code anschauen direkt ins Gesicht
gesprungen. Bitte mit der aktuellen SVN-Version nochmal ausprobieren.

Gr��e
Boris

Erwin

unread,
Sep 6, 2012, 8:51:55 AM9/6/12
to fhem-de...@googlegroups.com
Hi Boris,

ich kann bestätigen, läuft jetzt unter Android - Opera.

eine Frage: wenn ich infix nicht gleich devicename definiere, dann bekomm ich: Unknown HTTPSRV device: mytest
Also:
define myHTTPSRV HTTPSRV myHTTPSRV /opt/fhem/testsrv/ TestServer    OK
define myHTTPSRV HTTPSRV mytest /opt/fhem/testsrv/ TestServer             
Unknown HTTPSRV device: mytest

und noch was:
ein http://localhost:83/fhem/myHTTPSRV   liefert die index.html
ein http://localhost:83/fhem/myHTTPSRV/ liefert nichts!

danke für deinen support!
Erwin
Gr��e
Boris

Dr. Boris Neubert

unread,
Sep 10, 2012, 2:59:24 PM9/10/12
to fhem-de...@googlegroups.com
Hallo,


Am 06.09.2012 14:51, schrieb Erwin:
eine Frage: wenn ich infix nicht gleich devicename definiere, dann bekomm ich: Unknown HTTPSRV device: mytest

das stimmt.
ein http://localhost:83/fhem/myHTTPSRV   liefert die index.html
ein http://localhost:83/fhem/myHTTPSRV/ liefert nichts!

das stimmt auch.

Geplante Anpassungen:
- attr <name> directoryindex <indexfile> neu
- <indexfile> wird auch geladen, wenn URL auf / endet
- HTTPSRV_CGI() sucht sich das richtige HTTPSRV-Gerät nach dem Namen

Coming soon...

Grüße
Boris

Dr. Boris Neubert

unread,
Sep 16, 2012, 5:39:13 AM9/16/12
to fhem-de...@googlegroups.com
Am 10.09.2012 20:59, schrieb Dr. Boris Neubert:

- attr <name> directoryindex <indexfile> neu
- <indexfile> wird auch geladen, wenn URL auf / endet
- HTTPSRV_CGI() sucht sich das richtige HTTPSRV-Gerät nach dem Namen

erledigt, im SVN verfügbar.

Grüße
Boris
Reply all
Reply to author
Forward
0 new messages