[Voicecontrol] Button für Fhemweb

Begonnen von schwatter, 14 März 2026, 17:25:25

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: schwatter am 03 April 2026, 18:46:05das voicecontrol.js liegt jetzt im contrib. Das ist die Version für PushToTalk oder kurz AlwaysOn.
Thx!

Zitat von: schwatter am 03 April 2026, 18:46:05Mh, anpassen muss man da eigentlich nichts?
Sorry, falsche Referenz, geht um "FW_root". Das ist nicht zwangsläufig in jeder Installation "/fhem".
Habe das jetzt in der modifizierten Fassung so drin:
FW_cmd(FW_root+"?cmd=setreading TYPE=FHEMWEB:FILTER=FW_ID="+$("body").attr("fw_id")+
                        " STT "+encodeURIComponent(finalCommand)+"&XHR=1");

Damit landet die STT-Info in der betreffenden (temporären) FHEMWEB-Instanz. Hat den Nachteil, dass es nur solange "lebt", wie diese Instanz eben existiert, aber man kann dann das notify (bzw. künftig die NotifyFn() in RHASSPY&Co.) direkt darauf ansetzen und muss nicht erst den FW_ID-Teil rausoperieren (was zugegebenermaßen auch kein großer Aufwand ist).
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

ZitatHabe nochmal etwas rumexperimentiert mit "interimResults".
Habe es uebernommen.
Und dabei etwas modernere JS Sprachelemente genutzt (implementiert seit 10+ Jahren in den meisten Browsern), wenn jemand noch ein iPad 1 oder Internet Explorer verwendet, wird damit vmtl. keine Freude haben.

ZitatDamit landet die STT-Info in der betreffenden (temporären) FHEMWEB-Instanz.
Habe die Idee leicht angepasst uebernommen, und eine mini f18_speak Funktion eingebaut.
Damit ist Folgendes moeglich:
defmod sn notify WEB.*STT:.* { $EVENT=~s/STT: //;; FW_AsyncOutput($defs{$NAME},'',qq/["#FHEMWEB:","f18_speak('Got $EVENT')",""]/)}
Voraussetzung ist z.Bsp. mit Chrome @ Android die installierte und aktivierte Sprachsynthese App von Google.

Man kann mit der obigen Methode auch direkt Nachrichten schicken, allerdings werden sie nur dann vorgelesen, wenn Chrome sichtbar ist.

schwatter

Hallo Rudi

danke. Ich habe ein paar Fragen

1. Beta_User und Rudi
Beta-User sagt: "FW_root". Das ist nicht zwangsläufig in jeder Installation "/fhem".
Wie ist das gemeint. Es ist ja hier dokumentiert:
https://wiki.fhem.de/wiki/DevelopmentFHEMWEB-API

2. Kann man Fhemweb direkt ein Inform rauskitzeln, das ein Device betrifft, was nicht im selben Raum ist,
oder wenn man sich nicht gerade in der Deviceübersicht befindet. Was dann funktioniert, wie eine
Websocketverbindung im Hintergrund. Nach meinem Verständnis kann ich über Fhemweb nur Devices auslesen,
die Direkt im sichtbaren Bereich sind.

3.
Mir ist beim anschauen per F12 Konsole aufgefallen, das Werte von Readings immer gedoppelt sind.
Warum ist das so? Beispiel:
13:10:13.353 Rcvd: ["MQTT2_valetudo_UrbanBrownKoala-signal","-69","-69"]
fhemweb.js:613 13:10:13.354 Rcvd: ["MQTT2_valetudo_UrbanBrownKoala-signal-ts","2026-04-04 13:10:13","2026-04-04 13:10:13"]

Gruß schwatter

rudolfkoenig

ZitatBeta-User sagt: "FW_root". Das ist nicht zwangsläufig in jeder Installation "/fhem".
Wie ist das gemeint.
So wie er das sagt :)
FW_root ist auf der JavaScript Seite der Wert des FHEMWEB Attributes webname.

ZitatNach meinem Verständnis kann ich über Fhemweb nur Devices auslesen,
die Direkt im sichtbaren Bereich sind.
Auslesen kannst Du jederzeit z.Bsp. mit jsonlist2, nur eine Benachrichtigung kriegst Du nicht.
Man kann mit einer inform=XXX Nachricht eine andere Benachrichtigung bestellen, was die Aktuelle ersetzt.

ZitatMir ist beim anschauen per F12 Konsole aufgefallen, das Werte von Readings immer gedoppelt sind.
Die erste Zeile ist Wert, die Zweite Zeitstempel, historisch gewachsen.
Parameter 2 und 3 im Array sind fuer readingsUpdates gleich, in anderen Faellen nicht.

schwatter

Zu 1.
Oha, ich habe das falsch interpretiert. Ich dachte ich solle fw_root nicht nehmen. Es war anderherum gemeint,
Asche auf mein Haupt  ::)

Zu 2.
Anders gefragt, es gibt ja in fhemweb.js die FW_longpoll(). Die hat diverse Filter, die mich meiner Meinung nach
daran hindern, direkt inform=xxx zu nutzen, von Devices welche nicht im Raum oder in der Deviceübersicht vorhanden
sind.

Ich nutze dazu momentan:
const protocol = location.protocol === "https:" ? "wss:" : "ws:";
const combinedFilter = `(${DEVICE}|global)`;
jamesSocket = new WebSocket(`${protocol}//${FHEM_IP}/fhem?XHR=1&inform=type=status;filter=${combinedFilter}`);

Wie findest du es, wenn man mit einem geladenen JS in Fhemweb direkt an der Stelle per inform=xxx abonieren könnte?

Gruß schwatter