Tablet UI: "longpoll: websockets not supportetd or not activated..."

Begonnen von PatrickR, 19 Februar 2018, 20:12:58

Vorheriges Thema - Nächstes Thema

PatrickR

Mahlzeit!

Habe aktuell ein Problem, dass mit der aktuellen git-Version von FTUI Longpoll auf AJAX zurück fällt.
Kurz zu meinem Setup: Ich setze FTUI auf einem separaten Apache ein, für FTUI verwende ich ein separates WEB-Device ("WEB_FTUI", meta web_device und fhemweb_url sind entsprechend gesetzt.)

Nach dem Aufruf der Seite erhalte die die Fehlermeldung "longpoll: websockets not supportetd or not activated > fall back to AJAX". Das Problem besteht aus zwei Teilproblemen.

Teilproblem A
Nach einigem Debugging musste ich Folgendes feststellen:

  • ftui.config.webDevice ist korrekt gesetzt: "WEB_FTUI"
  • ftui.deviceStates[ftui.config.webDevice] ist leer.
  • ftui.deviceStates["WEB"] ist korrekt gesetzt.
Workaround A: Lügen, konkret:
<meta name='web_device' content='WEB'>
(longpoll von WEB ist ebenfalls auf websocket gesetzt).

Teilproblem B
Mit dem obigen Workaround liefert ftui.deviceStates[ftui.config.webDevice].longpoll.val nun 1 zurück, nicht 'websocket'.
Workaround B: csrfToken in WEB_FTUI auf eine Konstante setzen statt random.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

setstate

Du musst einen anderen Namen als WEB_* benutzen.

Ich ignoriere diese komplett, weil das die TEMPORARY Instanzen sind. Könnte man vielleicht mit einem passenden RegEx besser machen, aber ich bin mir nicht sicher, ob das immer so gebildet wird:

WEB_<PEER>_<PORT>

/WEB_\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}_\d{5}/

PatrickR

Mahlzeit!

Danke für die Info.

Ggf. könnte man einen Zwischenweg gehen und auf WEB_.+_.+ oder so matchen bzw. alternativ dokumentieren (z. B. bei "The name of your FHEMWEB device" in der README.md).
Habe das jetzt bei mir angepasst. Hast Du noch eine Idee zu der Sache mit dem csrfToken? Oder ging das nie und ist mir nur nicht aufgefallen?

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

setstate


PatrickR

lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

setstate

Stimmt aber nicht. Setze es lieber auf 1

Nachtrag: wenn das INTERNAL CSRFTOKEN da ist, muss auch der Response-Header X-FHEM-csrfToken mitkommen

drhirn

Wenn da dann alles funktioniert, dürfte man dann erfahren, wie deine Einstellungen dann gesetzt sind?

Danke!

PatrickR

Mahlzeit!

Jetzt funktioniert es interessanterweise.

@drhirn:

defmod WWW_FTUI FHEMWEB 8001 global
attr WWW_FTUI CORS 1
attr WWW_FTUI longpoll websocket



<meta name="longpoll_type" content="websocket">
<meta name='web_device' content='WWW_FTUI'>
<meta name="fhemweb_url" content="http://fhem:8001/fhem">


Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook