Dieser Beitrag beschreibt die Einbindung von MAX! Heizkörperthermostaten und Zubehör in ioBroker.

Hierfür wird der MAX! Cube LAN Gateway benötigt. Zur Anbindung an ioBroker nutzen wir den Adapter Max! Cube.


Installation des Adapters

Die Installation des Adapters Max! Cube erfolgt nicht über den Standardweg, sondern über GitHub. Dies ist erforderlich, da nur so an die aktuelle Version des Adapters (v1.0.1) kommen. Bei der über die Repositories verfügbaren Version v0.1.2 sind noch einige Fehler enthalten und beispielsweise das Setzen neuer Solltemperaturen würde nicht funktionieren.

Für die Installation von GitHub wählen wir in der Administrationsoberfläche unter Adapter oben den Button Installieren aus eigener URL. In dem sich öffnenden Fenster suchen wir im Reiter von GitHub nach maxcube, wählen diesen dann aus und klicken auf Installieren.

Im Anschluss an die Installation öffnet sich wie gewohnt die Adapterkonfigurationsseite. Auf dieser tragen wir die IP-Adresse oder den Hostnamen des MAX! Cube ein und bestätigen mit Speichern und Schließen.

Nun sollte die Adapterinstanz starten und eine Verbindung zum MAX! Cube herstellen.


Objekte des MAX! Cube

Bei erfolgreicher Verbindung mit dem MAX! Cube werden von dem Adapter automatisch alle im Cube bekannten Thermostate und Sensoren unter maxcube.0.devices.* sowie einige allgemeine Informationen unter maxcube.0.info.* angelegt.

Sollte bei einem Gerät error auf true gesetzt sein, so hilft oftmals ein Neustart des MAX! Cube.

Die unter temp enthaltene Temperatur stellt die am Thermostat gemessene ist-Temperatur dar. Bei den Heizkörperthermostaten wird diese Temperatur immer nur bei einer Änderung (Modus, Ventilstand, …) übertragen und kann unter Umständen auch mal fälschlicherweise 0 °C betragen. Dies hängt mit dem Cube und der Kommunikation zwischen dem Cube und den Thermostaten zusammen und ist kein Fehler des Adapters.


Einbindung in VIS

Für die Einbindung in VIS empfehle ich den Adapter hqwidgets style Widgets zu installieren. Dieser bietet unter anderem ein schönes Widget für die Innentemperatur, über welches sich die aktuelle Temperatur, die Solltemperatur, der Ventilstand und gegebenenfalls eine Batteriewarnung ablesen lassen. Zudem ist es über das Widget möglich die Solltemperatur anzupassen.

Für die Umschaltung des Modus bietet sich beispielsweise das Widget Radiobuttons ValueList an.


Moduswechsel bei manueller Solltemperaturänderung

Wenn sich ein Thermostat im Automatikmodus befindet und über ioBroker die Solltemperatur geändert wird, dann versetzt der Adapter das Thermostat automatisch in den manuellen Modus.

Dieses Verhalten finde ich eher unpraktisch, da man damit bei jeder manuellen Änderung auch wieder daran denken muss, das Thermostat anschließend zurück in den Automatikmodus zu schalten.

Damit der Modus nach einer manuellen Änderung der Solltemperatur wieder auf Auto gestellt wird, habe ich ein kleines Skript erstellt. In ioBroker eingebunden stellt dieses Script dann kurz nach der Änderung wieder auf den Automatikmodus zurück, sofern dieser vorher aktiv war. Die zuvor manuell eingestellte Solltemperatur bleibt dabei bis zur nächsten automatischen Anpassung erhalten.

/**
 * ioBroker Skript zum automatischen Zurücksetzen des Modus von MAX! Thermostaten
 * auf Auto, wenn die Solltemperatur im Auto-Modus geändert wurde.
 *
 * Dies ist erforderlich, da die Thermostate durch den Max! Cube Adapter bei einer
 * manuellen Änderung der Solltemperatur immer in den manuellen Modus versetzt werden.
 * Dieses Script erkennt diese Änderung und setzt den Modus zurück auf Auto.
 *
 * Copyright (c) 2019 Peter Müller <peter@crycode.de> (https://crycode.de)
 */

/**
 * Liste an Thermostaten, die ignoriert werden sollen.
 * Dies können z.B. Wandthermostate sein, da diese zusammen mit dem zugehörigen 
 * Heizkörperthermostat arbeiten.
 */
const thermostatIgnore = [
    'thermostat_18abcd'
];

// Auflistung aller Thermostate holen
const devices = $('maxcube.0.devices.thermostat_*.mode');

// Alle Thermostate durchgehen
devices.each((id) => {
    id = id.replace(/\.mode$/, '');

    // Prüfen ob das aktuelle Thermostat ignoriert werden soll
    const rfId = id.split('.')[3];
    if (thermostatIgnore.indexOf(rfId) !== -1) return;

    log(setup mode switch back for ${id});

    // Handler für einen Moduswechsel anlegen
    on({id: ${id}.mode, change: 'ne'}, (obj) => {
        // AUTO(0) -> MANUAL(1) ?
        if (obj.newState.val === 1 && obj.oldState.val === 0) {
            // Letzte Sollwertänderung laden und Zeitpunkt prüfen
            getState(${id}.setpoint, (err, state) => {
                // Wechsel des Modus innerhalb von 10 Sekunden nach dem Wechsel des Sollwerts?
                if (state.ts > obj.newState.ts - 10000) {
                    // Modus zurück auf Auto setzen
                    log(switching ${id} back to auto mode);
                    setState(${id}.mode, 0);
                }
            });
        }
    });
});

Die grundlegende Verwendung von Skripten habe ich im Beitrag ioBroker Skripte beschrieben.