Hauptmenü

FHEM goes Gemini

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

Vorheriges Thema - Nächstes Thema

tgv_boost

Servus Gemeinde,
mein erster Versuch Gemini zur intelligenten Sprachsteuerung zu verwenden, hat heute Früchte getragen. Testweise habe ich 3 Leuchten, 3 Jalousien und eine Kaffeemaschine eingebunden.
Dinge wie "es ist etwas dunkel im Wohnzimmer" oder "mir wäre jetzt nach einem Espresso" münden schon mal in den richtigen Aktionen. Auch beliebig formulierte Varianten bis hin zu "ich würde gerne im Arbeitszimmer lesen" gibt je nach Tageszeit die richtigen Kommandos.
Wirklich beeindruckend, aber da ist noch viel zu tun. Vielleicht gibts ja schon Erfahrungen damit im Forum.
Gruß

ch.eick

Hallo,
das finde ich auch spannend, kannst Du mal die Testanbindung vorstellen?
Was wird alles benötigt?
Wie kommt die Spracheingabe ins Fhem?

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

tgv_boost

wie gesagt, bin ganz am Anfang und noch weit weg von Fragen wie>
-wie kommen die Sprachkomandos in verschiedenen Räumen in Gemini, derzeit nur über mein Iphone und die Gemini App oder im Textmode im Browser
-wo werden Rückmeldungen ausgegeben
-habe ich die richtige Struktur in meiner Definition der Geräte oder rächt sich da der Wildwuchs über die Jahre (Nomenklatur etc)
etc. etc.
Aber ist schon lustig, wenn ein "es ist ziemlich dunkel im Wohnzimmer" eine Entscheidung triggert, ob es entsprechend der Tageszeit und dem Status der Aussenrollos Sinn macht entweder erstmal die Rollos hochzufahren oder/und das Licht noch anzumachen ist.
FHEM Anbindung derzeit über Telnet, irgendwie kann man auch eine Art Inventory der definierten Geräte machen. Wie gesagt, gaanz am Anfang
Zur konkreten Umsetzung frag am besten Gemini, da wird Dir geholfen. Ist schon beeindruckend, wirklich.
Mein Anfangs Plot für Gemini war ganz einfach: kann man dich eigentlich mit Sprachsteuerung auch ansprechen/aufwecken, so Alexa like, wobei Alexa für FHEM schon läuft?
Darauf hin startete ein Dialog zur Umsetzung "Gemini für FHEM"
Wobei ich mir noch gar nicht sicher bin ob ich das will, mal sehen

ch.eick

Hast du denn schon ein Device zur Kopplung im FHEM?
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

CoolTux

Der Thread kommt mir seltsam vor.

Entweder Du hast eine Umsetzung und magst uns dran teilhaben oder Du hast nichts.

Zusammen kann man Deine vorhandene Lösung ja weiter ausbauen. Viele Köpfe denken besser.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

binford6000

Zitat von: CoolTux am 10 Januar 2026, 11:11:44Der Thread kommt mir seltsam vor.
Das ist mMn. noch untertrieben. 

#Clickbait
#VielLärmumNichts

Und dann noch in Anfängerfragen gepostet um maximale Reichweite zu erlangen.

ABER: @TE Ich lasse mich gerne eines Besseren belehren. Also dann mal Butter bei die Fische...
VG Sebastian

tgv_boost

kann der Moderator dieses Thema bitten schließen oder löschen? Auf diese Art der Unterhaltung hab ich keine Lust.

@CoolTux,
nein, ich habe kein Konzept ich bin im Versuchsmodus.
Es handelt sich um eine mit Gemini entwickelte reduzierte Grundfunktion als Idee, die ich gerne hier im Forum teile. Ich kann Dir, wenn Du möchtest, den 3 Stündigen Dialog mit Gemini posten. Ich denke, wir dürfen uns bei der Art wie wir Konzepte entwickeln, für die Zukunft neu ausrichten. Ich finds spannend. Mach einen Versuch und gehe die ersten Schritte für Dich selbst, komm bitte zurück und schildere Deine Erfahrungen.

passibe

#7
Ich glaube CoolTux Frage bezog sich vor allem auf diesen Punkt:
Zitat von: tgv_boost am 10 Januar 2026, 10:09:01FHEM Anbindung derzeit über Telnet
Da bist du reichlich unkonkret geblieben, obwohl das typischerweise der interessanteste Punkt sein dürfte. Also wie kommen die Daten aus dem LLM (das viele von uns nur als Weboberfläche im Browser kennen) in Telnet bzw. FHEM.

Finde die Nachfrage deshalb durchaus berechtigt.

Das ist ja im Zweifel auch in wenigen Sätzen erklärt, jedenfalls wäre mehr schön als "joa Telnet halt". Sonst erschließt sich auch mir der Sinn von diesem Post nicht. Du hast das alles ja auch erst kürzlich eingerichtet und dürftest dich noch gut daran erinnern, sodass du das ja einfach kurz zusammenfassen kannst. Falls nicht, kannst du Gemini doch einfach prompten, dir das fürs Forum zusammenzufassen ;D

tgv_boost

ClickBait und VielLärmUmNichts nehme ich persönlich. Eigentlich war ich Binford Fan, aber scheinbar ist da ein ewig gestriger am Werk und die Binford Ära ist ja auch schon lange vorbei. Und übrigens, ich habe hier niemanden von nichts zu überzeugen. Wenn ihr weitermachen wollt, wendet Euch am Gemini. Hier mal ein Baustein der Kommunikation auf Raspberry Seite:

import google.generativeai as genai
import socket
import time

# --- KONFIGURATION ---
GEMINI_API_KEY = "DEIN_API_KEY"
FHEM_IP = "127.0.0.1"
FHEM_PORT = 7072

genai.configure(api_key=GEMINI_API_KEY)

# Automatische Modellwahl
try:
    available_models = [m.name for m in genai.list_models() if 'generateContent' in m.supported_generation_methods]
    selected_model_name = next((m for m in available_models if "gemini-2.5-flash" in m), available_models[0])
    model = genai.GenerativeModel(selected_model_name)
except Exception as e:
    print(f"Konnte Modelle nicht laden: {e}")
    exit()

def send_fhem_command(cmd):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(2)
        s.connect((FHEM_IP, FHEM_PORT))
       
        # Den Befehl senden
        message = f"{cmd}\nquit\n"
        s.sendall(message.encode('utf-8'))
       
        time.sleep(0.1) # Jetzt funktioniert sleep
        s.close()
        print(f"Befehl erfolgreich an FHEM übertragen: {cmd}")
       
    except Exception as e:
        print(f"Verbindung zu FHEM (127.0.0.1:7072) fehlgeschlagen: {e}")

def ask_gemini(user_text):
    # HIER ist das Gedächtnis der KI
    system_instruction = """
    Du bist die Smart-Home-KI für FHEM. Antworte NUR mit dem FHEM-Befehl.
   
    DEINE GERÄTE-LISTE:
    - Das Hauptlicht heißt: Wohnzimmer
   
    BEISPIELE:
    'Es ist dunkel im Wohnzimmer' -> set Wohnzimmer on
    'Licht aus im Wohnzimmer' -> set Wohnzimmer off
    """
    prompt = f"{system_instruction}\n\nUser sagt: {user_text}"
    response = model.generate_content(prompt)
    return response.text.strip()

if __name__ == "__main__":
    while True:
        befehl = input("Was soll ich tun? (oder 'exit'): ")
        if befehl.lower() == 'exit': break
       
        fhem_cmd = ask_gemini(befehl)
        print(f"KI schlägt vor: {fhem_cmd}")
       
        # Nur senden, wenn die KI einen set-Befehl generiert hat
        if "set" in fhem_cmd:
            send_fhem_command(fhem_cmd)

und bei FHEm ists bis jetzt relativ trivial:
define allowedTelnet allowed
define telnetPort telnet 7072 global

CoolTux

Das ist doch schon mal was.

Umsetzung in Python mit Hilfe der Gemini SDK. Damit kann man doch arbeiten bei Interesse.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ch.eick

#10
Soo, jetzt habe ich auch gestartet.
Ich mag es gerne, wenn im FHEM nicht soviel extern, also z.B. in Python aufgerufen wird.

Den Key habe ich schon mal im Store abgelegt
Zuerst den Key holen: https://aistudio.google.com/api-keys

Dann im FHEM ablegen
{KeyValue("store","Gemini_AI_Key","DEIN_API_KEY_HIER")}

Das HTTPMOD sieht dann zum Testen schon mal so aus
defmod Gemini_AI HTTPMOD none
attr Gemini_AI userattr FHEM_Instructions
attr Gemini_AI FHEM_Instructions Du bist die Smart-Home-KI für FHEM. Antworte NUR mit dem FHEM-Befehl. Mehrere Befehle trenne mit ;;;; .Deine GERÄTE-LISTE: - Das Hauptlicht heißt: Küche BEISPIELE:'Es ist dunkel in der Küche' -> set MQTT2_zigbee_Ku_Licht ON     'Licht aus in der Küche' -> set MQTT2_zigbee_Ku_Licht OFF
attr Gemini_AI get02AutoNumLen 3
attr Gemini_AI get02ExtractAllJSON 1
attr Gemini_AI get02Header01 Content-Type: application/json
attr Gemini_AI get02Name 05_ListModels
attr Gemini_AI get02URL https://generativelanguage.googleapis.com/v1/models?key=%%KEY%%
attr Gemini_AI group Gemini
attr Gemini_AI reading01DeleteIfUnmatched 1
attr Gemini_AI reading01JSON error_message
attr Gemini_AI reading01Name error_message
attr Gemini_AI reading02DeleteIfUnmatched 1
attr Gemini_AI reading02JSON error_status
attr Gemini_AI reading02Name error_status
attr Gemini_AI reading03DeleteIfUnmatched 1
attr Gemini_AI reading03JSON error_code
attr Gemini_AI reading03Name error_code
attr Gemini_AI reading05DeleteIfUnmatched 1
attr Gemini_AI reading05JSON candidates_01_content_parts
attr Gemini_AI reading05Name response
attr Gemini_AI replacement01Mode expression
attr Gemini_AI replacement01Regex %%KEY%%
attr Gemini_AI replacement01Value {KeyValue("read","Gemini_AI_Key")}
attr Gemini_AI replacement05Mode expression
attr Gemini_AI replacement05Regex %%FHEM_Instructions%%
attr Gemini_AI replacement05Value {AttrVal($name,"FHEM_Instructions","ERROR")}
attr Gemini_AI room Neu
attr Gemini_AI set01Data {"contents": [{"parts":[{"text": "$val"}]}]}
attr Gemini_AI set01ExtractAllJSON 0
attr Gemini_AI set01Header01 Content-Type: application/json
attr Gemini_AI set01Header02 x-goog-api-key: %%KEY%%
attr Gemini_AI set01Method POST
attr Gemini_AI set01Name 01_ask
attr Gemini_AI set01ParseResponse 1
attr Gemini_AI set01TextArg 1
attr Gemini_AI set01URL https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent
attr Gemini_AI set05Data {"contents": [{"role": "user", "parts": [{"text": "INSTRUKTION: %%FHEM_Instructions%% NUTZERFRAGE: $val"}]}]}
attr Gemini_AI set05ExtractAllJSON 0
attr Gemini_AI set05Header01 Content-Type: application/json
attr Gemini_AI set05Header02 x-goog-api-key: %%KEY%%
attr Gemini_AI set05Method POST
attr Gemini_AI set05Name 02_FHEM_Instructions
attr Gemini_AI set05ParseResponse 1
attr Gemini_AI set05TextArg 1
attr Gemini_AI set05URL https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent
attr Gemini_AI showBody 1
attr Gemini_AI showError 0
attr Gemini_AI timeout 15
attr Gemini_AI verbose 0

Leider ist das kostenlose Model limitiert auf 20 Aufrufe pro Tag, da wird es sicher eng, wenn man es für's SmartHome nutzen möchte.

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

rabehd

Danke an Christian und CoolTux fürs teilen.
(Wir sollten den Ersteller etwas mehr loben, dann ist er vielleicht zutraulicher  ;) )

20 Aufrufe pro Tag sind etwas knapp, wenn man die gesamte Sprachsteuerung darüber macht.
Praktikabel ist das wenn es die bisherigen Geräte (Alexa) ohne große Umstände nutzt. Braucht man das https://www.amazon.in/CazyUndee-Corp-Gemini/dp/B0FJ2VYP4F?
Handy z.B. wären mir da zu umständlich.
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Zitat von: tgv_boost am 10 Januar 2026, 13:06:23Hier mal ein Baustein der Kommunikation auf Raspberry Seite
Super, danke dir!

erdnar

Zitat von: rabehd am 10 Januar 2026, 15:32:3620 Aufrufe pro Tag sind etwas knapp, wenn man die gesamte Sprachsteuerung darüber macht.
Gemini meint: Das Limit des kostenlosen Keys liegt bei Gemini (je nach Modell) bei etwa 15 Anfragen pro Minute oder 1.500 pro Tag – davon bist du weit entfernt.

rabehd

Zitat von: erdnar am 10 Januar 2026, 16:59:25Gemini meint: Das Limit des kostenlosen Keys liegt bei Gemini (je nach Modell) bei etwa 15 Anfragen pro Minute oder 1.500 pro Tag – davon bist du weit entfernt.

Ich habe mich bezogen auf:
Zitat von: ch.eick am 10 Januar 2026, 14:30:33Leider ist das kostenlose Model limitiert auf 20 Aufrufe pro Tag, da wird es sicher eng, wenn man es für's SmartHome nutzen möchte.

Auch funktionierende Lösungen kann man hinterfragen.