Autor Thema: Fhemweb websockets und get ID's  (Gelesen 582 mal)

Offline Syrex-o

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 555
  • FhemNative
    • FhemNative Wishlist Status
Fhemweb websockets und get ID's
« am: 27 Mai 2020, 19:19:56 »
Hallo zusammen,

Im FhemNative Thread wurde ich jetzt schon öfter darauf angesprochen, wann endlich get Befehle unterstützt werden.

Leider muss ich mich immer damit entschuldigen, dass ich nicht eindeutig identifizieren kann, welches Device im Frontend welche Antwort erwartet.

Nun hat mich @mumpitzstuff netterweise auf diesen Bereich aufmerksam gemacht.

Kleine Skizze des Problems:
- Chart 1 will Daten aus einem Log
- Chart 2 andere Daten
- beide Komponenten sind in einem Raum im Frontend und senden somit nahezu synchron die Anfrage. Die Reihenfolge der Antworten ist nicht immer identisch.
--> ein Chart hat dann mindestens Falsche Werte oder keine.

Wenn ich mir etwas wünschen dürfte, sollten Websocket "get" Anfragen entweder:
- die Möglichkeit erlauben, eine ID mit zusenden
- zusätzlich mit dem Device und der FUID antworten

Gibt es grundsätzlich den Gedanken das einzubauen?

Vielen Dank im voraus.
Beste Grüße

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22525
Antw:Fhemweb websockets und get ID's
« Antwort #1 am: 27 Mai 2020, 19:43:13 »
Was spricht bei so einem Setup gegen mehrere Verbindungen zu FHEMWEB?

Offline Syrex-o

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 555
  • FhemNative
    • FhemNative Wishlist Status
Antw:Fhemweb websockets und get ID's
« Antwort #2 am: 27 Mai 2020, 19:46:16 »
Was spricht bei so einem Setup gegen mehrere Verbindungen zu FHEMWEB?

Ich sehe nicht ganz, warum das nötig sein sollte.
Außerdem gibt es dann ja kein richtiges halten mehr.

Nun sollen es am Ende nicht nur Charts sein und dann bauen alle Komponenten eine Verbindung zu fhem auf?

Das scheint mir das Problem etwas zu erschlagen.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22525
Antw:Fhemweb websockets und get ID's
« Antwort #3 am: 27 Mai 2020, 22:17:21 »
Zitat
Ich sehe nicht ganz, warum das nötig sein sollte.
Weil ich dann nicht was Neues implementieren muss???

Beim Laden einer Webseite macht der Browser auch mehrere Verbindungen parallel auf, will sagen, mein Vorschlag ist nicht ungewoehnlich.
Wenn die einzelnen SVGs einer Seite via <embed>-Tag oder mit JavaScript geladen werden, wird doch genau das gemacht.

Zitat
Außerdem gibt es dann ja kein richtiges halten mehr.
Das habe ich leider nicht verstanden.

Offline Syrex-o

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 555
  • FhemNative
    • FhemNative Wishlist Status
Antw:Fhemweb websockets und get ID's
« Antwort #4 am: 27 Mai 2020, 22:29:45 »
Zitat
Weil ich dann nicht was Neues implementieren muss???
OK, verständlich.

Die idee verstehe ich schon.
Zitat
Das habe ich leider nicht verstanden.

Nun wenn man der Idee folgt, dann erstellt der nächste User einen Raum der 20 Charts enthält, die alle Daten von FHEM abfragen. Dafür baue ich dann 20 Verbindungen auf. Ist das für dieses Szenario wirklich zielführend?

Mal ein anderer Ansatz. Verarbeitet Fhemweb die Anfragen denn immer nacheinander?
Mit anderen Worten, wenn ich die Reihenfolge der Anfragen  bestimme, antwortet fhemweb dann definitiv in dieser Reihenfolge?

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22525
Antw:Fhemweb websockets und get ID's
« Antwort #5 am: 27 Mai 2020, 22:59:37 »
Zitat
Mit anderen Worten, wenn ich die Reihenfolge der Anfragen  bestimme, antwortet fhemweb dann definitiv in dieser Reihenfolge?
Haengt davon ab:
Generell ist FHEM Single-Threaded, d.h. wenn eine Aufgabe ohne Weiteres berechnet werden kann dann ja.
Ausnahme: falls ein get Aufruf FHEM blockieren kann (z.Bsp. wg Anfrage an externes Geraet, und warten auf die Antwort), dann koennen Module die Antwort per "asyncOutput" liefern, z.Zt. nutzen diese Moeglichkeit 25 Module aus 500+.
In diesem Fall liefert get zunaechst nichts zurueck, und wenn die Antwort vom Geraet eintrifft, werden ueber FHEMWEB die Daten in einem JSON so eingepackt, dass die Gegenstelle (fhemweb.js) das erkennt, und die Daten asynchron im Dialog anzeigt. Wenn man zwei solche Anfragen ueber die gleiche Verbindung absetzt, dann kann man die Antwort nicht der Frage zuordnen.

Offline Syrex-o

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 555
  • FhemNative
    • FhemNative Wishlist Status
Antw:Fhemweb websockets und get ID's
« Antwort #6 am: 27 Mai 2020, 23:31:45 »
Haengt davon ab:
Generell ist FHEM Single-Threaded, d.h. wenn eine Aufgabe ohne Weiteres berechnet werden kann dann ja.
Ausnahme: falls ein get Aufruf FHEM blockieren kann (z.Bsp. wg Anfrage an externes Geraet, und warten auf die Antwort), dann koennen Module die Antwort per "asyncOutput" liefern, z.Zt. nutzen diese Moeglichkeit 25 Module aus 500+.
In diesem Fall liefert get zunaechst nichts zurueck, und wenn die Antwort vom Geraet eintrifft, werden ueber FHEMWEB die Daten in einem JSON so eingepackt, dass die Gegenstelle (fhemweb.js) das erkennt, und die Daten asynchron im Dialog anzeigt. Wenn man zwei solche Anfragen ueber die gleiche Verbindung absetzt, dann kann man die Antwort nicht der Frage zuordnen.

Dann besteht ja quasi doch ein weiterer Bedarf dafür, anstatt mehrere Verbindungen herzustellen.

Wenn das natürlich erstmal nicht geplant ist, dann implementiere ich get Befehle als eigene Verbindung, die anschließend getrennt wird.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22525
Antw:Fhemweb websockets und get ID's
« Antwort #7 am: 27 Mai 2020, 23:40:52 »
Zitat
Dann besteht ja quasi doch ein weiterer Bedarf dafür, anstatt mehrere Verbindungen herzustellen.
Sehe ich (noch) nicht.

Diese Befehle werden einzeln von Menschen ausgefuehrt, die Antworten kommen "normalerweise" schnell, und man setzt "normalerweise" nicht mehr als einen ab, bevor die Antwort angekommen ist. Und wenn es nicht normal laeuft, dann muss die Antwort vom Benutzer im Kopf zu der Frage zugeordnet werden.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20311
Antw:Fhemweb websockets und get ID's
« Antwort #8 am: 28 Mai 2020, 09:36:17 »
es gibt noch mehr fälle in denen antworten asynchron kommen können. und sogar die antworten eines einzigen geräts können out of order zurück kommen.

das macht das zugrundeliegende problem sehr viel komplexer da es nicht reicht eine antwort einem gerät zuzuordnen sondern sie auch dem konkreten kommando zuordnen muss.

das öffnen einer verbindung pro kommando deckt alle diese fälle und vermutlich noch mehr jetzt schon korrekt ab. von daher ist es ganz und gar nicht die schlechteste lösung.


ich denke im normalen betrieb fällt das ganze in zwei kategorien: der benutzer setzt ein paar kommandos interaktiv ab (die anzahl ist überschaubar) oder es werden mehrerere charts mit get geholt (die datenmenge pro get ist recht gross). in beiden fällen sollte sich der overhead durch neue verbindungen in grenzen halten.

beim initialen verbindungsaufbau sollte man die daten nicht mit get abholen sondern per list oder jsonlist und aktualisierungen sollte man dann oder longpoll bekommen. in beiden fällen stellt sich das problem der zuordnung dann nicht.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Syrex-o

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 555
  • FhemNative
    • FhemNative Wishlist Status
Antw:Fhemweb websockets und get ID's
« Antwort #9 am: 04 Juni 2020, 22:19:12 »
Ich stimme dir vollkommen zu.

Ich werde die Variante mit einzelnen Verbindungen und get Befehlen testen.
Spannend war die Frage eigentlich besonders aus einem Grund:
Es wurde schon eine websocket Implementierung für FHEM geschrieben, die genau das macht.
Das Device antwortet mit dem Ergebnis und dem Device Namen, für die Zuordnung.

Ich vergleichel die beiden Varianten mal und berichte dann.