Hauptmenü

FHEM goes Gemini

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

Vorheriges Thema - Nächstes Thema

ch.eick

#15
Zitat von: rabehd am 10 Januar 2026, 17:01:40
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.

In der http Rückmeldung steht das Limit von 20 auch drin.

Welche URL und welches Model verwendet ihr?


Hier mal eine Rückmeldung vom Limit
{
  "error": {
    "code": 429,
    "message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. \n* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 20, model: gemini-2.5-flash\nPlease retry in 38.035617409s.",
    "status": "RESOURCE_EXHAUSTED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Learn more about Gemini API quotas",
            "url": "https://ai.google.dev/gemini-api/docs/rate-limits"
          }
        ]
      },
      {
        "@type": "type.googleapis.com/google.rpc.QuotaFailure",
        "violations": [
          {
            "quotaMetric": "generativelanguage.googleapis.com/generate_content_free_tier_requests",
            "quotaId": "GenerateRequestsPerDayPerProjectPerModel-FreeTier",
            "quotaDimensions": {
              "location": "global",
              "model": "gemini-2.5-flash"
            },
            "quotaValue": "20"
          }
        ]
      },
      {
        "@type": "type.googleapis.com/google.rpc.RetryInfo",
        "retryDelay": "38s"
      }
    ]
  }
}
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

#16
So, für heute ist dann jetzt schluss.

Ich habe hier nochmal ein Update vom Device gemacht.

Es gibt nun
- set 10_ask
    Für normale Anfragen

- set 10_FHEM_instruction
    Hier wird vorher mit Anweisungen aus dem userattr FHEM_Instructions angelernt.
    Dann kann man eine Anfrage mit "set 10_FHEM_instruction Mach mal in der Küche licht" einen Aufruf machen.

Ich habe gerade online noch einen Test gemacht und das Ergebnis finde ich recht gut.
Der Vorteil ist halt, dass man schreiben und später eventuell auch Sprechen kann, wie der Schnabel gewachsen ist.
NUTZERANFRAGE: Mach ma Küche hell und dann wieder aus.
responce: set MQTT2_zigbee_Ku_Licht ON;; set MQTT2_zigbee_Ku_Licht OFF

NUTZERANFRAGE: küche dunkel
responce: set MQTT2_zigbee_Ku_Licht OFF

NUTZERANFRAGE: küche an
responce: set MQTT2_zigbee_Ku_Licht ON

NUTZERANFRAGE: küche is echt grell
responce: set MQTT2_zigbee_Ku_Licht OFF

Ich könnte mir vorstellen, dass man für mehr Abfragen eventuell mehrere Konten einrichtet, die man dann in einem rollierend verwendet.

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

erdnar

#17
Zitat von: rabehd am 10 Januar 2026, 17:01:40
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.

Ich hatte gemeinsam mit Gemini an den Einstellungen gewerkelt. Als mal keine Antwort zurückkam, hatte ich Gemini gefragt, ob es am kostenlosen Key liegen könnte... Antwort siehe oben.
Aber evtl. ist es ja aus der Kategorie stimmt´s oder stammt es von einer KI  :-\
ErdnaR

Edit meint: Hier ist die Preisliste. Auszug: Gemini 2.0 Flash, 2.5 Flash und 2.5 Flash-Lite bieten insgesamt 1.500 gegroundete Prompts pro Tag ohne Aufpreis. ...

ch.eick

Zitat von: erdnar am 11 Januar 2026, 11:14:58
Zitat von: rabehd am 10 Januar 2026, 17:01:40
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.

Ich hatte gemeinsam mit Gemini an den Einstellungen gewerkelt. Als mal keine Antwort zurückkam, hatte ich Gemini gefragt, ob es am kostenlosen Key liegen könnte... Antwort siehe oben.
Aber evtl. ist es ja aus der Kategorie stimmt´s oder stammt es von einer KI  :-\
ErdnaR

Edit meint: Hier ist die Preisliste. Auszug: Gemini 2.0 Flash, 2.5 Flash und 2.5 Flash-Lite bieten insgesamt 1.500 gegroundete Prompts pro Tag ohne Aufpreis. ...
Ich verwende nur die kostenlosen Abfragen, habe also keine Cloud gebucht.

Zitat
Kostenlose Versionen:

- Web & App: Du kannst die Gemini App und die Webversion (gemini.google.com) kostenlos nutzen, um Fragen zu stellen und Inhalte zu generieren.

- API: Für Entwickler gibt es eine kostenlose Stufe der Gemini API mit niedrigeren Ratenbegrenzungen zum Testen.
Da steht für die API "mit niedrigeren Ratenbegrenzungen zum Testen"
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

#19
Hallo zusammen,
da mein Device jetzt immer größer wird stelle ich es gleich in meinem contrib bereit.

Mein letzter Test war sehr begeisternd :-)

Nutzerfrage: Generiere mir alle vorhandenen Rollo Namen mit einem 'set' davor und 'open' dahinter. Für das Arbeitszimmer soll es auf 40 gesetzt werden.
response: set WZ_O_Rollo open;;set WZ_W_Rollo open;;set KU_S_Rollo open;;set SC_W_Rollo open;;set BA_N_Rollo open;;set AR_O_Rollo position 40

Das zeigt mal wieder wie wichtig es ist sich über die Namen vorher gedanken zu machen ;-)

In meinem Fall könnte es auch mit den 20 API Aufrufen reichen, da ich nicht so viele Manuelle Eingriffe im Haus habe.
Ansonsten könnte ich mir vorstellen noch ein zweites Konto zu eröffne und dann die Anfragen wechselweise zu schicken, es ist ja nur der Key zu tauschen und die SystemInstructions werden ja jedesmal mitgesendet. Somit würde man bereits auf 40 Anfragen kommen können.

EDIT: Ich habe jetzt den Switch zwischen zwei Keys auch bereits eingebaut.
Mindestens den default Gemini_AI_Key_0 ablegen
{KeyValue("store","Gemini_AI_Key_0","DEIN_API_KEY_HIER")}

Verwendet man zwei Keys ist dieses reading anzulegen: setreading Gemini_AI Gemini_AI_Key 0
{KeyValue("store","Gemini_AI_Key_1","DEIN_ZWEITER_API_KEY_HIER")}

Durch das reading Gemini_AI_Key entsteht ein Zähler, der zwischen 0 und 1 wechselt, wird das reading gelöscht wird Gemini_AI_Key_0 als default verwendet.


Es gibt nun
- set 10_ask
    Für normale Anfragen

- set 02_FHEM_CMD
    Hier wird vorher mit Anweisungen aus den userattr KI_* angelernt.
    Dann kann man eine Anfrage z.B. mit "set 02_FHEM_CMD Mach mal in der Küche licht" einen Aufruf machen.

Ein Vorgeschmack auf die userattr KI_* gibt es im Device im contrib.
Die KI_* sind als KI_CMD[nn] und KI_Instr[nn] gruppiert und können im userattr erweitert werden.

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

#20
Zitat von: erdnar am 11 Januar 2026, 11:14:58Ich hatte gemeinsam mit Gemini an den Einstellungen gewerkelt. Als mal keine Antwort zurückkam, hatte ich Gemini gefragt, ob es am kostenlosen Key liegen könnte... Antwort siehe oben.
Aber evtl. ist es ja aus der Kategorie stimmt´s oder stammt es von einer KI  :-\
ErdnaR

Edit meint: Hier ist die Preisliste. Auszug: Gemini 2.0 Flash, 2.5 Flash und 2.5 Flash-Lite bieten insgesamt 1.500 gegroundete Prompts pro Tag ohne Aufpreis. ...
Könntest Du Deine Key Konfiguration mal näher erleutern?

Ich habe hier unter Key folgendes eingetragen.
Du darfst diesen Dateianhang nicht ansehen.

Dort kann man auch auf "View usage" gehen und sieht unter Fehler "429 TooManyRequests", wenn man im Diagramm über den roten Balken geht die Anzahl von 21.
Du darfst diesen Dateianhang nicht ansehen.

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

Ich nochmal :-)

Bezüglich zweiten API Key klappt das Vorgehen.

- Man legt sich eine zweite Mail Adresse an, wenn man noch keine hat
- Meldet das als google Konto an und durchläuft die Verifizierung
- Dann meldet man sich mit dem neuen Accout an und wechselt zu aistudio
- Man kann den default Key verwenden oder sich ein eigenes Projekt anlegen.
  Das Limit gilt jedoch nicht pro Projekt, sondern pro Account :-(

Somit habe ich jetzt bei rollierender Verwendung 2x20 Anfrage, was mir erstmal ausreicht.

Zu meinem letzten Test
# Ich habe folgende SystemInstruction definiert, die die Umgebung beschreiben und mit der die KI zusätzlich lernt

# 1.
attr Gemini_AI KI_Instr00 Du bist die Smart-Home-KI für FHEM. Antworte NUR mit dem FHEM-Befehl.
attr Gemini_AI KI_Instr01 Mehrere Befehle trenne mit ;;;;
attr Gemini_AI KI_Instr02 Deine GERÄTE-LISTE: - Das Hauptlicht heißt: Küche

# 2.  Das beschreibt meine Rollo Installation, ohne die Device Namen direkt anzugeben
# 2.1 Wie heißen die Räume und welche Kurznamen sollen verwendet werden
attr Gemini_AI KI_Instr03 Es gibt Rollos in allen Räumen. Wohnzimmer -> WZ;; Küche -> KU;; Schlafzimmer -> SC;; Bad -> BA;; Arbeitszimmer -> AR;;
# 2.2 Wie sind die Aurichtungen der Rollos in den Räumen
#     Man kann auch mehrere Beschreibungen in eine Zeile schreiben, die Zeilen sollen es nur lesbarer machen.
#     Welche Kommandos können für Rollos verwendet werden?
attr Gemini_AI KI_Instr04 WZ hat je 1 Ost und West, KU 1 Süd, SC 1 West, BA 1 Nord und AZ 1 Ost Rollo. Es gibt Kommandos open, close und position mit 0 bis 100.
# 2.3 Das beschreibt meinen Namensstandard für die Rollos
attr Gemini_AI KI_Instr05 Die Gerätenamen entsprechen folgendem Syntax mit _ als Trennzeichen: 'Kurzname des Raums' 'Kurzname der Himmelsrichtung' 'Rollo'
# 2.3 Hier lernt die KI noch, dass die Himmelsrichtungen abgekürzt werden.
attr Gemini_AI KI_Instr06 Die Himmelsrichtungen werden mit dem ersten Buchstaben abgekürzt.

# 3. Für direkte Kommandos und Aussagen gibt man Beispiele. Dies ist sinnvoll, wenn es keinen guten Namensstandard gibt, oder das Kommando komplexer ist.
attr Gemini_AI KI_CMD00 BEISPIELE:
attr Gemini_AI KI_CMD01 '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
An meinen vorherigen Post, mit Tests sieht man, dass die KI auch aus anderen Aussagen durchaus das richtige Kommando findet.
Bei den Attributen habe die Möglichkeit von 00-99 eingerichtet, die man jedoch noch im userattr fortlaufend ergänzen muss.

Jetzt fehlt noch die Ausführung der KI Kommandos und die Kopplung mit Signal (in meinem Fall).

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

erdnar

Zitat von: ch.eick am 12 Januar 2026, 10:35:52Dort kann man auch auf "View usage" gehen und sieht unter Fehler "429 TooManyRequests", wenn man im Diagramm über den roten Balken geht die Anzahl von 21.
Du darfst diesen Dateianhang nicht ansehen.

VG  Christian

Mahlzeit,
ich habe zwischenzeitlich gelernt, dass es wohl einen Unterschied gibt zwischen Anfragen an Gemini und solche über die API. :-[
Die Diagramm hatte ich auch gesehen und war, wie du, bei API-Anfragen insgesamt schon weit über 20 hinaus, hatte aber noch keine TooManyRequests.
Ich ziehe also, wie so oft, meinen Redebeitrag zurück (Grund: viel Meinung - wenig Wissen)  :'(.

OT Apropos wenig Wissen: Du benutzt KeyValue("store","Gemini... für den Key. Da dies bei mir zu Undefined subroutine &main::KeyValue called at (eval... führte, habe ich es auf die Schnelle in einen Dummy gelegt und von da geholt.
attr Gemini_AI replacement01Value { ReadingsVal("Gemini_Config","api_key","") } Wie komme ich zum KeyValue ?
Danke
ErdnaR

ch.eick

Hallo Erdnar

Zitat von: erdnar am 12 Januar 2026, 13:28:16OT Apropos wenig Wissen: Du benutzt KeyValue("store","Gemini... für den Key. Da dies bei mir zu Undefined subroutine &main::KeyValue called at (eval... führte, habe ich es auf die Schnelle in einen Dummy gelegt und von da geholt.
attr Gemini_AI replacement01Value { ReadingsVal("Gemini_Config","api_key","") } Wie komme ich zum KeyValue ?
Danke
ErdnaR
Dazu gibt es im Forum und Wiki natürlich mehr Infos :-)

Hier auf die Schnelle die Funktion für die 99_myUtils.pm, wie immer ohne Gewähr.
Achtung, das ist kein Passwort Tresor, gibt aber die Möglichkeit Passworte und Schlüssel aus dem Device zu halten, falls man es so wie ich mal schnell teilt.
######################################################
# {KeyValue("read|store","PW_PV_Anlage_1_API_user","<passwort>")}
# {KeyValue("store","PW_PV_Anlage_1_API_user",undef)}   # zum löschen
######################################################
sub KeyValue {
    my ($step, $index, $value) = @_;
    my $key = getUniqueId().$index;
    my $e_value = "";
    my $error;

    if (eval "use Digest::MD5;1") {
      $key    = Digest::MD5::md5_hex(unpack "H*", $key);
      $key   .= Digest::MD5::md5_hex($key);
    }

    if ($step eq "read") {
      ($error, $value) = getKeyValue($index);

      if ( defined($error) ) {
        Log3 $index,3, "$index, can't read key from FhemUtils/uniqueID: $error";
        return undef;
      }

      if ( defined($value) ) {
        my $dec_value = '';

        for my $char (map { pack('C', hex($_)) } ($value =~ /(..)/g)) {
          my $decode  = chop($key);
          $dec_value .= chr(ord($char)^ord($decode));
          $key        = $decode.$key;
        }
        return $dec_value;
      }
      else {
        Log3 $index,3,"$index, no key found in FhemUtils/uniqueID";
        return undef;
      }
    }

    if ($step eq "store") {
      for my $char (split //, $value) {
        my $encode = chop($key);
        $e_value  .= sprintf("%.2x",ord($char)^ord($encode));
        $key       = $encode.$key;
      }
      $error = setKeyValue($index, $e_value);
      return "error while saving key : $error" if(defined($error));
      return "Key successfully saved in FhemUtils/uniqueID Key $index";
    }
};

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