NEWS
Test Adapter PoolControl
-
Guten Morgen. Na klar schicke ich mal die Screenshots.
Results

Logbook
Inputs
Calculation
Debug
Guten Morgen. Na klar schicke ich mal die Screenshots.
Hallo Dennis,
vielen Dank nochmal für deine Hinweise und dein genaues Hinschauen – das hilft mir wirklich enorm weiter 👍
Ich habe mir das Ganze inzwischen nochmal genauer angesehen und dabei aktuell zwei Fehler identifiziert. Die werde ich heute Abend bzw. spätestens morgen sauber beheben und dann mit einer neuen Version veröffentlichen.
Bis dahin bitte ich noch um ein wenig Geduld.
Danke dir nochmal für deine Unterstützung und dein Feedback!
Viele Grüße
Dirk -
ich habe heute die Version 1.3.9 nachgeschoben.
Dabei habe ich mehrere Fehler im Solar-Logbook und im Solar-Insights-Bereich behoben. Unter anderem wurden teilweise Logeinträge gar nicht erstellt bzw. doppelt geschrieben, außerdem gab es Probleme bei Zeitstempeln und der Tagesauswertung (z. B. solar_ran_today und active_minutes_today). Diese Punkte sollten jetzt wieder sauber und nachvollziehbar funktionieren.
Zusätzlich habe ich die Stabilität des Loggings verbessert und die Verarbeitung der Wettertexte optimiert.
Vielen Dank an Dennis für die hilfreichen Hinweise und das genaue Mitprüfen 👍
-
Moin ihr alle,
ich habe mir heute mal die Zeit genommen, ein bisschen mit den Daten aus den Datenpunkten der Solarauswertung zu spielen und habe mir daraus eine kleine Solar-COP-Auswertung in VIS mit einem HTML-Widget gebastelt.
Ich wollte euch einfach mal daran teilhaben lassen, wie sowas aussehen kann 🙂
Die Daten kommen komplett aus den vorhandenen States (z. B. Laufzeit, geschätzter Solarertrag, Leistung, Temperaturen usw.), daraus habe ich mir eine kompakte Übersicht gebaut mit:
- Tagesstatus (ob Solar überhaupt aktiv war)
- Laufzeit in Minuten
- Solarertrag und Spitzenleistung
- COP-/Effizienz-Bewertung als kleines Sternesystem
- und einem Logbuch mit den Tagesereignissen
Das Ganze läuft rein über ein HTML-Widget und wertet die JSON- bzw. Text-Datenpunkte aus, die der Adapter sowieso schon liefert.
Die Kombination aus:
- kompakter Zusammenfassung oben
- farblicher Bewertung
- und Logbuch darunter
macht es für mich deutlich übersichtlicher als einzelne States durchzuklicken.
Aktuell ist bei mir noch nicht viel zu sehen, weil:
- es mitten in der Nacht ist 😄
- und die Solarerträge momentan wegen dem Wetter eh ziemlich mau sind
Falls jemand Interesse an dem HTML-Code für das Widget hat, einfach kurz Bescheid sagen – ich kann das gerne teilen.
Feedback oder Ideen sind natürlich auch willkommen!

-
Ich hätte da grundsätzlich Interesse dran. Das wäre klasse, wenn du das teilen würdest.
PS: Solarauswertung scheint jetzt auch bei mir zu funktionieren.
-
Ich hätte da grundsätzlich Interesse dran. Das wäre klasse, wenn du das teilen würdest.
PS: Solarauswertung scheint jetzt auch bei mir zu funktionieren.
-
Hier mal der html Code für das html widget.
<div style="width:100%;height:100%;box-sizing:border-box;font-family:Arial,sans-serif;color:white;overflow:hidden;"> <div id="solarCopHeaderV5" style=" width:100%; box-sizing:border-box; padding:7px 10px; margin-bottom:7px; background:rgba(5,20,32,.94); border:1px solid rgba(0,216,255,.45); border-radius:8px; color:#00d8ff; font-weight:bold; font-size:15px; letter-spacing:.3px; "> Solar COP Auswertung <div id="solarCopStatsV5" style=" margin-top:5px; color:#ffffff; font-weight:normal; font-size:10px; line-height:1.35; ">lade Tageswerte...</div> </div> <div id="solarLogbookV5" style=" width:100%; height:calc(100% - 76px); overflow-y:auto; padding:0 4px 8px 4px; box-sizing:border-box; "> lade... </div> </div> <script> (function () { var baseLog = "poolcontrol.0.analytics.insights.solar.logbook"; var dpText = baseLog + ".day_log_text"; var baseResults = "poolcontrol.0.analytics.insights.solar.results"; var targetId = "solarLogbookV5"; var statsId = "solarCopStatsV5"; function esc(t) { t = String(t || ""); t = t.replace(/&/g, "&"); t = t.replace(/</g, "<"); t = t.replace(/>/g, ">"); return t; } function val(states, id, fallback) { if (states && states[id] && states[id].val !== undefined && states[id].val !== null && states[id].val !== "") { return states[id].val; } return fallback; } function cleanNumber(v, fallback) { if (v === null || v === undefined) return fallback; v = String(v).trim(); if (v === "" || v === "(null)" || v === "null" || v === "undefined" || v === "$null") { return fallback; } v = v.replace(",", ".").replace(/[^\d.-]/g, ""); var n = parseFloat(v); if (isNaN(n)) return fallback; return n; } function formatNumber(n, d) { n = cleanNumber(n, 0); return n.toFixed(d).replace(".", ","); } function getDeltaColor(delta) { if (delta === null) return "#9fb3c8"; if (delta < 0) return "#ff5c5c"; if (delta <= 1.5) return "#ffb13b"; return "#00ff88"; } function getColor(text) { if (text.indexOf("nicht gelaufen") !== -1 || text.indexOf("kein sinnvoller") !== -1) return "#ffb13b"; if (text.indexOf("Fehler") !== -1 || text.indexOf("Warnung") !== -1) return "#ff5c5c"; if (text.indexOf("OK") !== -1 || text.indexOf("gut") !== -1 || text.indexOf("gelaufen") !== -1) return "#00ff88"; return "#00d8ff"; } function calcCopScore(min, cop) { if (min <= 0 || cop === null || cop <= 0) return 0; if (cop < 2) return 1; if (cop < 4) return 2; if (cop < 6) return 3; if (cop < 8) return 4; return 5; } function stars(score) { var s = ""; var i; var activeColor = score >= 4 ? "#00ff88" : "#ffb13b"; for (i = 1; i <= 5; i++) { if (i <= score) { s += "<span style='color:" + activeColor + ";'>★</span>"; } else { s += "<span style='color:#555;'>☆</span>"; } } return s; } function renderStats(states) { var el = document.getElementById(statsId); if (!el) return; var min = cleanNumber(val(states, baseResults + ".active_minutes_today", 0), 0); var kwh = cleanNumber(val(states, baseResults + ".estimated_gain_today_kwh", 0), 0); var peak = cleanNumber(val(states, baseResults + ".peak_power_today_w", 0), 0); var copRaw = cleanNumber(val(states, baseResults + ".estimated_efficiency_ratio", null), null); var ran = val(states, baseResults + ".solar_ran_today", false); var effective = val(states, baseResults + ".solar_effective_now", false); var state = val(states, baseResults + ".solar_gain_state", "no_data"); var collector = cleanNumber(val(states, baseResults + ".collector_temp_used", "-"), null); var delta = cleanNumber(val(states, baseResults + ".delta_t_used", "-"), null); var deltaColor = getDeltaColor(delta); var cop = null; var copText = "-"; var copColor = "#9fb3c8"; if (min > 0 && copRaw !== null && copRaw > 0) { cop = copRaw; copText = formatNumber(cop, 2); copColor = cop >= 6 ? "#00ff88" : (cop >= 2 ? "#ffb13b" : "#ff5c5c"); } var statusText = "Heute: keine Aktivität"; var statusColor = "#ffb13b"; if (ran === true || ran === "true" || min > 0) { statusText = "Heute: Solar war aktiv"; statusColor = "#00ff88"; } if (effective === true || effective === "true") { statusText = "Solar aktuell wirksam"; statusColor = "#00ff88"; } var kwhColor = kwh > 0 ? "#00ff88" : "#ffb13b"; var score = calcCopScore(min, cop); var scoreColor = score >= 4 ? "#00ff88" : (score >= 2 ? "#ffb13b" : "#9fb3c8"); el.innerHTML = "<span style='color:" + statusColor + ";font-weight:bold;'>" + esc(statusText) + "</span>" + " | COP: <b style='color:" + copColor + ";'>" + esc(copText) + "</b>" + " | COP-Score: <b style='color:" + scoreColor + ";letter-spacing:1px;'>" + stars(score) + " (" + score + "/5)</b>" + " | Laufzeit: <b>" + esc(formatNumber(min, 0)) + " min</b>" + " | Solarertrag: <b style='color:" + kwhColor + ";'>" + esc(formatNumber(kwh, 2)) + " kWh</b>" + " | Solarspitze: <b>" + esc(formatNumber(peak, 0)) + " W</b>" + "<br>" + "Status: <b>" + esc(state) + "</b>" + " | Kollektor: <b>" + esc(collector === null ? "-" : formatNumber(collector, 1)) + " °C</b>" + " | ΔT: <b style='color:" + deltaColor + ";'>" + esc(delta === null ? "-" : formatNumber(delta, 1)) + " K</b>"; } function renderLog(raw) { var box = document.getElementById(targetId); if (!box) return; if (!raw || raw === "undefined" || raw === "null" || raw === "$null") { box.innerHTML = "<div style='color:#ffb13b;padding:10px;font-size:10px;'>Keine Logbuchdaten vorhanden.</div>"; return; } var lines = String(raw).split(/\r?\n/).reverse(); var html = ""; var i; for (i = 0; i < lines.length; i++) { var line = lines[i].trim(); if (!line) continue; var m = line.match(/^([0-9]{2}:[0-9]{2})\s*-\s*(.*)$/); var time = ""; var text = line; if (m) { time = m[1]; text = m[2]; } var firstSentence = text.split(". ")[0] || text; if (firstSentence.length > 120) { firstSentence = firstSentence.substring(0, 120) + "..."; } var color = getColor(text); var bg = "rgba(0,30,50,.65)"; var border = "rgba(0,170,255,.35)"; if (i < 3) { bg = "rgba(0,50,80,.82)"; border = color; } html += "" + "<div style='display:grid;grid-template-columns:54px 1fr;gap:8px;border:1px solid " + border + ";border-radius:8px;padding:6px 8px;margin-bottom:7px;background:" + bg + ";box-shadow:0 0 8px rgba(0,0,0,.35);'>" + "<div style='color:" + color + ";font-weight:bold;font-size:10px;white-space:nowrap;'>" + esc(time) + "</div>" + "<div style='color:#ffffff;font-size:10px;line-height:1.28;'>" + "<div style='font-weight:bold;color:#ffffff;margin-bottom:2px;'>" + esc(firstSentence) + "</div>" + "<div style='opacity:.72;'>" + esc(text) + "</div>" + "</div>" + "</div>"; } box.innerHTML = html; } function refresh() { vis.conn.getStates(baseLog + ".*", function (errLog, logStates) { var raw = ""; if (!errLog && logStates && logStates[dpText]) { raw = logStates[dpText].val; } renderLog(raw); }); vis.conn.getStates(baseResults + ".*", function (errRes, resultStates) { renderStats(resultStates || {}); }); } function startWhenReady() { if (typeof vis !== "undefined" && vis.conn && vis.conn.getStates) { refresh(); setInterval(refresh, 60000); } else { setTimeout(startWhenReady, 500); } } startWhenReady(); })(); </script> -
Vielen Dank, werde ich testen
-
Mit der Version 1.3.10 habe ich einige größere Erweiterungen und Verbesserungen rund um die Photovoltaik-Integration umgesetzt.
✨ Neu: Photovoltaic Insights
Ich habe einen neuen Analysebereich analytics.insights.photovoltaic eingeführt.
Damit werte ich jetzt aus:
wie lange die Pumpe durch PV-Überschuss gelaufen ist
wie viel Energie dabei genutzt wurde
und welche Einsparung sich daraus ungefähr ergibtDazu gibt es:
einen neuen Helper (photovoltaicInsightsHelper)
eine eigene State-Struktur (Inputs, Calculation, Results, Debug)
sowie Zusammenfassungen als Text, JSON und HTMLDer Bereich ist vollständig in das bestehende i18n-System integriert.
🔧 Verbesserung: Active Helper Handling
Ich habe das Handling von pump.active_helper vereinheitlicht.
Folgende Helper unterstützen das jetzt sauber:
photovoltaicHelper
solarHelper
solarExtendedHelperBisher haben einige dieser Helper den Status nicht gesetzt, wenn sie die Pumpe gesteuert haben.
Das habe ich jetzt vereinheitlicht.Jeder Helper:
setzt sich selbst als aktiven Helper, wenn er die Pumpe steuert
gibt die Kontrolle wieder frei, wenn er fertig ist
überschreibt keine anderen aktiven HelperZusätzlich kann der Datenpunkt pump.active_helper jetzt auch sehr gut für Visualisierungen genutzt werden,
um direkt zu sehen, welcher Helper aktuell die Pumpe steuert und warum sie läuft.Das sorgt für eine saubere Prioritätslogik und verhindert Konflikte zwischen den Helpern.
🧠 Verbesserung: PV-Laufzeit-Auswertung
Die PV-Laufzeit wird jetzt nur noch gezählt, wenn:
tatsächlich PV-Überschuss aktiv ist
und der photovoltaicHelper die Pumpe auch wirklich steuertDadurch sind die Werte für Laufzeit, Energie und Einsparung deutlich genauer.
🐛 Fix: PV-Umwälzlogik
Ich habe einen Fehler behoben, bei dem die Pumpe gestoppt wurde, obwohl
photovoltaic.ignore_on_circulation = false gesetzt war.Die Prüfung der Umwälzmenge greift jetzt nur noch, wenn diese Option auch wirklich aktiviert ist.
-
Hallo zusammen,
ich habe soeben die Version 1.3.11 veröffentlicht.
Die Version ist diesmal relativ schnell nach der letzten erschienen, weil sich ein Fehler in der Solarsteuerung eingeschlichen hatte.
Konkret haben sichsolarHelperundsolarExtendedHelperbeim Datenpunkt für die Sprachausgabe (speech.solar_active) gegenseitig beeinflusst. Im ungünstigsten Fall führte das dazu, dass die Sprachausgabe minütlich zwischen „eingeschaltet“ und „beendet“ gewechselt hat.Das Verhalten ist jetzt korrigiert. Die beiden Solarmodi sind sauber voneinander getrennt und beeinflussen sich nicht mehr gegenseitig. Die Sprachausgabe arbeitet damit wieder stabil.
Da ich ohnehin am Code war, habe ich zusätzlich zwei größere Funktionen integriert, die ich ohnehin als nächste Schritte geplant hatte:
Neu: pH-Auswertung (chemistry.ph)
- Unterstützung für manuelle Eingabe und externe Datenpunkte
- Berücksichtigung des Messortes (Pool, Messstrecke etc.)
- Plausibilitätsprüfung und Statusbewertung
- Verständliche Handlungsempfehlungen (keine automatische Dosierung)
- Optionaler Mischlauf mit sauberem Pumpen-Handling
- Erste Historienfunktionen
Neu: TDS-Auswertung (chemistry.tds)
- Unterstützung für manuelle Eingabe und externe Datenpunkte
- Trendanalyse über 24h, 7 Tage und 30 Tage
- Referenzwert (Startwert) zur Bewertung der Wasserentwicklung
- Bewertung auf Basis von Trend, Absolutwert und Veränderung
- Speicherung von Messwerten für die Trendberechnung
- Ausgaben als Text, JSON und HTML für spätere Visualisierung
Wie immer gilt:
Das Ganze ist bewusst erstmal ohne automatische Chemie-Steuerung umgesetzt. Fokus liegt auf sauberer Auswertung und nachvollziehbaren Hinweisen.Falls euch beim Testen noch etwas auffällt oder ihr Ideen habt, gerne melden 🙂
Viele Grüße
DasBo -
Mit Version 1.3.13 wurde die Projektdokumentation erweitert.
Neu hinzugekommen ist eine ausführliche Funktionsübersicht des Adapters in deutscher und englischer Sprache unter docs/de und docs/en.
Die Dokumentation beschreibt die wichtigsten Bereiche und Funktionen von PoolControl, darunter Pumpensteuerung, Solar/PV, Statistik-, Insights- sowie Chemie- und Analysefunktionen.Zusätzlich wurde ein ungültiger common.installedFrom-Eintrag in der io-package.json bereinigt.
-
Moin.
Ich habe heute festgestellt, dass bei mir im Zeitmodus die Umwälzmenge in circulation/daily_total nicht angepasst wird. Im Automatikmodus funktioniert es.Aktuelle Version: v1.3.15
-
Hallo zusammen,
ich habe soeben die Version 1.3.17 von PoolControl ins latest-Repository hochgeladen.
Neu dabei:
- Fehler bei der Umwälzberechnung im Zeitmodus behoben
- Sprachsystem und Runtime-Persistenz weiter stabilisiert
- Wiederholte Solar-Benachrichtigungen reduziert
- weitere interne Stabilitätsverbesserungen
Zusätzlich ist jetzt der neue ORP-/Redox-Bereich vollständig mit integriert:
- neuer Bereich unter
chemistry.orp - ORP-Eingabe über
disabled,manualoder externen State - Unterstützung für ORP-Werte in mV
- Einbindung der bestehenden pH-Werte als Referenz
- Messort-, Pumpen- und Stabilisierungslogik analog zu pH/TDS
- Trend-, History- sowie Text-/HTML-/JSON-Ausgaben
- bewusst ohne automatische Dosierung oder Chlorsteuerung
Außerdem wurde die bestehende pH-Struktur erweitert und an die neuen TDS-/ORP-Bereiche angepasst.
Ein besonderer Dank geht an @dennismenger für den Hinweis zur Umwälzberechnung im Zeitmodus. Dadurch konnte ich die Ursache eingrenzen und beheben.
Wie immer freue ich mich über Feedback und Rückmeldungen aus euren produktiven Systemen.
Viele Grüße
DasBo -
@dasbo1975 kein Problem ... wir testen nur. Die meiste Arbeit hast ja du.
Funktioniert jetzt einwandfrei. Danke
-
Hallo zusammen,
ich habe soeben die Version 1.3.17 von PoolControl ins latest-Repository hochgeladen.
Neu dabei:
- Fehler bei der Umwälzberechnung im Zeitmodus behoben
- Sprachsystem und Runtime-Persistenz weiter stabilisiert
- Wiederholte Solar-Benachrichtigungen reduziert
- weitere interne Stabilitätsverbesserungen
Zusätzlich ist jetzt der neue ORP-/Redox-Bereich vollständig mit integriert:
- neuer Bereich unter
chemistry.orp - ORP-Eingabe über
disabled,manualoder externen State - Unterstützung für ORP-Werte in mV
- Einbindung der bestehenden pH-Werte als Referenz
- Messort-, Pumpen- und Stabilisierungslogik analog zu pH/TDS
- Trend-, History- sowie Text-/HTML-/JSON-Ausgaben
- bewusst ohne automatische Dosierung oder Chlorsteuerung
Außerdem wurde die bestehende pH-Struktur erweitert und an die neuen TDS-/ORP-Bereiche angepasst.
Ein besonderer Dank geht an @dennismenger für den Hinweis zur Umwälzberechnung im Zeitmodus. Dadurch konnte ich die Ursache eingrenzen und beheben.
Wie immer freue ich mich über Feedback und Rückmeldungen aus euren produktiven Systemen.
Viele Grüße
DasBoAußerdem wurde die bestehende pH-Struktur erweitert und an die neuen TDS-/ORP-Bereiche angepasst.
Warum sind die Zeitwerte alle in der Zukunft?

-
Außerdem wurde die bestehende pH-Struktur erweitert und an die neuen TDS-/ORP-Bereiche angepasst.
Warum sind die Zeitwerte alle in der Zukunft?

Außerdem wurde die bestehende pH-Struktur erweitert und an die neuen TDS-/ORP-Bereiche angepasst.
Warum sind die Zeitwerte alle in der Zukunft?
Okay. Das ist gruselig. Bei mir ist mir das bislang noch nicht aufgefallen. Stimmt denn die Zeitwerte bei dir auf dem Rechner?
Wenn ich heute Abend zu Hause bin, dann werde ich mir das anschauen
-
Außerdem wurde die bestehende pH-Struktur erweitert und an die neuen TDS-/ORP-Bereiche angepasst.
Warum sind die Zeitwerte alle in der Zukunft?
Okay. Das ist gruselig. Bei mir ist mir das bislang noch nicht aufgefallen. Stimmt denn die Zeitwerte bei dir auf dem Rechner?
Wenn ich heute Abend zu Hause bin, dann werde ich mir das anschauen
-
Mit Version 1.3.18 habe ich einen Fehler in den Zeit-/Datumsanzeigen der pH-, ORP- und TDS-Bereiche behoben.
Vielen Dank an @sigi234 für den Hinweis und das genaue Beobachten. 👍
Ursache war letztlich die Art, wie die Zeitstates intern gespeichert wurden. Einige
value.time-Datenpunkte wurden bislang mit lokal formatierten Datumsstrings beschrieben. Je nach ioBroker/Admin-Interpretation konnte das zu falschen Datumsanzeigen führen.Die betroffenen Zeitstates werden jetzt ioBroker-konform als numerische Millisekunden-Timestamps gespeichert. Zusätzlich habe ich eine rückwärtskompatible Behandlung älterer Werte eingebaut, damit bestehende Installationen sauber weiterlaufen.
Betroffen waren:
- pH-Auswertung
- ORP-/Redox-Auswertung
- TDS-Auswertung
Bei mir im Produktiv- und Testsystem laufen die Zeitanzeigen jetzt wieder korrekt.
-
@dasbo1975 heute leider wieder das Problem, dass im Zeitmodus die Umwälzmenge nicht aktualisiert wird. Sowohl mit der Version 1.3.18, als auch mit der 1.3.17. Wenn ich händisch den Schalter pump_switch einschalte, dann wird die Umwälzmenge gezählt. Schaltet die Pumpe über die Zeitsteuerung ein, dann passiert nix.
-
Mit Version 1.3.18 habe ich einen Fehler in den Zeit-/Datumsanzeigen der pH-, ORP- und TDS-Bereiche behoben.
Vielen Dank an @sigi234 für den Hinweis und das genaue Beobachten. 👍
Ursache war letztlich die Art, wie die Zeitstates intern gespeichert wurden. Einige
value.time-Datenpunkte wurden bislang mit lokal formatierten Datumsstrings beschrieben. Je nach ioBroker/Admin-Interpretation konnte das zu falschen Datumsanzeigen führen.Die betroffenen Zeitstates werden jetzt ioBroker-konform als numerische Millisekunden-Timestamps gespeichert. Zusätzlich habe ich eine rückwärtskompatible Behandlung älterer Werte eingebaut, damit bestehende Installationen sauber weiterlaufen.
Betroffen waren:
- pH-Auswertung
- ORP-/Redox-Auswertung
- TDS-Auswertung
Bei mir im Produktiv- und Testsystem laufen die Zeitanzeigen jetzt wieder korrekt.
Bei mir im Produktiv- und Testsystem laufen die Zeitanzeigen jetzt wieder korrekt.
Bei mir auch bis auf:
poolcontrol.0 2026-05-12 12:50:52.530 info State value to set for "poolcontrol.0.chemistry.ph.debug.last_update" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:50:52.497 info State value to set for "poolcontrol.0.chemistry.ph.trend.reference_24h_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:50:52.462 info State value to set for "poolcontrol.0.chemistry.ph.input.last_valid_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:50:52.456 info State value to set for "poolcontrol.0.chemistry.ph.input.previous_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:50:52.443 info State value to set for "poolcontrol.0.chemistry.ph.input.last_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:49:52.416 info State value to set for "poolcontrol.0.chemistry.ph.debug.last_update" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:49:52.401 info State value to set for "poolcontrol.0.chemistry.ph.input.last_valid_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:49:52.397 info State value to set for "poolcontrol.0.chemistry.ph.input.previous_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:49:52.388 info State value to set for "poolcontrol.0.chemistry.ph.input.last_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:48:52.398 info State value to set for "poolcontrol.0.chemistry.ph.debug.last_update" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:48:52.389 info State value to set for "poolcontrol.0.chemistry.ph.input.last_valid_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:48:52.387 info State value to set for "poolcontrol.0.chemistry.ph.input.previous_value_at" has to be type "string" but received type "number" poolcontrol.0 2026-05-12 12:48:52.377 info State value to set for "poolcontrol.0.chemistry.ph.input.last_value_at" has to be type "string" but received type "number"
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
