[gelöst] FHEMWEB: Get-/Set-Returns Anzeigeformat

Begonnen von mwllgr, 01 Dezember 2019, 23:04:12

Vorheriges Thema - Nächstes Thema

mwllgr

Hallo,

habe soeben an einem Modul von mir gesehen, dass bei allen Sets außer einem einzigen die Returns bei einem Set über eine Art Messagebox angezeigt werden.
Bei einem Set jedoch ("dateTimeSync") wird der Return-Wert über eine eigene Seite ausgegeben. Vielleicht helfen die angehängten Bilder, falls jemandem unklar ist, was ich meine.

Wie entscheidet FHEM, wie die Nachricht ausgegeben wird? Für genau dieses Set gibt es kein dazu passendes Attribut/Get-Feld.

Danke im Voraus


Update:
Gerade herausgefunden, dass die "Messagebox" kommt, wenn man ein Reading erstellt, welches den gleichen Namen wie das set-Feld hat.
Ist das so beabsichtigt?

rudolfkoenig

ZitatWie entscheidet FHEM, wie die Nachricht ausgegeben wird?
Da es historisch gewachsen ist, ist es etwas chaotisch:
- fhemweb.js zeigt die "sofortige" Antwort des get-Input-Feldes im Dialog an, das Gleiche gilt fuer die "haupt" Befehlszeile, wenn der Befehl mit get anfaengt _UND_  nicht die Hauptseite angezeigt wird (sondern z.Bsp. eine Detailseite).
- falls auf der Detailseite set/get/attr angeklickt wird, und ein Reading/Attribut mit diesem Namen noch nicht existiert, dann wird die Seite neu geladen da es durch diesen Befehl angelegt werden koennte. Sonst reicht ein Dialog, da eine Aenderung per longpoll mitgeteilt und das Reading aktualisiert wird.
- man kann von perl aus eine Nachricht per Dialog anzeigen lassen per asyncOutput, das nutzen get Funktionen, wenn die Antowrt nicht sofort zur Verfuegung steht.

mwllgr


Risiko

Hallöchen.

Ich muss hier nochmal nachhacken!
Genauer, was ist der Unterschied, wenn man ein get-Befehl a) im Inputfeld ausführt oder b) auf der Detailseite auf get klickt?

In beiden Fällen wird ein Dialog angezeigt. Das Ergebnis\Visualisierung ist aber unterschiedlich!
In Variante a werden scheinbar HTML-Tags gefiltert und in Variante 2 nicht?

Das wirft allgemein die Frage auf, wie sinnvoll ist es komplexere HTML Elemente (z.B. Tabellen, etc.) in get Antworten zurück zu geben?
Gibt es hierfür eine Richtlinie oder Ähnliches?

Risiko.

rudolfkoenig

ZitatGenauer, was ist der Unterschied, wenn man ein get-Befehl a) im Inputfeld ausführt oder b) auf der Detailseite auf get klickt?
Es durchlaeuft unterschiedliche Code-Bereiche in fhemweb.js :)

ZitatDas wirft allgemein die Frage auf, wie sinnvoll ist es komplexere HTML Elemente (z.B. Tabellen, etc.) in get Antworten zurück zu geben?
Gar nicht. Get darf/soll auch ueber telnet/websocket/etc aufgerufen werden, das Ergebnis soll nicht formatiert sein.
Fuer aufwendigere Sachen ist FW_detailFn gedacht, das ist FHEMWEB spezifisch, da kann/soll man HTML/JavaScript/etc verwenden.

justme1968

natürlich kann es sinnvoll sein aus einem get html zurück zu geben um z.b. ein bild anzuzeigen oder in der antwort anklickbare links zu zeigen.

die detailFn ist für dinge die immer angezeigt werden sollen wenn die detail ansicht gezeigt wird (ja man kann natürlich hier interaktive elemente einbauen, aber warum das rad neu erfinden wenn es schon get gibt?). und das get ist um etwas bestimmtes von hand abzufragen.

wichtig ist das man prüft über welchen weg die anfrage reingekommen ist (telnet, web, automatisch durch code) und dann die passende antwort zurück gibt. nur wenn die anfrage interaktiv über fhemweb gekommen ist sollte man (sofern passend) html zurück geben. sonst natürlich nicht.

wichtig ist das man $hash->{CL} und insbesondere $hash->{CL}{TYPE} auswertet um zu wissen ob asyncOutput möglich ist und/oder ob der aufruf über fheweweb reingekommen ist. und man sollte sich bewusst sein das fhemweb nicht das einzige frontend ist. und telnet auch nicht. es könnte auch ein sprach assistent verwendet werden. es kann also sein das man neben der prüfung zum passenden ausgabe format auch spezialisierte get und/oder readings bereitstellen muss um andere frontends oder andere anwendungsfälle abzudecken. auch um anwendern die schlecht/nicht sehen die benutzung zu ermöglichen.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Risiko

Ok!
Danke André für die ausführliche Antwort.
Werde ich mir dann nochmal anschauen müssen  :-\


Risiko

Hallo, ich nochmal.

Man kann leider in $hash->{CL} nicht unterscheiden, ob man in der Detailansicht auf den Link get geklickt hat oder den Befehl im Inputfeld eingegeben hat.
Anbei zwei Screenshots. a) get über Link b) get über Input

Ich würde gern im Fall b) einfach einen andere Rückgabe ohne HTML liefern.

Danke.


justme1968

das ist richtig. beides zählt als interaktiv per web.

aber wenn du deine rückgabe in <html></html> einschliest sollte in beiden fällen der gleiche dialog angezeigt werden und nicht die klartext antwort.

wenn das immer noch nicht reicht: niemand schreibt dir vor das du hinter dem link nicht ein anderes kommando oder das gleiche mit einem besonderen parameter stecken kannst um beides zu unterscheiden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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