📡 Javascript-Befehl an alle gerade offenen Browser senden, FW_directNotify()

Begonnen von Torxgewinde, 08 Juli 2023, 12:16:57

Vorheriges Thema - Nächstes Thema

Torxgewinde

Will man an die gerade offenen Browserfenster einen Javascript Befehl senden, gelingt dies mit der Funktion "FW_directNotify()".

Hier ein Dummy-device, dass diese Funktion per userReadings ausführt wenn man den wert "hello" setzt. Setzt man den Wert auf "Broadcast: bla" wird in allen offenen Browsern "Broadcast bla" eingeblendet. Man kann natürlich beliebige andere JS Befehle ausführen.

defmod webtest dummy
attr webtest readingList wert
attr webtest setList wert
attr webtest userReadings FHEMWEB_Variablen {\
return "\
\$FW_ME........: $FW_ME\t(URL-Pfad unter dem der FHEMWEB-Server via HTTP erreichbar ist)\
\$FW_dir.......: $FW_dir\t(Das Basisverzeichnis auf dem lokalen Filesystem des FHEMWEB-Servers)\
\$FW_CSRF......: $FW_CSRF\t(Enthält das aktuell gültige CSRF-Token als HTTP URL-Parameter für die aktuelle Verbindung oder bleibt leer)\
\$FW_detail....: $FW_detail\t(Enthält den Definitionsnamen der aktuell erzeugten Detailansicht)\
\$FW_room:.....: $FW_room\t(Enthält den Raumnamen der aktuell erzeugten Raumansicht)\
\$FW_wname.....: $FW_wname\t(Enthält den Definitionsnamen der aktuellen FHEMWEB-Instanz)\
\$FW_cname.....: $FW_cname\t(Enthält den Definitionsnamen der aktuellen Verbindung (Connection-Name))\
\$FW_userAgent.:\t$FW_userAgent\t(Enthält den User-Agent, welcher für den aktuellen Aufruf übermittelt wurde)";;\
},\
FHEMWEB_JS_AN_ALLE_BROWSER:wert.* {\
    #https://wiki.fhem.de/wiki/DevelopmentFHEMWEB-API\
    \
    my $val = ReadingsVal($name, "wert", "???");;\
    \
    #wenn der Wert "hello" ist, dann führe das JS aus, sonst nichts machen\
    return "NOK" if ($val ne "hello");;\
    \
    #iteriere über alle FHEMWEBs\
    map {\
            #Nur ein bestimmter Raum:\
            #FW_directNotify("FILTER=room=Experimente", "#FHEMWEB:$_", "FW_okDialog('Hello world!')", "");;\
            \
            #Alle Räume:\
            FW_directNotify("#FHEMWEB:$_", "FW_okDialog('Hello world!')", "");;\
        } devspec2array("WEB.*");;\
        \
    return "OK";;\
},\
FHEMWEB_Broadcast:wert.* {\
    my $val = ReadingsVal($name, "wert", "???");;\
    \
    #wenn der Wert mit "Broadcast: " beginnt, dann führe das JS aus, sonst raus\
    return "NOK" unless ($val =~ /^Broadcast: /);;\
    \
    map {\
            FW_directNotify("#FHEMWEB:$_", "alert('$val')", "");;\
        } devspec2array("WEB.*");;\
        \
    return "OK";;\
}

GIF Animation dazu:
Du darfst diesen Dateianhang nicht ansehen.