<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Haozee HZ-SL10 – Praxistest & ioBroker-Analyzer]]></title><description><![CDATA[<h1>Haozee HZ-SL10 Zigbee-Bodenfeuchtesensor – Praxistest, Diagnose und Kalibrierung mit ioBroker</h1>
<p dir="auto">Meine grundsätzlich funktionierende Balkonbewässerung braucht ein Update: vernünftige Bodenfeuchtesensoren. Meine bisherigen Sensoren waren ... naja.</p>
<p dir="auto">Ich habe mich etwas intensiver mit dem <strong>Haozee HZ-SL10 Zigbee-Bodenfeuchtesensor</strong> beschäftigt.</p>
<p dir="auto">Dabei ging es mir nicht nur darum, einen Feuchtewert in ioBroker zu bekommen, sondern vor allem um Fragen wie:</p>
<ul>
<li>Wie häufig meldet der Sensor tatsächlich?</li>
<li>Wie stark unterscheiden sich mehrere Exemplare?</li>
<li>Wie reproduzierbar sind die Messungen?</li>
<li>Welchen Einfluss haben Einstecktiefe, Bodenkontakt und Verdichtung?</li>
<li>Wie sinnvoll sind die vorhandenen Kalibrierparameter?</li>
</ul>
<p dir="auto">Daraus ist ein kleiner <strong>HZ-SL10 Analyzer / Debugger</strong> entstanden.</p>
<p dir="auto">Er läuft als lokale HTML-Seite über den ioBroker-Web-Adapter und benötigt weder VIS noch den JavaScript-Adapter.</p>
<blockquote>
<p dir="auto"><strong>Hinweis:</strong><br />
Der Analyzer, das Installationsskript und Teile der Dokumentation sind mit Unterstützung von KI entstanden. Die praktische Umsetzung und Tests erfolgten auf meinem ioBroker-System.</p>
</blockquote>
<p dir="auto"><img src="/assets/uploads/files/1788125383308-forum_1.png" alt="Forum_1.png" class=" img-fluid img-markdown" /></p>
<h2>Funktionen</h2>
<p dir="auto">Der Analyzer erkennt kompatible Sensoren automatisch und kann mehrere Geräte gemeinsam darstellen.</p>
<p dir="auto">Enthalten sind unter anderem:</p>
<ul>
<li>Bodenfeuchte, Temperatur und Link Quality / LQI</li>
<li>Batterie und Online-Status</li>
<li>History-Daten</li>
<li>Live-Aktualisierung über Socket.​IO, bei Bedarf pausierbar</li>
<li>frei wählbare Zeitfenster</li>
<li>einzelne Kurven ein-/ausblendbar</li>
<li>exakte Messwerte und Zeitstempel per Mouseover</li>
<li>frei einstellbarer Y-Bereich</li>
<li>verschiebbare X- und Y-Bereiche</li>
<li>adaptive Lineale für kleine Zeit- und Wertebereiche</li>
<li>optionale Temperaturreferenzen</li>
<li>Detailansicht der ioBroker-Datenpunkte</li>
<li>Änderung einiger freigegebener HZ-SL10-Konfigurationswerte</li>
</ul>
<h2>Sensorerkennung</h2>
<p dir="auto">Die Erkennung erfolgt <strong>nicht anhand des Gerätenamens</strong>, sondern anhand charakteristischer Datenpunkte.</p>
<p dir="auto">Ein kompatibles Gerät muss unter anderem folgende States besitzen:</p>
<pre><code class="language-text">soil_moisture
soil_sampling
soil_calibration
temperature
temperature_sampling
</code></pre>
<p dir="auto">Der in ioBroker vergebene Gerätename wird anschließend nur für Anzeige und Sortierung verwendet.</p>
<p dir="auto">Sinnvolle und eindeutige Namen sind trotzdem hilfreich, weil sich Kurven und Messwerte dadurch leichter den einzelnen Sensoren zuordnen lassen.</p>
<h2>Benötigte ioBroker-Adapter</h2>
<p dir="auto">Für den vollständigen Betrieb werden benötigt:</p>
<ul>
<li><strong>Zigbee</strong></li>
<li><strong>History</strong></li>
<li><strong>Socket.​IO</strong></li>
<li><strong>Web</strong></li>
</ul>
<p dir="auto">Optional kann <strong>Bright Sky</strong> für eine DWD-Temperaturreferenz verwendet werden.</p>
<p dir="auto">Der Installer prüft vorhandene Instanzen und deren Status, installiert selbst aber keine Adapter.</p>
<h3>History</h3>
<p dir="auto">Für die Diagramme werden bei den HZ-SL10-Sensoren folgende States verwendet:</p>
<pre><code class="language-text">soil_moisture
temperature
link_quality
</code></pre>
<p dir="auto">Ist History bereits aktiviert, werden die vorhandenen Daten automatisch verwendet.</p>
<p dir="auto">Fehlt die History-Konfiguration für einzelne benötigte States, zeigt der Installer dies an und bietet an, sie einzurichten. Eine Änderung erfolgt erst nach ausdrücklicher Bestätigung.</p>
<h3>Socket.​IO</h3>
<p dir="auto">Socket.​IO liefert die Live-Werte an die Browserseite und wird außerdem für History-Abfragen und ausdrücklich ausgelöste Schreibvorgänge verwendet.</p>
<p dir="auto">Die Live-Aktualisierung kann im Analyzer pausiert werden. Beim Wiedereinschalten werden aktuelle Werte und History neu synchronisiert.</p>
<h3>Bright Sky</h3>
<p dir="auto">Ist Bright Sky vorhanden, kann dessen aktuelle Temperatur auf Wunsch als zusätzliche Referenzkurve eingeblendet werden.</p>
<p dir="auto">Soweit die Daten vorhanden sind, zeigt der Analyzer dazu auch Informationen wie Wetterstation, Stations-ID, Entfernung und Messzeit an.</p>
<h2>Eigene Temperaturreferenz</h2>
<p dir="auto">Zusätzlich oder alternativ zu Bright Sky kann ein beliebiger numerischer ioBroker-State als Temperaturreferenz verwendet werden.</p>
<p dir="auto">Der Installer erwartet dafür die vollständige State-ID, zum Beispiel:</p>
<pre><code class="language-text">zigbee.0.a4c13815c2a35fc5.temperature
</code></pre>
<p dir="auto">Er prüft, ob der State existiert, numerisch ist und ob die Einheit zu einer Temperatur passt. Bei einer auffälligen Einheit erfolgt eine zusätzliche Rückfrage.</p>
<p dir="auto">So lässt sich zum Beispiel ein besserer Temperatur-/Feuchtesensor direkt neben den HZ-SL10 legen und als Referenz für den Vergleich verwenden.</p>
<h2>Schreibbare Sensorparameter</h2>
<p dir="auto">Der Analyzer ist in erster Linie ein Diagnosewerkzeug. Einige Konfigurationswerte können trotzdem direkt geändert werden:</p>
<pre><code class="language-text">soil_calibration
soil_sampling
soil_warning
temperature_calibration
temperature_sampling
temperature_unit
</code></pre>
<p dir="auto">Ein Eingabefeld erscheint nur dann, wenn der jeweilige ioBroker-State auch tatsächlich mit</p>
<pre><code class="language-text">common.write = true
</code></pre>
<p dir="auto">gekennzeichnet ist.</p>
<p dir="auto">Die Änderung erfolgt erst nach Betätigung von <strong>Setzen</strong>. Messwerte, Rohdaten und andere States bleiben read-only.</p>
<h2>Device Info</h2>
<p dir="auto">Für den ausgewählten Sensor werden die vorhandenen States in einer Detailansicht dargestellt. Der technische ioBroker-State-Name bleibt sichtbar; darunter steht jeweils eine kleinere deutsche Beschreibung.</p>
<p dir="auto"><img src="/assets/uploads/files/1788125597997-forum_2.png" alt="Forum_2.png" class=" img-fluid img-markdown" /></p>
<h2>Installation</h2>
<p dir="auto">Der Installer kennt drei Modi:</p>
<pre><code class="language-bash">./hz-sl10-analyzer-installer.sh --check
./hz-sl10-analyzer-installer.sh --test
./hz-sl10-analyzer-installer.sh --install
</code></pre>
<h3><code>--check</code></h3>
<p dir="auto">Führt ausschließlich Prüfungen durch.</p>
<p dir="auto">Es werden keine Dateien geschrieben und keine Einstellungen verändert. Damit sollte man also anfangen.</p>
<h3><code>--test</code></h3>
<p dir="auto">Erzeugt eine separate Testseite:</p>
<pre><code class="language-text">0_userdata.0/hz-sl10-analyzer-test/index.html
</code></pre>
<p dir="auto">Eine vorhandene Produktivseite wird dabei nicht verändert.</p>
<p dir="auto">Beispiel:</p>
<pre><code class="language-text">http://&lt;ioBroker-IP&gt;:8082/0_userdata.0/hz-sl10-analyzer-test/index.html
</code></pre>
<h3><code>--install</code></h3>
<p dir="auto">Installiert dieselbe Analyzer-Version am normalen Ziel:</p>
<pre><code class="language-text">0_userdata.0/hz-sl10-analyzer/index.html
</code></pre>
<p dir="auto">Vor dem Schreiben der Produktivseite erfolgt noch einmal eine explizite Bestätigung.</p>
<p dir="auto">Beispiel:</p>
<pre><code class="language-text">http://&lt;ioBroker-IP&gt;:8082/0_userdata.0/hz-sl10-analyzer/index.html
</code></pre>
<h2>Installationsumgebung</h2>
<p dir="auto">Entwickelt und getestet wurde der Installer auf einer normalen ioBroker-Installation unter Linux.</p>
<p dir="auto">Er verwendet keine Raspberry-Pi-spezifischen Pfade. Eine normale ioBroker-Installation in einer <strong>Proxmox-VM oder einem LXC-Container</strong> sollte daher grundsätzlich auf dieselbe Weise funktionieren.</p>
<p dir="auto"><strong>Docker wurde nicht getestet.</strong></p>
<p dir="auto">Bei einer Docker-Installation ist insbesondere zu beachten:</p>
<ul>
<li>das Skript muss innerhalb des ioBroker-Containers ausgeführt werden,</li>
<li>externe Port-Mappings von Web und Socket.​IO können von den intern erkannten Ports abweichen,</li>
<li>die am Ende ausgegebene URL kann deshalb eine interne Container-Adresse oder interne Ports enthalten.</li>
</ul>
<p dir="auto">Wer den Installer unter Proxmox, LXC oder Docker ausprobiert und Anpassungen dafür entwickelt, darf Erfahrungen und Verbesserungen gerne beisteuern.</p>
<h2>Sicherheitsprinzip des Installers</h2>
<p dir="auto">Das Grundprinzip lautet:</p>
<p dir="auto"><strong>erkennen → anzeigen → fragen → erst dann ändern</strong></p>
<p dir="auto">Der Installer installiert keine Adapter selbst und aktiviert auch keine History- oder Referenzkonfiguration ungefragt.</p>
<p dir="auto">Vor dem Schreiben der Analyzer-Seite wird außerdem das tatsächlich erzeugte JavaScript auf Syntaxfehler geprüft. Schlägt diese Prüfung fehl, wird die HTML-Seite nicht geschrieben.</p>
<h2>Installationsprotokoll</h2>
<p dir="auto">Für Test und Produktion gibt es jeweils ein eigenes <code>install.log</code>:</p>
<pre><code class="language-text">0_userdata.0/hz-sl10-analyzer-test/install.log
</code></pre>
<p dir="auto">bzw.</p>
<pre><code class="language-text">0_userdata.0/hz-sl10-analyzer/install.log
</code></pre>
<p dir="auto">Das Log lässt sich über den Button <strong>Install-Log</strong> direkt aus dem Analyzer in einem neuen Tab öffnen.</p>
<p dir="auto">Vorhandene Protokolle werden bei einem weiteren Lauf nicht verworfen. Jeder Lauf wird als eigener Abschnitt angehängt:</p>
<pre><code class="language-text">============================================================
RUN START
Timestamp: 2026-08-30T21:15:00+02:00
Script version: v31
Host: iobroker
Mode: --test
============================================================

...

============================================================
RUN END
Timestamp: 2026-08-30T21:15:12+02:00
============================================================
</code></pre>
<p dir="auto">Damit lässt sich später nachvollziehen, welche Änderungen bei welchem Lauf vorgenommen wurden.</p>
<h2>Erste Erkenntnisse aus dem Praxistest</h2>
<p dir="auto">Ich teste derzeit fünf HZ-SL10 gleichzeitig im selben Behälter.</p>
<p dir="auto">Dabei zeigte sich recht deutlich, dass der mechanische Bodenkontakt einen erheblichen Einfluss auf die Messwerte hat.</p>
<p dir="auto">Mehrere Sensoren zeigten zunächst reproduzierbare Abweichungen voneinander. Nach Herausnehmen, Durchmischen des Bodens und erneutem möglichst identischem Einsetzen lagen die Werte wesentlich näher zusammen.</p>
<p dir="auto">Einfluss haben dabei unter anderem:</p>
<ul>
<li>Einstecktiefe</li>
<li>Verdichtung unmittelbar an den Elektroden</li>
<li>kleine Luftspalte</li>
<li>Position im Substrat</li>
<li>erneutes Herausziehen und Einstecken</li>
</ul>
<p dir="auto">Für den Vergleich mehrerer HZ-SL10 ist deshalb wichtig, die Sensoren möglichst unter gleichen mechanischen Bedingungen einzusetzen.</p>
<p dir="auto">Eine Abweichung zwischen zwei Sensoren ist nicht automatisch ein Kalibrierfehler. Bevor größere Korrekturen über <code>soil_calibration</code> vorgenommen werden, sollte zunächst ein möglichst vergleichbarer Einbau sichergestellt sein.</p>
<h2>Messintervall</h2>
<p dir="auto">Während deutlicher Feuchteänderungen haben meine Exemplare ungefähr alle <strong>30 Sekunden</strong> neue Messwerte geliefert.</p>
<p dir="auto">Dabei muss man zwischen einer tatsächlichen Zigbee-Meldung und einem History-Eintrag unterscheiden.</p>
<p dir="auto">Ist beispielsweise</p>
<pre><code class="language-text">changesRelogInterval = 300
</code></pre>
<p dir="auto">konfiguriert, kann History nach fünf Minuten einen unveränderten Wert erneut speichern. Daraus lässt sich nicht ableiten, dass der Sensor zu diesem Zeitpunkt erneut per Zigbee gesendet hat.</p>
<h2>Weiterer Kalibriertest</h2>
<p dir="auto">Für einen aussagekräftigeren Vergleich lasse ich die Sensoren gemeinsam langsam austrocknen, ungefähr über den Bereich:</p>
<pre><code class="language-text">80 % → 20 %
</code></pre>
<p dir="auto">Dabei sollen sie möglichst nicht mehr bewegt werden.</p>
<p dir="auto">Zusätzlich kann der komplette Behälter regelmäßig gewogen werden. Näherungsweise gilt:</p>
<pre><code class="language-text">1 g Gewichtsverlust ≈ 1 ml Wasserverlust
</code></pre>
<p dir="auto">Das ersetzt keine echte volumetrische Bodenfeuchtemessung, liefert aber eine unabhängige Größe für den Wasserverlust.</p>
<p dir="auto">Damit sollte sich besser erkennen lassen, ob einzelne HZ-SL10 über einen größeren Feuchtebereich tatsächlich systematisch voneinander abweichen - hoffe ich jedenfalls.</p>
<h2>Aktueller Stand</h2>
<p dir="auto">Der Analyzer ist funktional inzwischen weitgehend fertig. Ziel war bewusst kein weiteres VIS-Widget, sondern ein kleines lokales Diagnosewerkzeug für den HZ-SL10.</p>
<p dir="auto"><strong>Das Installationsskript veröffentliche ich zunächst nicht direkt.</strong> Falls Interesse besteht, stelle ich es gerne zur Verfügung.</p>
<p dir="auto">Rückmeldungen, Tests auf anderen ioBroker-Installationen und Weiterentwicklungen – etwa für Docker, Proxmox oder LXC – sind ausdrücklich willkommen.</p>
<p dir="auto">Vorab aber schonmal der obligatorische...</p>
<h2>Sicherheitshinweis</h2>
<p dir="auto">Die Nutzung erfolgt <strong>auf eigene Gefahr</strong>.</p>
<p dir="auto">Das Skript nimmt nach ausdrücklicher Bestätigung Änderungen an der ioBroker-Konfiguration vor und erzeugt Dateien unter <code>0_userdata.0</code>. Trotz der eingebauten Prüfungen würde ich erste Versuche <strong>nicht auf einem wichtigen Produktivsystem</strong> durchführen.</p>
<p dir="auto">Vor der Verwendung sollte in jedem Fall ein <strong>aktuelles ioBroker-Backup</strong> vorhanden sein.</p>
<p dir="auto">Interessant wären außerdem Erfahrungen anderer Nutzer mit:</p>
<ul>
<li>tatsächlichem Meldeintervall</li>
<li>Verhalten von <code>soil_sampling</code></li>
<li>Wirkung von <code>soil_calibration</code></li>
<li>Unterschieden zwischen mehreren Exemplaren</li>
<li>Langzeitverhalten beim Austrocknen</li>
</ul>
<p dir="auto">Wenn Interesse am Analyzer bzw. Installer besteht, einfach hier im Thread melden.</p>
<hr />
<p dir="auto"><strong>Empfohlene Tags:</strong> <code>zigbee</code>, <code>bodenfeuchte</code>, <code>hz-sl10</code>, <code>history</code>, <code>analyzer</code></p>
]]></description><link>https://forum.iobroker.net/topic/85264/haozee-hz-sl10-praxistest-iobroker-analyzer</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 01:57:04 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/85264.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Aug 2026 21:40:29 GMT</pubDate><ttl>60</ttl></channel></rss>