Hauptmenü

FTUI 2.2 auf Apache

Begonnen von klausw, 30 Juni 2016, 12:21:37

Vorheriges Thema - Nächstes Thema

klausw

Hallo zusammen,

ich habe folgendes Problem:

Pi#1 mit FHEM und Apache
Pi#2 mit FHEM über VPN (UMTS) ins Heimnetz eingebunden

Der Apache läuft derzeit problemlos als ReverseProxy und ermöglicht Passwortschutz und TLS für beide FHEM Instanzen
Pi#1: https://<meinadresse>:9443/fhem/ftui_eval/
Pi#2: https://<meinadresse>:9443/test/ftui_eval/ (hier ist das attribut webname auf "test" gesetzt und in der index.html "<meta name="fhemweb_url" content="../test/">")

Jetzt möchte ich aber, um den UMTS Traffic zu verringern (100MB InclusivVolumen) FTUI direkt auf dem Apache haben. Dazu habe ich im www root einen Ordner "ftui" angelegt und den Inhalt von tablet_eval (vom Pi#2) hinneinkopiert.
Wenn ich jetzt https://<meinadresse>:9443/ftui/ aufrufe wird alles korrekt angezeigt und ich kann auch beispielsweise das Licht schalten.

Was nicht funktioniert ist die Aktualisierung der Werte. Temperaturen/Statusänderungen kommen nur bei einem Reload der Seite. Habe ich etwas übersehen?

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

klausw

#1
Hat jemand die Version 2.2 funktionsfähig auf einem Apache laufen oder funktioniert das etwa noch gar nicht?
Wie kann ich checken, was bei den Aktualisierungen beim longpoll schiefgeht?

Hier die logs
der Ordnerinhalt tablet_eval unter /opt/fhem/www (auf dem entfernten Pi) und /var/www/html/ftui (auf dem Apache Pi) ist identisch

FTUI wird über FHEM ausgeliefert:
https://meindyndns.de:32443/drham/ftui_eval/index.html

Plugin dir: js fhem-tablet-ui.js:928:13
Filename:  fhem-tablet-ui.js:928:13
"FHEM dir: https://meindyndns.de:32443/drham" fhem-tablet-ui.js:928:13
initPage: Timer gestartet fhem-tablet-ui.js:233
start shortpoll in (ms):30000 fhem-tablet-ui.js:928:13
Load widget : symbol fhem-tablet-ui.js:928:13
Load widget : label fhem-tablet-ui.js:928:13
Load widget : switch fhem-tablet-ui.js:928:13
Load widget : weather fhem-tablet-ui.js:928:13
Load widget : thermostat fhem-tablet-ui.js:928:13
Load widget : weekprofile fhem-tablet-ui.js:928:13
Load widget : button fhem-tablet-ui.js:928:13
Load widget : popup fhem-tablet-ui.js:928:13
Load widget : simplechart fhem-tablet-ui.js:928:13
Load widget : wdtimer fhem-tablet-ui.js:928:13
Load widget : homestatus fhem-tablet-ui.js:928:13
Load widget : dimmer fhem-tablet-ui.js:928:13
Load widget : slider fhem-tablet-ui.js:928:13
Load widget : volume fhem-tablet-ui.js:928:13
init widget: label fhem-tablet-ui.js:928:13
Loaded plugin: label fhem-tablet-ui.js:928:13
init widget: weather fhem-tablet-ui.js:928:13
Loaded plugin: weather fhem-tablet-ui.js:928:13
init widget: simplechart fhem-tablet-ui.js:928:13
Loaded plugin: simplechart fhem-tablet-ui.js:928:13
Loaded plugin: weekprofile fhem-tablet-ui.js:928:13
Loaded plugin: popup fhem-tablet-ui.js:928:13
slider dev:Testschalter par:STATE changed to:26 fhem-tablet-ui.js:928:13
Loaded plugin: slider fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: symbol fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: dimmer fhem-tablet-ui.js:928:13
Loaded plugin: wdtimer fhem-tablet-ui.js:928:13
Loaded plugin: knob fhem-tablet-ui.js:928:13
Loaded plugin: thermostat fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: switch fhem-tablet-ui.js:928:13
Loaded plugin: knob fhem-tablet-ui.js:928:13
Loaded plugin: volume fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: button fhem-tablet-ui.js:928:13
Loaded plugin: knob fhem-tablet-ui.js:928:13
Loaded plugin: homestatus fhem-tablet-ui.js:928:13
initWidgets - Done fhem-tablet-ui.js:928:13
initPage: 10051.85ms fhem-tablet-ui.js:297
start shortpoll in (ms):2500 fhem-tablet-ui.js:928:13
Widget vorbereitungen sind abgeschlossen. [wt_Nummer3] fhem-tablet-ui.js:928:13
Widget vorbereitungen sind abgeschlossen. [wt_Wohnzimmer] fhem-tablet-ui.js:928:13
Widget vorbereitungen sind abgeschlossen. [wt_Ausbau] fhem-tablet-ui.js:928:13
start shortpoll fhem-tablet-ui.js:928:13
get jsonlist2: Timer gestartet fhem-tablet-ui.js:344
start shortpoll in (ms):30000 fhem-tablet-ui.js:928:13
get jsonlist2: 2397.51ms fhem-tablet-ui.js:350
read jsonlist2: Timer gestartet fhem-tablet-ui.js:351
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3:battery" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3:batteryLevel" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:ValvePosition" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:boostTime" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:controlMode" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:desired-temp" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:measured-temp" fhem-tablet-ui.js:928:13
shortPoll - Done fhem-tablet-ui.js:928:13
read jsonlist2: 352.43ms fhem-tablet-ui.js:418
Longpoll started fhem-tablet-ui.js:928:13
start shortpoll in (ms):900000 fhem-tablet-ui.js:928:13
--------- start healthCheck -------------- fhem-tablet-ui.js:767:9
now: Date 2016-07-08T12:53:41.496Z fhem-tablet-ui.js:768:9
FTUI version: 2.2.1 fhem-tablet-ui.js:769:9
Longpoll: true fhem-tablet-ui.js:770:9
Longpoll objects there: true fhem-tablet-ui.js:771:9
Longpoll curent line: 43 fhem-tablet-ui.js:772:9
Longpoll last event before: 10 Sekunde(n) fhem-tablet-ui.js:773:9
Shortpoll interval: 900 fhem-tablet-ui.js:774:9
Shortpoll last run before: 1 Minute(n) 48 Sekunde(n) fhem-tablet-ui.js:775:9
FHEM dev/par count: 1581 fhem-tablet-ui.js:776:9
FTUI known devices count: 2271 fhem-tablet-ui.js:777:9
Page length: 67310 fhem-tablet-ui.js:778:9
Widgets count: 93 fhem-tablet-ui.js:779:9
--------- end healthCheck --------------- fhem-tablet-ui.js:780:9
--------- start healthCheck -------------- fhem-tablet-ui.js:767:9
now: Date 2016-07-08T12:54:41.498Z fhem-tablet-ui.js:768:9
FTUI version: 2.2.1 fhem-tablet-ui.js:769:9
Longpoll: true fhem-tablet-ui.js:770:9
Longpoll objects there: true fhem-tablet-ui.js:771:9
Longpoll curent line: 85 fhem-tablet-ui.js:772:9
Longpoll last event before: 9 Sekunde(n) fhem-tablet-ui.js:773:9
Shortpoll interval: 900 fhem-tablet-ui.js:774:9
Shortpoll last run before: 2 Minute(n) 48 Sekunde(n) fhem-tablet-ui.js:775:9
FHEM dev/par count: 1581 fhem-tablet-ui.js:776:9
FTUI known devices count: 2271 fhem-tablet-ui.js:777:9
Page length: 67310 fhem-tablet-ui.js:778:9
Widgets count: 93 fhem-tablet-ui.js:779:9
--------- end healthCheck --------------- fhem-tablet-ui.js:780:9
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3:battery" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3:batteryLevel" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:STATE" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:ValvePosition" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:boostTime" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:controlMode" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:desired-temp" fhem-tablet-ui.js:928:13
warning: weekprofile does not implement update function fhem-tablet-ui.js:928:13
warning: wdtimer does not implement update function fhem-tablet-ui.js:928:13
update done for "HM_3D1AB3_Clima:measured-temp" fhem-tablet-ui.js:928:13


apache config dazu:
drham.conf

<Location /drham>
  # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
  ProxyPass http://192.168.178.201:8082/drham
  ProxyPassReverse http://192.168.178.201:8082/drham
  #ProxyHTMLEnable On
  # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /drham/
  ProxyHTMLURLMap /drham/     /drham/
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile /etc/passfhem
  Require valid-user
  Order deny,allow
  Allow from all
</Location>




FTUI wird über Apache ausgeliefert:
(hier gibt es keine Aktualisierung, bei Refresh der Seite alles aktuell, schalten geht auch)
https://meindyndns.de:32443/ftui/tablet_eval/index.html

Plugin dir: js fhem-tablet-ui.js:928:13
Filename:  fhem-tablet-ui.js:928:13
"FHEM dir: https://meindyndns.de:32443/drham" fhem-tablet-ui.js:928:13
initPage: Timer gestartet fhem-tablet-ui.js:233
start shortpoll in (ms):30000 fhem-tablet-ui.js:928:13
Load widget : symbol fhem-tablet-ui.js:928:13
Load widget : label fhem-tablet-ui.js:928:13
Load widget : switch fhem-tablet-ui.js:928:13
Load widget : weather fhem-tablet-ui.js:928:13
Load widget : thermostat fhem-tablet-ui.js:928:13
Load widget : weekprofile fhem-tablet-ui.js:928:13
Load widget : button fhem-tablet-ui.js:928:13
Load widget : popup fhem-tablet-ui.js:928:13
Load widget : simplechart fhem-tablet-ui.js:928:13
Load widget : wdtimer fhem-tablet-ui.js:928:13
Load widget : homestatus fhem-tablet-ui.js:928:13
Load widget : dimmer fhem-tablet-ui.js:928:13
Load widget : slider fhem-tablet-ui.js:928:13
Load widget : volume fhem-tablet-ui.js:928:13
init widget: label fhem-tablet-ui.js:928:13
Loaded plugin: label fhem-tablet-ui.js:928:13
init widget: weather fhem-tablet-ui.js:928:13
Loaded plugin: weather fhem-tablet-ui.js:928:13
init widget: simplechart fhem-tablet-ui.js:928:13
Loaded plugin: simplechart fhem-tablet-ui.js:928:13
Loaded plugin: popup fhem-tablet-ui.js:928:13
slider dev:Testschalter par:STATE changed to:26 fhem-tablet-ui.js:928:13
Loaded plugin: slider fhem-tablet-ui.js:928:13
Loaded plugin: weekprofile fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: switch fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: symbol fhem-tablet-ui.js:928:13
Loaded plugin: knob fhem-tablet-ui.js:928:13
Loaded plugin: thermostat fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: button fhem-tablet-ui.js:928:13
Loaded plugin: knob fhem-tablet-ui.js:928:13
Loaded plugin: volume fhem-tablet-ui.js:928:13
Loaded plugin: famultibutton fhem-tablet-ui.js:928:13
Loaded plugin: dimmer fhem-tablet-ui.js:928:13
Loaded plugin: knob fhem-tablet-ui.js:928:13
Loaded plugin: homestatus fhem-tablet-ui.js:928:13
start shortpoll fhem-tablet-ui.js:928:13
get jsonlist2: Timer gestartet fhem-tablet-ui.js:344
start shortpoll in (ms):30000 fhem-tablet-ui.js:928:13
get jsonlist2: 2537.13ms fhem-tablet-ui.js:350
read jsonlist2: Timer gestartet fhem-tablet-ui.js:351
shortPoll - Done fhem-tablet-ui.js:928:13
read jsonlist2: 172.16ms fhem-tablet-ui.js:418
Longpoll started fhem-tablet-ui.js:928:13
start shortpoll in (ms):900000 fhem-tablet-ui.js:928:13
--------- start healthCheck -------------- fhem-tablet-ui.js:767:9
now: Date 2016-07-08T12:53:32.710Z fhem-tablet-ui.js:768:9
FTUI version: 2.2.1 fhem-tablet-ui.js:769:9
Longpoll: true fhem-tablet-ui.js:770:9
Longpoll objects there: true fhem-tablet-ui.js:771:9
Longpoll curent line: 43 fhem-tablet-ui.js:772:9
Longpoll last event before: 1 Sekunde(n) fhem-tablet-ui.js:773:9
Shortpoll interval: 900 fhem-tablet-ui.js:774:9
Shortpoll last run before: 1 Minute(n) 30 Sekunde(n) fhem-tablet-ui.js:775:9
FHEM dev/par count: 1596 fhem-tablet-ui.js:776:9
FTUI known devices count: 2272 fhem-tablet-ui.js:777:9
Page length: 67094 fhem-tablet-ui.js:778:9
Widgets count: 93 fhem-tablet-ui.js:779:9
--------- end healthCheck --------------- fhem-tablet-ui.js:780:9
--------- start healthCheck -------------- fhem-tablet-ui.js:767:9
now: Date 2016-07-08T12:54:32.712Z fhem-tablet-ui.js:768:9
FTUI version: 2.2.1 fhem-tablet-ui.js:769:9
Longpoll: true fhem-tablet-ui.js:770:9
Longpoll objects there: true fhem-tablet-ui.js:771:9
Longpoll curent line: 72 fhem-tablet-ui.js:772:9
Longpoll last event before: 3 Sekunde(n) fhem-tablet-ui.js:773:9
Shortpoll interval: 900 fhem-tablet-ui.js:774:9
Shortpoll last run before: 2 Minute(n) 30 Sekunde(n) fhem-tablet-ui.js:775:9
FHEM dev/par count: 1596 fhem-tablet-ui.js:776:9
FTUI known devices count: 2272 fhem-tablet-ui.js:777:9
Page length: 67094 fhem-tablet-ui.js:778:9
Widgets count: 93 fhem-tablet-ui.js:779:9
--------- end healthCheck ---------------
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

phil82

Hallo klausw,

ich hab FTUI in der aktuellen Eval-Version unter Apache laufen.
Bei mir funktioniert das prima. Sowohl im lokalen Netz als auch per VPN.
An Anfang hatte ich auch mal Probleme mit der Status-Aktualierung - aber direkt in FHEM. Leider weiß ich nicht mehr, wodran das gelegen hat. War irgendeine Konfiguration.

Allerdings hab ich deine Konstellation mit den zwei Fhem-Instanzen nicht ganz verstanden.

Auch deine Apache-Konfiguration vom ReverseProxy verstehe ich nicht so ganz. Wenn ich das richtig stehe, dann werden dort die Anfragen für "/drham" auf http://192.168.178.201:8082/drham umgeleitet. Müssten die Anfragen nicht an die Fhem-Instanz weitergeleitet werden. Also http://localhost:8083/fhem

Anbei mal meine Apache-Konfiguration:

        <Location /fhem>
                # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
                ProxyPass http://localhost:8083/fhem
                ProxyPassReverse http://localhost:8083/fhem
                ProxyHTMLEnable On
                # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
                ProxyHTMLURLMap /        /fhem/
                ProxyHTMLURLMap /fhem/     /fhem/

                AuthType Digest
                AuthName "HTTP Digest Access"
                AuthDigestProvider file
                AuthUserFile /etc/apache2/htdigestuser.pwd

                Require valid-user
                Order allow,deny
                Allow from all

                SetOutputFilter INFLATE;proxy-html;DEFLATE
        </Location>


Für FTUI hab ich im unter /var/www eine Link auf den www-Ordner vom FHEM: fhemweb -> /opt/fhem/www
Somit gehen Anfragen an /fhem direkt an Fhem und Anfragen an /fhemweb werden vom Apache bedient.

Brause

Ich habe das FTUI auch via Apache laufen.
Nach dem dem Grundschema von phil82.
Bei mir lag die fehlende longpoll-Aktualisierung an der jquery-ui.min.js die er wahrscheinlich aufgrund der Proxy-Umleitung nicht laden konnte.
Habe dann in der index.html diese Zeile hinzugefügt, danach lief es ohne Probleme.


<script  src="/fhem/pgm2/jquery-ui.min.js" defer></script>



klausw

Hi Phil,

Zitat von: phil82 am 10 Juli 2016, 02:16:24
Allerdings hab ich deine Konstellation mit den zwei Fhem-Instanzen nicht ganz verstanden.
Es sind 2 Pis

das Zweite steht in einem Ferienhaus und ist über einen UMTS Stick (mit nur 100MB Volumen) via VPN (lokale IP ist dann 192.168.167.201) an mein Heimnetz angeschlossen.

Also Pro Pi eine FHEM Instanz.
Auf dem Ersten Pi läuft zusätzlich der Apache.
Dieser Apache stellt den Zugriff auf beide FHEM Instanzen her.
einmal /fhem und einmal /drham
Das funktioniert soweit wenn ftui direkt von FHEM bereitgestellt wird.
Da ich aber auf dem VPN Kanal Daten sparen möchte, will ich ftui komplett auf dem Apache laufen lassen (also auch alle Bibliotheken) so das nur noch die FHEM Befehle über den VPN gehen. Daher kann ich die Verzeichnisse auch nicht Symlinken. Ich habe ftui_eval und pgm einfach gespiegelt.

Zitat von: phil82 am 10 Juli 2016, 02:16:24
Auch deine Apache-Konfiguration vom ReverseProxy verstehe ich nicht so ganz. Wenn ich das richtig stehe, dann werden dort die Anfragen für "/drham" auf http://192.168.178.201:8082/drham umgeleitet. Müssten die Anfragen nicht an die Fhem-Instanz weitergeleitet werden. Also http://localhost:8083/fhem
Ich habe nicht hinbekommen den ReverseProxy so einzustellen, das ich aus dem Apache Verzeichnis https://apachepi:32443/drham auf http://192.168.178.201/fhem komme.
Daher habe ich in FHEM beim zweiten Pi das FHEMWEB Attribut webname auf "drham" gesetzt.
Nun klappt es über Apache und im Heimnetz direkt über http://192.168.178.201/drham

Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

klausw

Zitat von: Brause am 10 Juli 2016, 12:48:32
Bei mir lag die fehlende longpoll-Aktualisierung an der jquery-ui.min.js die er wahrscheinlich aufgrund der Proxy-Umleitung nicht laden konnte.
Habe dann in der index.html diese Zeile hinzugefügt, danach lief es ohne Probleme.


<script  src="/fhem/pgm2/jquery-ui.min.js" defer></script>

Das wars. Daten werden jetzt aktualisiert. Danke Brause!
Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

phil82

Ahh, alles klar. Jetzt verstehe ich deine Konfiguration.
Du willst also auf beiden PIs einen Apache laufen lassen und vom PI#2 auf PI#1 zugreifen, bzw. einen Teil der FTUI-Anfragen die bei PI#2 eingehen an PI#1 weiterleiten.
Hmm, keine schlechte Idee.

Das Probelm mit dem "../pgm2/jquery.min.js" hab ich bei mir nicht, da ich das ganze www-Verzeichnis vom Fhem direkt per Apache ausliefern lasse und die Datei dann gefunden wird.