Kühldecke: ESP8266 Multi-Sensor + Grafana (Brunnen/HX) #130

Open
opened 2026-06-25 10:41:42 +00:00 by orbitalo · 2 comments
Owner

Kontext

Passive Brunnendeckenkühlung im Raum unter der Wohnstube soll messbar werden.

  • Brunnenwasser läuft über Plattenwärmetauscher (Primär/Sekundär getrennt)
  • Ersatzpumpe bestellt (alte durch Verpolung zerstört) — Test erst danach
  • Außenreferenz existiert: oelraum → „Außen (temp.)" (~31 °C, Fühler am Kabel draußen)
  • wohnstube-Satellit als Referenz Stockwerk darüber
  • garage-Node war Testknoten — nicht für Kühldecke verwenden

Priorität: Später. Heizraum-Sensor-Verkabelung hat Vorrang (siehe separater Plan Erdtrasse/Heizraum-Knoten).


Ziel

Ein ESP8266 D1 Mini mit 6× DS18B20 am einen OneWire-Bus (GPIO0/D3, 4,7k Pull-up, Powered Mode 3-Draht).

Sensor-Karte (Plattenwärmetauscher)

Brunnen (Primär)                    Sekundär (Kühldecke)
VL_pri ──► [ HX ] ──► RL_pri
              ║
VL_sek ◄── [ HX ] ◄── RL_sek
  │                        ▲
  └── Kühldecke ───────────┘
+ t_decke (Kühlfläche) + t_raum (Raumluft ~1,5 m)
Rolle Montage
vl_pri VL Brunnen, Primär-Eintritt HX
rl_pri RL Brunnen, Primär-Austritt HX
vl_sek VL Kühldecke, Sekundär-Austritt HX
rl_sek RL Kühldecke, Sekundär-Rücklauf HX
t_decke Kühlfläche/Paneel (am Kabel)
t_raum Raumluft Raummitte (~1,5 m)

Box: am Wärmetauscher (4 kurze Fühler) + 2 längere Kabel in den Kühldecken-Raum (5–15 m OneWire OK).

Fühler an Rohren: Rohrschelle + Wärmeleitpaste, Durchflussrohr, kurz isolieren.


MQTT (NODE_NAME=kuehldecke)

kuehldecke/vl_pri
kuehldecke/rl_pri
kuehldecke/vl_sek
kuehldecke/rl_sek
kuehldecke/t_decke
kuehldecke/t_raum
kuehldecke/status   (LWT online/offline, retained)

Broker: CT143 192.168.178.36:1883 (mosquitto, allow_anonymous)


Firmware

Repo: esp-satellite (KI-Server) — Multi-Sensor-Erweiterung nötig.

Aktuelle esp-satellite-Firmware: nur 1 Sensor → <node>/temp.

Benötigt (Muster wie heizraum-knoten):

  • OneWire-Scan aller ROM-Adressen beim Boot
  • sensor_map.h: ROM → Rolle (vl_pri, rl_pri, …)
  • Identify-Modus oder einmalige Zuordnung per Build-Flag
  • Alle 6 Werte alle 10 s publishen, retained, 2 Dezimalstellen
  • LWT auf kuehldecke/status

Build-Flag: -DNODE_NAME='"kuehldecke"'


Telegraf / InfluxDB / Grafana

Telegraf (CT143):

  • Neuer Input kuehldecke/+ analog geplantem heizraum/+
  • DB sensors, Measurement temperature, Tags node=kuehldecke, sensor=<rolle>

Grafana — neues Dashboard oder Panel-Gruppe „Kühldecke":

  • Alle 6 Temperaturen + Außen (oelraum) + Wohnstube
  • Berechnete Spreizungen:
    • ΔT_primär = rl_pri − vl_pri
    • ΔT_sekundär = rl_sek − vl_sek
    • ΔT_komfort = t_raum − t_außen
    • ΔT_decke = t_raum − t_decke

Bewertungslogik:

Beobachtung Bedeutung
ΔT_primär > 0, ΔT_sekundär > 0, t_raum fällt HX + Decke arbeiten
ΔT_primär > 0, ΔT_sekundär ≈ 0 HX- oder Sekundärkreis-Problem
Alles flach trotz Pumpe kein Durchfluss

Optional später: Shelly PM Mini an Pumpe (wie klima_flur_oben).


Abhängigkeiten / Blocker

  • Ersatzpumpe eingebaut
  • Firmware Multi-Sensor für ESP8266
  • Physische Verkabelung 6 Fühler
  • Telegraf-Input + Grafana-Dashboard
  • Doku CT999 (kuehldecke-monitoring.md oder Erweiterung klima-monitoring.md)

Verwandt


Akzeptanzkriterien

  1. Alle 6 MQTT-Topics liefern plausible Werte in InfluxDB sensors
  2. Grafana zeigt Spreizungen und Raum vs. Außen
  3. Bei laufender Pumpe ist ΔT_sekundär > 0,5 °C sichtbar
  4. CT999-Doku beschreibt Sensororte und Interpretation
## Kontext Passive **Brunnendeckenkühlung** im Raum unter der Wohnstube soll messbar werden. - Brunnenwasser läuft über **Plattenwärmetauscher** (Primär/Sekundär getrennt) - Ersatzpumpe bestellt (alte durch Verpolung zerstört) — Test erst danach - Außenreferenz existiert: `oelraum` → „Außen (temp.)" (~31 °C, Fühler am Kabel draußen) - `wohnstube`-Satellit als Referenz Stockwerk darüber - `garage`-Node war Testknoten — **nicht** für Kühldecke verwenden **Priorität:** Später. Heizraum-Sensor-Verkabelung hat Vorrang (siehe separater Plan Erdtrasse/Heizraum-Knoten). --- ## Ziel Ein **ESP8266 D1 Mini** mit **6× DS18B20** am **einen** OneWire-Bus (GPIO0/D3, 4,7k Pull-up, Powered Mode 3-Draht). ### Sensor-Karte (Plattenwärmetauscher) ``` Brunnen (Primär) Sekundär (Kühldecke) VL_pri ──► [ HX ] ──► RL_pri ║ VL_sek ◄── [ HX ] ◄── RL_sek │ ▲ └── Kühldecke ───────────┘ + t_decke (Kühlfläche) + t_raum (Raumluft ~1,5 m) ``` | Rolle | Montage | |-------|--------| | `vl_pri` | VL Brunnen, Primär-Eintritt HX | | `rl_pri` | RL Brunnen, Primär-Austritt HX | | `vl_sek` | VL Kühldecke, Sekundär-Austritt HX | | `rl_sek` | RL Kühldecke, Sekundär-Rücklauf HX | | `t_decke` | Kühlfläche/Paneel (am Kabel) | | `t_raum` | Raumluft Raummitte (~1,5 m) | **Box:** am Wärmetauscher (4 kurze Fühler) + 2 längere Kabel in den Kühldecken-Raum (5–15 m OneWire OK). Fühler an Rohren: Rohrschelle + Wärmeleitpaste, Durchflussrohr, kurz isolieren. --- ## MQTT (NODE_NAME=`kuehldecke`) ``` kuehldecke/vl_pri kuehldecke/rl_pri kuehldecke/vl_sek kuehldecke/rl_sek kuehldecke/t_decke kuehldecke/t_raum kuehldecke/status (LWT online/offline, retained) ``` Broker: CT143 `192.168.178.36:1883` (mosquitto, allow_anonymous) --- ## Firmware **Repo:** `esp-satellite` (KI-Server) — **Multi-Sensor-Erweiterung** nötig. Aktuelle `esp-satellite`-Firmware: nur 1 Sensor → `<node>/temp`. Benötigt (Muster wie `heizraum-knoten`): - OneWire-Scan aller ROM-Adressen beim Boot - `sensor_map.h`: ROM → Rolle (`vl_pri`, `rl_pri`, …) - Identify-Modus oder einmalige Zuordnung per Build-Flag - Alle 6 Werte alle 10 s publishen, retained, 2 Dezimalstellen - LWT auf `kuehldecke/status` Build-Flag: `-DNODE_NAME='"kuehldecke"'` --- ## Telegraf / InfluxDB / Grafana **Telegraf** (CT143): - Neuer Input `kuehldecke/+` analog geplantem `heizraum/+` - DB `sensors`, Measurement `temperature`, Tags `node=kuehldecke`, `sensor=<rolle>` **Grafana** — neues Dashboard oder Panel-Gruppe „Kühldecke": - Alle 6 Temperaturen + Außen (`oelraum`) + Wohnstube - Berechnete Spreizungen: - `ΔT_primär = rl_pri − vl_pri` - `ΔT_sekundär = rl_sek − vl_sek` - `ΔT_komfort = t_raum − t_außen` - `ΔT_decke = t_raum − t_decke` **Bewertungslogik:** | Beobachtung | Bedeutung | |---|---| | ΔT_primär > 0, ΔT_sekundär > 0, t_raum fällt | HX + Decke arbeiten | | ΔT_primär > 0, ΔT_sekundär ≈ 0 | HX- oder Sekundärkreis-Problem | | Alles flach trotz Pumpe | kein Durchfluss | Optional später: Shelly PM Mini an Pumpe (wie `klima_flur_oben`). --- ## Abhängigkeiten / Blocker - [ ] Ersatzpumpe eingebaut - [ ] Firmware Multi-Sensor für ESP8266 - [ ] Physische Verkabelung 6 Fühler - [ ] Telegraf-Input + Grafana-Dashboard - [ ] Doku CT999 (`kuehldecke-monitoring.md` oder Erweiterung `klima-monitoring.md`) --- ## Verwandt - #129 MCP homelab-sensors (strukturierter Zugriff für Hermes/Bot) - Heizraum-Knoten: Erdtrasse VL/RL (`heizraum/vl_erd_ab`, …) — **heute Verkabelung** - Ölraum-Messknoten (ESP32, 4 Fühler Nebengelass) — separater Plan - Klima-Dashboard: https://grafana.orbitalo.net/d/klima-bewertung/klimatisierung --- ## Akzeptanzkriterien 1. Alle 6 MQTT-Topics liefern plausible Werte in InfluxDB `sensors` 2. Grafana zeigt Spreizungen und Raum vs. Außen 3. Bei laufender Pumpe ist ΔT_sekundär > 0,5 °C sichtbar 4. CT999-Doku beschreibt Sensororte und Interpretation
Author
Owner

Hardware-Korrektur: OneWire-Pin

GPIO0 / D3 vermeiden für den Kühldecke-Knoten (verbaut, 6 Fühler, langer Bus, Feuchte am HX).

GPIO0 ist Boot-Strap: beim Reset muss HIGH sein, sonst Flash-Modus oder kein sauberer Boot. OneWire-Bus kann beim Einschalten kurz nach GND gezogen werden (Kapazität, Feuchtigkeit, defekter Sensor) → Ausfallrisiko.

Empfohlen: GPIO4 / D2

Pin GPIO Boot-Strap? Eignung OneWire
D2 GPIO4 nein bevorzugt
D1 GPIO5 nein gut
D5 GPIO14 nein gut
D3 GPIO0 ja (HIGH) nur Kurztest / Raum-Satellit
D8 GPIO15 ja (LOW) vermeiden
D4 GPIO2 ja (HIGH) geht, oft LED onboard

Build-Flag: -DONEWIRE_PIN=4

Weitere Verbau-Hinweise:

  • 4,7k Pull-up extern an 3,3V (nicht nur intern)
  • DS18B20 3-Draht Powered Mode
  • Lange Busleitung: optional 100Ω Reihenwiderstand in Data-Leitung
  • Box am HX mit Kabelverschraubung (Feuchte)

Bestehende Raum-Satelliten auf GPIO0: für kurzes Kabel im Wohnraum akzeptabel — Kühldecke ist härteres Szenario.

## Hardware-Korrektur: OneWire-Pin **GPIO0 / D3 vermeiden** für den Kühldecke-Knoten (verbaut, 6 Fühler, langer Bus, Feuchte am HX). GPIO0 ist Boot-Strap: beim Reset muss HIGH sein, sonst Flash-Modus oder kein sauberer Boot. OneWire-Bus kann beim Einschalten kurz nach GND gezogen werden (Kapazität, Feuchtigkeit, defekter Sensor) → Ausfallrisiko. ### Empfohlen: **GPIO4 / D2** | Pin | GPIO | Boot-Strap? | Eignung OneWire | |-----|------|-------------|------------------| | D2 | GPIO4 | nein | **bevorzugt** | | D1 | GPIO5 | nein | gut | | D5 | GPIO14 | nein | gut | | D3 | GPIO0 | **ja (HIGH)** | nur Kurztest / Raum-Satellit | | D8 | GPIO15 | **ja (LOW)** | vermeiden | | D4 | GPIO2 | **ja (HIGH)** | geht, oft LED onboard | Build-Flag: `-DONEWIRE_PIN=4` Weitere Verbau-Hinweise: - 4,7k Pull-up **extern** an 3,3V (nicht nur intern) - DS18B20 **3-Draht** Powered Mode - Lange Busleitung: optional 100Ω Reihenwiderstand in Data-Leitung - Box am HX mit Kabelverschraubung (Feuchte) Bestehende Raum-Satelliten auf GPIO0: für kurzes Kabel im Wohnraum akzeptabel — Kühldecke ist härteres Szenario.
Author
Owner

Leistungsberechnung (Spezifikation)

Ziel: reale Kühlleistung rechnerisch abschätzen aus Temperaturspreizung + Volumenstrom (nicht nur Raumtemperatur).

Formel

Q_kW = Durchfluss_L/min × 0,0698 × ΔT_K

Primärseite Brunnen (Start — Durchfluss per Wasseruhr):

Q_kühl = Durchfluss_Brunnen_L/min × 0,0698 × (rl_pri - vl_pri)

vl_pri = Brunnen-Eintritt HX (Primär)
rl_pri = Brunnen-Austritt HX (Primär)
ΔT_primär = rl_pri - vl_pri

rl_pri > vl_pri → Brunnenwasser nimmt Wärme auf → entspricht Kühlleistung (abzüglich HX-/Leitungsverluste).

Sekundärseite (optional, Vergleich):

Q_sek = Durchfluss_Sekundär_L/min × 0,0698 × (rl_sek - vl_sek)

Durchfluss per Wasseruhr (manuell, Kalibrierwert)

  1. Ersatzpumpe ein, Anlage normal betreiben
  2. Pumpe einige Minuten laufen lassen (stabile Temperaturen)
  3. Startwert Wasseruhr notieren
  4. 5–10 min laufen lassen
  5. Endwert notieren → Liter-Differenz → L/min
  6. Wert als fester Parameter in Grafana (Dashboard-Variable)

Beispiel: 60 L in 10 min → 6 L/min

Bei Änderung von Filter, Pumpe, Ventilen oder Hydraulik → erneut messen.

Beispielrechnung

Durchfluss: 6 L/min
vl_pri: 14,0 °C | rl_pri: 17,0 °C | ΔT: 3,0 K

Q_kühl = 6 × 0,0698 × 3,0 = 1,26 kW

Grafana-Berechnungen

Kennwert Formel
ΔT_primär rl_pri - vl_pri
ΔT_sekundär rl_sek - vl_sek
ΔT_decke t_raum - t_decke
ΔT_komfort t_raum - t_außen
Q_kühl_kW Durchfluss_L/min × 0,0698 × ΔT_primär

Durchfluss_L/min = Dashboard-Variable (manuell kalibriert).

Referenzen: oelraum (Außen), wohnstube (Stockwerk darüber).

Bewertungslogik

Zustand Bedeutung
ΔT_primär > 0, ΔT_sekundär > 0, t_raum fällt HX + Brunnen + Decke arbeiten
ΔT_primär > 0, ΔT_sekundär ≈ 0 Primär OK, Sekundär Problem (Pumpe, Luft, Ventil, HX)
ΔT ≈ 0, t_decke ≈ t_raum Keine wirksame Kühlung (kein Durchfluss, Pumpe aus, Luft)
t_decke << t_raum, t_raum stagniert Lokale Kühlung, Leistung reicht nicht / Masse noch warm

Zusätzlich plausibel wenn: t_decke < t_raum, t_raum unter Außen/Wohnstube.

Grenzen

Praxisnahe Abschätzung, keine eichte Wärmemengenzählung. Größenordnung und erkennbare Wärmeabfuhr sind das Ziel — nicht Nachkommastellen-Genauigkeit.

Q_primär und Q_sek sollten bei gutem HX ähnlich sein (Differenz = Verluste).

## Leistungsberechnung (Spezifikation) Ziel: reale **Kühlleistung** rechnerisch abschätzen aus **Temperaturspreizung + Volumenstrom** (nicht nur Raumtemperatur). ### Formel ```text Q_kW = Durchfluss_L/min × 0,0698 × ΔT_K ``` **Primärseite Brunnen** (Start — Durchfluss per Wasseruhr): ```text Q_kühl = Durchfluss_Brunnen_L/min × 0,0698 × (rl_pri - vl_pri) vl_pri = Brunnen-Eintritt HX (Primär) rl_pri = Brunnen-Austritt HX (Primär) ΔT_primär = rl_pri - vl_pri ``` `rl_pri > vl_pri` → Brunnenwasser nimmt Wärme auf → entspricht Kühlleistung (abzüglich HX-/Leitungsverluste). **Sekundärseite** (optional, Vergleich): ```text Q_sek = Durchfluss_Sekundär_L/min × 0,0698 × (rl_sek - vl_sek) ``` ### Durchfluss per Wasseruhr (manuell, Kalibrierwert) 1. Ersatzpumpe ein, Anlage normal betreiben 2. Pumpe einige Minuten laufen lassen (stabile Temperaturen) 3. Startwert Wasseruhr notieren 4. 5–10 min laufen lassen 5. Endwert notieren → Liter-Differenz → **L/min** 6. Wert als **fester Parameter** in Grafana (Dashboard-Variable) Beispiel: 60 L in 10 min → **6 L/min** Bei Änderung von Filter, Pumpe, Ventilen oder Hydraulik → **erneut messen**. ### Beispielrechnung ```text Durchfluss: 6 L/min vl_pri: 14,0 °C | rl_pri: 17,0 °C | ΔT: 3,0 K Q_kühl = 6 × 0,0698 × 3,0 = 1,26 kW ``` ### Grafana-Berechnungen | Kennwert | Formel | |----------|--------| | ΔT_primär | `rl_pri - vl_pri` | | ΔT_sekundär | `rl_sek - vl_sek` | | ΔT_decke | `t_raum - t_decke` | | ΔT_komfort | `t_raum - t_außen` | | **Q_kühl_kW** | `Durchfluss_L/min × 0,0698 × ΔT_primär` | `Durchfluss_L/min` = Dashboard-Variable (manuell kalibriert). Referenzen: `oelraum` (Außen), `wohnstube` (Stockwerk darüber). ### Bewertungslogik | Zustand | Bedeutung | |---------|----------| | ΔT_primär > 0, ΔT_sekundär > 0, t_raum fällt | HX + Brunnen + Decke arbeiten | | ΔT_primär > 0, ΔT_sekundär ≈ 0 | Primär OK, Sekundär Problem (Pumpe, Luft, Ventil, HX) | | ΔT ≈ 0, t_decke ≈ t_raum | Keine wirksame Kühlung (kein Durchfluss, Pumpe aus, Luft) | | t_decke << t_raum, t_raum stagniert | Lokale Kühlung, Leistung reicht nicht / Masse noch warm | Zusätzlich plausibel wenn: `t_decke < t_raum`, `t_raum` unter Außen/Wohnstube. ### Grenzen Praxisnahe Abschätzung, keine eichte Wärmemengenzählung. Größenordnung und erkennbare Wärmeabfuhr sind das Ziel — nicht Nachkommastellen-Genauigkeit. Q_primär und Q_sek sollten bei gutem HX **ähnlich** sein (Differenz = Verluste).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: orbitalo/homelab-brain#130
No description provided.