idm-mcp
Enables monitoring and control of IDM Navigator 2.0 heat pumps via Modbus TCP.
README
IDM Wärmepumpe MCP Server
MCP-Server für IDM Navigator 2.0 Wärmepumpen (z. B. TERRA SWM) über Modbus TCP.
Ermöglicht Claude die vollständige Überwachung und Steuerung der Wärmepumpe als Teil
des integrierten Smart-Home-Energiemanagementsystems.
Voraussetzungen
- Python ≥ 3.11
uvinstalliert- IDM Wärmepumpe im selben LAN, Modbus TCP aktiviert (Menü „Gebäudeleittechnik")
- IP-Adresse der Wärmepumpe manuell gesetzt (kein DHCP — sonst nach Stromausfall ggf. geändert)
Installation
cd /Users/chris/Entwicklung_local/idm-mcp
uv sync
Umgebungsvariablen
| Variable | Standardwert | Beschreibung |
|---|---|---|
IDM_HOST |
10.10.10.188 |
IP-Adresse der IDM Wärmepumpe |
IDM_PORT |
502 |
Modbus-TCP-Port |
IDM_UNIT |
1 |
Modbus Unit-ID |
Claude Desktop Konfiguration
Ergänze ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"idm-mcp": {
"command": "/Users/chris/.local/bin/uv",
"args": [
"--directory",
"/Users/chris/Entwicklung_local/idm-mcp",
"run",
"python",
"-m",
"idm_mcp.server"
],
"env": {
"IDM_HOST": "10.10.10.188",
"IDM_PORT": "502",
"IDM_UNIT": "1"
}
}
}
}
Verfügbare Tools (13)
Read-only (8)
| Tool | Beschreibung |
|---|---|
idm_health_check |
Verbindungstest: Außentemp., Betriebsart, Störungsstatus |
idm_get_system_status |
Betriebsart System + WP, Außentemp., Störung, Smart Grid, PV-Überschuss, Leistungsaufnahme |
idm_get_temperatures |
Alle Sensoren: WP-Vorlauf B33, Rücklauf B34, HGL B35, Wärmequelle B43/B36, Luft B37/B46/B72, Speicher B38/B40 |
idm_get_hot_water_status |
Trinkwasser oben/unten B48/B41, Zapftemperatur B42, Soll/Ein/Aus-Temperaturen, Ladepumpe M73 |
idm_get_heat_circuits |
Heizkreise A–G: Vorlauf ist/soll, Raumtemperatur, Betriebsart je Kreis |
idm_get_compressor_status |
Verdichter 1–4, Stufen Heizen/Kühlen/WW, Pumpen M15/M16/M73/M84/M17, alle Umschaltventile M61–M99 |
idm_get_energy_data |
Momentanleistung, WP-Aufnahme, kumulierte Wärmemengen (Heizen/Kühlen/WW/Abtauung/Solar/E-Heiz) |
idm_get_solar_status |
Kollektor B73/B75, Ladetemperatur B74, Pool B76, Betriebsart Solar |
Schreibend (5)
| Tool | Register | Besonderheit |
|---|---|---|
idm_set_system_mode |
1005 | ⚠ EEPROM — nicht zyklisch schreiben! |
idm_set_smart_grid |
1006 | Kernsteuerung für PV & Strommarkt (0/1/2/4) |
idm_set_pv_surplus |
74 | ⚠ E3DC schreibt diesen Wert normalerweise selbst! |
idm_set_hot_water_setpoints |
1032/1033/1034 | ⚠ EEPROM — nur bei Bedarf ändern |
idm_set_demand |
1710/1711/1712 | ⚠ Zyklisch schreiben (alle 30 s), sonst nach Neustart inaktiv |
Systemarchitektur & Zusammenhänge
E3DC ↔ IDM Kommunikation
Das E3DC S10E Pro Hauskraftwerk (10.10.10.166) verfügt über ein integriertes Modbus-Modul speziell für IDM Wärmepumpen. Bei vorhandenem PV-Überschuss schreibt das E3DC automatisch und zyklisch den Überschusswert in Register 74 der IDM.
Die Wärmepumpe reagiert darauf und produziert mehr Wärme als für die aktuelle Raumtemperatur nötig wäre — sie „überlädt" gezielt:
- Fußbodenheizung wird höher als Normalniveau temperiert
- Pufferspeicher werden auf erhöhtes Temperaturniveau gebracht
Damit wird thermische Masse als kostenloser Energiespeicher genutzt, um z. B. über die Nacht zu kommen, ohne abends auf teuren Netzstrom angewiesen zu sein.
⚠ Das direkte Schreiben von Register 74 via
idm_set_pv_surplusüberschreibt die E3DC-Vorgabe temporär bis zum nächsten E3DC-Kommunikationszyklus.
Smart Grid Status (Register 1006)
Das zentrale Steuerregister für alle externen Eingriffe:
| Wert | Bezeichnung | Verwendung |
|---|---|---|
0 |
EVU-Sperre & kein PV-Ertrag | WP komplett sperren (Hochpreisstunden) |
1 |
EVU-Bezug & kein PV-Ertrag | Normalbetrieb |
2 |
Kein EVU-Bezug & PV-Ertrag | PV-Überschuss aktiv → WP auf Hochtouren |
4 |
EVU-Sperre & PV-Ertrag | WP läuft trotz Netzsperrung weiter (PV-only) |
Betriebsart System (Register 1005)
| Wert | Bezeichnung |
|---|---|
0 |
Standby |
1 |
Automatik (Normalbetrieb) |
2 |
Abwesend |
4 |
Nur Warmwasser |
5 |
Nur Heizung/Kühlung |
Betriebseinschränkung Spitzenlastzeiten
Die IDM ist eine dreiphasige Erdwärme-Wärmepumpe mit 7,5 kW. Im aktuellen Tarifsystem (Kaskadenzähler ohne Smart Meter Gateway) wird der WP-Betrieb in den Hochpreisstunden 17:00–22:00 Uhr eingeschränkt, um teuren Netzstrombezug zu vermeiden.
Vorbereitung: Zukünftige Strommarktsteuerung
Der Server ist bereits auf eine spätere viertelstündliche Direktvermarktung am Strommarkt vorbereitet — sobald ein Smart Meter Gateway und eine direkte Marktteilnahme möglich sind.
Strategie:
| Zeitfenster | Strompreis | Aktion |
|---|---|---|
| Nachts (günstig) | niedrig | idm_set_smart_grid(2) + Puffer & WW hochladen + E-Auto laden + Batterien füllen |
| 06–08 Uhr | hoch | idm_set_smart_grid(0) → WP sperren, Batterie entladen |
| 17–20 Uhr | hoch | idm_set_smart_grid(0) → WP sperren, aus Wärmespeicher leben |
| PV-Überschuss | — | idm_set_smart_grid(2) → maximale thermische Einlagerung |
Diese Steuerung würde in Verbindung mit E3DC, Victron/Felicity und dem 22-kW-Wallbox- Lader über Node-RED oder einen dedizierten Automations-Flow koordiniert.
Wichtige Hinweise
- EEPROM-Register (mit
*in IDM-Doku): Begrenzte Schreibzyklen → nicht permanent/zyklisch schreiben! - Zyklische Register 1710/1711/1712 und 74: Müssen alle ~30 s geschrieben werden, damit die Anforderung nach einem WP-Neustart wieder anliegt.
- PV-Überschuss Register 74: Im laufenden Betrieb vom E3DC Hauskraftwerk beschrieben — direktes MCP-Schreiben nur für manuelle Tests/Overrides.
- Solltemperaturen nicht permanent schreiben: Bei Navigator Pro führt permanentes Schreiben der Solltemperaturen zu einem Neustart des Zonenmoduls.
- GLT Log: Zur Diagnose kann im IDM-Menü „Gebäudeleittechnik" → „GLT Log Einschalten" aktiviert werden. Zeigt alle Modbus-Lese- und Schreibzugriffe; wird nach 1 Stunde automatisch deaktiviert.
Datentypen
| Typ | Beschreibung |
|---|---|
uint16be |
1 Register, 16-Bit Unsigned Integer, Big-Endian |
floatsw |
2 Register, IEEE-754 Float, Word-vertauscht (Low-Word zuerst = CDAB) |
Float-Dekodierung (struct-basiert, kein pymodbus-Interna)
# Lesen: Reg[0]=Low-Word, Reg[1]=High-Word → float
raw = struct.pack(">HH", registers[1], registers[0])
value = struct.unpack(">f", raw)[0]
# Schreiben: float → [low_word, high_word]
raw = struct.pack(">f", value)
high_word, low_word = struct.unpack(">HH", raw)
registers = [low_word, high_word]
Hintergrund: pymodbus 3.x hat
Endianauspymodbus.constantsund denBinaryPayloadDecoder/Builderentfernt. Diestruct-basierte Implementierung ist unabhängig von pymodbus-internen APIs und damit stabiler.
Modbus-Registerübersicht (Kurzreferenz)
Schlüsselregister
| Adresse | Typ | R/W | Bezeichnung |
|---|---|---|---|
| 74 | floatsw | W | PV-Überschuss (kW) — E3DC schreibt zyklisch |
| 78 | floatsw | R | Aktuelle PV-Produktion (kW) |
| 1000 | floatsw | R | Außentemperatur aktuell (°C) |
| 1002 | floatsw | R | Außentemperatur gemittelt (°C) |
| 1004 | uint16 | R | Aktuelle Störungsnummer (020–999) |
| 1005 | uint16 | RW | Betriebsart System ⚠ EEPROM |
| 1006 | uint16 | RW | Smart Grid Status |
| 1090 | uint16 | R | Betriebsart Wärmepumpe aktiv |
| 1099 | uint16 | R | Summenstörung (0=OK, 1=Störung) |
| 1710 | uint16 | RW | Externe Heizanforderung (zyklisch!) |
| 1711 | uint16 | RW | Externe Kühlanforderung (zyklisch!) |
| 1712 | uint16 | RW | Anforderung Warmwasserladung (zyklisch!) |
| 4122 | floatsw | R | Aktuelle Leistungsaufnahme WP (kW) |
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.