(WIP) FHEMWEB interaktiv (speziell mit RHASSPY)

Begonnen von Beta-User, 03 April 2026, 11:24:46

Vorheriges Thema - Nächstes Thema

Beta-User

(Fast) OT noch eine Frage zu der derzeit in der Entwicklung befindlichen Alternative zu RHASSPY, Gemini:
Wie klappt das da mit "speziellen" Funktionalitäten?

"Damals" habe ich in RHASSPY irgendwann "tweaks" und "specials" eingeführt, weil über "normale" Befehle keine (wirklich) zufriedenstellende Ergebnisse zu erzielen waren.
Beispiele (ich hoffe, das kann man halbwegs interpretieren, um was es bei diesen "specials" hier jeweils geht):
Jalousie_Links           venetianBlind:setter=positionSlat stopCommand="set Jalousie_Links positionSlat [Jalousie_Links:positionSlat]"
Jalousie_WZ              venetianBlind:device=ZWave_SWITCH_MULTILEVEL_8.02 stopCommand="set ZWave_SWITCH_MULTILEVEL_8.02 dim [ZWave_SWITCH_MULTILEVEL_8.02:dim]"
LS_Wohnzimmer            scenes: Rollladen_geschlossen=none Rollladen_offen=none Test=none Kino="Heimkino starten"
Licht_Stehlampe_links_alt     colorTempMap:0="command Weiss" 85="command Weiss" 100="command Weiss"
Raumfuehler_Wohnzimmer     priority:inRoom=temperature
Thermostat_EssZi_Climate     priority:inRoom=desired-temp,temperature,humidity
Yamaha_Main              scenes:scene1="Musik hören" scene2="Film ansehen" scene3=none scene4="vorderen Eingang auswählen"
                                     priority: inRoom=volume outsideRoom=volume,scene
                                     confirm: SetOnOff="wirklich $target $Value schalten?" SetScene
Yamaha_Zone2             priority:inRoom=volume
 
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

schwatter

#16
Nabend,

ok, es ist ganz einfach wenn die richtige Repo benutzt wird  ;D Danke für den Link.

root@ubuntufhem:/opt# sudo mkdir -p /opt/piper
root@ubuntufhem:/opt# sudo chown fhem:dialout /opt/piper
root@ubuntufhem:/opt# cd /opt/piper
root@ubuntufhem:/opt/piper# sudo -u fhem python3 -m venv venv
root@ubuntufhem:/opt/piper# sudo -u fhem ./venv/bin/pip install https://github.com/OHF-Voice/piper1-gpl/releases/download/v1.4.2/piper_tts-1.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Collecting piper-tts==1.4.2
  Downloading https://github.com/OHF-Voice/piper1-gpl/releases/download/v1.4.2/piper_tts-1.4.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (13.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8/13.8 MB 10.2 MB/s eta 0:00:00
***Viele Packte die instalierte wurden***
root@ubuntufhem:/opt/piper# sudo ln -s /opt/piper/venv/bin/piper /usr/local/bin/piper
root@ubuntufhem:/opt/piper# piper --version
usage: piper [-h] -m MODEL [-c CONFIG] [-i INPUT_FILE] [-f OUTPUT_FILE] [-d OUTPUT_DIR]
             [--output-dir-naming {timestamp,text}] [--output-raw] [-s SPEAKER] [--length-scale LENGTH_SCALE]
             [--noise-scale NOISE_SCALE] [--noise-w-scale NOISE_W_SCALE] [--cuda]
             [--sentence-silence SENTENCE_SILENCE] [--volume VOLUME] [--no-normalize] [--data-dir DATA_DIR] [--debug]
piper: error: the following arguments are required: -m/--model
root@ubuntufhem:/opt/piper# sudo -u fhem piper --model /opt/fhem/piper_models/de_DE-thorsten-medium.onnx --output_file /opt/fhem/www/audio/voice.wav <<< "Version eins Punkt vier Punkt zwei ist nun aktiv."
root@ubuntufhem:/opt/piper#


Zitat von: Beta-User am 15 April 2026, 07:36:35
Zitat von: schwatter am 14 April 2026, 21:52:10Bei dem JS im contrib verfolge ich mehr oder weniger auch den Weg, das es fast nichts kennen muss. Außer Wakeword und wo das Readings STT ist. Das JS für den Atom Echo muss aber irgendwo die Info herbekommen, das es das Browsermikro freischalten soll.
Mein gedanklicher Angang wäre, das auf zwei alternativen anderen Wegen zu lösen:
- Wenn man eine FULLY-Instanz hat, "kennt" man über das mit der deviceId in f18.js die aktuelle Verbindung (FW_ID), und kann darüber das Mikro aufmachen. Im Prinzip ist das der Weg, den momentan auch RHASSPY (für Dialoge und Rückfragen) verwendet, nur dass das dann direkt über die FHEMWEB-Instanz läuft und nicht über den Umweg "welche FHEMWEB-Instanz gehört derzeit zu einem bestimmten (fully-) Gerät".
- Der andere (noch nicht getestete) Weg ginge über die allowed-Info. Danach könnte allerdings ein allowed-User eben nur eine Verbindung (gleichzeitig) nutzen.
Zugegeben: für die letzte Variante braucht man ähnlich viel Hintergrundinfo, wie wenn man das direkt in den Code schreibt, auf welches wakeword zu reagieren ist...

Aber was ist wenn der User mal nicht Fully nutzt?

Und zu Gemini. Bis jetzt habe ich es nur als Backup für Fragen benutzt, die nichts mit Fhem zu tun haben.
Der @ahlermi hatte mir seinem systemPrompt geschickt.
Beispiel:
Du bist ein KI-Assistent und Teil meiner FHEM Haussteuerung. Deine Aufgaben sind:

## 1. Geräte steuern und Rückmeldung geben
- Für die Geräteidentifizierung hat der Alias priorität, danach guck über dem Comment.
- Führe Steuerbefehle für Geräte aus, wenn du dazu aufgefordert wirst.
- Gib immer eine kurze Bestätigung, was geschaltet wurde (maximal 1 Satz).
- Beispiele:
  - "Rolllade Wohnzimmer wurde auf 0% geschlossen."
  - "Heizung Bad auf 22°C gestellt."

### Gerätespezifische Regeln:
- **Rollladen:** Wenn das Gerät als Rolllade erkannt wird und den set-Parameter "pct" hat:
  - 0 = ganz schließen, 100 = ganz öffnen.
- **Heizung:** Wenn das Gerät eine Heizung ist und "desiredTemperature" unterstützt, setze die Temperatur entsprechend.
- **Andere Befehle:** Bei Befehlen wie `motion_detection`:
  - Syntax: `set <GERÄT> motion_detection true` (ohne Doppelpunkt).
Das werde ich jetzt nach und nach testen.

Gruß schwatter

Beta-User

Zitat von: schwatter am 15 April 2026, 19:10:35ok, es ist ganz einfach wenn die richtige Repo benutzt wird  ;D Danke für den Link.
Danke zurück für die bereinigte Fassung der Anleitung!
(Irgendwann sollten wir ggf. mal hergehen, und das ganze für "Nachbauer" strukturiert (im Wiki) zusammenfassen).

Zitat von: schwatter am 15 April 2026, 19:10:35Aber was ist wenn der User mal nicht Fully nutzt?
Na ja, es gibt für mich geanklich zwei völlig unterschiedliche Wege, die nicht wirklich was miteinander zu tun haben:
- Entweder es kommt fully/FULLY zum Einsatz. Dann ist es (eher*) ein gerätebezogener Kontext
- ODER die Sache läuft über FHEMWEB+allowed. Das wäre User-bezogen, so dass das ganze weder von einem bestimmten Browser noch von einem bestimmten Endgerät abhängt.

*Als "Krone" stelle ich mir eine Mischung von beidem vor. z.B. ein wakeword-ESP, der zwei unterschiedliche wakewords erkennt, eines für "rr_Frau", eines für "rr_Mann". Das wakeword-notify könnte dann via FULLY auf dem Endgerät entweder "fhem:8090" (user:"rr_Frau") oder "fhem:8091" (für den user "rr_Mann") laden und das Mikro öffnen. Das ganze dann noch mit passender Spracheinstellung, wenn rr_Frau z.B. gerne spanisch reden möchte?
Das neue Attribut sttProcessor für FULLY könnte man dann aufbohren, so dass für rr_Mann eine bestimmte RHASSPY-Instanz angesprochen wird, und für rr_Frau eine andere (oder Babble...)?

Zitat von: schwatter am 15 April 2026, 19:10:35@ahlermi hatte mir seinem systemPrompt geschickt.
Vermutlich sollte ich ihn mal per pm anpingen. Nach meinem Eindruck hat das ganze Potential, und es wäre schade, wenn man den Aufwand treibt, das Rad an manchen Stellen neu zu erfinden...
Einfaches Beispiel: Das mit "comment" finde ich sehr schwierig, weil ein allgemeines Attribut "mißbraucht" wird. Da ist es m.E. mittelfristig einfacher, spezielle Attribute einzuführen.
RHASSPY enthält ("geklaut" aus MQTT_GENERIC_BRIDGE) eine Grundstruktur, die man dafür m.E. mit ziemlich wenig Aufwand "recyclen" könnte.
Btw: es ist gepackaged, man muss also eigentlich nur an einigen wenigen Stellen (würde ohne commandref auf unter 20 Zeilen tippen!) was anpassen, um z.B: "gemini2" daraus zu machen ;) .
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