diff --git a/src/main.tsp b/src/main.tsp index b237fbe60..c04270a3f 100644 --- a/src/main.tsp +++ b/src/main.tsp @@ -9,6 +9,7 @@ import "./vaillant/06.vms.tsp"; import "./vaillant/08.bai.tsp"; import "./vaillant/08.ehp.tsp"; import "./vaillant/08.hmu.tsp"; +import "./vaillant/08.hmu.HW5103.tsp"; import "./vaillant/08.recov.tsp"; import "./vaillant/08.v3x.tsp"; import "./vaillant/0a.pmw.hwc.tsp"; diff --git a/src/vaillant/08.hmu.HW5103.tsp b/src/vaillant/08.hmu.HW5103.tsp new file mode 100644 index 000000000..a304f6228 --- /dev/null +++ b/src/vaillant/08.hmu.HW5103.tsp @@ -0,0 +1,454 @@ +import "@ebusd/ebus-typespec"; +import "./_templates.tsp"; +using Ebus; +using Ebus.Num; +using Ebus.Dtm; +using Ebus.Str; +namespace Vaillant; + +// @zz(0x08) +namespace Hmu.Hw5103 { + // B509 + /** default *r */ + @base(MF, 0x9, 0x54, 0x2, 0) + model r_0 { + @maxLength(4) + value: IGN; + } + + @inherit(r_0) + @ext(0xd, 0xa) + model CompressorSpeed { + @unit("rps") + value: EXP; + } + + @inherit(r_0) + @ext(0x28, 0xa) + model EevPositionAbs { + value: UIN; + } + + @inherit(r_0) + @ext(0x47, 0xa) + model Fan1Speed { + @unit("rpm") + value: EXP; + } + + @inherit(r_0) + @ext(0x49, 0xa) + model Fan2Speed { + @unit("rpm") + value: EXP; + } + + @inherit(r_0) + @ext(0x53, 0xd) + model Statuscode { + value: hmucode; + } + +/** + @inherit(r_0) + @ext(0x5b, 0xd) + model ElectricPowerConsumption { + @unit("W") + value: EXP; + } +*/ + + @inherit(r_0) + @ext(0x6a, 0x9) + model HighPressure { + value: pressv; + } + + @inherit(r_0) + @ext(0x98, 0x8) + model CompressorInletTemp { + value: tempv; + } + + @inherit(r_0) + @ext(0xa2, 0x8) + model CompressorOutletTemp { + value: tempv; + } + +/** + @inherit(r_0) + @ext(0xa6, 0xe) + model DiagFlowTemp { + value: tempv; + } + + @inherit(r_0) + @ext(0xa7, 0xe) + model DiagEvaporationTemp { + value: tempv; + } + + @inherit(r_0) + @ext(0xa9, 0xe) + model DiagOverheatingActualValue { + value: tempv; + } +*/ + + @inherit(r_0) + @ext(0xac, 0x8) + model EevOutletTemp { + value: tempv; + } + + @inherit(r_0) + @ext(0xb8, 0xb) + model HmuHours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xb9, 0xb) + model HeatingHours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xbc, 0xb) + model WaterHours { + value: hoursum2; + } + +/** + @inherit(r_0) + @ext(0xbd, 0x9) + model DiagWaterThroughput { + @unit("l/h") + value: EXP; + } +*/ + + @inherit(r_0) + @ext(0xc2, 0xb) + model CompressorHours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xc3, 0xb) + model CompressorStarts { + value: cntstarts2; + } + + @inherit(r_0) + @ext(0xc4, 0xb) + model BuildingPumpHours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xc5, 0x9) + model BuildingPumpPower { + @unit("%") + value: EXP; + } + + @inherit(r_0) + @ext(0xc5, 0xb) + model BuildingPumpStarts { + value: cntstarts2; + } + + @inherit(r_0) + @ext(0xc8, 0xb) + model FourPortValveHours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xc9, 0xb) + model FourPortValveSwitches { + value: cntstarts2; + } + + @inherit(r_0) + @ext(0xd7, 0xb) + model Fan1Hours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xd8, 0xb) + model Fan1Starts { + value: cntstarts2; + } + + @inherit(r_0) + @ext(0xd9, 0xb) + model Fan2Hours { + value: hoursum2; + } + + @inherit(r_0) + @ext(0xda, 0xb) + model Fan2Starts { + value: cntstarts2; + } + + @inherit(r_0) + @ext(0xde, 0x8) + model AirInletTemp { + value: tempv; + } + + // B511 + /** default *r */ + @base(MF, 0x11) + model r_1 {} + + @inherit(r_1) + @ext(1) + model Status { + supplytemp: temp1; + returntemp: temp1; + @maxLength(4) ign: IGN; + pumpstate: pumpstate; + } + + @condition(Id.Id.sw, ">=902") + @inherit(r_1) + @ext(0x18, 1) + model CompressorHeating { + @maxLength(1) ign: IGN; + runtime: minutes4; + cycles: cntstarts; + } + + @condition(Id.Id.sw, ">=902") + @inherit(r_1) + @ext(0x18, 0x2) + model CompressorWater { + @maxLength(1) ign: IGN; + runtime: minutes4; + cycles: cntstarts; + } + + // B516 + /** default *r */ + @base(MF, 0x16) + model r_2 { + @maxLength(1) + value: IGN; + } + + @inherit(r_2) + @ext(0x14) + model CurrentPowerConsumption { + @unit("W") + value: EXP; + } + + // B51A FF32xx + /** default *r */ + @base(MF, 0x1a, 0x5, 0xff, 0x32) + model r_3 { + @maxLength(3) + value: IGN; + } + + @inherit(r_3) + @ext(0) + model YieldHeatingDay { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(1) + model YieldCoolingDay { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(0x2) + model YieldWaterDay { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(0xe) + model YieldHeatingMonth { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(0xf) + model CopHeatingMonth { + @divisor(10) + value: UIN; + } + + @inherit(r_3) + @ext(0x10) + model YieldHeating { + @unit("kWh") + value: energy; + } + + @inherit(r_3) + @ext(0x11) + model CopHeating { + @divisor(10) + value: UIN; + } + + @inherit(r_3) + @ext(0x12) + model YieldWaterMonth { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(0x13) + model CopWaterMonth { + @divisor(10) + value: UIN; + } + + @inherit(r_3) + @ext(0x16) + model YieldWater { + value: energy; + } + + @inherit(r_3) + @ext(0x17) + model CopWater { + @divisor(10) + value: UIN; + } + + @inherit(r_3) + @ext(0x1e) + model CompressorBlocktime { + @unit("min") + value: UIN; + } + + @inherit(r_3) + @ext(0x1f) + model SupplyTempWeighted { + @unit("°C") + @divisor(10) + value: D2C; + } + + @inherit(r_3) + @ext(0x20) + model FlowTemp { + @unit("°C") + value: D2C; + } + + @inherit(r_3) + @ext(0x21) + model EnergyIntegral { + value: integral; + } + +/** + @inherit(r_3) + @ext(0x22) + model SourceTempInput { + @unit("°C") + value: D2C; + } +*/ + + @inherit(r_3) + @ext(0x23) + model CurrentYieldPower { + @unit("kW") + @divisor(10) + value: D1B; + } + + @inherit(r_3) + @ext(0x24) + model CurrentConsumedPower { + @unit("kW") + @divisor(10) + value: D1B; + } + + @inherit(r_3) + @ext(0x25) + model CompressorModulation { + @unit("%") + value: D2C; + } + + @inherit(r_3) + @ext(0x2A) + model YieldCoolingMonth { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(0x2B) + model CopCoolingMonth { + @divisor(10) + value: UIN; + } + + @inherit(r_3) + @ext(0x2C) + model YieldCooling { + @unit("kWh") + @divisor(10) + value: energy; + } + + @inherit(r_3) + @ext(0x2D) + model CopCooling { + @divisor(10) + value: UIN; + } + + + @inherit(r_3) + @ext(0x3c) + model WaterThroughput { + @unit("l/h") + value: UIN; + } + + @condition(Id.Id.sw, ">=902") + @inherit(r_3) + @ext(0x3d) + model FlowPressure { + @unit("bar") + @divisor(4) + value: D2C; + } + + @inherit(r_3) + @ext(0x4d) + model TotalEnergyUsage { + @unit("kWh") + value: energy; + } +} diff --git a/src/vaillant/_templates.tsp b/src/vaillant/_templates.tsp index 2dcbc32f7..e13b214a0 100644 --- a/src/vaillant/_templates.tsp +++ b/src/vaillant/_templates.tsp @@ -470,6 +470,10 @@ model rTimeSlotWithoutTemp { @values(Values_appliancecode) scalar appliancecode extends UCH; +/** HMU Status code */ +@values(Values_hmucode) +scalar hmucode extends UIN; + enum Values_daysel { selected: 0, Mo_Fr: 1, @@ -730,6 +734,62 @@ enum Values_appliancecode { frost_protect: 34, } +enum Values_hmucode { + frost_protect: 34, + standby: 100, + heat_compressor_shutdown: 101, + heat_compressor_blocked: 102, + heat_prerun: 103, + heat_compressor_active: 104, + heat_overrun: 107, + cool_compressor_shutdown: 111, + cool_compressor_blocked: 112, + cool_prerun: 113, + cool_compressor_active: 114, + cool_overrun: 117, + heat_immersion_heater_active: 125, + hwc_compressor_blocked: 132, + hwc_prerun: 133, + hwc_compressor_active: 134, + hwc_immersion_heater_active: 135, + hwc_overrun: 137, + heat_immersion_heater_shutdown: 141, + heat_immersion_heater_blocked: 142, + hwc_immersion_heater_shutdown: 151, + hwc_immersion_heater_blocked: 152, + air_purging_program_active: 202, + compressor_oil_heating_activated: 240, + fan1_blocked: 252, + fan1_airinlet_too_high: 255, + fan1_airinlet_too_low: 256, + fan2_blocked: 260, + building_circuit_flow_too_low: 275, + building_circuit_pump_fault: 277, + frequency_converter_fault_compressor: 280, + frequency_converter_fault_mains_voltage: 281, + frequency_converter_fault_overheating: 282, + deicing_time_too_long: 283, + deicing_flow_temperature_too_low: 284, + compressor_outlet_temperature_too_high: 285, + hot_gas_temperature_switch_open: 286, + fan1_wind: 287, + fan2_wind: 288, + current_limt_active: 289, + high_pressure_switch_open: 302, + compressor_outlet_temperature_too_high_1: 303, + evaporation_temperature_too_low: 304, + condensation_temperature_too_low: 305, + evaporation_temperature_too_high: 306, + condensation_temperature_too_high: 308, + building_circuit_return_temperature_too_low: 312, + building_circuit_return_temperature_too_high: 314, + immersion_heater_flow_temperature_too_high: 351, + deicing_active: 516, + frequency_converter_fault: 575, + connection_fault_frequency_converter: 581, + four_port_valve_position_fault: 590, +} + /** default *r for register */ @base(MF, 0x9, 0xd) model r {}