Agent IA, Server MCP

Hallo zusammen,

In den letzten Jahren haben wir eine große Welle rund um KI erlebt, und kürzlich wird immer mehr über KI-Agenten gesprochen. Wahrscheinlich haben viele von uns bereits welche genutzt.

Ich bin in die Welt der MCP-Server eingestiegen und dachte, es wäre nützlich, einen direkt in Gladys zu haben. Für diejenigen, die MCP nicht kennen: Es steht für Model Context Protocol, ein Protokoll, das von Anthropic entwickelt wurde, den Machern hinter den Claude-Modellen. Es ermöglicht die Bereitstellung von Tools und Funktionen, die Agenten aufrufen können, um zusätzliche Informationen zu erhalten oder mit Geräten in der realen Welt zu interagieren. Es ist ein offenes Protokoll, und die meisten großen Namen in der Branche haben begonnen, es nach Anthropic zu implementieren, darunter OpenAI, und zuletzt Perplexity.

Ich habe eine erste Version des Dienstes entwickelt, der als Server fungiert. Derzeit ermöglicht er:

  • das Abrufen von Sensorwerten (Temperatur, Luftfeuchtigkeit, Öffnung usw.)
  • das Anzeigen von Kameras. Ich bin mir nicht sicher, ob es möglich ist, das Kamerabild im Agenten-Chat anzuzeigen, aber je nach den Fähigkeiten des verwendeten Modells kann es Ihnen beschreiben, was es sieht
  • das Ein- und Ausschalten der Lichter in einem Raum

Ich lasse euch die Demonstration in meiner Entwicklungsumgebung sehen (die Temperaturen sind nicht unbedingt relevant, und die Kameras sind öffentliche Kameras).

In der Demo verwende ich den Agenten, der mit GitHub Copilot in VSCode verbunden ist, aber normalerweise sollte es funktionieren, wenn ihr Claude oder einen anderen MCP-kompatiblen Agenten auf eurem Computer habt.

Ich denke, die bereitgestellten Funktionen müssen noch verbessert werden, aber es scheint mir bereits ganz gut zu sein, und man kann sich vieles vorstellen. Es muss auch sicherlich mehr Sicherheit geben, um den Agenten zu authentifizieren, der sich verbindet.

Der Pull-Request ist hier

In den nächsten Stunden wird ein Docker-Image verfügbar sein: bertrandda/gladys:mcp-server

Derzeit ist es nur der Backend, also nichts Sichtbares in der Liste der Dienste. Zum Testen könnt ihr die Route /api/v1/service/mcp/proxy in der Konfiguration eures Agenten verwenden. Achtung, die Route ist nicht gesichert, also testet nicht, wenn euer Gerät, das ihr für Gladys verwendet, im Internet exponiert ist.

Zögert nicht, es zu testen und eure Meinung dazu zu sagen.

Ich kenne mich nicht besonders gut mit der Technik dahinter aus, aber ich finde das Demo-Video sehr interessant!!

Hallo @bertrandda

Ich muss sagen, ich bin wirklich beeindruckt von der Demo :heart_eyes: Großartige Arbeit :slight_smile:

Ich (und viele andere hier …) bin sehr an weiteren technischen Informationen interessiert, zum Beispiel an der verwendeten Hardware oder wie man Gladys und den MCP-Server verbindet.

Könnte man sich auch vorstellen, den manuellen Prompt durch eine STT-Lösung zu ersetzen, da ich bereits eine eigene Audio-Lösung zu Hause implementiert habe, die Multi-Room unterstützt, mit Gladys, die mir antwortet, und wir sind damit nicht weit davon entfernt, natürlich mit Gladys sprechen zu können :+1:

Sehr erfreut über das große Interesse an dieser Arbeit!

Um ein wenig mehr zu erklären, hier ein Schema einer Anordnung, die mit dem MCP-Protokoll funktioniert

Es gibt also den Host, der den MCP-Client enthält. Heute sind das oft bekannte Agenten wie Claude Desktop, ChatGPT… die diesen Client integrieren. Wie ich in dem oben genannten Demo-Video sagte, ist es der Agent in VSCode mit GitHub Copilot.
Seine Aufgabe wird es sein, einerseits mit dem LLM (oft Claude Sonnet oder GPT-4) zu kommunizieren, der für das Verständnis der Anfragen und die Analyse von Daten zuständig ist, und andererseits mit dem MCP-Server.

Der MCP-Server ist dafür zuständig, Funktionen zu deklarieren, die der MCP-Client aufrufen kann, um mit der Ressource zu interagieren (in unserem Fall ist die Ressource Gladys, aber es könnte auch eine Datenbank, Google Drive, Slack… jedes lokale oder entfernte Tool sein). In unserem Fall derzeit vier Funktionen:

  • device.get-state um Sensordaten zu erhalten
  • camera.get-image um Kamera-Bilder abzurufen
  • light.turn-(on|off) um das Licht in einem Raum einzuschalten/auszuschalten
  • scene.start um eine Szene zu starten

Jetzt, wenn wir uns etwas genauer ansehen, aber trotzdem einfach bleiben, die Funktionsweise des Host-Teils, wenn man zum Beispiel Claude Desktop verwendet, dann passiert Folgendes:

  • Beim Start fragt Claude Desktop alle MCP-Server, mit denen er verbunden ist, nach den verfügbaren Funktionen, die jeder anbietet (in unserem Fall device.get-state, camera.get-image…)
  • Wenn der Benutzer Claude Desktop etwas fragt (z.B. « Gib mir die Temperatur im Wohnzimmer »), sendet er die Frage an das LLM und gibt im Kontext der Anfrage an, dass er Zugriff auf mehrere Funktionen hat und dass, wenn die Anfrage des Benutzers dies erfordert, ein Aufruf dieser Funktionen erfolgen kann
  • Das LLM antwortet Claude Desktop, « Ich brauche, dass du device.get-state mit dem Parameter Raum Wohnzimmer verwendest »
  • Claude Desktop ruft die Funktion des MCP-Servers von Gladys device.get-state(Wohnzimmer) auf und sendet die angeforderte Daten an das LLM
  • Das LLM baut die Antwort mit diesen neuen Daten und sendet sie an Claude Desktop, der sie dir anzeigt

Man muss verstehen, dass hier nicht Gladys antwortet, Gladys gibt nur einen Zustand zurück und das LLM baut die Antwort. Ich weiß nicht, ob du Google Home, Homekit/Siri oder Amazon Alexa mit Gladys verwendest, aber ich denke, man kann einen Vergleich ziehen, um es besser zu verstehen. Wir haben einen Gladys-Dienst, der Geräte über ein Protokoll bereitstellt, und der Client Claude Desktop (den man mit der Google Home-App, Apple Home oder sogar Siri vergleichen könnte) stellt Anfragen an diesen Dienst, um Informationen zu erhalten. Der Vorteil gegenüber diesen proprietären Lösungen ist, dass MCP ein offenes Protokoll ist, das von jedermann implementiert werden kann (ob Client oder Server). Also um deine Frage zu beantworten:

Man kann sich sehr gut einen MCP-Client vorstellen, der mit einem STT-Modell (ob Cloud oder lokal) integriert ist und über MCP mit Gladys kommuniziert.

Um deine andere Frage zu beantworten:

Kurze Antwort Der MCP-Server ist bereits über den von mir entwickelten Dienst in Gladys integriert, die Verbindung, die du herstellen musst, ist zwischen dem MCP-Agenten/Client und dem MCP-Server (siehe Tutorial am Ende dieses Posts).
Die lange Antwort wird etwas technisch sein, aber um die Wahl, daraus einen Dienst zu machen, und um die Tutorials darunter zu verstehen, ist es interessant.
Für die Verbindung zwischen dem MCP-Client und dem MCP-Server gibt es zwei Kommunikationsmöglichkeiten:

  • entweder über stdio (Standard-Eingabe/Ausgabe)
  • oder über HTTP (über das Netzwerk)
    stdio ist die ursprüngliche Kommunikationsmethode des MCP, der MCP-Client startet einen Unterprozess, der den Server ausführt und die Eingaben/Ausgaben des Prozesses abhört (um es stark zu vereinfachen, ist es so, als hätte er eine Tastatur zum Schreiben und würde die Terminal-Protokolle lesen, um zu kommunizieren). Es gibt mehr kompatible Agenten als mit HTTP, aber da der Server auf demselben Gerät wie der Agent laufen muss, bedeutet dies, dass ein neues Projekt parallel zu Gladys entwickelt und verwaltet werden muss.
    HTTP ermöglicht es, den MCP-Client und den MCP-Server über das Netzwerk kommunizieren zu lassen, wenn sie nicht auf demselben Gerät sind. Dies ermöglicht es, den MCP-Server und die Ressource an einem Ort zu gruppieren. Die Integration des MCP-Servers in einen Gladys-Dienst hat mehrere Vorteile
  • auf Code-Ebene erschien mir dies als die einfachste Lösung, um leicht auf alle Daten und Funktionen von Gladys zugreifen zu können
  • auf Projektniveau vermeidet dies, ein zweites MCP-Server-Gladys-Projekt neben Gladys warten zu müssen
  • wenn eines Tages MCP-Clients auf Telefonen (oder Lautsprechern, wie du es verlangst) erscheinen, ist es wahrscheinlich, dass dies über HTTP geschieht, da die Installation eines MCP-Servers auf solchen Geräten zweifellos komplizierter sein wird
  • wenn der von Ihnen verwendete Agent nicht über HTTP mit MCP kompatibel ist, können Sie mcp-proxy verwenden, der eine Brücke zwischen stdio und HTTP herstellt (ich erkläre Ihnen unten, wie man es verwendet).

Für die Verbindungstutorials, hier einige Erklärungen für VSCode (direkt über HTTP), Claude Desktop und Perplexity (Verwendung von mcp-proxy, da Claude Desktop und Perplexity heute nur mit stdio kompatibel sind). Wenn Sie andere Agenten haben, können wir das gemeinsam ansehen.


VSCode mit GitHub Copilot

Sie starten den Copilot-Chat.
Unten wählen Sie Agent aus und klicken Sie auf das Zahnradsymbol

In der sich öffnenden Dropdown-Liste wählen Sie ganz unten « Add more Tools… »

« Add MCP Server »

« HTTP »

Schließlich geben Sie diese URL ein http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy und ersetzen Sie GLADYS_IP_ADDRESS durch die IP-Adresse Ihres Gladys.
Wählen Sie einen Namen und los geht’s, Sie sollten in Ihrem Agent Copilot verwenden können

Für weitere Informationen: Add and manage MCP servers in VS Code


Claude Desktop und Perplexity unterstützen noch keine MCP-Server (sie haben die Unterstützung zwar angekündigt, aber noch nicht umgesetzt), daher ist es notwendig, mcp-proxy zu verwenden

Für die Installation ist alles hier angegeben GitHub - sparfenyuk/mcp-proxy: A bridge between Streamable HTTP and stdio MCP transports · GitHub

Claude Desktop

Sobald mcp-proxy installiert ist, starten Sie Claude Desktop
In Einstellungen → Entwickler → Lokale MCP klicken Sie auf « Config bearbeiten »
In einem Texteditor bearbeiten Sie die Datei claude_desktop_config.json, damit sie so aussieht

{
    "mcpServers": {
        "mcp-proxy": {
            "command": "FULL_PATH/mcp-proxy",
            "args": [
                "http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy",
                "--transport",
                "streamablehttp"
            ],
            "env": {}
        }
    }
}

Um FULL_PATH zu finden, geben Sie in einem Terminal where mcp-proxy ein (auf macOS/Linux, für Windows geben Sie where.exe mcp-proxy ein) und ersetzen Sie FULL_PATH durch den erhaltenen Pfad.

Ersetzen Sie auch GLADYS_IP_ADDRESS durch die IP-Adresse Ihrer Gladys

Speichern Sie die Konfiguration und starten Sie Claude neu, wenn alles gut gegangen ist, sollten Sie auf die MCP-Funktionen im Chat zugreifen können

Perplexity

Sobald mcp-proxy installiert ist, starten Sie Perplexity
In Einstellungen → Connectors → Connector hinzufügen
Wählen Sie den Tab « Erweitert »
Geben Sie einen Namen « Gladys »

Ändern Sie die Konfiguration, damit sie so aussieht

{
  "args" : [
    "http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy",
    "--transport",
    "streamablehttp"
  ],
  "command" : "FULL_PATH/mcp-proxy",
  "env" : {}
}

Um FULL_PATH zu finden, geben Sie in einem Terminal where mcp-proxy ein (auf macOS/Linux, für Windows geben Sie where.exe mcp-proxy ein) und ersetzen Sie FULL_PATH durch den erhaltenen Pfad.

Ersetzen Sie auch GLADYS_IP_ADDRESS durch die IP-Adresse Ihrer Gladys

Speichern Sie die Konfiguration und warten Sie, bis Perplexity alle Funktionen korrekt erkennt, wenn alles gut gegangen ist, sollten Sie auf die MCP-Funktionen im Chat zugreifen können.

Für weitere Informationen: https://www.perplexity.ai/help-center/en/articles/11502712-local-and-remote-mcps-for-perplexity


Ich habe versucht, so vollständig und klar wie möglich zu sein, ich hoffe, das hat deine Fragen beantwortet. Auch wenn das Protokoll bereits einige Monate alt ist, steht es noch am Anfang, es ist sehr vielversprechend, besonders wenn man sieht, wie viele KI-Riesen es implementieren. Wenn Ihnen also die Konfiguration der Verbindung kompliziert erscheint, zögern Sie nicht, um Hilfe zu bitten, und das wird helfen, die Tutorials anhand der Benutzerfeedback zu verbessern.

Hallo @bertrandda, deine Demo ist wirklich sehr lehrreich und die Ergebnisse sind wirklich top!
Und da ich gerne herumexperimentiere, teste ich gerade dein Docker-Image bertrandda/gladys:mcp-server, aber mein VSCode (Standard) sagt mir Folgendes, wenn ich nach der Temperatur meines Dyson frage:

Ich sehe, dass Sie Gladys (Smart-Home-System) mit einer Konfiguration unter http://192.168.xxx.yyy/api/v1/service/mcp/proxy verwenden. Ich kann jedoch nicht direkt auf die Temperatur Ihres Dyson zugreifen, weil:

Ich habe nur die Konfigurationsdatei mcp.json, die die URL des Servers zeigt
Ich habe nicht die erforderlichen Berechtigungen, um die Gladys-API abzufragen
Ich weiß nicht, ob Ihr Dyson in Gladys konfiguriert ist
Um die Temperatur Ihres Dyson zu erhalten, können Sie:

Die Weboberfläche von Gladys direkt unter http://192.168.xxx.yyy aufrufen
Die offizielle Dyson-App auf Ihrem Telefon verwenden
Auf die Gladys-API mit den richtigen Berechtigungen zugreifen
Ich kann diese Informationen nicht aus der einzigen Konfigurationsdatei lesen, die ich sehe.

Kurz gesagt, da ich kein Entwickler bin, bin ich am Ende… Wenn du einen Tipp hast, bin ich dankbar :slight_smile:

EDIT: mein mcp.json falls es hilft

{
	"servers": {
		"github": {
			"type": "http",
			"url": "https://api.githubcopilot.com/mcp/",
			"gallery": true
		},
		"gladys-mcp": {
			"url": "http://192.168.xxx.yyy/api/v1/service/mcp/proxy",
			"type": "http"
		}
	},
	"inputs": []
}

EDIT 2: Ich habe das Gefühl, dass die Kommunikation nicht gut ist …?

2025-08-03 20:56:51.000 [info] Starting server gladys-mcp
2025-08-03 20:56:51.004 [info] Connection state: Starting
2025-08-03 20:56:51.029 [info] Starting server from LocalProcess extension host
2025-08-03 20:56:51.032 [info] Connection state: Running
2025-08-03 20:56:51.164 [info] Connection state: Error Error sending message to http://192.168.xxx.yyy/api/v1/service/mcp/proxy: TypeError: fetch failed
2025-08-03 20:56:51.165 [error] Server exited before responding to `initialize` request.

Man muss den Port mit der IP angeben? Bei meinem Gladys-Test ist es 8001
→ OK, man muss den Port angeben! Aber ich habe immer noch einen kleinen Fehler, scheint es.

2025-08-03 21:01:41.138 [info] Starting server gladys-mcp
2025-08-03 21:01:41.140 [info] Connection state: Starting
2025-08-03 21:01:41.151 [info] Starting server from LocalProcess extension host
2025-08-03 21:01:41.157 [info] Connection state: Running
2025-08-03 21:01:41.158 [debug] [editor -> server] {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{"roots":{"listChanged":true},"sampling":{},"elicitation":{}},"clientInfo":{"name":"Visual Studio Code","version":"1.102.3"}}}
2025-08-03 21:01:41.224 [debug] [server -> editor] {"result":{"protocolVersion":"2025-06-18","capabilities":{"resources":{},"tools":{"listChanged":true}},"serverInfo":{"name":"Gladys","title":"Gladys","version":"1.0.O"}},"jsonrpc":"2.0","id":1}
2025-08-03 21:01:41.224 [debug] [editor -> server] {"method":"notifications/initialized","jsonrpc":"2.0"}
2025-08-03 21:01:41.225 [debug] [editor -> server] {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
2025-08-03 21:01:41.226 [debug] 404 status connecting to http://192.168.xxx.yyy:8001/api/v1/service/mcp/proxy for async notifications; they will be disabled: {"status":404,"code":"NOT_FOUND","message":"Route /v1/service/mcp/proxy not found"}
2025-08-03 21:01:41.264 [debug] [server -> editor] {"result":{"tools":[{"name":"camera_get-image","title":"Get image from camera","description":"Get image from specific camera or specific room.","inputSchema":{"type":"object","properties":{"room":{"type":"string","enum":["maison"],"description":"Room to get image from."}},"required":["room"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"light_turn-on","title":"Turn on light","description":"Turn on a light in a specific room.","inputSchema":{"type":"object","properties":{"room":{"type":"string","description":"Room to turn on the light in."}},"required":["room"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"light_turn-off","title":"Turn off light","description":"Turn off a light in a specific room.","inputSchema":{"type":"object","properties":{"room":{"type":"string","description":"Room to turn off the light in."}},"required":["room"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"scene_start","title":"Start scene","description":"Start a home automation scene.","inputSchema":{"type":"object","properties":{"scene":{"type":"string","enum":[],"description":"Scene name to start."}},"required":["scene"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"device_get-state","title":"Get states from devices","description":"Get last state of specific device type or in a specific room.","inputSchema":{"type":"object","properties":{"room":{"type":"string","enum":["maison"],"description":"Room to get information from."},"sensor_type":{"type":"array","items":{"type":"string","enum":["temperature-sensor","humidity-sensor"]},"description":"Type of sensor to query, empty array to retrieve all sensors."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]},"jsonrpc":"2.0","id":2}
2025-08-03 21:01:41.265 [info] Discovered 5 tools
2025-08-03 21:01:41.314 [warning] 1 tools have invalid JSON schemas and will be omitted

In meinem Docker-Test habe ich nur einen Dyson, den ich ein- und ausschalten kann (über Matterbridge).
Es wäre einfach, das Einschalten/Ausschalten einer Steckdose oder eines Schalters hinzuzufügen (ich weiß nicht, ob das in Gladys anders ist)? Ich würde gerne komplexere Anfragen testen, sozusagen :wink:


Jedenfalls ist es sehr vielversprechend und es antwortet besser (ich denke zumindest) als ChatGPT in GladysPlus:

Übrigens, was wären die Unterschiede zwischen dem Gespräch mit Gladys/ChatGPT und deinem Dienst?

Super, dass du es geschafft hast. Man muss den Port wirklich hinzufügen, damit es mit der IP korrekt funktioniert.

Tatsächlich sehe ich zwei Fehler. Die Zeile mit der 404 ist normal, ich habe bisher nur die Deklaration der Tools implementiert. Es gibt mehrere andere MCP-Funktionen, darunter Benachrichtigungen, darum kümmere ich mich später. Die Zeile mit dem Fehler beim ungültigen Schema ist nicht wichtig. Hast du keine Szene in deinem Test-Docker, oder?

Natürlich, ich versuche, das bald zu machen.

Das sind zwei verschiedene Implementierungen von KI. Technisch gesehen, wenn du Gladys Plus verwendest, machst du eine Anfrage, das Modell identifiziert die Anfrage und sendet Gladys die Absicht der Anfrage, und Gladys antwortet dir. Hier, mit dem MCP-Dienst, unterhältst du dich mit einem Agenten außerhalb von Gladys, der die Fähigkeit hat, Gladys-Daten zu lesen/schreiben, während er deine Antwort erstellt. Funktional weiß ich nicht genau, ich verwende nicht ChatGPT von Gladys Plus, aber mit einem Agenten+MCP kannst du Fragen verketten, sogar mehrere Geräte in Anfragen verwenden. Ich denke, wenn du deinen Agenten gut konfigurierst, hast du mehr Möglichkeiten mit den MCP. Das ist der Vorteil von Gladys Plus, du musst nichts konfigurieren, die KI ist direkt implementiert, außerdem kannst du sie in Szenen verwenden.

Hallo @bertrandda, sehr cool diese kleine Entwicklung :slight_smile:

Tatsächlich muss die Verbindung zwischen dem MCP-Client und Gladys authentifiziert werden, sonst ist das ein offenes Haus ^^

@jean_bruder Es gibt ElevenLabs (das Unternehmen, das ich übrigens für die Stimme von Gladys Plus verwende!) hat 11ai entwickelt, einen Sprachassistenten, der an MCP angeschlossene Geräte ansteuert, also ist es mit dieser Entwicklung kompatibel:

Genau, ich habe keine.

Das Ziel wäre es, einen Agenten+MCP-Ergänzung in Gladys zu haben, zusätzlich zu oder als Ersatz für chatGPT, oder von „außerhalb“ von Gladys mit Gladys zu sprechen?
Ich gebe zu, dass ich kein Google Home, Siri oder Alexa habe, weil ich diese Dienste überhaupt nicht in der Cloud nutze, und vielleicht ist das der Punkt, an dem sich deine Entwicklung einordnet…

Es bleibt in jedem Fall Cloud :stuck_out_tongue: Die einzige Möglichkeit, KI lokal zu nutzen, wäre derzeit, einen Rechner mit einer guten GPU, viel RAM zu haben und ein Open-Source-Modell zu installieren, das lokal läuft, aber das ist nicht billig und verbraucht viel.

Später könnte es vielleicht günstige Mini-PCs mit Chips geben, die speziell für KI entwickelt wurden, das kommt langsam mit Beelink und dem Beelink SER9 zum Beispiel (Verfügbar für 1599€).

Die Leistung ist mit einfachen Prompts recht gut (Benchmark: Beelink | Comparaison des performances entre Beelink SER9 Pro HX370 et SER9 Pro), meiner Meinung nach wird sich das in Zukunft verbreiten, wir sind erst am Anfang!

In der Zwischenzeit ist die Cloud eine gute Option, es geht so schnell voran, dass es dumm wäre, sich mit Hardware auszustatten, die in 6 Monaten veraltet ist, während sich die Cloud ständig erneuert und die Kosten pro Token seit 2 Jahren nur sinken!

Danke, das hatte ich nicht verstanden :joy:

Stimmt, sehr gut, aber wir warten noch ein bisschen wegen dem Preis…

Sehr interessant, dieses Projekt, aber ich sehe, dass die MCP über eine öffentliche URL erreichbar sein müssen, damit es funktioniert. Derzeit kann der Dienst nur funktionieren, wenn der Agent im gleichen Netzwerk wie Gladys ist. Sobald der Dienst lokal stabil ist, könnte es sich vielleicht lohnen, eine authentifizierte Gladys-Plus-Route zu erstellen, die zum MCP-Dienst des Benutzers weiterleitet. Was hältst du davon?

Auf jeden Fall! :slight_smile:

@mutmut ich habe gerade das Bild mit den hinzugefügten Schaltern aktualisiert. Kannst du bitte überprüfen, ob es dir gefällt und ob es gut funktioniert?

@bertrandda Bild aktualisiert, aber es scheint nicht zu funktionieren, obwohl ich Schalter habe (1 Dyson, 2 für Matterbridge, 1 virtuellen MQTT-Schalter, der nicht gefunden wurde):


und beim Drücken auf den Namen Gladys:

Aber der Dyson schaltet sich nicht aus.
Ich sollte es mit einer echten Zigbee-Steckdose testen.

Wenn du Feedback zu einer echten Zigbee-Schnittstelle hast, bin ich interessiert. Ich habe das mit virtuellen MQTT-Geräten entwickelt.
Allgemeiner gesagt, sehe ich, dass es vielleicht nicht sehr sinnvoll ist, sich nur auf die Selectoren der Gerätefunktionen zu stützen. Durch mangelnde Informationen kommt es möglicherweise zu Missverständnissen auf Seiten des Agents. Da gibt es sicher noch Verbesserungspotenzial.

Hallo @bertrandda,

Hast du seitdem weiter an diesem Thema gearbeitet oder nicht so sehr? :slight_smile:

Das ist wirklich ein spannendes Thema, finde ich. Zögere nicht, dich zu melden, wenn du Hilfe brauchst, um voranzukommen!

Ja, ich mache Fortschritte, ich habe kürzlich das Sitzungssystem und die Ressourcen hinzugefügt, damit der Agent die Hausstruktur abrufen kann (nicht alle Agenten sind mit den Ressourcen kompatibel, aber das wird für diejenigen interessant sein, die es sind). Ich werde das alles pushen und ein neues Image generieren. Es bleibt hauptsächlich der Authentifizierungsteil zu tun. Ich frage mich, ob man lieber eine globale Authentifizierung (Gladys authentifiziert den Ursprung der Anfrage über einen API-Schlüssel, dann verwaltet der Dienst die Antwort) oder ob man das direkt auf Ebene des Dienstes macht (der Dienst verwaltet die Generierung des Schlüssels + Authentifizierung). Ich denke, auf Ebene von Gladys wäre es sauberer und würde es ermöglichen, ein echtes Schlüsselsystem für alle anderen API-Routen zu haben, aber es könnte länger dauern, es zu entwickeln.

Trop cool tout ça :slightly_smiling_face:

Für die Authentifizierung hast du mir gesagt, dass viele Systeme eine API verlangen, die im Internet verfügbar ist. Soll ich dir gleich eine Gladys Plus Route zur Verfügung stellen?

Das ist für mich relativ einfach, da wir bereits die Funktionsweise für mehrere Integrationen (Owntracks, Netatmo, etc.) haben.

Es würde so etwas wie Folgendes aussehen:

https://api.gladysgateway.com/v1/api/mcp/:CLE_API

Edit: Ich habe nicht auf deine Antwort gewartet, ich habe schnell einen kleinen PR gemacht, mit 3 Routen:

GET https://api.gladysgateway.com/v1/api/mcp/:CLE_API
POST https://api.gladysgateway.com/v1/api/mcp/:CLE_API
DELETE https://api.gladysgateway.com/v1/api/mcp/:CLE_API

Um die 3 Routen zu matchen, die du lokal hast

Ansonsten haben wir für eine lokale Authentifizierung bereits einen API-Schlüssel-Mechanismus in Gladys (siehe session.createApiKey), aber bisher wurde das weder in der Oberfläche noch in einem Dienst exponiert, aber es funktioniert :wink:

@bertrandda Es ist in PROD auf Gladys Plus verfügbar, du kannst die 3 Routen verwenden :wink:

Wenn du den Code in gateway.handleNewMessage.js betrachtest, erhältst du ein Event, sobald ein API-Aufruf auf der lokalen Instanz eingeht. Zum Testen habe ich dies auf meiner Seite am Ende der Datei hinzugefügt:

  if (data.type === 'gladys-open-api' && data.action === 'mcp-webhook') {
    console.log(data);
    cb({ status: 200 });
  }

Wenn ich die API mit Daten aufrufe:

Erhalte ich einen « status »: 200 als Antwort, und ich sehe den API-Aufruf lokal durchgehen:

Das Attribut mcp_method enthält ‹ POST ›, ‹ GET › oder ‹ DELETE ›.

Das Attribut mcp_data enthält die im Body übergebene Daten.

Das Attribut local_user_id entspricht der ID des lokalen Gladys-Benutzers.

Du kannst cb({ status: 200 }); mit dem aufrufen, was du möchtest. Dies sendet ein JSON als Antwort an den Aufrufer.

Zögere nicht, Fragen zu stellen :wink:

Zumindest wird über Gladys Plus die gesamte Authentifizierung bereits perfekt verwaltet und über eine offene API verfügbar gemacht, was für solche Fälle sehr praktisch ist.