vorschlag: dynamische räume in fhemweb

Begonnen von justme1968, 13 Februar 2019, 10:05:43

Vorheriges Thema - Nächstes Thema

justme1968

aufbauend auf den patch hier: 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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

CoolTux

Hallo Andre,

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


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

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 funktioniert aber.  8)

gb#

CoolTux


show
Unknown command show, try help.



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

Ich bin wohl noch nicht aktuell genug  :D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

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.


Benni

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

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

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:

  • aufbau der listen korrigiert. s.o.
  • ich habe den code um den aktuellen raum in der liste zu markieren umgestellt (class="sel").
    damit werden jetzt auch die extraRooms markiert wenn sie gerade angezeigt werden.
    als nebeneffekt wird jetzt auch Everything markiert sowie Edit files, Select style und Event monitor falls gerade ausgewählt.
  • leerzeichen im namen der extraRooms sind mit   möglich


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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

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.

CoolTux

Sieht in der Tat sehr unleserlich aus. So verschoben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

 ??? 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#

Benni

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#



justme1968

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;
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

rudolfkoenig

Patch sagt:
Zitatpatch: **** malformed patch at line 11:          return;
Habs manuell eingebaut und eingecheckt.

Benni

Hallo Andre,
Hallo Rudi,

danke euch beiden!  8)

Werde morgen mal ein Update machen und testen!

gb#