[gelöst] Floorplan: Fehlerhafter URL Request ab 2. Klick

Begonnen von Borkk, 20 Januar 2016, 17:16:49

Vorheriges Thema - Nächstes Thema

Borkk

Dieser Eintrag hat mit meinen Bemühungen hier  http://forum.fhem.de/index.php/topic,47593.0.html  zu tun. Ich bin auf ein Verhalten gestoßen das normalerweise nicht stört. In meinem Fall verhindert es jedoch die Funktion die ich realisieren möchte.

Ich versuche es mal zu beschrieben.

Ruft man einen Floorplan auf und drückt z.B. auf das Symbol eines beliebigen Objekts um die entsprechende Funktion auszulösen (z.B. Homematic Schalter toggle) wird folgender URL Request erzeugt:

http://192.168.xx.xx:8085/fhem/floorplan/Wohnung?cmd.sz_schrank=set%20sz_schrank%20toggle&room=Schlafzimmer&XHR=1&fw_id=undefined

Der Befehl wird fehlerfrei ausgeführt, das Licht geht an. Drückt man danach das gleiche Symbol erneut um das Licht wieder auszuschalten wird dieser Request erzeugt.

http://192.168.23.24:8085/fhem?cmd.sz_schrank=set%20sz_schrank%20toggle&room=Schlafzimmer&XHR=1&fw_id=undefined

Auch wenn in dem String /floorplan/Wohnung fehlt wird der Befehl natürlich ordnungsgemäß ausgeführt. Es ist so, das nach Aufruf eines Floorplans nur der ERSTE Klick auf ein Objekt einen langen URL Request (also inkl. /floorplan/Wohnung)  erzeugt. Alle folgenden Klicks erzeugen die kurze Variante.

Ich habe über einen Reverse Proxy den Zugriff für einen separaten FHEMWEB auf einen speziellen Floorplan eingeschränkt. Das funktioniert soweit super allerdings nur beim o.g ersten Klick, da hier die Regel passt. Ein Zugriff auf /fhem und somit auf das gesamte System ist nicht möglich und auch nicht gewünscht. Das Ganze lässt sich im Chrome über "Prüfen" und "Network" recht einfach nachstellen.

Kann man da was konfigurieren oder liegt hier ein Fehler im FHEMWEB oder FLOORPLAN vor???
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

UliM

Hi,
ist eher ein Fehler, der aber außer Dir scheinbar niemand Probleme bereitet.

Es gibt eine globale Variable, die von floorplan.pm mit dem den in Deinem Post rot markierten Teil befüllt wird. Fhemweb liefert den fertigen Link an floorplan zurück. Offenbar geht der Variableninhalt zur Unzeit flöten, oder die Variable wird in fhemweb nicht mehr berücksichtigt (unwahrscheinlich).

Bin derzeit krank und komme nicht an meine fhem-Programmierumgebung, es wird daher ne Weile dauern bis ich's mir anschauen kann.

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

Borkk

#2
Danke  :)

Ich sitze schon einige Abende an dem Problem, da ich es zunächst in meiner Config vermutet habe. Jetzt kann ich alles fertig machen und wenn der Bug gefixt ist, geht auch der Rest. Super.

Gute Besserung !!!
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Borkk

Hallo Uli,

ich wollte fragen wie es dir geht und ob du schon Gelegenheit hattest, die Sache zu untersuchen.

Schon mal Danke für deine Zeit.
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

UliM

Hi,
bin heute nach über einem Monat das erste mal wieder in meiner Wohnung und hab erstmal andere Prioritäten.
Ist aber nicht vergessen :)
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Borkk

#5
Super, ich habe meine "Netzklingel" jetzt am Start und sie funktioniert einwandfrei :-)

Leider wegen des o.g. Fehlers nur einmal. Man kann sich aber mit einem "neu laden" der Seite helfen.
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Borkk

Ich will nicht nerven aber wollte mal höflich fragen wie der Status ist.
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

UliM

Hi,
wie hast Du denn die URL (lang/kurz) getestet? Ich seh die nirgends...?

Die Variable, um die es geht, heisst $FW_subdir

Analyse in FLOORPLAN
Sie wird auf "" gesetzt in #295, #381
Sie wird gefüllt in #323, #342,
Sie wird verwendet in #691 nur für Style 8

Analyse in FHEMWEB
Sie wird auf "" gesetzt in #301, #2541 - hier nur für FW_atPageEnd wiederhergestellt
Sie wird verwendet in
FW_addLinks #928,
FW_detailSelect #1143,
FW_pH #2075,
FW_pHPlain #2107, #2109,
FW_readIconsFrom #2278, #2287, #2300,
FW_Notify #2538,
FW_devState #2723

Irgendeins der auf "" setzen ist offenbar zu viel, ich hab #2541 in FHEMWEB in Verdacht bzw. den Umstand, dass die Wiederherstellung des Wertes nur bei FW_atPageEnd erfolgt, in allen anderen Fällen aber nicht.

Bevor ich beide Programme mit Debug-Einträgen zupflastere und dann rumteste - Fragen:

  • Welchen Style verwendest Du?
  • Wie schaust Du Dir die erzeugte URL an?
  • Klickst Du auf ein command oder auf das icon?

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

Borkk

#8
Hallo Uli,

danke das du die Sache angehst, ich bin keine Entwickler, versuche aber mal so gut es geht zu antworten:

Welchen Style verwendest Du?
Dark, Darktouchpad und einen Eigenen, das Problem tritt aber unabhängig vom Style auf.

Wie schaust Du Dir die erzeugte URL an?
Ich habe bei Chrome mit der rechten Taste "Prüfen" aktiviert und dann den Reiter "Network". Wenn ich den Filter XHR aktiviere, sehe ich die erzeugte URL wenn ich auf das Icon klicke.

Klickst Du auf ein command oder auf das icon?
Ich klicke auf ein Icon. Es wird übrigens nach Aufruf des Floorplans bei jeden Icon beim ersten Klick die lange URL erzeugt. Also auch wenn ein anderes Icon schon mehrfach geklickt wurde.



Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Borkk

Konntest du mit meiner Antwort was anfangen ?
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

UliM

Hi,
sorry für die lange Wartezeit.
Mit Style meinte ich nicht css-style, sondern den Floorplan-Style, der im fp-Attribut für das device angegeben ist, also 0 (Icon only), 1 (Name+Icon) usw., da ich vermutete, dass das bei der Fehlereingrenzung hilfreich sein könnte.

Hab jetzt mal geprüft, ob Floorplan.pm nach einem XHR-Click überhaupt aufgerufen wird - wird es nicht.
Wenn longpoll gesetzt ist, wird die Seite einmalig von floorplan.pm zusammengebaut. Nach einem Klick auf ein device wird dann der Link von on auf off (oder umgekehrt) aktualisert von longpoll.js . Ich vermute, dass dort ein link direkt auf das device gesetzt wird, eben ohne den "floorplan"-Teil in der URL. Offenbar enthält document.location.pathname nicht den floorplan-Teil des Pfads.

Da ich kein js kann, longpoll nur ansatzweise durchschaue und Rudi der maintainer ist, müsste ich Rudi bitten, sich das mal anzuschauen.

Gruß, Uli



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

rudolfkoenig

Und da ich kein Floorplan Experte bin, brauche ich ein vorbereitetes Beispiel.

UliM

#12
Hallo Rudi,
et voilà:
define lp_test FS20 1234 11
attr lp_test dummy 1
set lp_test on
define lp_testfp FLOORPLAN
attr lp_test fp_lp_testfp 100,250,0

Nun den Menüpunkt "Floorplans" aufrufen, dort lp_testfp aufrufen.

Bei erstmaligem klick auf das icon wird floorplan/lp_testfp/lp_test getriggert.
Ab dem zweiten klick auf das icon wird lp_test getriggert.
(siehe Startbeitrag)

Mangels Java-Console kann ich's leider nicht nachvollziehen. Siehst Du den Effekt?

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

rudolfkoenig

Ich sehe keinen Effekt, bei mir schaut es aus, wie auf dem angehaengten Screenshot.
Beim klick auf "lp_testfp" kommt in der JavaScript-Console:
Navigated to http://localhost:8083/fhem/floorplan/lp_testfp
fhemweb.js:282 14:35:14.556 Longpoll with filter fp_lp_testfp=.%2B;iconPath=lp_testfp

Keine Ahnung, ob das richtig ist.

P.S.:Wieso hast du keine JavaScript-Console? Bist mit Telefon/Tablet unterwegs?

Borkk

Hallo,

sorry jetzt war ich ne Weile nicht hier, habe aber gesehen das sich was tut :-)

Uli konnte mein Problem ja genau nachstellen. Es hat ja keinen Einfluss auf die Funktion, da beide Trigger ausgeführt werden. Nur in meinem Fall blockt mein ReverseProxy den Zugriff auf den "kurzen" Link.

Kann ich noch noch irgendwas beitragen, das euch hilft?
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)