Anbindung Wärmepumpe Lambda EU08L/EU13L/EU15L

Begonnen von FhemPiUser, 31 Oktober 2023, 15:44:07

Vorheriges Thema - Nächstes Thema

FhemPiUser

Hallo Zusammen,

ich habe meine neue Lambda EU13L-Wärmepumpe erfolgreich per Modbus TCP in fhem eingebunden. Falls noch jemand eine Lambda Wärmepumpe hat, stelle ich hier meine ModbusAttr-Definition gemäß Lambda-Modbusprotokoll zur Verfügung und freue mich auf einen Erfahrungsaustausch.

defmod Lambda_EU13L ModbusAttr 1 55 192.168.x.x:502 TCP
attr Lambda_EU13L closeAfterResponse 0
attr Lambda_EU13L dev-h-combine 8
attr Lambda_EU13L dev-h-read 3
attr Lambda_EU13L dev-h-write 16
attr Lambda_EU13L dev-timing-timeout 15
attr Lambda_EU13L dev-type-S16-len 1
attr Lambda_EU13L dev-type-S16-unpack s>
attr Lambda_EU13L dev-type-S32-len 2
attr Lambda_EU13L dev-type-S32-revRegs 0
attr Lambda_EU13L dev-type-S32-unpack l>
attr Lambda_EU13L dev-type-SL_R2-len 2
attr Lambda_EU13L dev-type-SL_R2-unpack l
attr Lambda_EU13L dev-type-U16-len 1
attr Lambda_EU13L dev-type-U16-revRegs 0
attr Lambda_EU13L dev-type-U16-unpack S>
attr Lambda_EU13L dev-type-U32-len 2
attr Lambda_EU13L dev-type-U32-revRegs 0
attr Lambda_EU13L dev-type-U32-unpack N
attr Lambda_EU13L dev-type-UL_R2-len 2
attr Lambda_EU13L dev-type-UL_R2-revRegs 1
attr Lambda_EU13L dev-type-UL_R2-unpack N
attr Lambda_EU13L disable 0
attr Lambda_EU13L event-on-change-reading .*
attr Lambda_EU13L nextOpenDelay 5
attr Lambda_EU13L obj-h0000-poll 1
attr Lambda_EU13L obj-h0000-reading General_Ambient_Error_number
attr Lambda_EU13L obj-h0000-type S16
attr Lambda_EU13L obj-h0001-poll 1
attr Lambda_EU13L obj-h0001-reading General_Ambient_Operating_state
attr Lambda_EU13L obj-h0001-type U16
attr Lambda_EU13L obj-h0002-expr $val/10
attr Lambda_EU13L obj-h0002-poll 1
attr Lambda_EU13L obj-h0002-reading General_Ambient_Actual_ambient_temp
attr Lambda_EU13L obj-h0002-type S16
attr Lambda_EU13L obj-h0003-expr $val/10
attr Lambda_EU13L obj-h0003-poll 1
attr Lambda_EU13L obj-h0003-reading General_Ambient_Actual_ambient_temp_1h
attr Lambda_EU13L obj-h0003-type S16
attr Lambda_EU13L obj-h0004-expr $val/10
attr Lambda_EU13L obj-h0004-poll 1
attr Lambda_EU13L obj-h0004-reading General_Ambient_Calculated_ambient_temp
attr Lambda_EU13L obj-h0004-type S16
attr Lambda_EU13L obj-h0100-poll 1
attr Lambda_EU13L obj-h0100-reading General_E-Manager_Error_number
attr Lambda_EU13L obj-h0100-type S16
attr Lambda_EU13L obj-h0101-poll 1
attr Lambda_EU13L obj-h0101-reading General_E-Manager_Operating_state
attr Lambda_EU13L obj-h0101-type U16
attr Lambda_EU13L obj-h0102-poll 1
attr Lambda_EU13L obj-h0102-reading General_E-Manager_Actual_power
attr Lambda_EU13L obj-h0102-set 1
attr Lambda_EU13L obj-h0102-type S16
attr Lambda_EU13L obj-h0103-poll 1
attr Lambda_EU13L obj-h0103-reading General_E-Manager_Actual_power_consumption
attr Lambda_EU13L obj-h0103-type S16
attr Lambda_EU13L obj-h0104-poll 1
attr Lambda_EU13L obj-h0104-reading General_E-Manager_Power_consumption_setpoint
attr Lambda_EU13L obj-h0104-type S16
attr Lambda_EU13L obj-h1000-poll 1
attr Lambda_EU13L obj-h1000-reading Hp_Error_state
attr Lambda_EU13L obj-h1000-type U16
attr Lambda_EU13L obj-h1001-poll 1
attr Lambda_EU13L obj-h1001-reading Hp_Error_number
attr Lambda_EU13L obj-h1001-type S16
attr Lambda_EU13L obj-h1002-poll 1
attr Lambda_EU13L obj-h1002-reading Hp_State
attr Lambda_EU13L obj-h1002-type U16
attr Lambda_EU13L obj-h1003-poll 1
attr Lambda_EU13L obj-h1003-reading Hp_Operating_state
attr Lambda_EU13L obj-h1003-type U16
attr Lambda_EU13L obj-h1004-expr $val/100
attr Lambda_EU13L obj-h1004-poll 1
attr Lambda_EU13L obj-h1004-reading Hp_T-flow
attr Lambda_EU13L obj-h1004-type S16
attr Lambda_EU13L obj-h1005-expr $val/100
attr Lambda_EU13L obj-h1005-poll 1
attr Lambda_EU13L obj-h1005-reading Hp_T-return
attr Lambda_EU13L obj-h1005-type S16
attr Lambda_EU13L obj-h1006-expr $val/100
attr Lambda_EU13L obj-h1006-poll 1
attr Lambda_EU13L obj-h1006-reading Hp_Vol_sink
attr Lambda_EU13L obj-h1006-type S16
attr Lambda_EU13L obj-h1007-expr $val/100
attr Lambda_EU13L obj-h1007-poll 1
attr Lambda_EU13L obj-h1007-reading Hp_T-EQin
attr Lambda_EU13L obj-h1007-type S16
attr Lambda_EU13L obj-h1008-expr $val/100
attr Lambda_EU13L obj-h1008-poll 1
attr Lambda_EU13L obj-h1008-reading Hp_T-EQout
attr Lambda_EU13L obj-h1008-type S16
attr Lambda_EU13L obj-h1009-expr $val/100
attr Lambda_EU13L obj-h1009-poll 1
attr Lambda_EU13L obj-h1009-reading Hp_Vol-source
attr Lambda_EU13L obj-h1009-type S16
attr Lambda_EU13L obj-h1010-expr $val/100
attr Lambda_EU13L obj-h1010-poll 1
attr Lambda_EU13L obj-h1010-reading Hp_Compressor-Rating
attr Lambda_EU13L obj-h1010-type U16
attr Lambda_EU13L obj-h1011-expr $val/10
attr Lambda_EU13L obj-h1011-poll 1
attr Lambda_EU13L obj-h1011-reading Hp_QP_heating
attr Lambda_EU13L obj-h1011-type S16
attr Lambda_EU13L obj-h1012-poll 1
attr Lambda_EU13L obj-h1012-reading Hp_FI_power_consumption
attr Lambda_EU13L obj-h1012-type S16
attr Lambda_EU13L obj-h1013-expr $val/100
attr Lambda_EU13L obj-h1013-poll 1
attr Lambda_EU13L obj-h1013-reading COP
attr Lambda_EU13L obj-h1013-type S16
attr Lambda_EU13L obj-h1014-poll 1
attr Lambda_EU13L obj-h1014-reading Hp_Modbus_request_release_password
attr Lambda_EU13L obj-h1014-set 1
attr Lambda_EU13L obj-h1014-type U16
attr Lambda_EU13L obj-h1015-hint 0,1,2,3,4
attr Lambda_EU13L obj-h1015-poll 1
attr Lambda_EU13L obj-h1015-reading Hp_request_type
attr Lambda_EU13L obj-h1015-set 1
attr Lambda_EU13L obj-h1015-type S16
attr Lambda_EU13L obj-h1016-expr $val/10
attr Lambda_EU13L obj-h1016-poll 1
attr Lambda_EU13L obj-h1016-reading Hp_request_flow_line_temp
attr Lambda_EU13L obj-h1016-set 1
attr Lambda_EU13L obj-h1016-type S16
attr Lambda_EU13L obj-h1017-expr $val/10
attr Lambda_EU13L obj-h1017-poll 1
attr Lambda_EU13L obj-h1017-reading Hp_request_return_line_temp
attr Lambda_EU13L obj-h1017-set 1
attr Lambda_EU13L obj-h1017-type S16
attr Lambda_EU13L obj-h1018-expr $val/10
attr Lambda_EU13L obj-h1018-poll 1
attr Lambda_EU13L obj-h1018-reading Hp_request_heat_sink_temp_diff
attr Lambda_EU13L obj-h1018-set 1
attr Lambda_EU13L obj-h1018-type S16
attr Lambda_EU13L obj-h1019-poll 1
attr Lambda_EU13L obj-h1019-reading Hp_relay_state_for_2nd_heating_stage
attr Lambda_EU13L obj-h1019-type S16
attr Lambda_EU13L obj-h1020-poll 1
attr Lambda_EU13L obj-h1020-reading Hp_Statistics_VdA_E_since_last_reset
attr Lambda_EU13L obj-h1020-type S32
attr Lambda_EU13L obj-h1022-poll 1
attr Lambda_EU13L obj-h1022-reading Hp_Statistics_VdA_Q_since_last_reset
attr Lambda_EU13L obj-h1022-type S32
attr Lambda_EU13L obj-h2000-poll 1
attr Lambda_EU13L obj-h2000-reading Boiler_Error_number
attr Lambda_EU13L obj-h2000-type S16
attr Lambda_EU13L obj-h2001-poll 1
attr Lambda_EU13L obj-h2001-reading Boiler_Operating_state
attr Lambda_EU13L obj-h2001-type U16
attr Lambda_EU13L obj-h2002-expr $val/10
attr Lambda_EU13L obj-h2002-poll 1
attr Lambda_EU13L obj-h2002-reading Boiler_Actual_high_temp
attr Lambda_EU13L obj-h2002-type S16
attr Lambda_EU13L obj-h2003-expr $val/10
attr Lambda_EU13L obj-h2003-poll 1
attr Lambda_EU13L obj-h2003-reading Boiler_Actual_low_temp
attr Lambda_EU13L obj-h2003-type S16
attr Lambda_EU13L obj-h2004-reading Boiler_Maximum_boiler_temp
attr Lambda_EU13L obj-h2050-expr $val/10
attr Lambda_EU13L obj-h2050-poll 1
attr Lambda_EU13L obj-h2050-reading Boiler_Maximum_boiler_temp
attr Lambda_EU13L obj-h2050-set 1
attr Lambda_EU13L obj-h2050-type S16
attr Lambda_EU13L obj-h3000-poll 1
attr Lambda_EU13L obj-h3000-reading Buffer_Error_number
attr Lambda_EU13L obj-h3000-type S16
attr Lambda_EU13L obj-h3001-poll 1
attr Lambda_EU13L obj-h3001-reading Buffer_Operating_state
attr Lambda_EU13L obj-h3001-type U16
attr Lambda_EU13L obj-h3002-expr $val/10
attr Lambda_EU13L obj-h3002-poll 1
attr Lambda_EU13L obj-h3002-reading Buffer_Actual_high_temp
attr Lambda_EU13L obj-h3002-type S16
attr Lambda_EU13L obj-h3003-expr $val/10
attr Lambda_EU13L obj-h3003-poll 1
attr Lambda_EU13L obj-h3003-reading Buffer_Actual_low_temp
attr Lambda_EU13L obj-h3003-type S16
attr Lambda_EU13L obj-h3004-reading Buffer_Maximum_buffer_temp
attr Lambda_EU13L obj-h3050-expr $val/10
attr Lambda_EU13L obj-h3050-poll 1
attr Lambda_EU13L obj-h3050-reading Buffer_Maximum_buffer_temp
attr Lambda_EU13L obj-h3050-set 1
attr Lambda_EU13L obj-h3050-type S16
attr Lambda_EU13L obj-h5000-poll 1
attr Lambda_EU13L obj-h5000-reading Heating_circuit_Error_number
attr Lambda_EU13L obj-h5000-type S16
attr Lambda_EU13L obj-h5001-poll 1
attr Lambda_EU13L obj-h5001-reading Heating_circuit_Operating_state
attr Lambda_EU13L obj-h5001-type U16
attr Lambda_EU13L obj-h5002-expr $val/10
attr Lambda_EU13L obj-h5002-poll 1
attr Lambda_EU13L obj-h5002-reading Heating_circuit_Flow_line_temp
attr Lambda_EU13L obj-h5002-type S16
attr Lambda_EU13L obj-h5003-expr $val/10
attr Lambda_EU13L obj-h5003-poll 1
attr Lambda_EU13L obj-h5003-reading Heating_circuit_Return_line_temp
attr Lambda_EU13L obj-h5003-type S16
attr Lambda_EU13L obj-h5004-expr $val/10
attr Lambda_EU13L obj-h5004-poll 1
attr Lambda_EU13L obj-h5004-reading Heating_circuit_Room_device_temp
attr Lambda_EU13L obj-h5004-set 1
attr Lambda_EU13L obj-h5004-type S16
attr Lambda_EU13L obj-h5005-expr $val/10
attr Lambda_EU13L obj-h5005-poll 1
attr Lambda_EU13L obj-h5005-reading Heating_circuit_Setpoint_flow_line_temp
attr Lambda_EU13L obj-h5005-set 1
attr Lambda_EU13L obj-h5005-type S16
attr Lambda_EU13L obj-h5006-hint 0,1,2,3,4,5,6,7
attr Lambda_EU13L obj-h5006-poll 1
attr Lambda_EU13L obj-h5006-reading Heating_circuit_Operating_mode
attr Lambda_EU13L obj-h5006-set 1
attr Lambda_EU13L obj-h5006-type S16
attr Lambda_EU13L obj-h5050-expr $val/10
attr Lambda_EU13L obj-h5050-poll 1
attr Lambda_EU13L obj-h5050-reading Heating_circuit_Offset_flow_line_temp_setpoint
attr Lambda_EU13L obj-h5050-set 1
attr Lambda_EU13L obj-h5050-type S16
attr Lambda_EU13L obj-h5051-expr $val/10
attr Lambda_EU13L obj-h5051-poll 1
attr Lambda_EU13L obj-h5051-reading Heating_circuit_Setpoint_room_heating_temp
attr Lambda_EU13L obj-h5051-set 1
attr Lambda_EU13L obj-h5051-type S16
attr Lambda_EU13L obj-h5052-expr $val/10
attr Lambda_EU13L obj-h5052-poll 1
attr Lambda_EU13L obj-h5052-reading Heating_circuit_Setpoint_room_cooling_temp
attr Lambda_EU13L obj-h5052-set 1
attr Lambda_EU13L obj-h5052-type S16
attr Lambda_EU13L oldreadings Hp_QP_heating
attr Lambda_EU13L room Lambda
attr Lambda_EU13L showError 1
attr Lambda_EU13L userReadings General_Ambient_Operating_state_text {if (ReadingsVal("Lambda_EU13L","General_Ambient_Operating_state","0") == 0) {return "Off";;} \
elsif (ReadingsVal("Lambda_EU13L","General_Ambient_Operating_state","0") == 1) {return "Automatic";;} \
elsif (ReadingsVal("Lambda_EU13L","General_Ambient_Operating_state","0") == 2) {return "Manual";;} \
elsif (ReadingsVal("Lambda_EU13L","General_Ambient_Operating_state","0") == 3) {return "Error";;} \
else {return "unknown";;}},\
General_E-Manager_Operating_state_text {if (ReadingsVal("Lambda_EU13L","General_E-Manager_Operating_state","0") == 0) {return "Off";;} \
elsif (ReadingsVal("Lambda_EU13L","General_E-Manager_Operating_state","0") == 1) {return "Automatic";;} \
elsif (ReadingsVal("Lambda_EU13L","General_E-Manager_Operating_state","0") == 2) {return "Manual";;} \
elsif (ReadingsVal("Lambda_EU13L","General_E-Manager_Operating_state","0") == 3) {return "Error";;} \
elsif (ReadingsVal("Lambda_EU13L","General_E-Manager_Operating_state","0") == 4) {return "Offline";;} \
else {return "unknown";;}},\
Hp_Error_state_text {if (ReadingsVal("Lambda_EU13L","Hp_Error_state","0") == 0) {return "None";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Error_state","0") == 1) {return "Message";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Error_state","0") == 2) {return "Warning";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Error_state","0") == 3) {return "Alarm";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Error_state","0") == 4) {return "Fault";;} \
else {return "unknown";;}},\
Hp_state_text {if (ReadingsVal("Lambda_EU13L","Hp_state","0") == 0) {return "Init";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 1) {return "Reference";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 2) {return "Restart-Block";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 3) {return "Ready";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 4) {return "Start Pumps";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 5) {return "Start Compressor";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 6) {return "Pre-Regulation";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 7) {return "Regulation";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 8) {return "Not used";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 9) {return "Cooling";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 10) {return "Defrosting";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 20) {return "Stopping";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 30) {return "Fault-Lock";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 31) {return "Alarm-Block";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_state","0") == 40) {return "Error-Reset";;} \
else {return "unknown";;}},\
Hp_Operating_state_text {if (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 0) {return "STDBY";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 1) {return "CH";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 2) {return "DHW";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 3) {return "CC";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 4) {return "Circulate";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 5) {return "Defrost";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 6) {return "Off";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 7) {return "Frost";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 8) {return "STDBY-Frost";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 9) {return "Not used";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 10) {return "Summer";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 11) {return "Holiday";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 12) {return "Error";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 13) {return "Warning";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 14) {return "Info-message";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 15) {return "Time-Block";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 16) {return "Release-Block";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 17) {return "Mintemp-Block";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Operating_state","0") == 18) {return "Firmware-Download";;} \
else {return "unknown";;}},\
Hp_Request_type_text {if (ReadingsVal("Lambda_EU13L","Hp_Request_type","0") == 0) {return "No Request";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Request_type","0") == 1) {return "Flow Pump Circulation";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Request_type","0") == 2) {return "Central Heating";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Request_type","0") == 3) {return "Central Cooling";;} \
elsif (ReadingsVal("Lambda_EU13L","Hp_Request_type","0") == 4) {return "Domestic hot water";;} \
else {return "unknown";;}},\
Boiler_Operating_state_text {if (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 0) {return "STDBY";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 1) {return "DHW";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 2) {return "Legio";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 3) {return "Summer";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 4) {return "Frost";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 5) {return "Holiday";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 6) {return "Prio-Stop";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 7) {return "Error";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 8) {return "Off";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 9) {return "Prompt-DHW";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 10) {return "Trailing-stop";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 11) {return "Temp-Lock";;} \
elsif (ReadingsVal("Lambda_EU13L","Boiler_Operating_state","0") == 12) {return "Stdby-Frost";;} \
else {return "unknown";;}},\
Buffer_Operating_state_text {if (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 0) {return "STDBY";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 1) {return "Heating";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 2) {return "Cooling";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 3) {return "Summer";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 4) {return "Frost";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 5) {return "Holiday";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 6) {return "Prio-Stop";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 7) {return "Error";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 8) {return "Off";;} \
elsif (ReadingsVal("Lambda_EU13L","Buffer_Operating_state","0") == 9) {return "Standy-Frost";;} \
else {return "unknown";;}},\
Heating_circuit_Operating_state_text {if (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 0) {return "Heating";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 1) {return "Eco";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 2) {return "Cooling";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 3) {return "Floordry";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 4) {return "Frost";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 5) {return "Max-Temp";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 6) {return "Error";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 7) {return "Service";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 8) {return "Holiday";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 9) {return "CH-Summer";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 10) {return "CC-Winter";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 11) {return "Prio-Stop";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 12) {return "Off";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 13) {return "Release-Off";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 14) {return "Time-off";;} \
elsif\
(ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 15) {return "Stdby";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 16) {return "Stdby-Heating";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 17) {return "Stdby-Eco";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 18) {return "Stdby-Cooling";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 19) {return "Stdby-Frost";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_state","0") == 20) {return "Stdby-Floordry";;} \
else {return "unknown";;}},\
Heating_circuit_Operating_mode_text {if (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 0) {return "Off(rw)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 1) {return "Manual(r)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 2) {return "Automatic(rw)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 3) {return "Auto-heating(rw)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 4) {return "Auto-cooling(rw)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 5) {return "Frost(rw)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 6) {return "Summer(rw)";;} \
elsif (ReadingsVal("Lambda_EU13L","Heating_circuit_Operating_mode","0") == 7) {return "Floor-dry(r)";;}  \
else {return "unknown";;}},\
Anzahl_Takte:Hp_QP_heating.* { (((OldReadingsVal("Lambda_EU13L","Hp_QP_heating","0") <= 0) and (ReadingsVal("Lambda_EU13L","Hp_QP_heating","0") > 0)) ? (return (ReadingsVal("Lambda_EU13L","Anzahl_Takte","0") + 1)) : (return undef));;;; }
attr Lambda_EU13L verbose 2

Mathias R

Hallo FhemPiUser,
zunächst einmal vielen Dank, das meiste funktioniert auf Anhieb.
Es gibt noch eine kleine Fehlermeldung "slave replied with error code 83 / 02, illegal data address", aber die meisten Readings funktionieren schon.
Wir haben noch einen Stromversorger-Wechsel zu Tibber beauftragt. Danach möchte ich bei günstigem Preis die Temperaturen erhöhen und die teuersten Stunden abschalten.
Eventuell könnte ich das über ein Relaismodul mit dem EVU-Sperrkontakt abschalten und mit X51 - externe Heizanforderung realisieren. Eventuell könnte man das ja auch per Modbus realisieren.

Gruß, Mathias

FhemPiUser

Hi Mathias,
ich habe es noch nicht probiert, aber es könnte über das Register Heating_circuit_Operating_mode gehen. Das ist ja beschreibbar.

Mathias R

#3
Hallo FhemPiUser,
es steht bei mir im state 0 Heating. Ich vermute hier eher Automatik, Heizen oder Regelbetrieb aus dem Bereich "Wärmepumpe" im VNC-Interface.
Vermutlich gibt es noch diverse nicht dokumentierte Register, denn im VNC sehe ich ja wesentlich mehr Werte, die in der Modbus-Doku nicht erwähnt sind.
Ich habe auch mal den Energieverbrauch extern gemessen und die internen Zähler scheinen bei mir ziemlich genau zu sein (weniger als 2 Promille Abweichung).
Jetzt habe ich noch das korrekte Wetter eingestellt damit vor warmen Tagen die Temperatur automatisch abgesenkt wird.
Im Februar bekomme ich den Tibber-Tarif und möchte bis dahin eine Lösung zur Vermeidung der Peak-Preise implementieren.

Mathias

Mathias R

Hallo,
ich habe eine andere Lösung zum "Abschalten" und der Temperaturerhöhung gefunden: Einfach die Heizkurve um bis zu 10 K nach oben oder unten verschieben mitset Lambda_EU13L Heating_circuit_Offset_flow_line_temp_setpoint xxxwobei xxx eine Zahl von -100 bis 100 die Verschiebung in 1/10 K ist, also -50 = -5K.

dmq

#5
Danke @FhemPiUser. Tatsächlich hatte ich mir die Mühe zum Großteil vor ca. 6 Monaten auch schon gemacht. Zugegeben, ist bei Dir aber (gerade in den userReadings noch mal mehr eingeflossen:). Gut das Du einen Thread aufgemacht hast und deine Sachen teilst - ich war bei mir noch im Beobachtungsmodus.

Wo realisiert ihr die Speicherung und Analyse der Energiewerte (Tages-, Monats-, Jahres-Werte)? Ich hatte mir da eingangs auch ein paar userReadings erstellt, nutze hierzu mittlerweile aber auch die Auswertung von openWB (dort auch bereits ganz schön mit PV + Batteriespeicher-Anteil).

Ich benutze auch tibber. Habt ihr ggf. schon eine Idee, wie die Steuerung auf Basis von Kontextdaten (bei tibber dann niedriger Strompreis) sich rein auf die WW-Aufbereitung (bei mir Boiler) beziehen lässt? Das Register 5050 hebt doch den Vorlauf für den Heizkreis an? Matthias, wie sind bisher deine Erfahrungen? Gerade in den letzten Nächten hatten wir ja ein paar mal 17 Cent. Ich denke Du hast es dann per DOIF realisiert? Wenn man die kleinsten Werte über einen definierbaren Zeitraum finden möchte, kann ggf. das hier hilfreich sein (https://www.juergenstechnikwelt.de/smarthome-2/tibber-in-fhem-einbinden-beste-zeiten-fuer-niedrige-strompreise-ermitteln/ - dazu auch noch danke an Jürgen).

dmq

#6
Ich denke die WW- / Boiler Einstellung geht hierüber (wenn entsprechend die Zeitprogramme: Normal und Eco berücksichtigt werden):

    {
        "address": 2050,
        "modbustype": "holding",
        "modbusaccess": "readwrite",
        "valuetype": "int16",
        "factor": 0.1,
        "interval": 10,
        "unit": "ºC",
    }

Da der Wert durch 10 geteilt wird ($val/10), sollte der set Befehl dann so aussehen (bei 50 Grad C):

set modbus_lambda EU13L_Boil1_Set_temperature 500

Mathias R

Hallo dmq,
bisher läuft bei mir Tibber leider noch nicht.
Bei Tibber kann man jeweils ab 13:00 Uhr die Strompreise des Folgetages mit curl abholen. Je nach Temperatur kann ich entscheiden wie lange ich abschalten kann.
Vermutlich werde ich etwas in der Shell mit AWK schreiben um die teuersten Stunden abzuschalten (Temperatur senken), bei besonders günstigen Stunden die Temperatur etwas anheben. FHEM spreche ich aus der Shell per Netcat auf dem Telnetport an.
Eventuell ergänze ich auch ein WLAN-Relais am EVU-Sperrkontakt.

dmq

Ja, awk und netcat gehen natürlich auch (den Weg habe ich auch für das ein oder andere, bzw. openssl anstelle von netcat wenn remote und tls). Zu Tibber gibt es aber jede Menge (u.a. auch node-red mit der Power Saver Library). Ich denke es sollte alles behutsam geschaltet werden, dass da nicht zu viel Bewegung drin ist. Ich taste mich da auch mal ran.

nuart

Besten Dank@FhemPiUser

heute wurde meine Lambda in Betrieb genommen und alles läuft wie geplant. Alles bereits in FHEM, dank PiUser. Lediglich der Wert für Heating_circuit_Return_line_temp b ringt bei mir -300. Ich komme nicht dahinter, was die Ursache dafür ist. die Werte für den Vorlauf sind korrekt, auch alle anderen Readings sind plausibel. Vielleicht hat da noch wer einen Tipp für mich.

FhemPiUser

Heating_circuit_Return_line_temp ist bei mir auch -300. Bei mir ist gar kein Sensor für den Rücklauf angeschlossen. Ich nehme an, dass das der Grund bei mir ist.

Allerdings ist z.B. Heating_circuit_Setpoint_flow_line_temp bei mir auch -300. Ich habe mal gelesen, dass das ein Bug in der Lambda Firmware ist und das früher mal ging. Mal abwarten auf das nächste Firmware-Update.

nuart

Besten Dank. Auch bei mir ist kein Fühler im Rücklauf, damit ist alles klar. Mein Installateur hat mit auch bestätigt, dass hier ein Bug in der Lambda Firmware vorhanden ist. Jetzt ist mir noch aufgefallen dass die Anzahl der Takte über das Reading Hp_QP_heating gerechnet wird. Dieses Reading hat aber meiner Meinung nach nichts mit dem Takten zu tun, sondern es zeigt die akuelle Leistung an.  Oder verstehe ich da was falsch?

FhemPiUser

Naja, es gibt aktuell keine explizite modbus variable für Takten von Lambda. Daher habe ich es als Takten gezählt, wenn die Leistung auf nahe Null geht und dann wieder steigt.

nuart

Hallo, hab ich mir dann auch so gedacht. Nachdem meine Lambda erst ein paar Tage löuft hatte sie noch nie Null gehabt.