[ModBus Vorlage] MAICO KWL 320/470 und andere

Hallo,

nach langer Zeit in der einfach alles läuft habe ich mal mein Uralt Modbus Modul mit eigener Modbus Anbindung ersetzt durch ein Modbus Gerät. Hier der Link zu MAICO Doku zu den Modbus Adressen:

Folgende Geräte sollten somit unterstützt werden:

  • Trio zentral
  • WS 120 Trio
  • WS 160 Flat
  • WS 170
  • WS 300 Flat
  • WS 320
  • WS 470
  • WR 310
  • WR 410
  • Trio dezentral

Die verwendeten Profile sind alle mit MAICO. gekennzeichnet. Die Maximalwerte für
Volumenstrom Reduzierte Lüftung,
Volumenstrom Nennlüftung,
Volumenstrom Intensivlüftung
können für den jeweiligen Typ angepasst werden. Ich habe dort 470m³/h eingetragen.

Ich hänge hier die jeweils aktuelle Version an:

R03 v. 24.09.2024
Korrektur Adressen 550-554, Fehler bei zuschreibenden Adressen
Korrektur Adressen 750-754 (Feuchtesensoren) ! → MAICO Doku fehlerhaft.Achtung Datentypänderung FLOAT->Integer
MAICO_WS320_470.R03.json (74,7 KB)

Initialversion R01:
MAICO_WS320_470.json (74,4 KB)

Ich habe noch eine Hinweis- und Fehlerauswertung gemacht. Nicht sehr intelligent, quick and dirty. Bei den Fehlern/Hinweisen gibt es keine Doku von MAICO. Ich habe die Fehlerbeschreibungen aus der MAICO KNX Doku gezogen. Es ist etwas geraten, aktuell kann das evtl. noch um ein Bit verschoben sein.
Wenn der Fehler/Hinweis weggeht, wird der String auch auf leer gesetzt. Stehen mehrere Fehler/Hinweise an, werden diese verkettet in den String geschrieben.

Hier sind die Variablen IDs zu den Fehleradressen. Diese müssen ersetzt werden.
15133 Virt.FehlerHinweise.AktuellerFehler
22707 Virt.FehlerHinweise.AktuellerHinweis

Das folgende Skript wertet die virtuellen Adressen 15133 Virt.FehlerHinweise.AktuellerFehler und 22707 Virt.FehlerHinweise.AktuellerHinweis aus. In dem Skript müssen eure IDs eingetragen werden! Wie gesagt Quick and dirty.

Ich habe dafür zwei Hilfsvariablen vom typ String erzeugt:
51079 Virt.FehlerHinweise.AktuellerFehlerStr
55072 Virt.FehlerHinweise.AktuellerHinweisStr

Diese beiden Adressen müsst ihr auch durch eure Adressen ersetzen.

<?php

// Fehlermeldungen aus folgendem KNX Dokument, Ungetestet
// https://www.maico-ventilatoren.com/fileadmin/media/service/Downloads/Software/18-12-03-Dokumentation_KNX_Interface_KWL-Steuerung__ab_FW-Version_V1.2.0.pdf Seite 9

// Die Fehler und Hinweistexte sind evtl. um ein Bit verschoben

// Array mit den Strings für jedes Bit
$bitStringsFehler = [
    "Bit 00: (01) Ventilator Zuluft - quittierbar ja",
    "Bit 01: (02) Ventilator Abluft - quittierbar ja ",
    "Bit 02: (03) Sensor T-Lufteintritt Gerät - quittierbar nein",
    "Bit 03: (04) Sensor T-Zuluft - quittierbar nein",
    "Bit 04: (05) Sensor T-Fortluft - quittierbar nein",
    "Bit 05: (06) Sensor T-Raum BDE - quittierbar nein",
    "Bit 06: (07) Sensor T-Raum extern - quittierbar nein",
    "Bit 07: (08) Sensor T-Außenluft vor EWT - quittierbar nein",
    "Bit 08: (09) Bypass - quittierbar nein ",
    "Bit 09: (10) Zonenklappe - quittierbar nein",
    "Bit 10: (11) Kombisensor Abluft- quittierbar nein",
    "Bit 11: (12) Frostschutz - quittierbar nein",
    "Bit 12: (13) Externe Vorheizung - quittierbar ja",
    "Bit 13: (14) Zulufttemperatur zu kalt - quittierbar nein",
    "Bit 14: (15) Ablufttemperatur zu kalt - quittierbar nein",
    "Bit 15: (16) Sensor T-Raum Bus - quittierbar nein",
    "Bit 16: (17) Zusatzplatine 1 - quittierbar nein",
    "Bit 17: (18) Zusatzplatine 2 - quittierbar nein",
    "Bit 18: (19) Sollwert Druckkonstanz nicht erreicht - quittierbar ja",
    "Bit 19: (20) Kommunikation KomfortBDE - quittierbar nein",
    "Bit 20: (21) Systemspeicher - quittierbar ja",
    "Bit 21: (22) SystemBus - quittierbar nein",
    "Bit 22: (23) Unbekannter Fehler - quittierbar ja",
    "Bit 23: (24) Unbekannter Fehler - quittierbar ja",
    "Bit 24: (25) Unbekannter Fehler - quittierbar ja",
    "Bit 25: (26) Unbekannter Fehler - quittierbar ja",
    "Bit 26: (27) Unbekannter Fehler - quittierbar ja",
    "Bit 27: (28) Unbekannter Fehler - quittierbar ja",
    "Bit 28: (29) Unbekannter Fehler - quittierbar ja",
    "Bit 29: (30) Unbekannter Fehler - quittierbar ja",
    "Bit 30: (31) Unbekannter Fehler - quittierbar ja",
    "Bit 31: (32) Unbekannter Fehler - quittierbar ja"
];

$bitStringsHinweise = [
    "Bit 00: (01) Sole-EWT Kühlleistung gering",
    "Bit 01: (02) Kommunikation EnOcean",
    "Bit 02: (03) Hinweis unbekannt",
    "Bit 03: (04) Kommunikation Internet",
    "Bit 04: (05) Bypass aktiv",
    "Bit 05: (06) Zonenlüftung aktiv",
    "Bit 06: (07) Frostschutz aktiv",
    "Bit 07: (08) Frostschutz Volumenstromreduzierung",
    "Bit 08: (09) Tastensperre aktiv",
    "Bit 09: (10) Filtermeldung Gerät",
    "Bit 10: (11) Filtermeldung Außenfilter",
    "Bit 11: (12) Filtermeldung Raumfilter",
    "Bit 12: (13) Volumenstrom-Einmessung aktiv",
    "Bit 13: (14) max. Feuchtegrenzwert überschritten",
    "Bit 14: (15) Nacherwärmung aktiv",
    "Bit 15: (16) Druckwächter Ofen ausgelöst",
    "Bit 16: (17) Externe Sicherheitsabschaltung",
    "Bit 17: (18) Zwangslauf aktiv",
    "Bit 18: (19) Kommunikation ModBus",
    "Bit 19: (20)(Schalttest aktiv",
    "Bit 20: (21) Hinweis unbekannt",
    "Bit 21: (22) Hinweis unbekannt",
    "Bit 22: (23) Hinweis unbekannt",
    "Bit 23: (24) Hinweis unbekannt",
    "Bit 24: (25) Hinweis unbekannt",
    "Bit 25: (26) Hinweis unbekannt",
    "Bit 26: (27) Hinweis unbekannt",
    "Bit 27: (28) Hinweis unbekannt",
    "Bit 28: (29) Hinweis unbekannt",
    "Bit 29: (30) Hinweis unbekannt",
    "Bit 30: (31) Hinweis unbekannt",
    "Bit 31: (32) Hinweis unbekannt"
];



$errVal  = GetValueInteger(15133);
$warnVal = GetValueInteger(22707);

// Testing
// $errVal = 33;
// $warnVal =7023;

$dateStr = date('Y-m-d H:i:s');

// 51079
// 55072
if ($errVal > 0) {
    // Schleife durch jedes Bit
    $errStr = "";
    for ($i = 0; $i < 32; $i++) {
        // Prüfen, ob das Bit gesetzt ist
        if ($errVal & (1 << $i)) {
            // echo $bitStrings[$i] . "\n";
            $errStr = $errStr . $bitStringsFehler[$i] . " // ";
        }
    }
    $errStr = $dateStr . "-" . $errStr . PHP_EOL;
    // echo $errStr . PHP_EOL;
    SetValueString(51079, $errStr);
} else {
    SetValueString(51079, "");
}


if ($warnVal > 0) {
    // Schleife durch jedes Bit
    $errStr = "";
    for ($i = 0; $i < 32; $i++) {
        // Prüfen, ob das Bit gesetzt ist
        if ($warnVal & (1 << $i)) {
            // echo $bitStrings[$i] . "\n";
            $errStr = $errStr . $bitStringsHinweise[$i] . " // ";
        }
    }
    $errStr = $dateStr . "-" . $errStr . PHP_EOL;
    // echo $errStr . PHP_EOL;
    SetValueString(55072, $errStr);
} else {
    SetValueString(55072, "");
}


Kurze Ergänzung zu Datenblöcken und co

Hier ein Update/Fehlerbereinigung:

!!Korrekturen hänge ich ab jetzt oben an!!

Die Schreibadressen im 550er Bereich waren teilweise fehlerhaft (gelbe Markierung).

Jetzt tut es! :slight_smile:

Mir ist noch etwas kleines aufgefallen: Bei der Adresse 750 / Luftfeuchte Abluft dividierst Du durch 10 (so steht es auch in der Modus Parameterliste). Im Ergebnis steht dann bei mir aber z.B. 5,7% anstatt 57%, daher habe ich die Division durch 10 rausgenommen…

Bitte beachten:

So ist es, ist ein Fehler in der Doku. Ich gehe davon aus, dass das für die Adressen 750-754 auch gilt (externe Sensorik)

Offiziell bestätigt: siehe Maico KWL WS 320 KBET - #35 von john