Hi,
I am running the OpenHab 2.5 on my Raspberry Pi 4B
- Release = Raspbian GNU/Linux 10 (buster)
- Kernel = Linux 5.4.51-v7l+
- Platform = Raspberry Pi 4 Model B Rev 1.1
- openHAB 2.5.10-1 (Release Build)
I wanted to share my configuration for integrating the Danfoss Heating ECL Comfort 310 via modbus binding. This might be of help to anyone out there.
Things
// MODBUS ERROR CODES
// 1 => Illegal Function
// 2 => Illegal Data Address
// 3 => Illegal Data Value
// 4 => Slave Device Failure
// 5 => Acknowledge (processing continues on device)
// 6 => Slave Device Busy
// 7 => Negative Acknowledge
// 8 => Memory Parity Error
// 10 => Gateway Path Unavailable
// 11 => Gateway Target Device Failed to Respond
Bridge modbus:tcp:eclcomfort310 [ host="danfossheating.local", port=502, id=1 ] {
Bridge poller alarms [ start=1023, length=2, refresh=30000, type="holding" ] {
Thing data sumField1 [ readStart="1024", readValueType="int16" ]
Thing data sumField2 [ readStart="1023", readValueType="int16" ]
}
// OPERATING MODE
//
// If one circuit is set to manual mode, it applies to all circuits (i.e. the controller is in
// manual mode). When the mode is changed from manual to another mode in one circuit, it also
// applies to all circuits in the controller. The controller automatically reverts to the
// previous mode for each circuit if the information is available.
//
// Values:
// 0 - Manual operation
// 1 - Scheduled operation
// 2 - Constant comfort temperature
// 3 - Constant setback temperature
// 4 - Frost protection/standby temperature
Bridge poller operatingMode [ start=4200, length=2, refresh=30000, type="holding" ] {
Thing data circuit1 [ readStart="4200", readValueType="int16", writeStart="4200", writeValueType="int16", writeType="holding" ]
Thing data circuit2 [ readStart="4201", readValueType="int16", writeStart="4201", writeValueType="int16", writeType="holding" ]
}
// OPERATING STATUS
//
// The operating status will be read as 0 (setback) if the operating mode is larger than 3.
// Operating status was enlarged from 4 states to 8 states in firmware version 1.43
//
// Values:
// 0 - Setback (circuit2 => Umwälzpumpe aus)
// 1 - Pre-comfort
// 2 - Comfort (circuit2 => Umwälzpumpe an)
// 3 - Pre-setback
// 4 - Holiday constant comfort temperature
// 5 - Holiday 7-23h comfort temperature
// 6 - Holiday constant setback temperature
// 7 - Holiday frost protection/standby
Bridge poller operatingStatus [ start=4211, length=2, refresh=30000, type="holding" ] {
Thing data circuit1 [ readStart="4211", readValueType="int16", writeStart="4211", writeValueType="int16", writeType="holding" ]
Thing data circuit2 [ readStart="4212", readValueType="int16", writeStart="4212", writeValueType="int16", writeType="holding" ]
}
// PUMPS
//
// P1: Umwälzpumpe Fußbodenheizung
// P2: Umwälzpumpe Kreis 2 (nicht angeschlossen)
// P3: Umwälzpumpe Warmwasser
// P4: nicht angeschlossen
Bridge poller pumps [ start=4005, length=4, refresh=10000, type="holding" ] {
Thing data P1 [ readStart="4005", readValueType="int16" ]
Thing data P3 [ readStart="4007", readValueType="int16" ]
}
// SENSORS
//
// S1: Außen-Temperatur
// S2: Raumtemperaturfühler Fußbodenheizung (nicht angeschlossen)
// S3: Vorlauf-Temperatur Fußbodenheizung
// S4: Vorlauf-Temperatur Kreis 2 (nicht angeschlossen)
// S5: Rücklauf-Temperatur Fußbodenheizung
// S6: Rücklauf-Temperatur Kreis 2 (nicht angeschlossen)
// S7: Rücklauf-Temperatur Kreis 3 (nicht angeschlossen)
// S8: Raumtemperaturfühler Kreis 2 (nicht angeschlossen)
// S9: Vorlauf-Temperatur Kreis 3 (nicht angeschlossen)
// S10: Raumtemperaturfühler Kreis 3 (nicht angeschlossen)
Bridge poller sensors [ start=10200, length=5, refresh=10000, type="holding" ] {
Thing data S1 [ readStart="10200", readValueType="int16" ]
Thing data S3 [ readStart="10202", readValueType="int16" ]
Thing data S5 [ readStart="10204", readValueType="int16" ]
}
// HEAT CURVE
//
// The heat curve has six points consisting of an outdoor temperature coordinate and a flow
// temperature coordinate. The outdoor temperature coordinates are not adjustable but the flow
// temperature coordinates can be changed to give a flow temperature that corresponds to the
// building’s thermodynamic properties.
//
// If an Application has a writable Slope, e.g. 11175, writing this value will cause adjustment
// of the point values, e.g. addresses 11400–11405
Bridge poller circuit1HeatCurve [ start=11174, length=1, refresh=30000, type="holding" ] {
Thing data value [ readStart="11174", readValueType="int16", writeStart="11174", writeValueType="int16", writeType="holding" ]
}
Bridge poller circuit1HeatCurvePoints [ start=11399, length=6, refresh=30000, type="holding" ] {
Thing data tempAtM30 [ readStart="11399", readValueType="int16" ]
Thing data tempAtM15 [ readStart="11400", readValueType="int16" ]
Thing data tempAtM05 [ readStart="11401", readValueType="int16" ]
Thing data tempAtP00 [ readStart="11402", readValueType="int16" ]
Thing data tempAtP05 [ readStart="11403", readValueType="int16" ]
Thing data tempAtP15 [ readStart="11404", readValueType="int16" ]
}
Bridge poller circuit1Temperatures [ start=11176, length=7, refresh=30000, type="holding" ] {
Thing data min [ readStart="11176", readValueType="int16", writeStart="11176", writeValueType="int16", writeType="holding" ]
Thing data max [ readStart="11177", readValueType="int16", writeStart="11177", writeValueType="int16", writeType="holding" ]
Thing data cutOut [ readStart="11178", readValueType="int16", writeStart="11178", writeValueType="int16", writeType="holding" ]
Thing data comfort [ readStart="11179", readValueType="int16", writeStart="11179", writeValueType="int16", writeType="holding" ]
Thing data saving [ readStart="11180", readValueType="int16", writeStart="11180", writeValueType="int16", writeType="holding" ]
Thing data maxInfluence [ readStart="11181", readValueType="int16", writeStart="11181", writeValueType="int16", writeType="holding" ]
Thing data minInfluence [ readStart="11182", readValueType="int16", writeStart="11182", writeValueType="int16", writeType="holding" ]
}
Bridge poller circuit1Parameters [ start=11014, length=1, refresh=30000, type="holding" ] {
Thing data reactionTimeRoomTemperatur [ readStart="11014", readValueType="int16", writeStart="11014", writeValueType="int16", writeType="holding" ]
}
Bridge poller circuit2Parameters [ start=12029, length=1, refresh=30000, type="holding" ] {
Thing data maxReturnTemperature [ readStart="12029", readValueType="int16", writeStart="12029", writeValueType="int16", writeType="holding" ]
}
}
Items
Group Danfoss "Danfoss ECL Comfort 310" <radiator> (HWR)
Number Danfoss_Alarms_Group1 "Alarmgruppe 1 [%s]" <alarm> (Danfoss) {channel="modbus:data:eclcomfort310:alarms:sumField1:number"}
Number Danfoss_Alarms_Group2 "Alarmgruppe 2 [%s]" <alarm> (Danfoss) {channel="modbus:data:eclcomfort310:alarms:sumField2:number"}
Number Danfoss_Aussentemperatur "Außentemperatur [JS(devide-by100.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:sensors:S1:number"}
Number Danfoss_FBHeizung_Modus "Fußbodenheizung Modus [MAP(danfoss-operationmode.map):%s]" <heating> (Danfoss) {channel="modbus:data:eclcomfort310:operatingMode:circuit1:number"}
Number Danfoss_FBHeizung_Status "Fußbodenheizung Status [MAP(danfoss-operationstatus.map):%s]" <heating> (Danfoss) {channel="modbus:data:eclcomfort310:operatingStatus:circuit1:number"}
Switch Danfoss_FBHeizung_Umwaelzpumpe "Fußbodenheizung Umwälzpumpe [MAP(switch.map):%s]" <pump> (Danfoss) {channel="modbus:data:eclcomfort310:pumps:P1:switch"}
Number Danfoss_FBHeizung_Tagestemperatur "Fußbodenheizung Tages-Temperatur [JS(devide-by10.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:comfort:number"}
Number Danfoss_FBHeizung_Nachttemperatur "Fußbodenheizung Nacht-Temperatur [JS(devide-by10.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:saving:number"}
Number Danfoss_FBHeizung_Heizkurve "Fußbodenheizung Heizkurve [JS(devide-by10.js):%s]" <line> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurve:value:number"}
Number Danfoss_FBHeizung_Heizkurve_M30 "Fußbodenheizung Heizkurve (-30°) [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurvePoints:tempAtM30:number"}
Number Danfoss_FBHeizung_Heizkurve_M15 "Fußbodenheizung Heizkurve (-15°) [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurvePoints:tempAtM15:number"}
Number Danfoss_FBHeizung_Heizkurve_M05 "Fußbodenheizung Heizkurve (-05°) [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurvePoints:tempAtM05:number"}
Number Danfoss_FBHeizung_Heizkurve_P00 "Fußbodenheizung Heizkurve (+00°) [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurvePoints:tempAtP00:number"}
Number Danfoss_FBHeizung_Heizkurve_P05 "Fußbodenheizung Heizkurve (+05°) [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurvePoints:tempAtP05:number"}
Number Danfoss_FBHeizung_Heizkurve_P15 "Fußbodenheizung Heizkurve (+15°) [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1HeatCurvePoints:tempAtP15:number"}
Number Danfoss_FBHeizung_Min "Fußbodenheizung Vorlauftemperatur Min. [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:min:number"}
Number Danfoss_FBHeizung_Max "Fußbodenheizung Vorlauftemperatur Max. [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:max:number"}
Number Danfoss_FBHeizung_CutOut "Fußbodenheizung Gew. Temperatur [%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:cutOut:number"}
Number Danfoss_FBHeizung_Raumeinfluss_Min "Fußbodenheizung Raumeinfluss Min. [JS(devide-by10.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:minInfluence:number"}
Number Danfoss_FBHeizung_Raumeinfluss_Max "Fußbodenheizung Raumeinfluss Max. [JS(devide-by10.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Temperatures:maxInfluence:number"}
Number Danfoss_FBHeizung_Raumeinfluss_Zeit "Fußbodenheizung Anpassungszeit [%s s]" <time> (Danfoss) {channel="modbus:data:eclcomfort310:circuit1Parameters:reactionTimeRoomTemperatur:number"}
Number Danfoss_FBHeizung_Vorlauf "Fußbodenheizung Vorlauf [JS(devide-by100.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:sensors:S3:number"}
Number Danfoss_FBHeizung_Ruecklauf "Fußbodenheizung Rücklauf [JS(devide-by100.js):%s °C]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:sensors:S5:number"}
Number Danfoss_Warmwasser_Modus "Warmwasserheizung Modus [MAP(danfoss-operationmode.map):%s]" <heating> (Danfoss) {channel="modbus:data:eclcomfort310:operatingMode:circuit2:number"}
Number Danfoss_Warmwasser_Status "Warmwasserheizung Status [MAP(danfoss-operationstatus.map):%s]" <heating> (Danfoss) {channel="modbus:data:eclcomfort310:operatingStatus:circuit2:number"}
Switch Danfoss_Warmwasser_Umwaelzpumpe "Warmwasserheizung Umwälzpumpe [MAP(switch.map):%s]" <pump> (Danfoss) {channel="modbus:data:eclcomfort310:pumps:P3:switch"}
Number Danfoss_Warmwasser_RuecklaufMax "Warmwasserheizung Rücklauf Max. [%s]" <temperature> (Danfoss) {channel="modbus:data:eclcomfort310:circuit2Parameters:maxReturnTemperature:number"}
All the best,
Bechte