FW_okDialog wird durch Navigated to http:// verdrängt

Begonnen von phys1, 13 Mai 2026, 19:45:22

Vorheriges Thema - Nächstes Thema

phys1

Hallo,

wenn ich aus einem DOIF (Perl-Modus, DeviceName: Test) in einem Block folgendes aufrufe:
::FW_directNotify("#FHEMWEB:WEB","FW_okDialog('Meine Nachricht')","");
erscheint der modale FW_okDialog nur Sekundenbruchteile und danach wieder die DeviceOverview Seite.
In der DevTools Console sieht man:

19:21:13.117 Rcvd:
fhemweb.js:613 19:21:16.177 Rcvd: ["#FHEMWEB:WEB","FW_okDialog('Meine Nachricht')",""]
Navigated to http://192.168.178.11:8083/fhem?detail=Test&fw_id=
fhemweb.js:613 19:21:16.465 FW_queryValue:{ReadingsVal("Test","action","")}
fhemweb.js:613 19:21:16.466 FW_queryValue:{AttrVal("Test","room","")}
fhemweb.js:613 19:21:16.473 f18.js resize W:853 S:1920
fhemweb.js:613 19:21:16.475 f18.js resize W:853 S:1920
contentScript.js:2 i18next: languageChanged de-DE
contentScript.js:2 i18next: initialized {debug: true, initImmediate: true, ns: Array(1), defaultNS: Array(1), fallbackLng: Array(1), ...}
content-script.js-a8PnzBQ-.js:1 [Smart Unit Converter] Content script loaded
content-script.js-a8PnzBQ-.js:1 [Smart Unit Converter] Smart Unit Converter initialized with state: false
content-script.js-a8PnzBQ-.js:1 [Smart Unit Converter] State changed: false
fhemweb.js:613 19:21:16.565 Inform-channel opened (websocket) with filter Test
fhemweb.js:613 19:21:16.621 Rcvd:

D.h. sofort nach dem Ausführen von FW_okDialog kommt:
Navigated to http://192.168.178.11:8083/fhem?detail=Test&fw_id=
und damit verschwindet der modale Dialog.
Frage: wer löst das Navigated to... aus? fhemweb.js? Und warum wird das ausgelöst?
Kann man das Verhalten eventuell im FHEMWEB Device über ein Attribut ändern?
Das Verhalten ist identisch bei Browsern unter Windows 11 oder Ubuntu.

Andere modale Dialoge von fhem funktionieren ohne Probleme. fhem selbst (aktuelle Version) läuft auf einem RasPi unter Debian Trixie.

Viele Grüße

rudolfkoenig

Ich kann das Problem mit einem einfachen fhem.cfg (dummy Test) nicht nachstellen.

phys1

Hallo,

ich habe das Verhalten etwas genauer untersucht:
Nach einem "set <device> <reading>" scheint fhemweb.js mittels FW_queryValue:{ReadingsVal(<device>,<reading>,"")} dessen Wert anzufordern, sofern <reading> noch NICHT im DeviceOverview gelistet ist. Daraufhin wird die Seite neu geladen, was wiederum eine modale TextBox sofort beendet.
Ist <reading> bereits im Device vorhanden, passiert das nicht und die TextBox bleibt sichtbar.

Bei meinem DOIF führe ich den benannten Block, der FW_directNotify / FW_okDialog aufruft, mit "set <DOIF-device> <Blockname>" aus.
fhemweb.js fordert sodann FW_queryValue:{ReadingsVal(<DOIF-device>,<Blockname>,"")} an, da das DOIF kein Reading namens <Blockname> hat. Es wird, wie oben beschrieben, die TextBox sofort beendet. Es funktioniert aber, wenn der Block keinen vom Nutzer spezifizierten Namen hat, d.h. z.B. block_01. Ein solches Reading legt das DOIF automatisch an und die modale TextBox wird angezeigt. Wenn man den Mechanismus mal verstanden hat, lässt sich also leicht ein Workaround finden.

Viele Grüße

Damian

Es stellt sich hier die Frage, warum muss es ein Reading geben. Ich kann mir vorstellen, dass es bei einfachen Modulen, wie z. B. Dummy sinnvoll ist, aber man muss ja mit set nicht immer ein Readings setzen wollen. Die Set-Methode bietet eine Schnittstelle irgendetwas im Modul ausführen zu können und das muss nicht unbedingt das Setzen eines Readings sein. Will ich ein Reading setzen, dann benutze ich setreading.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatDaraufhin wird die Seite neu geladen, was wiederum eine modale TextBox sofort beendet.
Mir ist noch die Reihenfolge unklar: loest das set ein FW_directNotify aus, oder sind beide im gleichen Block?
Waere das zeitliche entkapseln der FW_directNotify eine Loesung?

ZitatEs stellt sich hier die Frage, warum muss es ein Reading geben.
Muss nicht, ist aber oft der Fall.

Damian

#5
Du kannst es bei dir testen:

mit

defmod di_FW DOIF test {::FW_directNotify("#FHEMWEB:WEBHOME","FW_okDialog('bla')","")}
dann

set di_FW test
damit wird der Perl-Code ausgeführt

-> FW_okDialog-Fenster erscheint kurz -> Seite wird von FHEMWEB offenbar neugeladen, da das Reading test in di_FW nicht existiert -> FW_okDialog-Fenster verschwindet

wenn man

setreading di_FW test blabla
setzt, bleibt dagegen FW_okDialog-Fenster stehen, weil es das Reading test gibt




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF