<?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[Test Luxtronik2-Controller V0.6.x]]></title><description><![CDATA[<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="text-align:left">Aktuelle Test Version</th>
<th style="text-align:left">0.6.5</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>Veröffentlichungsdatum</strong></td>
<td style="text-align:left">07.08.2026</td>
</tr>
<tr>
<td style="text-align:left"><strong>Github Link</strong></td>
<td style="text-align:left"><a href="https://github.com/TbsJah/ioBroker.luxtronik2-controller" rel="nofollow ugc">TbsJah/ioBroker.luxtronik2-controller</a></td>
</tr>
<tr>
<td style="text-align:left"><strong>npm</strong></td>
<td style="text-align:left"><a href="https://www.npmjs.com/package/iobroker.luxtronik2-controller" rel="nofollow ugc">iobroker.luxtronik2-controller</a></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Beschreibung</strong><br />
Grundlage war der Luxtronik2 Adapter von <a class="plugin-mentions-user plugin-mentions-a" href="/user/unclesam" aria-label="Profile: unclesam">@<bdi>unclesam</bdi></a>. Dieser ist aktuell etwas in die Jahre gekommen, bzw. hatte ich sehr viele Scripte drumherum gebaut, welche ich nun zu einem eigenen Adapter zusammengefasst habe.</p>
<p dir="auto">Der Adapter läuft bei mir seit einiger Zeit stabil an meiner LWD50A, daher der Entschluss, ihn hier für alle zu veröffentlichen. Testen passiert natürlich auf eigene Gefahr!</p>
<p dir="auto">Transparenzhinweis: Bei der Entwicklung und dem Code-Rewrite hatte ich Unterstützung von KI.</p>
<p dir="auto">Dieser ioBroker-Adapter ermöglicht die lokale Steuerung und Überwachung von Wärmepumpen mit Luxtronik 2.x Steuerung (z. B. Alpha Innotec, Novelan). Der Adapter ist vollständig in TypeScript geschrieben.</p>
<p dir="auto"><strong>Features</strong></p>
<ul>
<li><strong>Native TCP-Kommunikation:</strong> Direkte Verbindung zur Wärmepumpe ohne zusätzlichen Overhead.</li>
<li><strong>Verdichter-Schonung</strong> (Takt-Optimierung): Zusammenlegung von Heiz- und Warmwasserzyklen zur Reduzierung der Verdichterstarts.</li>
<li><strong>Integrierte Aktionen (Makros):</strong> Vordefinierte Steuerungslogiken für Zwangsheizen, Warmwasseranforderung und die Zirkulationspumpe (ZIP) inkl. automatischem Rückfall auf Standardwerte.</li>
<li><strong>Benutzerdefinierte Datenpunkte:</strong> Messwerte (Index 3004) und Parameter (Index 3003) können über die Adapter-Konfiguration hinzugefügt werden. Unix-Zeitstempel werden automatisch formatiert.</li>
<li><strong>Automatisches Objekt-Management:</strong> Abgewählte oder gelöschte Datenpunkte und leere Ordnerstrukturen werden bei einem Adapter-Neustart automatisch aus ioBroker entfernt.</li>
<li><strong>Benachrichtigungssystem:</strong> Fehlercodes der Wärmepumpe können direkt an Telegram oder das ioBroker-Benachrichtigungssystem gesendet werden.</li>
<li><strong>Bewegungsmelder-Kopplung:</strong> Möglichkeit zur bedarfsgesteuerten Aktivierung der Zirkulationspumpe über vorhandene ioBroker-Bewegungssensoren.</li>
<li><strong>ZIP Steuerung über externe Aktoren</strong></li>
</ul>
<p dir="auto"><strong>Bilder</strong><br />
</p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Spoiler</button><section style="display:none" class="spoiler-content"><br />
<img src="/assets/uploads/files/1784810229869-9d38ca1d-a1e6-45c8-b0bb-35c1a0c45756-image.jpeg" alt="9d38ca1d-a1e6-45c8-b0bb-35c1a0c45756-image.jpeg" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1784810252864-d9c88b7d-2333-485e-bd9f-79adff2e721b-image.jpeg" alt="d9c88b7d-2333-485e-bd9f-79adff2e721b-image.jpeg" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1784810264605-358490b5-50af-46e6-a14b-69a664ace1da-image.jpeg" alt="358490b5-50af-46e6-a14b-69a664ace1da-image.jpeg" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1784810293568-ad2d2980-4822-44b4-b08d-d22639f8f0de-image.jpeg" alt="ad2d2980-4822-44b4-b08d-d22639f8f0de-image.jpeg" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1784810329355-f7f494b6-bccc-4145-b0ad-eb161ee2dddf-image.jpeg" alt="f7f494b6-bccc-4145-b0ad-eb161ee2dddf-image.jpeg" class=" img-fluid img-markdown" /><br />
<img src="/assets/uploads/files/1784810491688-3aae0d43-4716-4416-9dd6-100b035a1160-image.jpeg" alt="3aae0d43-4716-4416-9dd6-100b035a1160-image.jpeg" class=" img-fluid img-markdown" /><br />
</section></section><p></p>
<p dir="auto"><strong>Changelog</strong><br />
</p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Spoiler</button><section style="display:none" class="spoiler-content"><p></p>
<h3>0.6.5 (2026-08-07)</h3>
<ul>
<li>review / fix findings reported by claude based checker.</li>
</ul>
<h3>0.6.4 (2026-07-23)</h3>
<ul>
<li>Refactoring</li>
</ul>
<h3>0.6.3 (2026-07-23)</h3>
<p dir="auto"><strong>Features &amp; Enhancements</strong></p>
<ul>
<li><strong>External Actor Support for ZIP (100% Flash Safe):</strong> Added the ultimate hardware protection feature. Users can now configure a list of external actors (e.g., Shelly or Zigbee relays) via their object IDs in the Admin UI. When motion is detected, the adapter switches these relays directly, completely bypassing the heat pump and reducing Luxtronik EEPROM write cycles to absolute zero.</li>
<li><strong>External Actor Schedule Compliance:</strong> External ZIP actors now dynamically respect the Luxtronik ZIP time tables (Week, 5+2, or Individual days). Motion triggers will be cleanly ignored if they occur outside the permitted time windows, unless the user explicitly checks the "Disable Hardware ZIP Timers" option in the configuration.</li>
<li><strong>Hot Water Sync for External Actors:</strong> The adapter now automatically activates external circulation pump relays when the heat pump begins a hot water generation cycle, maximizing comfort at the tap with zero impact on flash memory wear.</li>
<li><strong>Global EEPROM Flash Protection (Read-Before-Write):</strong> Implemented a global interceptor for all hardware write commands (<code>writePumpSafe</code>). The adapter now caches the current heat pump parameters in real-time and strictly blocks any duplicate or redundant write requests before they are sent over the network.</li>
<li><strong>Automated Hardware-Safe ZIP Defaults:</strong> The adapter can now automatically enforce hardware-safe circulation pump schedules upon startup. Accounts for Luxtronik firmware behavior by intelligently setting the first start block to <code>00:01:00</code> (60 seconds) to prevent invalid zero-run rejections, while keeping ON-time at <code>0 min</code> and OFF-time at <code>60 min</code>.</li>
<li><strong>Admin UI - Flash Wear Statistics &amp; Guidance:</strong> Expanded the ZIP configuration page with detailed educational information. Added hard data explaining that internal ZIP control causes between 4 and 14 physical write operations per activation, highly recommending the new external actor setup.</li>
<li><strong>Write Cycle Monitoring:</strong> Introduced two new virtual data points under System Info (<code>write_cycles_today</code> and <code>write_cycles_total</code>) to transparently track physical write operations sent to the heat pump. The daily counter automatically resets every night at midnight.</li>
<li><strong>Cooling Extension &amp; Intelligent Status:</strong> Comprehensive integration of new cooling data points (e.g., <code>cooling_status</code>, <code>cooling_configured</code>, <code>opStateCooling</code>). Added the dynamically calculated <code>opStateCoolingString</code>.</li>
<li><strong>Admin UI - Notification Testing:</strong> Added a dedicated "Send Test Message" button to the configuration interface to easily verify Telegram and ioBroker Notification Center setups directly from the UI.</li>
<li><strong>Hardened ZIP Macro Execution:</strong> Reaffirmed and secured the ZIP demand-driven macro to exclusively use the deaeration program (Entlüftungsprogramm).</li>
<li><strong>New Flow Rate Datapoints:</strong> Added flow rate tracking for the heat source (<code>flow_rate_heat_source</code>, ID 173) and cooling (<code>flow_rate_cooling</code>, ID 254) to the state mapping.</li>
<li><strong>Extended Admin UI:</strong> All newly added cooling data points and the heat source flow rate can now be individually enabled or disabled via new checkboxes in the adapter configuration (<code>jsonConfig.json</code>).</li>
<li><strong>New Hardware Supported:</strong> Officially added the MSW2-9S heat pump to the model recognition (<code>HP_TYPES</code>).</li>
</ul>
<p dir="auto"><strong>Bugfixes</strong></p>
<ul>
<li><strong>Motion Sensor Cooldown Logic:</strong> Fixed an issue where the 10-minute anti-cycling cooldown for motion sensors was perpetually stuck when using external relays. The logic now correctly monitors the virtual <code>Activate_Zip</code> state's timestamp instead of the bypassed internal <code>ZIPout</code> state.</li>
<li><strong>Virtual State Reset:</strong> Fixed a bug where the <code>Activate_Zip</code> button/state remained <code>true</code> after an external relay timer expired, which broke subsequent cooldown calculations. It now cleanly resets to <code>false</code> when the run cycle finishes.</li>
<li><strong>External Actor State Detection:</strong> Fixed a logic flaw where the adapter incorrectly checked the internal heat pump state (<code>ZIPout</code>) instead of the external relay state to determine if the circulation pump was already running. It now dynamically checks <code>getForeignStateAsync</code> for configured actors, cleanly preventing redundant switch commands and allowing silent timer extensions if motion is re-detected.</li>
<li><strong>Timer Formatting in Objects:</strong> Fixed a bug where timer schedules (Heating, Hot Water, Circulation) were incorrectly displayed as raw seconds (e.g., <code>60</code> or <code>0</code>). Applied the internal duration formatter (<code>isDurationFormat: true</code>) globally so all time tables natively and persistently display as <code>HH:MM:SS</code> (e.g., <code>00:01:00</code>) in the ioBroker object tree.</li>
<li><strong>Admin UI i18n Compliance:</strong> Fixed missing language definitions (E5611) in the <code>jsonConfig.json</code> dropdown menus to strictly comply with the latest ioBroker repository checks.</li>
<li><strong>TypeScript/Linter Strictness:</strong> Fixed strictly typed linter errors (e.g., <code>@typescript-eslint/no-floating-promises</code>, <code>no-redundant-type-constituents</code>, and template literal typings) by correctly handling asynchronous database calls, replacing <code>any</code> with <code>unknown</code>, and strictly casting types.</li>
<li><strong>Missing Imports:</strong> Resolved compilation errors regarding missing helper functions (e.g., <code>getDpPath</code>) during module refactoring.</li>
<li><strong>Cooling Operating Hours:</strong> Fixed the <code>hours_cooling</code> datapoint. The value is now correctly read from real-time telemetry data (<code>raw_value</code>), resolving an issue where the timestamp "Jan 1, 1970" was incorrectly shown.</li>
<li><strong>Config Cleanup:</strong> Fixed an incorrect identifier in the admin UI (changed <code>sync_Gerätezeit</code> to <code>sync_deviceTime</code>) and removed unused/dead checkboxes.</li>
</ul>
<p dir="auto"><strong>Technical Changes (Under the Hood)</strong></p>
<ul>
<li><strong>Separation of Concerns (zipManager):</strong> Completely refactored the motion sensor and circulation pump logic. Extracted the event handling and startup initialization out of <code>main.ts</code> into <code>zipManager.ts</code>. It now also dynamically handles iterations over arrays of external actors.</li>
<li><strong>Network Queue Isolation:</strong> Extracted the core transmission queue (<code>queueWrite</code>, <code>processQueue</code>) from the main adapter class into <code>rawFunctions.ts</code>, achieving 100% isolation of TCP/WebSocket network logic from ioBroker state management.</li>
<li><strong>Comprehensive Code Refactoring (DRY):</strong> Created dedicated <code>convert.ts</code> and <code>utils.ts</code> modules to centralize time string formatting (<code>timeStringToSeconds</code>, <code>formatTimerSecondsToTime</code>) and generic helper functions (<code>getNumber</code>, <code>delay</code>).</li>
<li><strong>Global Time Refactoring:</strong> Centralized the duration and time calculation for status texts in the <code>updateStatusStrings</code> function.</li>
<li><strong>i18n Support for State Names:</strong> Updated the internal state definition (<code>name: string | { en: string; de?: string }</code>) to fully support translation objects, allowing natively translated datapoint names in the ioBroker object tree.</li>
</ul>
<h3>0.6.2 (2026-07-17)</h3>
<p dir="auto"><strong>Added</strong></p>
<ul>
<li>Bilingual support (i18n): Full support for English and German (adapter settings, state names, dropdown menus, and dynamic status texts).</li>
<li>Language selection: Added a new dropdown menu in the adapter settings to freely choose the preferred output language for the ioBroker object tree.</li>
<li>Firmware 3.x compatibility: Implemented an intelligent fallback system that dynamically calculates the status texts (heatpump_state_string) and runtime (heatpump_duration) from the main operating state. This is required because modern Luxtronik controllers no longer transmit the old LCD text lines.</li>
</ul>
<p dir="auto"><strong>Fixed</strong></p>
<ul>
<li>Incorrect heating state (Frost protection): Fixed an issue where a switched-off heating system was incorrectly displayed as "Frost protection". The code now evaluates the correct index for the heating operating state (opStateHeating / 125) instead of incorrectly calculating it via the parameter.</li>
<li>Timer display: Restored the clean HH:MM:SS formatting in the ioBroker UI without the annoying "s" (seconds) by introducing an internal isDurationFormat flag.</li>
<li>Timer glitch fixed: When the compressor is idle, 00:00:01 (1 second) was often incorrectly displayed. This is now cleanly filtered to 00:00:00.</li>
<li>ioBroker Repo-Checker warnings: Added the missing write: true property to the timer table selection states (role: "level") to fix the E1011 error.</li>
</ul>
<p dir="auto"><strong>Technical</strong></p>
<ul>
<li>Fixed ESLint warnings (dot-notation) for object properties.</li>
</ul>
<h3>0.6.1 (2026-07-17)</h3>
<ul>
<li>Implemented fallback mechanism: Index 80 lc is used if 117-120 are empty.<br />
</li>
</ul></section></section>
]]></description><link>https://forum.iobroker.net/topic/85132/test-luxtronik2-controller-v0.6.x</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:54:27 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/85132.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Aug 2026 12:27:06 GMT</pubDate><ttl>60</ttl></channel></rss>