Hauptmenü

FHEM goes Gemini

Begonnen von tgv_boost, 09 Januar 2026, 11:07:35

Vorheriges Thema - Nächstes Thema

ch.eick

#30
Hallo nochmal,

für die, die sich wundern, dass hier jetzt noch Babble oder andes auftaucht.
Damit man etwas besser mit den Resourcen umgeht, denn die KI im RZ schluckt Unmengen an Energie, habe ich mich für ein mehrstufiges Konzept entschieden.
Die einfachen Anfragen sollen direkt lokal erledigt werden und nur wenn es zu komplex wird könnte man die KI noch hinzuziehen. Hier ist noch der Post von pah dazu.

Mein Ansatz sieht momentan so aus:

- Sprach oder Text Eingabe erfolgt über Signal mit den Handys
    Hierzu wird im Signal die Google Spracherkennung aktiviert
      Man öffnet einen Chat und tippt ins Eingabefeld => die Tastatur erscheint
      Über das Rädchen kommt man in die Tastatur Einstellungen
      Weiter unten kommt man zur Spracheingabe ( antippen )
      Dort kann man die Google-Spracheingabe aktivieren oder auch einen anderen Dienst
    Wenn man nun Text eingeben möchte hat man links unter der Tastatur ein Microphon, auf das man zur Spracherkennung einfach tippt.
    Bei Google erscheint ein großes Feld zur Aktivierung des Microphons und bei Samsung ist es direkt das kleine Microphon Symbol, was dann blau wird.

    Ich werde wohl ein altes Smartphone mit Signal für die Spracheingabe in der Wohnung verwenden, das kann man dann genau wie eine Fernbedienung immer schön suchen gehen :-)

- signal-mqtt läuft im Docker Container
- Ein signal-receiver defindet sich im FHEM als MQTT2-Device
- Als ersten Test habe ich da bereits mit Perl Mapping einige direkte FHEM Kommandos umgesetz
- Wird dort nichts gefunden soll es zu Babble weiter gehen
- Mit RiveScript habe ich mich noch nicht befasst, was jedoch auch lokal laufen würde
- Erst ganz zum Schluss kann dann Gemini folgen

Ein Vorteil wäre auch, dass man nicht zuviele Gemini Aufrufe generieren würde, da die meisten Kommandos direkt vorher abgefangen werden.
Zusätzlich ist man so auch noch etwas unabhängiger vom Internet und dessen Dienste.

Der Status ist, wie pah schon so schön geschrieben hat: "Wär schön, das ist aber vorderste Front der Forschung."

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

Gemach, ich muss das erstmal nachstellen, bin gerade am Hacken der BOSE-Boxen.

Demnächst mehr hier in diesem Post.

LG


pah

ch.eick

Zitat von: Prof. Dr. Peter Henning am 15 Januar 2026, 14:22:51Gemach, ich muss das erstmal nachstellen, bin gerade am Hacken der BOSE-Boxen.
Ich dachte Du hättest schon einen Fundus von Definitionen in Deinem Babble :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

Hab ich auch, war aber gerade mit dem BOSE-Zeug sehr beschäftigt.

ZitatMuss man immer Gerät, Ort, Verb, Ziel angeben, auch wenn weniger Angaben eindeutig wären?
Ich habe z.B. nur eine Zirkulationspumpe, die wir für Heißes Wasser in der Küche zum Spülen verwenden.

Es funktioniert: Zirkulation in der Küche anschalten
Eindeutig wäre : Zirkulation an

Muss man an und ein separat als Ziel definieren, oder geht das auch einfacher?

Erste Frage: Nein, das geht einfacher. Ich habe z.B. auch genau eine Zirkulationspumpe. Die bekommt den Babble-Namen "Zirkulation" und taucht dann automatisch in der Babble-Liste auf. Bei mir etwas komplizierter, das FHEM-Device heißt hier Voice.Zirkulation, weil das von dort noch auf einen anderen FHEM-Server weitergeleitet wird. Siehe Screenshot

Zweite Frage: Nein, "an" und "ein" sind synonym.

LG

pah

ch.eick

#34
Du darfst diesen Dateianhang nicht ansehen.

Input: Zirkulation in der Küche anschalten
Ergebnis: Category=3.4.7: Gerät=zirkulation Ort=küche Verb=schalten Ziel=an / ==> set Zirkulation on

Input: Zirkulation Küche einschalten
Ergebnis: Category=3.4.7: Gerät=zirkulation Ort=küche Verb=schalten Ziel=an / ==> set Zirkulation on

Input: Zirkulation anschalten
Ergebnis: undefined

Input: Zirkulation an
Ergebnis: undefined
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

#35
So, ich habe noch ein Goodie.

Im repository steht die Babble-Version 1.42 von 2019.

Ich selbst betreibe die Version 2.3. Die kennt noch eine wesentliche Neuerung, nämlich "generic devices"...

Das heißt konkret: Wenn man ein FHEM-Device hat, das den genericDeviceType=thermometer,thermostat,hygrometer
hat (alle möglichen Werte sind durch komma getrennt) und im babbleRoom=arbeitszimmer ist,
versteht Babble die Befehle
-- wie ist die temperatur im arbeitszimmer (gelesen wird das reading temperature oder measured-temp)
-- wie ist die feuchte im arbeitszimmer (gelesen wird das reading humidity)
-- stelle die temperatur im arbeitszimmer auf xx grad (geschrieben wird das Kommando set <device> desired-temp xx

Auch Rollläden und Fensteröffnungen stelle ich auf diese Weise, ohne irgendetwas in Babble explizit zu definieren. Licht kann ich auch ohne explizite Definition einschalten.

Diese Sache funktioniert sogar mit entfernten FHEM-Servern, wenn auf denen eine Datei 99_BabbleUtils.pm installiert ist. Dann holt sich Babble nämlich auf Wunsch alle generic devices des entfernten Servers, und kann sie fortan bedienen.

Nachteil dieses Features: Noch nicht gut dokumentiert, und noch nicht internationalisiert. Also, genau genommen. ewas "Beta".

Also mein Tipp: Babble erst einmal in der stabilen Version zum Laufen bringen, und dann diese aktualisierte Version testen.

LG

pah

Prof. Dr. Peter Henning

#36
ZitatInput:    Zirkulation Küche einschalten
Tipp: Entferne die Zeile mit der Küche ...

Noch ein Tipp: Will man komplexere Sachen auch ohne Rivescript machen, geht das mit dem Attribut babblePreSubs (Vor-Substitutionen)
Beispiel: Mein Device YYY hat den Babble-Namen "Haus" und kennt den Befehl "set YYY mode donotdisturb", um Störungen der Mittagsruhe auszuschalten.
Es gibt also, siehe Screenshot, einen Babble-Befehl "Haus stören aus", dieser setzt (in diesem Fall sogar an einen externen FHEM-Server) das Kommando ab:
defmod dndoff at +01:00 set YYY mode normal;;set YYY mode donotdisturb;;d.h., der Modus wird nach einer Stunde wieder zurückgesetzt.

Nun will ich nicht sagen müssen "Haus stören aus". Sondern "Bitte nicht stören". Also gibt es im Attribut babblepreSubs einen Eintrag
bitte\snicht\sstören:haus\sstören\sausAblauf also: Der Bediener sagt "Bitte nicht stören" => Substituiert durch "Haus stören aus" => von Babble semantisch analysiert und umgesetzt in das o.a. Kommando.

LG

pah

ch.eick

#37
Zitat von: Prof. Dr. Peter Henning am 15 Januar 2026, 15:27:27
ZitatInput:    Zirkulation Küche einschalten
Tipp: Entferne die Zeile mit der Küche ...
Klappt nicht so wirklich mit allen Permutationen.

Es gab vorhin mal eine Konfiguration, bei der zumindest zwei Varianten gingen, dabei war aber die Reihen folge der Zeilen wichtig.
Du darfst diesen Dateianhang nicht ansehen.
Das Problem dabei ist jedoch, dass man das irgendwie nicht beeinflussen kann.
Selbst mit Save und reload kommen die Zeilen dann wieder anders.
Ich wollte meine Vorabfrage, die ich für einige Kurzbefehle hatte, damit dann auch direkt erledigen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

Zitat von: ch.eick am 15 Januar 2026, 14:28:30Ich dachte Du hättest schon einen Fundus von Definitionen in Deinem Babble
Ja. 58 "named devices", und folgende generic devices. Alles in Allem also deutlich mehr als 100 Geräte und Aktionen, plus alles das, was die rivescript-datei enthält.
generic_192_168_0_90
AZ.All.Fen AZ.All.Roll AZ.HMTh AZ.Strip BI.All.Roll BI.HMHz BI.Roll.F BI.Roll.T BI.WS BK.OWM BZ.HMHz BZ.Roll BZ.WS EB.HMHz GB.HMHz GB.Roll GZ.All.Roll GZ.Beleuchtung GZ.HMTh JZ.HMHz JZ.Roll JZ.WS K.Roll KB.All.Roll SZ.All.Roll SZ.Clima SZ.HMTh SZ.J SZ.P SZ.Roll.0 SZ.Roll.1 SZ.Roll.2 SZ.Roll.3 TH.Strip VK.D VK.OWM WK.OWM WZ.AC WZ.All.Roll WZ.Clima WZ.OWM WZ.Roll.0 WZ.Roll.1 WZ.Roll.2 WZ.Roll.3 ZK.Beleuchtung ZK.HMTh

generic_local
Alexa.Abwesenheit Alexa.Blind.A Alexa.Blind.F Alexa.Blind.T Alexa.House Alexa.Maindoor Alexa.Nichtstoeren Alexa.Party Alexa.Spracheingabe Alexa.Tab.M Alexa.Tab.OG Alexa.Tab1.EG Alexa.Tab2.EG Alexa.Yarddoor SZ.AC Voice.Beleuchtung Voice.Beleuchtung.Esstisch Voice.Beleuchtung.Fernsehen Voice.Beleuchtung.Schlummern Voice.Beleuchtung.Sitzgruppe Voice.Bewaesserung Voice.Gong Voice.Harmony Voice.Harmony.BluRay Voice.Harmony.Fernseher Voice.Harmony.Musik Voice.Harmony.Programm Voice.Harmony.Radio Voice.Harmony.Stille Voice.Harmony.Volume Voice.Weckzeit Voice.Zirkulation WZ.AC

Gerade habe ich abgesetzt "spiele musik im arbeitszimmer von alison balsom"...

LG

pah

ch.eick

#39
Hallo pah,
da ich meine Unstimmigkeiten mit der Konfiguration von Babble nicht lösen konnte wollte ich direkt mal die neuere Version testen, was jedoch im FHEM docker Container nicht klappt, da dort wohl noch etwas fehlt.
Can't locate Text/Levenshtein.pm in @INC (you may need to install the Text::Levenshtein module) (@INC entries checked: ./FHEM/lib ./lib fhem.p/lib fhem.p/FHEM/lib ./FHEM ./ /usr/local/FHEM/share/fhem/FHEM/lib . /usr/src/app/core/lib/perl5/5.38.5/aarch64-linux-gnu /usr/src/app/core/lib/perl5/5.38.5 /usr/src/app/core/lib/perl5/aarch64-linux-gnu /usr/src/app/core/lib/perl5 /usr/src/app/3rdparty/lib/perl5/5.38.5/aarch64-linux-gnu /usr/src/app/3rdparty/lib/perl5/5.38.5 /usr/src/app/3rdparty/lib/perl5/aarch64-linux-gnu /usr/src/app/3rdparty/lib/perl5 /usr/local/lib/perl5/site_perl/5.38.5/aarch64-linux-gnu /usr/local/lib/perl5/site_perl/5.38.5 /usr/local/lib/perl5/vendor_perl/5.38.5/aarch64-linux-gnu /usr/local/lib/perl5/vendor_perl/5.38.5 /usr/local/lib/perl5/5.38.5/aarch64-linux-gnu /usr/local/lib/perl5/5.38.5) at ./FHEM/95_Babble.pm line 48.
BEGIN failed--compilation aborted at ./FHEM/95_Babble.pm line 48.

Im Wiki scheinst Du bereits Funktionen aus der neuen Version dokumentiert zu haben.

Das Java File habe ich nach ./www/Babble/ gelegt.

Ich fange nun nochmals mit der alten Version an, jedoch hat dort das "babblePreSubs (Vor-Substitutionen)" bisher noch nicht funktioniert.
EDIT:
  im babblePreSubs muss anscheinend alles klein geschrieben werden, jetzt wird es wohl richtig umgesetzt.
  Ich denke dass sollte im MOdul vor der Verwendung mit lc() automatisch umgesetzt werden, denn da werden sicher auch andere drüber stolpern.

So sieht die Definition unter Babble Devices momentan aus
babblePreSubs zirkulation\san:zirkulation\sküche\seinschalten
                      
Zirkulation   Küche schalten an    set Zirkulation on
              Küche leer     leer  set Zirkulation on
              leer  leer     leer  set Zirkulation on
             

# Das teste ich in der FHEM Kommando Zeile
{ print Babble_DoIt("Babble","Zirkulation","testit",0)."\n";;
  print Babble_DoIt("Babble","Zirkulation an","testit",0)."\n";;
  print Babble_DoIt("Babble","Zirkulation Küche an","testit",0)."\n";;
  print Babble_DoIt("Babble","Zirkulation Küche anschalten","testit",0)."\n" }

# Und das steht dann im Log
[Babble_Normalize] Input:  Zirkulation
                       Ergebnis: Category=X.X.X: Gerät=zirkulation Ort=none Verb=none Ziel=none / none==> set Zirkulation on

[Babble_Normalize] Input:  Zirkulation an
                       Ergebnis: Category=3.4.7: Gerät=zirkulation Ort=küche Verb=schalten Ziel=an / ==> set Zirkulation on

[Babble_Normalize] Input:  Zirkulation Küche an
                       Ergebnis: Category=3.4.7: Gerät=zirkulation Ort=küche Verb=none Ziel=none / ==> set Zirkulation on

[Babble_Normalize] Input:  Zirkulation Küche anschalten
                       Ergebnis: Category=3.4.7: Gerät=zirkulation Ort=küche Verb=schalten Ziel=an / ==> set Zirkulation on
Du darfst diesen Dateianhang nicht ansehen.
Bei der Eingabe unter Babble Devices läuft es echt komisch. Nach einem Sichern und anschließendem Browser Reload kommen die Eingetragenen Zeilen durcheinander.
Manchmal erscheinen zusätzliche neue, oder es fehlen welche, oder eine neue Zeile hat wieder einen vorherigen Wert.

Zusammenfassend kann man mit Babble bereits sehr viele Varianten bei der Kommandoeingabe durch gesprochenes Wort auflösen. Das verringert dann später die Anzahl der Gemini Aufrufe, was in diesem Thread ja das eigentliche Thema ist ;-)

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

Kann es sein, dass Du das JavaScript-File nicht installiert hast? Das sorgt für die richtige Reihenfolge der Buttons.

Das Levenshtein-Modul enthält einen Algorithmus, der Textabstände bestimmt.

cpan Levenshtein

LG

pah

passibe

#42
Nix cpan, sondern apt und libtext-levenshtein-perl und zwar wie hier beschrieben als Modifikation des Image: https://github.com/fhem/fhem-docker?tab=readme-ov-file#since-version-4

Prof. Dr. Peter Henning


ch.eick

Zitat von: Prof. Dr. Peter Henning am 17 Januar 2026, 17:57:34Kann es sein, dass Du das JavaScript-File nicht installiert hast? Das sorgt für die richtige Reihenfolge der Buttons.
Hmm, wie macht man das?
Ich habe es nur unter ./www/Babble/ abgelegt :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick