Hi Community, gladly I give something back to the great Openhab Community. This solution describes the integration of Drexel & Weiss (D&W) devices in to Openhab
Challenge
Do you have a HAVAC device from Drexel & Weiss like…
- aerosilent exos – Komfortlüftung mit Wärmerückgewinnung
- aerosilent stratos – Komfortlüftung mit Wärmerückgewinnung
- aerosilent bianco – Komfortlüftung mit Wärmerückgewinnung
- x²S Geräteserie – Kompaktgerät – Komfortlüftung mit Sole/Wasser Wärmepumpe
- x²A9 – Kompaktgerät – Komfortlüftung mit Luft/Wasser Wärmepumpe
- aerosmart Geräteserie – Frischluftheizung
- smarterm A9 – Luft/Wasser Wärmepumpe
- Aeroschool
- Aerosmart
- …
…which is built after mid 2008 then according to Drexel und Weiss Modbus RTU it should provide a Modbus interface possibility. With some converter and the Modbus binding you should be able to connect your Drexel&Weiss to Openhab.
Then you can control your HAVAC with your mobile phone. Additionally, you can made it smart. Eg. you can measure the Co2 concentration in different rooms (Netatmo indoor modules) and control the ventilation accordingly. This saves energy, as only as much as necessary air is blown in your home. Moreover, it also preserves indoor humidity which is beneficial during the heating season.
At this point you might argue that your comfort ventilation has a built-in Co2 measurement in the exhaust air. Unfortunately, this approach is not so efficient and precise as it measures only the average Co2 of all your rooms. Very often people are concentrated in one room of the house, this scenario needs a higher ventilation to keep the air clean.
For this purpose, I did the integration of our aerosilent stratos comfort ventilation in to Openhab. Here you find my experience. Hopefully beneficial. If yes, please “like”
Solution Overview
The D&W Device Modbus Signal needs first to be converted from TTL (0/5V) into RS232 (±15V). D&W offers an RS232 Adapter for this purpose. You need only the RS232 Adapter described in cpt 1 “Hardware”. Alternatively, you can also buy any TTL/RS232 Converter and build the adapter on your own, but it needs some electronics experience and special plugs. Anyone wants to know more about that, let me know. From Modbus RS232 the signal needs to be converted into Ethernet. A possible solution is the USR-W610 which has both a LAN and WLAN Interface (less than 30€ at AliExpress). The Modbus Binding makes the connection into Openhab.
Configuration
TTL->RS232
Plug the RS232 Adapter in the D&W mainboard as described in the document. Ensure that D&W device is powerless (remove the fuse!!!). Best hire a professional for this task.
RS232 -> Ethernet
Here a configuration example for the USR-W610
Important: Press Apply and then “Restart” to reboot the Device that changes the effect!
Openhab
Install the Modbus Binding in Openhab. The following configuration might be adjusted dependant on the D&W device your integrating. The parameters are usually for all the device the same, but not all devices have all parameters.
Modbus Binding Bridge Definition (Thing File)
//// Drexel & Weiss Aerosilent stratos Modbus Thing
//Use different refresh intervalls to avoid modbus slave exceptions codes appearing.
//Timeout of Drexel&Weiss Devices is 2600ms. With timeBetweenTranactions>2600ms you are absolutly on save side. With default value 60ms it still works but give sometimes
//exception code 1&2 and has to try again. Different refresh intervals help then. If you poll every 60000ms make sure. timeBetweenTransactionsMillis=2600
Bridge modbus:tcp:localhostTCP [ host="192.168.0.29", port=8899, id=1, timeBetweenTransactionsMillis=2600 ] //USR-W610
{ //Drehzahl Zuluft
//Bridge poller p1184 [ start=1184, length=2, refresh=60000, type="input"] {Thing data r1184 [ readStart="1184", readValueType="int32"]}
//Aktive Lüfterstufe
Bridge poller p1066 [ start=1066, length=2, refresh=10000, type="input"] { Thing data r1066 [ readStart="1066", readValueType="int32"] }
// Raumluft - for readTransform transformation addon "Javascript" needs 2be installed. Also JS file according to Modbus Binding doc cpt "transformation"
Bridge poller p200 [start=200, length=2, refresh=60000, type="input"] {Thing data r200 [readStart="200", readValueType="int32", readTransform="JS(divide1000.js)"]}
//Temperatur Raum Abluft
Bridge poller p202 [start=202, length=2, refresh=60000, type="input"] {Thing data r202 [readStart="202", readValueType="int32", readTransform="JS(divide1000.js)"]}
//Gesamte Luftmenge Read every hour
//Bridge poller p946 [start=946, length=2, refresh=3600000, type="input"] {Thing data r946 [readStart="946", readValueType="int32"]}
//1084 Soll-Volumenstrom Abluft
Bridge poller p1084 [start=1084, length=2, refresh=60000, type="input"] {Thing data r1084 [readStart="1084", readValueType="int32"]}
//1216 Anforderung: Bypassklappe
Bridge poller p1216 [start=1216, length=2, refresh=60000, type="input"] {Thing data r1216 [readStart="1216", readValueType="int32"]}
// Betriebsart
Bridge poller p5002 [ start=5002, length=2, refresh=60000, type="holding" ]
{Thing data r5002 [ readStart="5002", readValueType="int32", writeStart="5002", writeValueType="int32", writeType="holding", writeMultipleEvenWithSingleRegisterOrCoil=true ]}
//Datum
Bridge poller p5210 [ start=5210, length=2, refresh=60000, type="holding" ]
{ Thing data r5210 [ readStart="5210", readValueType="int32", writeStart="5210", writeValueType="int32", writeType="holding", writeMultipleEvenWithSingleRegisterOrCoil=true ]}
//Zeit
Bridge poller p5212 [ start=5212, length=2, refresh=60000, type="holding" ]
{ Thing data r5212 [ readStart="5212", readValueType="int32", writeStart="5212", writeValueType="int32", writeType="holding", writeMultipleEvenWithSingleRegisterOrCoil=true ]}
} // End TCP Bridge Definition
Items Definition (Item File)
//// Drexel Weiss Komfortlüftung //////////////////////////////////
//Number Vent_RotationIn "Drehzahl Zuluft [%s]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p1184:r1184:number"}
Number Vent_ALuefterstufe "Aktive Lüfterstufe [%s]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p1066:r1066:number"}
Number Vent_RaumluftTemp "Raumluft [%.1f°C]" <temperature> (gComfortVent) {channel="modbus:data:localhostTCP:p200:r200:number"}
Number Vent_AussenluftTemp "Aussenluft [%.1f°C]" <temperature> (gComfortVent) {channel="modbus:data:localhostTCP:p202:r202:number"}
Number Vent_SollZuluft "Soll Zuluft [%s m³/h]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p1082:r1082:number"}
Number Vent_SollAbluft "Soll Abluft [%s m³/h]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p1084:r1084:number"}
Number Vent_BypassAnf "Bypass 0=Aus->Wärmerückgew. [%s]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p1216:r1216:number"}
Number Vent_Betriebsart "Betriebsart System [%s]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p5002:r5002:number"}
Number Vent_Datum "Datum [%s]" <flow> (gComfortVent) {channel="modbus:data:localhostTCP:p5210:r5210:number"}
Number Vent_Zeit "Zeit [%s]" <flow> (gComfortVent) {