FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 13 Februar 2019, 10:05:43

Titel: vorschlag: dynamische räume in fhemweb
Beitrag von: justme1968 am 13 Februar 2019, 10:05:43
aufbauend auf den patch hier: https://forum.fhem.de/index.php/topic,86862.0.html (https://forum.fhem.de/index.php/topic,86862.0.html) anbei der erste vorschlag für einen patch der dynamische räume in fhemweb ermöglicht.
                                                                                       
das ganze funktioniert über ein neues attribut extraRooms:attr WEB extraRooms name=Offen:devspec=contact=open.* name=Geschlossen:devspec=contact=closed.*
                                                                                       
die so definierten räume tauchen wie alle anderen auch in der raum liste links auf und lassen sich wie allen anderen auch über sortRooms sortieren.
                                                                                       
devspec wird aktuell nur beim klick auf den raum namen ausgewertet. d.h. wenn sich am match etwas ändert gibt es keinen automatischen refresh. ich schaue gerade noch wie aufwändig das wäre.
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: CoolTux am 16 Februar 2019, 07:19:12
Hallo Andre,

Ist die Funktion schon offiziell? Rudi scheint Urlaub zu machen  ;D


Grüße
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: Benni am 16 Februar 2019, 10:37:18
Zitat von: CoolTux am 16 Februar 2019, 07:19:12
Ist die Funktion schon offiziell?

Scheint bisher noch nicht eingechecked zu sein.

Ich habe erst heute morgen ein Update gemacht. Das entsprechende Attribut ist aber noch nicht verfügbar.

Das zugehörige show-Command (https://forum.fhem.de/index.php/topic,86862.msg792982.html#msg792982) funktioniert aber.  8)

gb#
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: CoolTux am 16 Februar 2019, 11:14:06

show
Unknown command show, try help.



fhem.pl                                18423 2019-01-26 16:17:38Z rudolfkoenig

Ich bin wohl noch nicht aktuell genug  :D
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: rudolfkoenig am 16 Februar 2019, 12:03:29
ZitatIst die Funktion schon offiziell?
Nein, ich habe noch gewartet, wg: "gibt es keinen automatischen refresh. ich schaue gerade noch wie aufwändig das wäre."

ZitatRudi scheint Urlaub zu machen.
Urlaub war gestern, heute muss ich arbeiten.

Beim Anwenden der angehaengten 01_FHEMWEB.pm.patch  habe ich diverse Probleme:
- patch meldet: patch: **** malformed patch at line 57: @@ -3702,6 +3725,13 @@
- ich habe den Patch manuell eingefuegt. Der Raum-Eintrag erscheint, aber beim anklicken ist es leer. Weiterhin sind alle anderen Links um 2 nach unten verschoben (??), d.h. sie fuehren den Link um 2 verschoben aus.
- habe eine Weile gesucht, habe aber die Ursache nicht gefunden.
- bitte den angehaengte Patch als Grundlage verwenden, weil ich die Pruefung des Attributes nach AttrFn verlegt habe, damit man direkt sieht, wenn man was Falsches eingegeben hat.

Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: Benni am 16 Februar 2019, 13:01:41
Zitat von: CoolTux am 16 Februar 2019, 11:14:06

show
Unknown command show, try help.



fhem.pl                                18423 2019-01-26 16:17:38Z rudolfkoenig

Ich bin wohl noch nicht aktuell genug  :D

Das show ist in FHEMWEB. Bei mir:


01_FHEMWEB.pm 18577 2019-02-13 07:06:12Z rudolfkoenig
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: betateilchen am 16 Februar 2019, 19:05:54
auch die fehlende commandref-Einbindung des neuen Befehls wurde von mir schon vorgestern bemängelt.

https://forum.fhem.de/index.php/topic,86862.msg906107.html#msg906107
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: justme1968 am 17 Februar 2019, 15:45:19
anbei eine aktualisierte version des patch.

ich habe keine ahnung woher die probleme mit der ersten version gekommen sind. das manuell einbauen war scheinbar auch nicht ganz fehlerfrei. in list2 wurde z.b. doppelt gepushed. ich vermute das ist der grund für dein problem mit der verschiebung.


die änderungen im einzelnen sind:

das automatische aktualisieren habe ich mir angeschaut, es ist nicht wirklich schwierig. im prinzip muss man: sich bei der anzeige eines dynamischen raumes alle devices merken, so lange der dynamische raum angezeigt wird bei jeder änderung an define, readings und attributen ein devspec2array machen und das ergebnis mit der gespeicherten liste vergleichen. wenn sie sich unterscheiden ein reload auslösen. und das für jede offene webseite.

die dazu nötigen teile sind alle da, und der overhead tritt nur auf wenn tatsächlich ein solcher raum angezeigt wird. aber ich bin mir nicht sicher ob es den aufwand wert ist.


den commandref eintrag für show habe ich auch mit angehängt.
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: rudolfkoenig am 18 Februar 2019, 09:19:25
Scheint bei mir zu funktionieren, habs eingecheckt.

Ich habe gestern show im FHEMWEB.pm eingebaut, aber in commandref ist er besser hinterlegt, da wird er auch von help gefunden, deswegen meine Version ausgebaut und deine eingecheckt.

Apropos help: bei mir ist die Ausgabe z.Bsp. von "help list" ueber FHEMWEB und insb. ueber telnet unleserlich. Das war mal anders.
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: CoolTux am 18 Februar 2019, 09:29:37
Sieht in der Tat sehr unleserlich aus. So verschoben.
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: Benni am 18 Februar 2019, 11:57:27
 ??? Sieht so aus, als würden im <pre> die Zeilenvorschübe fehlen oder nicht beachtet werden?

Eventuell liegt es aber auch an der <pre> untergeordneten Tag-Struktur (<pre><code><name></name></code></pre>) , dass hier war missinterpretiert wird, ohne jetzt genau zu wissen, wo was her kommt.

gb#
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: Benni am 18 März 2019, 20:44:06
Hallo Andre,
Hallo Rudi,

ich habe aktuell irgendwie das Problem, dass das Schalten in den dynamisch erzeugten Räumen nicht (mehr?) funktioniert, egal ob per FHEMWEB-Attribut extraRooms fest definiert oder on-the-fly per show erzeugt.

Beim Klick auf einen webCmd-Link oder auf ein devstateIcon passiert einfach nichts.

In der Java-Konsole finde ich dazu dann folgendes:


20:11:23.605 Inform-channel opened (websocket) with filter room=%23devspec%3dNAME%3ddmShowTest
fhemweb.js:498 20:11:23.666 Rcvd:
fhemweb.js:498 20:11:45.324 FW_cmd:/fhem?cmd.dmShowTest=set dmShowTest on&room=#devspec=NAME=dmShowTest&fwcsrf=csrf_<...>&XHR=1
jquery.min.js:4 POST http://rocker01:8083/fhem?cmd.dmShowTest=set%20dmShowTest%20on&room= 400 (Bad Request)
fhemweb.js:498 20:11:45.334 FW_csrfRefresh, last was ok
fhemweb.js:498 20:11:45.341 FW_cmd:/fhem?cmd.dmShowTest=set dmShowTest on&room=#devspec=NAME=dmShowTest&fwcsrf=csrf_<...>&XHR=1
jquery.min.js:4 POST http://rocker01:8083/fhem?cmd.dmShowTest=set%20dmShowTest%20on&room= 400 (Bad Request)
fhemweb.js:498 20:11:45.351 FW_csrfRefresh, last was bad


Es scheint ein csrf-Problem zu sein.
Den csrf-token habe ich im o.g. Auszug durch <...> ersetzt.
Es wird aber beides mal derselbe csrf-token angezeigt und der stimmt auch mit dem token der verwendeten FHEMWEB-Instanz überein.


Das Problem tritt sowohl in Chrom, Safari und Firefox auf.

Hmm ....

Ich habe das Ganze jetzt nochmal auf einer FHEMWEB-Instanz ohne CSRF ausprobiert, da klappt das schalten auch nicht. Es wird beim Schaltversuch ein Popup geöffnet, in dem die FHEMWEB-Startseite (defaultroom) angezeigt wird (s. Screenshot)
Das Schalten an sich klappt, aber es wird in der Anzeige nicht aktualisiert.
(Im Falle mit CSRF erfolgt auch kein Schalten!)

In der Console ist in dem Fall folgendes zu lesen:


20:26:50.787 Inform-channel opened (websocket) with filter room=%23devspec%3dNAME%3ddmShowTest
fhemweb.js:498 20:26:50.847 Rcvd:
fhemweb.js:498 20:26:55.015 f18.js resize W:601 S:1440
fhemweb.js:498 20:27:09.229 FW_cmd:/fhem?cmd.dmShowTest=set dmShowTest on&room=#devspec=NAME=dmShowTest&XHR=1
jquery.min.js:4 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
fhemweb.js:498 20:27:09.725 f18.js resize W:601 S:1440
fhemweb.js:498 20:27:09.732 f18.js resize W:601 S:1440
fhemweb.js:498 20:27:09.781 Inform-channel opened (websocket) with filter room=%23devspec%3dNAME%3ddmShowTest
fhemweb.js:498 20:27:09.790 ERRMSG:Connection lost, trying a reconnect every 5 seconds.<
fhemweb.js:1040 WebSocket connection to 'ws://rocker01:9099/fhem?XHR=1&inform=type=status;filter=room=%23devspec%3dNAME%3ddmShowTest;since=1552937209.168;fmt=JSON&fw_id=57078&timestamp=1552937229780' failed: WebSocket is closed before the connection is established.
fhemweb.js:498 20:27:09.791 ERRMSG:Connection lost, trying a reconnect every 5 seconds.<
fhemweb.js:498 20:27:14.696 ERRMSG:<
fhemweb.js:498 20:27:14.698 ERRMSG:<
fhemweb.js:498 20:27:14.797 Inform-channel opened (websocket) with filter room=%23devspec%3dNAME%3ddmShowTest
fhemweb.js:1122 WebSocket connection to 'ws://rocker01:9099/fhem?XHR=1&inform=type=status;filter=room=%23devspec%3dNAME%3ddmShowTest;since=1552937209.168;fmt=JSON&fw_id=57078&timestamp=1552937234796' failed: WebSocket is closed before the connection is established.
fhemweb.js:498 20:27:14.799 Inform-channel opened (websocket) with filter room=%23devspec%3dNAME%3ddmShowTest
fhemweb.js:498 20:27:15.017 Rcvd:


Da will anscheinend die websocket-Verbindung nicht.

OK wenn ich für die FHEMWEB-Instanz auf longpoll umstelle, dann funktioniert es wieder.


Ach so ja ... in einem normalen Raum in der Übersicht funktioniert das Schalten und Aktualisieren, auch bei websocket problemlos!

Wenn ich übrigens trotz aktiviertem longpoll versuche im Dynamischen Raum zu schalten, tritt trotzdem die o.g. Fehlermeldung bzgl. fehlgeschlagener CSRF-Überprüfung auf.
(Ich gehe davon aus, dass das auch schon wg. des websocket-Problems scheitert)

Habt ihr eine Idee, bzw. eine Lösung?

gb#


Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: justme1968 am 19 März 2019, 19:18:54
ich habe mir das ganze eben mal angeschaut.

- direkt nach dem start von fhemweb war alles ok.
- beim testen habe ich ein paar tabs aufgemacht, dann ist das problem aufgetreten
- es hat mit dem # im room namen zu tun wenn man das neue feature verwendet
- es passiert auch wenn man ganz normal über das room attribut ein # im raum namen hat
- das # scheint zu verhindern das die url automatisch korrekt encoded wird
- es gibt noch andere zeichen die das problem triggern. z.b. ein = im raum namen

es hilft wenn man in fhemweb.js in FW_replaceLink in der click function vor dem FW_cmd aufruf in attr alle parameter ausser dem eigentlichen set kommando abschneidet. ich denke das ist ok da beim click per xhr raum oder detail sowieso nicht relevant sind. im fall ohne xhr bleibt das problem bestehen. ich weiss nicht ob das noch relevant ist.

der zweite teil des patches repariert den longpoll update von devices in einem dynamischen raum.


--- fhemweb.js (revision 18968)
+++ fhemweb.js (working copy)
@@ -699,6 +699,7 @@
   $(el).removeAttr("href");
   $(el).removeAttr("onclick");
   $(el).click(function() {
+    // remove unnecessary params, forum: #97351
+    attr = attr.replace(/&.*$/,'');
     FW_cmd(attr+"&XHR=1", function(txt){
       if(!txt)
         return;
@@ -1171,6 +1172,10 @@
         filter="room="+room;
     }
   }
+
+  // use devspec directly if room is dynamic (#devspec=<devspec>)
+  filter = filter.replace( 'room=#devspec=', '' );
+  filter = filter.replace( 'room=%23devspec%3d', '' );
+
   var iP = $("body").attr("iconPath");
   if(iP != null)
     filter = filter +";iconPath="+iP;
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: rudolfkoenig am 19 März 2019, 21:14:55
Patch sagt:
Zitatpatch: **** malformed patch at line 11:          return;
Habs manuell eingebaut und eingecheckt.
Titel: Antw:vorschlag: dynamische räume in fhemweb
Beitrag von: Benni am 19 März 2019, 21:44:54
Hallo Andre,
Hallo Rudi,

danke euch beiden!  8)

Werde morgen mal ein Update machen und testen!

gb#