weheat 2024.11.1__py3-none-any.whl → 2025.11.24rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. weheat/__init__.py +6 -2
  2. weheat/abstractions/__init__.py +1 -1
  3. weheat/abstractions/discovery.py +11 -7
  4. weheat/abstractions/heat_pump.py +223 -81
  5. weheat/abstractions/user.py +16 -11
  6. weheat/api/__init__.py +1 -0
  7. weheat/api/energy_log_api.py +615 -127
  8. weheat/api/heat_pump_api.py +580 -374
  9. weheat/api/heat_pump_log_api.py +884 -360
  10. weheat/api/user_api.py +260 -115
  11. weheat/api_client.py +238 -265
  12. weheat/api_response.py +11 -15
  13. weheat/configuration.py +14 -9
  14. weheat/exceptions.py +59 -25
  15. weheat/models/__init__.py +8 -0
  16. weheat/models/boiler_type.py +8 -3
  17. weheat/models/device_state.py +9 -5
  18. weheat/models/dhw_type.py +8 -3
  19. weheat/models/energy_view_dto.py +87 -65
  20. weheat/models/heat_pump_log_view_dto.py +1394 -559
  21. weheat/models/heat_pump_model.py +8 -3
  22. weheat/models/heat_pump_status_enum.py +9 -4
  23. weheat/models/pagination_metadata.py +95 -0
  24. weheat/models/raw_heat_pump_log_dto.py +438 -375
  25. weheat/models/raw_heatpump_log_and_is_online_dto.py +578 -0
  26. weheat/models/read_all_heat_pump_dto.py +69 -53
  27. weheat/models/read_all_heat_pump_dto_paged_response.py +107 -0
  28. weheat/models/read_heat_pump_dto.py +64 -48
  29. weheat/models/read_user_dto.py +55 -37
  30. weheat/models/read_user_me_dto.py +124 -0
  31. weheat/models/role.py +10 -4
  32. weheat/models/total_energy_aggregate.py +111 -0
  33. weheat/rest.py +152 -259
  34. weheat-2025.11.24rc1.dist-info/METADATA +104 -0
  35. weheat-2025.11.24rc1.dist-info/RECORD +39 -0
  36. {weheat-2024.11.1.dist-info → weheat-2025.11.24rc1.dist-info}/WHEEL +1 -1
  37. weheat/abstractions/auth.py +0 -34
  38. weheat/models/heat_pump_type.py +0 -42
  39. weheat-2024.11.1.dist-info/METADATA +0 -107
  40. weheat-2024.11.1.dist-info/RECORD +0 -36
  41. {weheat-2024.11.1.dist-info → weheat-2025.11.24rc1.dist-info/licenses}/LICENSE +0 -0
  42. {weheat-2024.11.1.dist-info → weheat-2025.11.24rc1.dist-info}/top_level.txt +0 -0
@@ -18,495 +18,558 @@ import re # noqa: F401
18
18
  import json
19
19
 
20
20
  from datetime import datetime
21
- from typing import Optional, Union
22
- from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional, Union
22
+ from pydantic import BaseModel, StrictBool, StrictFloat, StrictInt, StrictStr
23
+ from pydantic import Field
24
+ try:
25
+ from typing import Self
26
+ except ImportError:
27
+ from typing_extensions import Self
23
28
 
24
29
  class RawHeatPumpLogDto(BaseModel):
25
30
  """
26
- Raw heat pump log as given by a heat pump (Required star states that it will always be there for any roll, otherwise it is filtered for customers) # noqa: E501
27
- """
28
- heat_pump_id: StrictStr = Field(..., alias="heatPumpId", description="Identifier of the Heat Pump")
29
- timestamp: datetime = Field(..., description="Timestamp of when this was logged to the server")
30
- firmware_revision: Optional[StrictInt] = Field(None, alias="firmwareRevision", description="Version of heat pump logs (should be 1026)")
31
- packet_counter: Optional[StrictInt] = Field(None, alias="packetCounter", description="Packet counter of inside the control board")
32
- unix_time_mcu: Optional[StrictInt] = Field(None, alias="unixTimeMcu", description="Unix time inside the control board at the time it send this log")
33
- state: Optional[StrictInt] = Field(None, description="Current heat pump state (which is decoded in the view)")
34
- rpm_ctrl: Optional[StrictInt] = Field(None, alias="rpmCtrl", description="Current mode of RPM control (which is decoded in the view)")
35
- error: Optional[StrictInt] = Field(None, description="Current state of error in the heat pump (which is decoded in the view)")
36
- error_decoded_dtc_none: Optional[StrictBool] = Field(None, alias="errorDecodedDtcNone", description="None state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
37
- error_decoded_dtc_continue: Optional[StrictBool] = Field(None, alias="errorDecodedDtcContinue", description="DTC continue state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
38
- error_decoded_dtc_compressor_off: Optional[StrictBool] = Field(None, alias="errorDecodedDtcCompressorOff", description="DTC off state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
39
- error_decoded_dtc_defrost_forbidden: Optional[StrictBool] = Field(None, alias="errorDecodedDtcDefrostForbidden", description="DTC defrost forbidden state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
40
- error_decoded_dtc_request_service: Optional[StrictBool] = Field(None, alias="errorDecodedDtcRequestService", description="DTC request service state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
41
- error_decoded_dtc_use_heating_curve: Optional[StrictBool] = Field(None, alias="errorDecodedDtcUseHeatingCurve", description="DTC use heating curve state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
42
- error_decoded_dtc_dhw_forbidden: Optional[StrictBool] = Field(None, alias="errorDecodedDtcDhwForbidden", description="DTC use heating curve state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
43
- error_decoded_dtc_error: Optional[StrictBool] = Field(None, alias="errorDecodedDtcError", description="DTC use heating curve state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
44
- error_decoded_dtc_inactive: Optional[StrictBool] = Field(None, alias="errorDecodedDtcInactive", description="DTC Inactive state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)")
45
- heatsink: Optional[StrictInt] = Field(None, description="Raw state of the where the heat pump is dumping it's heat")
46
- si5: Optional[StrictInt] = Field(None, description="Raw state of the heat pump")
47
- e80: Optional[StrictInt] = Field(None, description="Raw error code state 80 of the heat pump")
48
- e81: Optional[StrictInt] = Field(None, description="Raw error code state 81 of the heat pump")
49
- e84: Optional[StrictInt] = Field(None, description="Raw error code state 84 of the heat pump")
50
- e85: Optional[StrictInt] = Field(None, description="Raw error code state 85 of the heat pump")
51
- control_bridge_status: Optional[StrictInt] = Field(None, alias="controlBridgeStatus", description="Raw control bridge status of the heat pump (bitwise encoded)")
52
- control_bridge_status_decoded_water_pump: Optional[StrictBool] = Field(None, alias="controlBridgeStatusDecodedWaterPump", description="Water pump (requested) on/off flag of the control bridge status (0x01)")
53
- control_bridge_status_decoded_dhw_valve: Optional[StrictBool] = Field(None, alias="controlBridgeStatusDecodedDhwValve", description="DhwValve (requested) open/closed flag of the control bridge status (0x02) (DHW Only)")
54
- control_bridge_status_decoded_gas_boiler: Optional[StrictBool] = Field(None, alias="controlBridgeStatusDecodedGasBoiler", description="Gas boiler assistance (requested) on/off flag of the control bridge status (0x04) (Hybrid Only)")
55
- control_bridge_status_decoded_electric_heater: Optional[StrictBool] = Field(None, alias="controlBridgeStatusDecodedElectricHeater", description="Electric heater assistance (requested) on/off flag of the control bridge status (0x08) (DHW Only)")
56
- control_bridge_status_decoded_water_pump2: Optional[StrictBool] = Field(None, alias="controlBridgeStatusDecodedWaterPump2", description="Second water pump (requested) on/off flag of the control bridge status (0x010) (DHW Only)")
57
- input_status: Optional[StrictInt] = Field(None, alias="inputStatus", description="Raw input status of the heat pump")
58
- current_control_method: Optional[StrictInt] = Field(None, alias="currentControlMethod", description="Raw current control method state of the heat pump")
59
- signal_strength: Optional[StrictInt] = Field(None, alias="signalStrength", description="Signal strength (rssi) reported by the modem of the control board")
60
- t1: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="Temperature T1 (TOP) of the DHW sensors")
61
- t2: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="Temperature T2 (BOTTOM) of the DHW sensors")
62
- t_spare_ntc: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tSpareNtc", description="Spare temperature sensor (for DHW)")
63
- t_board: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tBoard", description="Temperature of the control board")
64
- t_air_in: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tAirIn", description="Temperature of the air going into the heat pump")
65
- t_air_out: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tAirOut", description="Temperature of the air going out of the heat pump")
66
- t_water_in: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tWaterIn", description="Temperature of the water going into the heat pump")
67
- t_water_out: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tWaterOut", description="Temperature of the water going out of the heat pump")
68
- t_water_house_in: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tWaterHouseIn", description="Temperature of the water going into the building")
69
- rpm: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="Rpm of the compressor")
70
- rpm_limiter: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="rpmLimiter", description="Rpm limit of the compressor")
71
- rpm_limiter_type: Optional[StrictInt] = Field(None, alias="rpmLimiterType", description="Type of why the rpm is limited")
72
- p_compressor_in: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="pCompressorIn", description="Pressure of the compressor of the side where air goes into the compressor")
73
- p_compressor_out: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="pCompressorOut", description="Pressure of the compressor of the side where air goes out of the compressor")
74
- p_compressor_in_target: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="pCompressorInTarget", description="Target pressure of the compressor of the side where air goes into the compressor")
75
- t_inverter: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tInverter", description="Temperature of the inverter")
76
- t_compressor_in: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tCompressorIn", description="Temperature of the compressor of the side where air goes into the compressor")
77
- t_compressor_out: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tCompressorOut", description="Temperature of the compressor of the side where air goes out of the compressor")
78
- t_compressor_in_transient: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tCompressorInTransient", description="Temperature transient of the compressor of the side where air goes into the compressor")
79
- t_compressor_out_transient: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tCompressorOutTransient", description="Temperature transient of the compressor of the side where air goes out of the compressor")
80
- delta_t_compressor_in_superheat: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="deltaTCompressorInSuperheat", description="Difference in temperature for superheat based on the compressor temperatures")
81
- compressor_power_low_accuracy: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="compressorPowerLowAccuracy", description="Power used by the compressor (low accuracy)")
82
- fan: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="State of the fan")
83
- fan_power: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="fanPower", description="Power used by the fan")
84
- valve: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="Position value of the valve")
85
- exv_flow_step_gain: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="exvFlowStepGain")
86
- cm_mass_flow: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="cmMassFlow", description="Flow of the water going through the heat pump")
87
- cm_mass_power_in: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="cmMassPowerIn", description="Power going into the heat pump")
88
- cm_mass_power_out: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="cmMassPowerOut", description="Power going out of the heat pump (in the form of usable heat)")
89
- p_requested: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="pRequested", description="Power requested by the heat pump")
90
- power_error_integral: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="powerErrorIntegral", description="Current value of the power error integral")
91
- on_off_thermostat_state: Optional[StrictInt] = Field(None, alias="onOffThermostatState", description="State of the on/off thermostat")
92
- thermostat_status: Optional[StrictInt] = Field(None, alias="thermostatStatus", description="Status of the OpenTherm thermostat")
93
- t_room: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tRoom", description="Temperature of the room given by the OpenTherm thermostat")
94
- t_room_target: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tRoomTarget", description="Target temperature of the room given by the OpenTherm thermostat")
95
- t_thermostat_setpoint: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tThermostatSetpoint", description="Setpoint temperature of the OpenTherm thermostat OR the water setpoint of the heat pump")
96
- ot_boiler_status: Optional[StrictInt] = Field(None, alias="otBoilerStatus", description="Status of the OpenTherm boiler")
97
- ot_boiler_feed_temperature: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="otBoilerFeedTemperature", description="Feed temperature of the OpenTherm boiler")
98
- ot_boiler_return_temperature: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="otBoilerReturnTemperature", description="Return temperature of the OpenTherm boiler")
99
- interval: StrictInt = Field(..., description="Interval for this log in seconds")
100
- __properties = ["heatPumpId", "timestamp", "firmwareRevision", "packetCounter", "unixTimeMcu", "state", "rpmCtrl", "error", "errorDecodedDtcNone", "errorDecodedDtcContinue", "errorDecodedDtcCompressorOff", "errorDecodedDtcDefrostForbidden", "errorDecodedDtcRequestService", "errorDecodedDtcUseHeatingCurve", "errorDecodedDtcDhwForbidden", "errorDecodedDtcError", "errorDecodedDtcInactive", "heatsink", "si5", "e80", "e81", "e84", "e85", "controlBridgeStatus", "controlBridgeStatusDecodedWaterPump", "controlBridgeStatusDecodedDhwValve", "controlBridgeStatusDecodedGasBoiler", "controlBridgeStatusDecodedElectricHeater", "controlBridgeStatusDecodedWaterPump2", "inputStatus", "currentControlMethod", "signalStrength", "t1", "t2", "tSpareNtc", "tBoard", "tAirIn", "tAirOut", "tWaterIn", "tWaterOut", "tWaterHouseIn", "rpm", "rpmLimiter", "rpmLimiterType", "pCompressorIn", "pCompressorOut", "pCompressorInTarget", "tInverter", "tCompressorIn", "tCompressorOut", "tCompressorInTransient", "tCompressorOutTransient", "deltaTCompressorInSuperheat", "compressorPowerLowAccuracy", "fan", "fanPower", "valve", "exvFlowStepGain", "cmMassFlow", "cmMassPowerIn", "cmMassPowerOut", "pRequested", "powerErrorIntegral", "onOffThermostatState", "thermostatStatus", "tRoom", "tRoomTarget", "tThermostatSetpoint", "otBoilerStatus", "otBoilerFeedTemperature", "otBoilerReturnTemperature", "interval"]
101
-
102
- class Config:
103
- """Pydantic configuration"""
104
- allow_population_by_field_name = True
105
- validate_assignment = True
31
+ Raw heat pump log as given by a heat pump for staff members
32
+ """ # noqa: E501
33
+ heat_pump_id: StrictStr = Field(description="Identifier of the Heat Pump", alias="heatPumpId")
34
+ timestamp: datetime = Field(description="Timestamp of when this was logged to the server")
35
+ state: Optional[StrictInt] = Field(default=None, description="Current heat pump state (which is decoded in the view)")
36
+ control_bridge_status: Optional[StrictInt] = Field(default=None, description="Raw control bridge status of the heat pump (bitwise encoded)", alias="controlBridgeStatus")
37
+ control_bridge_status_decoded_water_pump: Optional[StrictBool] = Field(default=None, description="Water pump (requested) on/off flag of the control bridge status (0x01)", alias="controlBridgeStatusDecodedWaterPump")
38
+ control_bridge_status_decoded_gas_boiler: Optional[StrictBool] = Field(default=None, description="Gas boiler assistance (requested) on/off flag of the control bridge status (0x04) (Hybrid Only)", alias="controlBridgeStatusDecodedGasBoiler")
39
+ control_bridge_status_decoded_electric_heater: Optional[StrictBool] = Field(default=None, description="Electric heater assistance (requested) on/off flag of the control bridge status (0x08) (DHW Only)", alias="controlBridgeStatusDecodedElectricHeater")
40
+ control_bridge_status_decoded_water_pump2: Optional[StrictBool] = Field(default=None, description="Second water pump (requested) on/off flag of the control bridge status (0x010) (DHW Only)", alias="controlBridgeStatusDecodedWaterPump2")
41
+ t1: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature T1 (TOP) of the DHW sensors")
42
+ t2: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature T2 (BOTTOM) of the DHW sensors")
43
+ t_air_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the air going into the heat pump", alias="tAirIn")
44
+ t_air_out: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the air going out of the heat pump", alias="tAirOut")
45
+ t_water_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the water going into the heat pump", alias="tWaterIn")
46
+ t_water_out: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the water going out of the heat pump", alias="tWaterOut")
47
+ t_water_house_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the water going into the building", alias="tWaterHouseIn")
48
+ rpm: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Rpm of the compressor")
49
+ on_off_thermostat_state: Optional[StrictInt] = Field(default=None, description="State of the on/off thermostat", alias="onOffThermostatState")
50
+ t_room: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the room given by the OpenTherm thermostat", alias="tRoom")
51
+ t_room_target: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Target temperature of the room given by the OpenTherm thermostat", alias="tRoomTarget")
52
+ t_thermostat_setpoint: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Setpoint temperature of the OpenTherm thermostat OR the water setpoint of the heat pump", alias="tThermostatSetpoint")
53
+ ot_boiler_feed_temperature: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Feed temperature of the OpenTherm boiler", alias="otBoilerFeedTemperature")
54
+ ot_boiler_return_temperature: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Return temperature of the OpenTherm boiler", alias="otBoilerReturnTemperature")
55
+ central_heating_flow: Optional[StrictInt] = Field(default=None, description="Duty cycle read by pwm pump for central heating circuit", alias="centralHeatingFlow")
56
+ dhw_flow: Optional[StrictInt] = Field(default=None, description="Duty cycle read by pwm pump for DHW circuit", alias="dhwFlow")
57
+ interval: StrictInt = Field(description="Interval for this log in seconds")
58
+ input_status: Optional[StrictInt] = Field(default=None, description="Raw input status of the heat pump", alias="inputStatus")
59
+ current_control_method: Optional[StrictInt] = Field(default=None, description="Raw current control method state of the heat pump", alias="currentControlMethod")
60
+ signal_strength: Optional[StrictInt] = Field(default=None, description="Signal strength (rssi) reported by the modem of the control board", alias="signalStrength")
61
+ rpm_limiter: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Rpm limit of the compressor", alias="rpmLimiter")
62
+ rpm_limiter_type: Optional[StrictInt] = Field(default=None, description="Type of why the rpm is limited", alias="rpmLimiterType")
63
+ p_compressor_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Pressure of the compressor of the side where air goes into the compressor", alias="pCompressorIn")
64
+ p_compressor_out: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Pressure of the compressor of the side where air goes out of the compressor", alias="pCompressorOut")
65
+ p_compressor_in_target: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Target pressure of the compressor of the side where air goes into the compressor", alias="pCompressorInTarget")
66
+ t_compressor_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the compressor of the side where air goes into the compressor", alias="tCompressorIn")
67
+ t_compressor_out: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the compressor of the side where air goes out of the compressor", alias="tCompressorOut")
68
+ t_compressor_in_transient: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature transient of the compressor of the side where air goes into the compressor", alias="tCompressorInTransient")
69
+ t_compressor_out_transient: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature transient of the compressor of the side where air goes out of the compressor", alias="tCompressorOutTransient")
70
+ delta_t_compressor_in_superheat: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Difference in temperature for superheat based on the compressor temperatures", alias="deltaTCompressorInSuperheat")
71
+ fan: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="State of the fan")
72
+ fan_power: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Power used by the fan", alias="fanPower")
73
+ temperature_error_integral: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Current value of the temperature error integral", alias="temperatureErrorIntegral")
74
+ thermostat_status: Optional[StrictInt] = Field(default=None, description="Status of the OpenTherm thermostat", alias="thermostatStatus")
75
+ ot_boiler_status: Optional[StrictInt] = Field(default=None, description="Status of the OpenTherm boiler", alias="otBoilerStatus")
76
+ central_heating_pwm_requested_duty_cycle: Optional[StrictInt] = Field(default=None, description="Requested duty cycle to pwm pump for central heating circuit", alias="centralHeatingPwmRequestedDutyCycle")
77
+ dhw_pwm_requested_duty_cycle: Optional[StrictInt] = Field(default=None, description="Requested duty cycle to pwm pump for DHW circuit", alias="dhwPwmRequestedDutyCycle")
78
+ sinr: Optional[StrictInt] = Field(default=None, description="Signal to noise ratio of the modem of the control board (SINR)")
79
+ error: Optional[StrictInt] = Field(default=None, description="Current state of error in the heat pump (which is decoded in the view)")
80
+ error_decoded_dtc_none: Optional[StrictBool] = Field(default=None, description="None state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcNone")
81
+ error_decoded_dtc_continue: Optional[StrictBool] = Field(default=None, description="DTC continue state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcContinue")
82
+ error_decoded_dtc_compressor_off: Optional[StrictBool] = Field(default=None, description="DTC off state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcCompressorOff")
83
+ error_decoded_dtc_defrost_forbidden: Optional[StrictBool] = Field(default=None, description="DTC defrost forbidden state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcDefrostForbidden")
84
+ error_decoded_dtc_request_service: Optional[StrictBool] = Field(default=None, description="DTC request service state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcRequestService")
85
+ error_decoded_dtc_use_heating_curve: Optional[StrictBool] = Field(default=None, description="DTC use heating curve state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcUseHeatingCurve")
86
+ error_decoded_dtc_dhw_forbidden: Optional[StrictBool] = Field(default=None, description="DTC use heating curve state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcDhwForbidden")
87
+ error_decoded_dtc_error: Optional[StrictBool] = Field(default=None, description="DTC use heating curve state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcError")
88
+ error_decoded_dtc_inactive: Optional[StrictBool] = Field(default=None, description="DTC Inactive state of the error flag which isn't raw for practical timescale purposes (it was bitwise encoded)", alias="errorDecodedDtcInactive")
89
+ control_bridge_status_decoded_dhw_valve: Optional[StrictBool] = Field(default=None, description="DhwValve (requested) open/closed flag of the control bridge status (0x02) (DHW Only)", alias="controlBridgeStatusDecodedDhwValve")
90
+ t_board: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the control board", alias="tBoard")
91
+ t_inverter: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the inverter", alias="tInverter")
92
+ compressor_power_low_accuracy: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Power used by the compressor (low accuracy)", alias="compressorPowerLowAccuracy")
93
+ valve: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Position value of the valve")
94
+ inverter_input_voltage: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Input voltage measured by the compressor inverter float - 4 bytes", alias="inverterInputVoltage")
95
+ indoor_unit_heater_temperature: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Temperature of the indoor unit heater", alias="indoorUnitHeaterTemperature")
96
+ indoor_unit_input_current: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Current of the indoor unit heater", alias="indoorUnitInputCurrent")
97
+ cooling_status: Optional[StrictInt] = Field(default=None, description="Current status of cooling With enum values: 0 = idle, 1 = starting, 2 = active, 3 = stopping", alias="coolingStatus")
98
+ cm_mass_power_in: Optional[StrictInt] = Field(default=None, description="Power going into the heat pump", alias="cmMassPowerIn")
99
+ cm_mass_power_out: Optional[StrictInt] = Field(default=None, description="Power going out of the heat pump (in the form of usable heat)", alias="cmMassPowerOut")
100
+ debug_variable1: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Optional debug variable that can be set to anything in firmware and will be logged as a float float - 4 bytes", alias="debugVariable1")
101
+ debug_variable2: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Optional? debug variable that can be set to anything in firmware and will be logged as a float float - 4 bytes", alias="debugVariable2")
102
+ debug_variable3: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Optional debug variable that can be set to anything in firmware and will be logged as a float float - 4 bytes", alias="debugVariable3")
103
+ debug_variable4: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Optional debug variable that can be set to anything in firmware and will be logged as a float float - 4 bytes", alias="debugVariable4")
104
+ debug_variable5: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Optional debug variable that can be set to anything in firmware and will be logged as a float float - 4 bytes", alias="debugVariable5")
105
+ __properties: ClassVar[List[str]] = ["heatPumpId", "timestamp", "state", "controlBridgeStatus", "controlBridgeStatusDecodedWaterPump", "controlBridgeStatusDecodedGasBoiler", "controlBridgeStatusDecodedElectricHeater", "controlBridgeStatusDecodedWaterPump2", "t1", "t2", "tAirIn", "tAirOut", "tWaterIn", "tWaterOut", "tWaterHouseIn", "rpm", "onOffThermostatState", "tRoom", "tRoomTarget", "tThermostatSetpoint", "otBoilerFeedTemperature", "otBoilerReturnTemperature", "centralHeatingFlow", "dhwFlow", "interval", "inputStatus", "currentControlMethod", "signalStrength", "rpmLimiter", "rpmLimiterType", "pCompressorIn", "pCompressorOut", "pCompressorInTarget", "tCompressorIn", "tCompressorOut", "tCompressorInTransient", "tCompressorOutTransient", "deltaTCompressorInSuperheat", "fan", "fanPower", "temperatureErrorIntegral", "thermostatStatus", "otBoilerStatus", "centralHeatingPwmRequestedDutyCycle", "dhwPwmRequestedDutyCycle", "sinr", "error", "errorDecodedDtcNone", "errorDecodedDtcContinue", "errorDecodedDtcCompressorOff", "errorDecodedDtcDefrostForbidden", "errorDecodedDtcRequestService", "errorDecodedDtcUseHeatingCurve", "errorDecodedDtcDhwForbidden", "errorDecodedDtcError", "errorDecodedDtcInactive", "controlBridgeStatusDecodedDhwValve", "tBoard", "tInverter", "compressorPowerLowAccuracy", "valve", "inverterInputVoltage", "indoorUnitHeaterTemperature", "indoorUnitInputCurrent", "coolingStatus", "cmMassPowerIn", "cmMassPowerOut", "debugVariable1", "debugVariable2", "debugVariable3", "debugVariable4", "debugVariable5"]
106
+
107
+ model_config = {
108
+ "populate_by_name": True,
109
+ "validate_assignment": True,
110
+ "protected_namespaces": (),
111
+ }
112
+
106
113
 
107
114
  def to_str(self) -> str:
108
115
  """Returns the string representation of the model using alias"""
109
- return pprint.pformat(self.dict(by_alias=True))
116
+ return pprint.pformat(self.model_dump(by_alias=True))
110
117
 
111
118
  def to_json(self) -> str:
112
119
  """Returns the JSON representation of the model using alias"""
120
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
113
121
  return json.dumps(self.to_dict())
114
122
 
115
123
  @classmethod
116
- def from_json(cls, json_str: str) -> RawHeatPumpLogDto:
124
+ def from_json(cls, json_str: str) -> Self:
117
125
  """Create an instance of RawHeatPumpLogDto from a JSON string"""
118
126
  return cls.from_dict(json.loads(json_str))
119
127
 
120
- def to_dict(self):
121
- """Returns the dictionary representation of the model using alias"""
122
- _dict = self.dict(by_alias=True,
123
- exclude={
124
- },
125
- exclude_none=True)
126
- # set to None if firmware_revision (nullable) is None
127
- # and __fields_set__ contains the field
128
- if self.firmware_revision is None and "firmware_revision" in self.__fields_set__:
129
- _dict['firmwareRevision'] = None
130
-
131
- # set to None if packet_counter (nullable) is None
132
- # and __fields_set__ contains the field
133
- if self.packet_counter is None and "packet_counter" in self.__fields_set__:
134
- _dict['packetCounter'] = None
135
-
136
- # set to None if unix_time_mcu (nullable) is None
137
- # and __fields_set__ contains the field
138
- if self.unix_time_mcu is None and "unix_time_mcu" in self.__fields_set__:
139
- _dict['unixTimeMcu'] = None
140
-
141
- # set to None if error (nullable) is None
142
- # and __fields_set__ contains the field
143
- if self.error is None and "error" in self.__fields_set__:
144
- _dict['error'] = None
128
+ def to_dict(self) -> Dict[str, Any]:
129
+ """Return the dictionary representation of the model using alias.
130
+
131
+ This has the following differences from calling pydantic's
132
+ `self.model_dump(by_alias=True)`:
133
+
134
+ * `None` is only added to the output dict for nullable fields that
135
+ were set at model initialization. Other fields with value `None`
136
+ are ignored.
137
+ """
138
+ _dict = self.model_dump(
139
+ by_alias=True,
140
+ exclude={
141
+ },
142
+ exclude_none=True,
143
+ )
144
+ # set to None if state (nullable) is None
145
+ # and model_fields_set contains the field
146
+ if self.state is None and "state" in self.model_fields_set:
147
+ _dict['state'] = None
145
148
 
146
- # set to None if error_decoded_dtc_none (nullable) is None
147
- # and __fields_set__ contains the field
148
- if self.error_decoded_dtc_none is None and "error_decoded_dtc_none" in self.__fields_set__:
149
- _dict['errorDecodedDtcNone'] = None
149
+ # set to None if control_bridge_status (nullable) is None
150
+ # and model_fields_set contains the field
151
+ if self.control_bridge_status is None and "control_bridge_status" in self.model_fields_set:
152
+ _dict['controlBridgeStatus'] = None
150
153
 
151
- # set to None if error_decoded_dtc_continue (nullable) is None
152
- # and __fields_set__ contains the field
153
- if self.error_decoded_dtc_continue is None and "error_decoded_dtc_continue" in self.__fields_set__:
154
- _dict['errorDecodedDtcContinue'] = None
154
+ # set to None if control_bridge_status_decoded_water_pump (nullable) is None
155
+ # and model_fields_set contains the field
156
+ if self.control_bridge_status_decoded_water_pump is None and "control_bridge_status_decoded_water_pump" in self.model_fields_set:
157
+ _dict['controlBridgeStatusDecodedWaterPump'] = None
155
158
 
156
- # set to None if error_decoded_dtc_compressor_off (nullable) is None
157
- # and __fields_set__ contains the field
158
- if self.error_decoded_dtc_compressor_off is None and "error_decoded_dtc_compressor_off" in self.__fields_set__:
159
- _dict['errorDecodedDtcCompressorOff'] = None
159
+ # set to None if control_bridge_status_decoded_gas_boiler (nullable) is None
160
+ # and model_fields_set contains the field
161
+ if self.control_bridge_status_decoded_gas_boiler is None and "control_bridge_status_decoded_gas_boiler" in self.model_fields_set:
162
+ _dict['controlBridgeStatusDecodedGasBoiler'] = None
160
163
 
161
- # set to None if error_decoded_dtc_defrost_forbidden (nullable) is None
162
- # and __fields_set__ contains the field
163
- if self.error_decoded_dtc_defrost_forbidden is None and "error_decoded_dtc_defrost_forbidden" in self.__fields_set__:
164
- _dict['errorDecodedDtcDefrostForbidden'] = None
164
+ # set to None if control_bridge_status_decoded_electric_heater (nullable) is None
165
+ # and model_fields_set contains the field
166
+ if self.control_bridge_status_decoded_electric_heater is None and "control_bridge_status_decoded_electric_heater" in self.model_fields_set:
167
+ _dict['controlBridgeStatusDecodedElectricHeater'] = None
165
168
 
166
- # set to None if error_decoded_dtc_request_service (nullable) is None
167
- # and __fields_set__ contains the field
168
- if self.error_decoded_dtc_request_service is None and "error_decoded_dtc_request_service" in self.__fields_set__:
169
- _dict['errorDecodedDtcRequestService'] = None
169
+ # set to None if control_bridge_status_decoded_water_pump2 (nullable) is None
170
+ # and model_fields_set contains the field
171
+ if self.control_bridge_status_decoded_water_pump2 is None and "control_bridge_status_decoded_water_pump2" in self.model_fields_set:
172
+ _dict['controlBridgeStatusDecodedWaterPump2'] = None
170
173
 
171
- # set to None if error_decoded_dtc_use_heating_curve (nullable) is None
172
- # and __fields_set__ contains the field
173
- if self.error_decoded_dtc_use_heating_curve is None and "error_decoded_dtc_use_heating_curve" in self.__fields_set__:
174
- _dict['errorDecodedDtcUseHeatingCurve'] = None
174
+ # set to None if t1 (nullable) is None
175
+ # and model_fields_set contains the field
176
+ if self.t1 is None and "t1" in self.model_fields_set:
177
+ _dict['t1'] = None
175
178
 
176
- # set to None if error_decoded_dtc_dhw_forbidden (nullable) is None
177
- # and __fields_set__ contains the field
178
- if self.error_decoded_dtc_dhw_forbidden is None and "error_decoded_dtc_dhw_forbidden" in self.__fields_set__:
179
- _dict['errorDecodedDtcDhwForbidden'] = None
179
+ # set to None if t2 (nullable) is None
180
+ # and model_fields_set contains the field
181
+ if self.t2 is None and "t2" in self.model_fields_set:
182
+ _dict['t2'] = None
180
183
 
181
- # set to None if error_decoded_dtc_error (nullable) is None
182
- # and __fields_set__ contains the field
183
- if self.error_decoded_dtc_error is None and "error_decoded_dtc_error" in self.__fields_set__:
184
- _dict['errorDecodedDtcError'] = None
184
+ # set to None if t_air_in (nullable) is None
185
+ # and model_fields_set contains the field
186
+ if self.t_air_in is None and "t_air_in" in self.model_fields_set:
187
+ _dict['tAirIn'] = None
185
188
 
186
- # set to None if error_decoded_dtc_inactive (nullable) is None
187
- # and __fields_set__ contains the field
188
- if self.error_decoded_dtc_inactive is None and "error_decoded_dtc_inactive" in self.__fields_set__:
189
- _dict['errorDecodedDtcInactive'] = None
189
+ # set to None if t_air_out (nullable) is None
190
+ # and model_fields_set contains the field
191
+ if self.t_air_out is None and "t_air_out" in self.model_fields_set:
192
+ _dict['tAirOut'] = None
190
193
 
191
- # set to None if heatsink (nullable) is None
192
- # and __fields_set__ contains the field
193
- if self.heatsink is None and "heatsink" in self.__fields_set__:
194
- _dict['heatsink'] = None
194
+ # set to None if t_water_in (nullable) is None
195
+ # and model_fields_set contains the field
196
+ if self.t_water_in is None and "t_water_in" in self.model_fields_set:
197
+ _dict['tWaterIn'] = None
195
198
 
196
- # set to None if si5 (nullable) is None
197
- # and __fields_set__ contains the field
198
- if self.si5 is None and "si5" in self.__fields_set__:
199
- _dict['si5'] = None
199
+ # set to None if t_water_out (nullable) is None
200
+ # and model_fields_set contains the field
201
+ if self.t_water_out is None and "t_water_out" in self.model_fields_set:
202
+ _dict['tWaterOut'] = None
200
203
 
201
- # set to None if e80 (nullable) is None
202
- # and __fields_set__ contains the field
203
- if self.e80 is None and "e80" in self.__fields_set__:
204
- _dict['e80'] = None
204
+ # set to None if t_water_house_in (nullable) is None
205
+ # and model_fields_set contains the field
206
+ if self.t_water_house_in is None and "t_water_house_in" in self.model_fields_set:
207
+ _dict['tWaterHouseIn'] = None
205
208
 
206
- # set to None if e81 (nullable) is None
207
- # and __fields_set__ contains the field
208
- if self.e81 is None and "e81" in self.__fields_set__:
209
- _dict['e81'] = None
209
+ # set to None if rpm (nullable) is None
210
+ # and model_fields_set contains the field
211
+ if self.rpm is None and "rpm" in self.model_fields_set:
212
+ _dict['rpm'] = None
210
213
 
211
- # set to None if e84 (nullable) is None
212
- # and __fields_set__ contains the field
213
- if self.e84 is None and "e84" in self.__fields_set__:
214
- _dict['e84'] = None
214
+ # set to None if on_off_thermostat_state (nullable) is None
215
+ # and model_fields_set contains the field
216
+ if self.on_off_thermostat_state is None and "on_off_thermostat_state" in self.model_fields_set:
217
+ _dict['onOffThermostatState'] = None
215
218
 
216
- # set to None if e85 (nullable) is None
217
- # and __fields_set__ contains the field
218
- if self.e85 is None and "e85" in self.__fields_set__:
219
- _dict['e85'] = None
219
+ # set to None if t_room (nullable) is None
220
+ # and model_fields_set contains the field
221
+ if self.t_room is None and "t_room" in self.model_fields_set:
222
+ _dict['tRoom'] = None
220
223
 
221
- # set to None if control_bridge_status (nullable) is None
222
- # and __fields_set__ contains the field
223
- if self.control_bridge_status is None and "control_bridge_status" in self.__fields_set__:
224
- _dict['controlBridgeStatus'] = None
224
+ # set to None if t_room_target (nullable) is None
225
+ # and model_fields_set contains the field
226
+ if self.t_room_target is None and "t_room_target" in self.model_fields_set:
227
+ _dict['tRoomTarget'] = None
225
228
 
226
- # set to None if control_bridge_status_decoded_water_pump (nullable) is None
227
- # and __fields_set__ contains the field
228
- if self.control_bridge_status_decoded_water_pump is None and "control_bridge_status_decoded_water_pump" in self.__fields_set__:
229
- _dict['controlBridgeStatusDecodedWaterPump'] = None
229
+ # set to None if t_thermostat_setpoint (nullable) is None
230
+ # and model_fields_set contains the field
231
+ if self.t_thermostat_setpoint is None and "t_thermostat_setpoint" in self.model_fields_set:
232
+ _dict['tThermostatSetpoint'] = None
230
233
 
231
- # set to None if control_bridge_status_decoded_dhw_valve (nullable) is None
232
- # and __fields_set__ contains the field
233
- if self.control_bridge_status_decoded_dhw_valve is None and "control_bridge_status_decoded_dhw_valve" in self.__fields_set__:
234
- _dict['controlBridgeStatusDecodedDhwValve'] = None
234
+ # set to None if ot_boiler_feed_temperature (nullable) is None
235
+ # and model_fields_set contains the field
236
+ if self.ot_boiler_feed_temperature is None and "ot_boiler_feed_temperature" in self.model_fields_set:
237
+ _dict['otBoilerFeedTemperature'] = None
235
238
 
236
- # set to None if control_bridge_status_decoded_gas_boiler (nullable) is None
237
- # and __fields_set__ contains the field
238
- if self.control_bridge_status_decoded_gas_boiler is None and "control_bridge_status_decoded_gas_boiler" in self.__fields_set__:
239
- _dict['controlBridgeStatusDecodedGasBoiler'] = None
239
+ # set to None if ot_boiler_return_temperature (nullable) is None
240
+ # and model_fields_set contains the field
241
+ if self.ot_boiler_return_temperature is None and "ot_boiler_return_temperature" in self.model_fields_set:
242
+ _dict['otBoilerReturnTemperature'] = None
240
243
 
241
- # set to None if control_bridge_status_decoded_electric_heater (nullable) is None
242
- # and __fields_set__ contains the field
243
- if self.control_bridge_status_decoded_electric_heater is None and "control_bridge_status_decoded_electric_heater" in self.__fields_set__:
244
- _dict['controlBridgeStatusDecodedElectricHeater'] = None
244
+ # set to None if central_heating_flow (nullable) is None
245
+ # and model_fields_set contains the field
246
+ if self.central_heating_flow is None and "central_heating_flow" in self.model_fields_set:
247
+ _dict['centralHeatingFlow'] = None
245
248
 
246
- # set to None if control_bridge_status_decoded_water_pump2 (nullable) is None
247
- # and __fields_set__ contains the field
248
- if self.control_bridge_status_decoded_water_pump2 is None and "control_bridge_status_decoded_water_pump2" in self.__fields_set__:
249
- _dict['controlBridgeStatusDecodedWaterPump2'] = None
249
+ # set to None if dhw_flow (nullable) is None
250
+ # and model_fields_set contains the field
251
+ if self.dhw_flow is None and "dhw_flow" in self.model_fields_set:
252
+ _dict['dhwFlow'] = None
250
253
 
251
254
  # set to None if input_status (nullable) is None
252
- # and __fields_set__ contains the field
253
- if self.input_status is None and "input_status" in self.__fields_set__:
255
+ # and model_fields_set contains the field
256
+ if self.input_status is None and "input_status" in self.model_fields_set:
254
257
  _dict['inputStatus'] = None
255
258
 
256
259
  # set to None if current_control_method (nullable) is None
257
- # and __fields_set__ contains the field
258
- if self.current_control_method is None and "current_control_method" in self.__fields_set__:
260
+ # and model_fields_set contains the field
261
+ if self.current_control_method is None and "current_control_method" in self.model_fields_set:
259
262
  _dict['currentControlMethod'] = None
260
263
 
261
264
  # set to None if signal_strength (nullable) is None
262
- # and __fields_set__ contains the field
263
- if self.signal_strength is None and "signal_strength" in self.__fields_set__:
265
+ # and model_fields_set contains the field
266
+ if self.signal_strength is None and "signal_strength" in self.model_fields_set:
264
267
  _dict['signalStrength'] = None
265
268
 
266
- # set to None if t1 (nullable) is None
267
- # and __fields_set__ contains the field
268
- if self.t1 is None and "t1" in self.__fields_set__:
269
- _dict['t1'] = None
270
-
271
- # set to None if t2 (nullable) is None
272
- # and __fields_set__ contains the field
273
- if self.t2 is None and "t2" in self.__fields_set__:
274
- _dict['t2'] = None
275
-
276
- # set to None if t_spare_ntc (nullable) is None
277
- # and __fields_set__ contains the field
278
- if self.t_spare_ntc is None and "t_spare_ntc" in self.__fields_set__:
279
- _dict['tSpareNtc'] = None
280
-
281
- # set to None if t_board (nullable) is None
282
- # and __fields_set__ contains the field
283
- if self.t_board is None and "t_board" in self.__fields_set__:
284
- _dict['tBoard'] = None
285
-
286
- # set to None if rpm (nullable) is None
287
- # and __fields_set__ contains the field
288
- if self.rpm is None and "rpm" in self.__fields_set__:
289
- _dict['rpm'] = None
290
-
291
269
  # set to None if rpm_limiter (nullable) is None
292
- # and __fields_set__ contains the field
293
- if self.rpm_limiter is None and "rpm_limiter" in self.__fields_set__:
270
+ # and model_fields_set contains the field
271
+ if self.rpm_limiter is None and "rpm_limiter" in self.model_fields_set:
294
272
  _dict['rpmLimiter'] = None
295
273
 
296
274
  # set to None if rpm_limiter_type (nullable) is None
297
- # and __fields_set__ contains the field
298
- if self.rpm_limiter_type is None and "rpm_limiter_type" in self.__fields_set__:
275
+ # and model_fields_set contains the field
276
+ if self.rpm_limiter_type is None and "rpm_limiter_type" in self.model_fields_set:
299
277
  _dict['rpmLimiterType'] = None
300
278
 
301
279
  # set to None if p_compressor_in (nullable) is None
302
- # and __fields_set__ contains the field
303
- if self.p_compressor_in is None and "p_compressor_in" in self.__fields_set__:
280
+ # and model_fields_set contains the field
281
+ if self.p_compressor_in is None and "p_compressor_in" in self.model_fields_set:
304
282
  _dict['pCompressorIn'] = None
305
283
 
306
284
  # set to None if p_compressor_out (nullable) is None
307
- # and __fields_set__ contains the field
308
- if self.p_compressor_out is None and "p_compressor_out" in self.__fields_set__:
285
+ # and model_fields_set contains the field
286
+ if self.p_compressor_out is None and "p_compressor_out" in self.model_fields_set:
309
287
  _dict['pCompressorOut'] = None
310
288
 
311
289
  # set to None if p_compressor_in_target (nullable) is None
312
- # and __fields_set__ contains the field
313
- if self.p_compressor_in_target is None and "p_compressor_in_target" in self.__fields_set__:
290
+ # and model_fields_set contains the field
291
+ if self.p_compressor_in_target is None and "p_compressor_in_target" in self.model_fields_set:
314
292
  _dict['pCompressorInTarget'] = None
315
293
 
316
- # set to None if t_inverter (nullable) is None
317
- # and __fields_set__ contains the field
318
- if self.t_inverter is None and "t_inverter" in self.__fields_set__:
319
- _dict['tInverter'] = None
320
-
321
294
  # set to None if t_compressor_in (nullable) is None
322
- # and __fields_set__ contains the field
323
- if self.t_compressor_in is None and "t_compressor_in" in self.__fields_set__:
295
+ # and model_fields_set contains the field
296
+ if self.t_compressor_in is None and "t_compressor_in" in self.model_fields_set:
324
297
  _dict['tCompressorIn'] = None
325
298
 
326
299
  # set to None if t_compressor_out (nullable) is None
327
- # and __fields_set__ contains the field
328
- if self.t_compressor_out is None and "t_compressor_out" in self.__fields_set__:
300
+ # and model_fields_set contains the field
301
+ if self.t_compressor_out is None and "t_compressor_out" in self.model_fields_set:
329
302
  _dict['tCompressorOut'] = None
330
303
 
331
304
  # set to None if t_compressor_in_transient (nullable) is None
332
- # and __fields_set__ contains the field
333
- if self.t_compressor_in_transient is None and "t_compressor_in_transient" in self.__fields_set__:
305
+ # and model_fields_set contains the field
306
+ if self.t_compressor_in_transient is None and "t_compressor_in_transient" in self.model_fields_set:
334
307
  _dict['tCompressorInTransient'] = None
335
308
 
336
309
  # set to None if t_compressor_out_transient (nullable) is None
337
- # and __fields_set__ contains the field
338
- if self.t_compressor_out_transient is None and "t_compressor_out_transient" in self.__fields_set__:
310
+ # and model_fields_set contains the field
311
+ if self.t_compressor_out_transient is None and "t_compressor_out_transient" in self.model_fields_set:
339
312
  _dict['tCompressorOutTransient'] = None
340
313
 
341
314
  # set to None if delta_t_compressor_in_superheat (nullable) is None
342
- # and __fields_set__ contains the field
343
- if self.delta_t_compressor_in_superheat is None and "delta_t_compressor_in_superheat" in self.__fields_set__:
315
+ # and model_fields_set contains the field
316
+ if self.delta_t_compressor_in_superheat is None and "delta_t_compressor_in_superheat" in self.model_fields_set:
344
317
  _dict['deltaTCompressorInSuperheat'] = None
345
318
 
346
- # set to None if compressor_power_low_accuracy (nullable) is None
347
- # and __fields_set__ contains the field
348
- if self.compressor_power_low_accuracy is None and "compressor_power_low_accuracy" in self.__fields_set__:
349
- _dict['compressorPowerLowAccuracy'] = None
350
-
351
319
  # set to None if fan (nullable) is None
352
- # and __fields_set__ contains the field
353
- if self.fan is None and "fan" in self.__fields_set__:
320
+ # and model_fields_set contains the field
321
+ if self.fan is None and "fan" in self.model_fields_set:
354
322
  _dict['fan'] = None
355
323
 
356
324
  # set to None if fan_power (nullable) is None
357
- # and __fields_set__ contains the field
358
- if self.fan_power is None and "fan_power" in self.__fields_set__:
325
+ # and model_fields_set contains the field
326
+ if self.fan_power is None and "fan_power" in self.model_fields_set:
359
327
  _dict['fanPower'] = None
360
328
 
329
+ # set to None if temperature_error_integral (nullable) is None
330
+ # and model_fields_set contains the field
331
+ if self.temperature_error_integral is None and "temperature_error_integral" in self.model_fields_set:
332
+ _dict['temperatureErrorIntegral'] = None
333
+
334
+ # set to None if thermostat_status (nullable) is None
335
+ # and model_fields_set contains the field
336
+ if self.thermostat_status is None and "thermostat_status" in self.model_fields_set:
337
+ _dict['thermostatStatus'] = None
338
+
339
+ # set to None if ot_boiler_status (nullable) is None
340
+ # and model_fields_set contains the field
341
+ if self.ot_boiler_status is None and "ot_boiler_status" in self.model_fields_set:
342
+ _dict['otBoilerStatus'] = None
343
+
344
+ # set to None if central_heating_pwm_requested_duty_cycle (nullable) is None
345
+ # and model_fields_set contains the field
346
+ if self.central_heating_pwm_requested_duty_cycle is None and "central_heating_pwm_requested_duty_cycle" in self.model_fields_set:
347
+ _dict['centralHeatingPwmRequestedDutyCycle'] = None
348
+
349
+ # set to None if dhw_pwm_requested_duty_cycle (nullable) is None
350
+ # and model_fields_set contains the field
351
+ if self.dhw_pwm_requested_duty_cycle is None and "dhw_pwm_requested_duty_cycle" in self.model_fields_set:
352
+ _dict['dhwPwmRequestedDutyCycle'] = None
353
+
354
+ # set to None if sinr (nullable) is None
355
+ # and model_fields_set contains the field
356
+ if self.sinr is None and "sinr" in self.model_fields_set:
357
+ _dict['sinr'] = None
358
+
359
+ # set to None if error (nullable) is None
360
+ # and model_fields_set contains the field
361
+ if self.error is None and "error" in self.model_fields_set:
362
+ _dict['error'] = None
363
+
364
+ # set to None if error_decoded_dtc_none (nullable) is None
365
+ # and model_fields_set contains the field
366
+ if self.error_decoded_dtc_none is None and "error_decoded_dtc_none" in self.model_fields_set:
367
+ _dict['errorDecodedDtcNone'] = None
368
+
369
+ # set to None if error_decoded_dtc_continue (nullable) is None
370
+ # and model_fields_set contains the field
371
+ if self.error_decoded_dtc_continue is None and "error_decoded_dtc_continue" in self.model_fields_set:
372
+ _dict['errorDecodedDtcContinue'] = None
373
+
374
+ # set to None if error_decoded_dtc_compressor_off (nullable) is None
375
+ # and model_fields_set contains the field
376
+ if self.error_decoded_dtc_compressor_off is None and "error_decoded_dtc_compressor_off" in self.model_fields_set:
377
+ _dict['errorDecodedDtcCompressorOff'] = None
378
+
379
+ # set to None if error_decoded_dtc_defrost_forbidden (nullable) is None
380
+ # and model_fields_set contains the field
381
+ if self.error_decoded_dtc_defrost_forbidden is None and "error_decoded_dtc_defrost_forbidden" in self.model_fields_set:
382
+ _dict['errorDecodedDtcDefrostForbidden'] = None
383
+
384
+ # set to None if error_decoded_dtc_request_service (nullable) is None
385
+ # and model_fields_set contains the field
386
+ if self.error_decoded_dtc_request_service is None and "error_decoded_dtc_request_service" in self.model_fields_set:
387
+ _dict['errorDecodedDtcRequestService'] = None
388
+
389
+ # set to None if error_decoded_dtc_use_heating_curve (nullable) is None
390
+ # and model_fields_set contains the field
391
+ if self.error_decoded_dtc_use_heating_curve is None and "error_decoded_dtc_use_heating_curve" in self.model_fields_set:
392
+ _dict['errorDecodedDtcUseHeatingCurve'] = None
393
+
394
+ # set to None if error_decoded_dtc_dhw_forbidden (nullable) is None
395
+ # and model_fields_set contains the field
396
+ if self.error_decoded_dtc_dhw_forbidden is None and "error_decoded_dtc_dhw_forbidden" in self.model_fields_set:
397
+ _dict['errorDecodedDtcDhwForbidden'] = None
398
+
399
+ # set to None if error_decoded_dtc_error (nullable) is None
400
+ # and model_fields_set contains the field
401
+ if self.error_decoded_dtc_error is None and "error_decoded_dtc_error" in self.model_fields_set:
402
+ _dict['errorDecodedDtcError'] = None
403
+
404
+ # set to None if error_decoded_dtc_inactive (nullable) is None
405
+ # and model_fields_set contains the field
406
+ if self.error_decoded_dtc_inactive is None and "error_decoded_dtc_inactive" in self.model_fields_set:
407
+ _dict['errorDecodedDtcInactive'] = None
408
+
409
+ # set to None if control_bridge_status_decoded_dhw_valve (nullable) is None
410
+ # and model_fields_set contains the field
411
+ if self.control_bridge_status_decoded_dhw_valve is None and "control_bridge_status_decoded_dhw_valve" in self.model_fields_set:
412
+ _dict['controlBridgeStatusDecodedDhwValve'] = None
413
+
414
+ # set to None if t_board (nullable) is None
415
+ # and model_fields_set contains the field
416
+ if self.t_board is None and "t_board" in self.model_fields_set:
417
+ _dict['tBoard'] = None
418
+
419
+ # set to None if t_inverter (nullable) is None
420
+ # and model_fields_set contains the field
421
+ if self.t_inverter is None and "t_inverter" in self.model_fields_set:
422
+ _dict['tInverter'] = None
423
+
424
+ # set to None if compressor_power_low_accuracy (nullable) is None
425
+ # and model_fields_set contains the field
426
+ if self.compressor_power_low_accuracy is None and "compressor_power_low_accuracy" in self.model_fields_set:
427
+ _dict['compressorPowerLowAccuracy'] = None
428
+
361
429
  # set to None if valve (nullable) is None
362
- # and __fields_set__ contains the field
363
- if self.valve is None and "valve" in self.__fields_set__:
430
+ # and model_fields_set contains the field
431
+ if self.valve is None and "valve" in self.model_fields_set:
364
432
  _dict['valve'] = None
365
433
 
366
- # set to None if exv_flow_step_gain (nullable) is None
367
- # and __fields_set__ contains the field
368
- if self.exv_flow_step_gain is None and "exv_flow_step_gain" in self.__fields_set__:
369
- _dict['exvFlowStepGain'] = None
434
+ # set to None if inverter_input_voltage (nullable) is None
435
+ # and model_fields_set contains the field
436
+ if self.inverter_input_voltage is None and "inverter_input_voltage" in self.model_fields_set:
437
+ _dict['inverterInputVoltage'] = None
438
+
439
+ # set to None if indoor_unit_heater_temperature (nullable) is None
440
+ # and model_fields_set contains the field
441
+ if self.indoor_unit_heater_temperature is None and "indoor_unit_heater_temperature" in self.model_fields_set:
442
+ _dict['indoorUnitHeaterTemperature'] = None
370
443
 
371
- # set to None if cm_mass_flow (nullable) is None
372
- # and __fields_set__ contains the field
373
- if self.cm_mass_flow is None and "cm_mass_flow" in self.__fields_set__:
374
- _dict['cmMassFlow'] = None
444
+ # set to None if indoor_unit_input_current (nullable) is None
445
+ # and model_fields_set contains the field
446
+ if self.indoor_unit_input_current is None and "indoor_unit_input_current" in self.model_fields_set:
447
+ _dict['indoorUnitInputCurrent'] = None
448
+
449
+ # set to None if cooling_status (nullable) is None
450
+ # and model_fields_set contains the field
451
+ if self.cooling_status is None and "cooling_status" in self.model_fields_set:
452
+ _dict['coolingStatus'] = None
375
453
 
376
454
  # set to None if cm_mass_power_in (nullable) is None
377
- # and __fields_set__ contains the field
378
- if self.cm_mass_power_in is None and "cm_mass_power_in" in self.__fields_set__:
455
+ # and model_fields_set contains the field
456
+ if self.cm_mass_power_in is None and "cm_mass_power_in" in self.model_fields_set:
379
457
  _dict['cmMassPowerIn'] = None
380
458
 
381
459
  # set to None if cm_mass_power_out (nullable) is None
382
- # and __fields_set__ contains the field
383
- if self.cm_mass_power_out is None and "cm_mass_power_out" in self.__fields_set__:
460
+ # and model_fields_set contains the field
461
+ if self.cm_mass_power_out is None and "cm_mass_power_out" in self.model_fields_set:
384
462
  _dict['cmMassPowerOut'] = None
385
463
 
386
- # set to None if p_requested (nullable) is None
387
- # and __fields_set__ contains the field
388
- if self.p_requested is None and "p_requested" in self.__fields_set__:
389
- _dict['pRequested'] = None
390
-
391
- # set to None if power_error_integral (nullable) is None
392
- # and __fields_set__ contains the field
393
- if self.power_error_integral is None and "power_error_integral" in self.__fields_set__:
394
- _dict['powerErrorIntegral'] = None
395
-
396
- # set to None if thermostat_status (nullable) is None
397
- # and __fields_set__ contains the field
398
- if self.thermostat_status is None and "thermostat_status" in self.__fields_set__:
399
- _dict['thermostatStatus'] = None
464
+ # set to None if debug_variable1 (nullable) is None
465
+ # and model_fields_set contains the field
466
+ if self.debug_variable1 is None and "debug_variable1" in self.model_fields_set:
467
+ _dict['debugVariable1'] = None
400
468
 
401
- # set to None if t_room (nullable) is None
402
- # and __fields_set__ contains the field
403
- if self.t_room is None and "t_room" in self.__fields_set__:
404
- _dict['tRoom'] = None
405
-
406
- # set to None if t_room_target (nullable) is None
407
- # and __fields_set__ contains the field
408
- if self.t_room_target is None and "t_room_target" in self.__fields_set__:
409
- _dict['tRoomTarget'] = None
469
+ # set to None if debug_variable2 (nullable) is None
470
+ # and model_fields_set contains the field
471
+ if self.debug_variable2 is None and "debug_variable2" in self.model_fields_set:
472
+ _dict['debugVariable2'] = None
410
473
 
411
- # set to None if ot_boiler_status (nullable) is None
412
- # and __fields_set__ contains the field
413
- if self.ot_boiler_status is None and "ot_boiler_status" in self.__fields_set__:
414
- _dict['otBoilerStatus'] = None
474
+ # set to None if debug_variable3 (nullable) is None
475
+ # and model_fields_set contains the field
476
+ if self.debug_variable3 is None and "debug_variable3" in self.model_fields_set:
477
+ _dict['debugVariable3'] = None
415
478
 
416
- # set to None if ot_boiler_feed_temperature (nullable) is None
417
- # and __fields_set__ contains the field
418
- if self.ot_boiler_feed_temperature is None and "ot_boiler_feed_temperature" in self.__fields_set__:
419
- _dict['otBoilerFeedTemperature'] = None
479
+ # set to None if debug_variable4 (nullable) is None
480
+ # and model_fields_set contains the field
481
+ if self.debug_variable4 is None and "debug_variable4" in self.model_fields_set:
482
+ _dict['debugVariable4'] = None
420
483
 
421
- # set to None if ot_boiler_return_temperature (nullable) is None
422
- # and __fields_set__ contains the field
423
- if self.ot_boiler_return_temperature is None and "ot_boiler_return_temperature" in self.__fields_set__:
424
- _dict['otBoilerReturnTemperature'] = None
484
+ # set to None if debug_variable5 (nullable) is None
485
+ # and model_fields_set contains the field
486
+ if self.debug_variable5 is None and "debug_variable5" in self.model_fields_set:
487
+ _dict['debugVariable5'] = None
425
488
 
426
489
  return _dict
427
490
 
428
491
  @classmethod
429
- def from_dict(cls, obj: dict) -> RawHeatPumpLogDto:
492
+ def from_dict(cls, obj: Dict) -> Self:
430
493
  """Create an instance of RawHeatPumpLogDto from a dict"""
431
494
  if obj is None:
432
495
  return None
433
496
 
434
497
  if not isinstance(obj, dict):
435
- return RawHeatPumpLogDto.parse_obj(obj)
498
+ return cls.model_validate(obj)
436
499
 
437
- _obj = RawHeatPumpLogDto.parse_obj({
438
- "heat_pump_id": obj.get("heatPumpId"),
500
+ _obj = cls.model_validate({
501
+ "heatPumpId": obj.get("heatPumpId"),
439
502
  "timestamp": obj.get("timestamp"),
440
- "firmware_revision": obj.get("firmwareRevision"),
441
- "packet_counter": obj.get("packetCounter"),
442
- "unix_time_mcu": obj.get("unixTimeMcu"),
443
503
  "state": obj.get("state"),
444
- "rpm_ctrl": obj.get("rpmCtrl"),
445
- "error": obj.get("error"),
446
- "error_decoded_dtc_none": obj.get("errorDecodedDtcNone"),
447
- "error_decoded_dtc_continue": obj.get("errorDecodedDtcContinue"),
448
- "error_decoded_dtc_compressor_off": obj.get("errorDecodedDtcCompressorOff"),
449
- "error_decoded_dtc_defrost_forbidden": obj.get("errorDecodedDtcDefrostForbidden"),
450
- "error_decoded_dtc_request_service": obj.get("errorDecodedDtcRequestService"),
451
- "error_decoded_dtc_use_heating_curve": obj.get("errorDecodedDtcUseHeatingCurve"),
452
- "error_decoded_dtc_dhw_forbidden": obj.get("errorDecodedDtcDhwForbidden"),
453
- "error_decoded_dtc_error": obj.get("errorDecodedDtcError"),
454
- "error_decoded_dtc_inactive": obj.get("errorDecodedDtcInactive"),
455
- "heatsink": obj.get("heatsink"),
456
- "si5": obj.get("si5"),
457
- "e80": obj.get("e80"),
458
- "e81": obj.get("e81"),
459
- "e84": obj.get("e84"),
460
- "e85": obj.get("e85"),
461
- "control_bridge_status": obj.get("controlBridgeStatus"),
462
- "control_bridge_status_decoded_water_pump": obj.get("controlBridgeStatusDecodedWaterPump"),
463
- "control_bridge_status_decoded_dhw_valve": obj.get("controlBridgeStatusDecodedDhwValve"),
464
- "control_bridge_status_decoded_gas_boiler": obj.get("controlBridgeStatusDecodedGasBoiler"),
465
- "control_bridge_status_decoded_electric_heater": obj.get("controlBridgeStatusDecodedElectricHeater"),
466
- "control_bridge_status_decoded_water_pump2": obj.get("controlBridgeStatusDecodedWaterPump2"),
467
- "input_status": obj.get("inputStatus"),
468
- "current_control_method": obj.get("currentControlMethod"),
469
- "signal_strength": obj.get("signalStrength"),
504
+ "controlBridgeStatus": obj.get("controlBridgeStatus"),
505
+ "controlBridgeStatusDecodedWaterPump": obj.get("controlBridgeStatusDecodedWaterPump"),
506
+ "controlBridgeStatusDecodedGasBoiler": obj.get("controlBridgeStatusDecodedGasBoiler"),
507
+ "controlBridgeStatusDecodedElectricHeater": obj.get("controlBridgeStatusDecodedElectricHeater"),
508
+ "controlBridgeStatusDecodedWaterPump2": obj.get("controlBridgeStatusDecodedWaterPump2"),
470
509
  "t1": obj.get("t1"),
471
510
  "t2": obj.get("t2"),
472
- "t_spare_ntc": obj.get("tSpareNtc"),
473
- "t_board": obj.get("tBoard"),
474
- "t_air_in": obj.get("tAirIn"),
475
- "t_air_out": obj.get("tAirOut"),
476
- "t_water_in": obj.get("tWaterIn"),
477
- "t_water_out": obj.get("tWaterOut"),
478
- "t_water_house_in": obj.get("tWaterHouseIn"),
511
+ "tAirIn": obj.get("tAirIn"),
512
+ "tAirOut": obj.get("tAirOut"),
513
+ "tWaterIn": obj.get("tWaterIn"),
514
+ "tWaterOut": obj.get("tWaterOut"),
515
+ "tWaterHouseIn": obj.get("tWaterHouseIn"),
479
516
  "rpm": obj.get("rpm"),
480
- "rpm_limiter": obj.get("rpmLimiter"),
481
- "rpm_limiter_type": obj.get("rpmLimiterType"),
482
- "p_compressor_in": obj.get("pCompressorIn"),
483
- "p_compressor_out": obj.get("pCompressorOut"),
484
- "p_compressor_in_target": obj.get("pCompressorInTarget"),
485
- "t_inverter": obj.get("tInverter"),
486
- "t_compressor_in": obj.get("tCompressorIn"),
487
- "t_compressor_out": obj.get("tCompressorOut"),
488
- "t_compressor_in_transient": obj.get("tCompressorInTransient"),
489
- "t_compressor_out_transient": obj.get("tCompressorOutTransient"),
490
- "delta_t_compressor_in_superheat": obj.get("deltaTCompressorInSuperheat"),
491
- "compressor_power_low_accuracy": obj.get("compressorPowerLowAccuracy"),
517
+ "onOffThermostatState": obj.get("onOffThermostatState"),
518
+ "tRoom": obj.get("tRoom"),
519
+ "tRoomTarget": obj.get("tRoomTarget"),
520
+ "tThermostatSetpoint": obj.get("tThermostatSetpoint"),
521
+ "otBoilerFeedTemperature": obj.get("otBoilerFeedTemperature"),
522
+ "otBoilerReturnTemperature": obj.get("otBoilerReturnTemperature"),
523
+ "centralHeatingFlow": obj.get("centralHeatingFlow"),
524
+ "dhwFlow": obj.get("dhwFlow"),
525
+ "interval": obj.get("interval"),
526
+ "inputStatus": obj.get("inputStatus"),
527
+ "currentControlMethod": obj.get("currentControlMethod"),
528
+ "signalStrength": obj.get("signalStrength"),
529
+ "rpmLimiter": obj.get("rpmLimiter"),
530
+ "rpmLimiterType": obj.get("rpmLimiterType"),
531
+ "pCompressorIn": obj.get("pCompressorIn"),
532
+ "pCompressorOut": obj.get("pCompressorOut"),
533
+ "pCompressorInTarget": obj.get("pCompressorInTarget"),
534
+ "tCompressorIn": obj.get("tCompressorIn"),
535
+ "tCompressorOut": obj.get("tCompressorOut"),
536
+ "tCompressorInTransient": obj.get("tCompressorInTransient"),
537
+ "tCompressorOutTransient": obj.get("tCompressorOutTransient"),
538
+ "deltaTCompressorInSuperheat": obj.get("deltaTCompressorInSuperheat"),
492
539
  "fan": obj.get("fan"),
493
- "fan_power": obj.get("fanPower"),
540
+ "fanPower": obj.get("fanPower"),
541
+ "temperatureErrorIntegral": obj.get("temperatureErrorIntegral"),
542
+ "thermostatStatus": obj.get("thermostatStatus"),
543
+ "otBoilerStatus": obj.get("otBoilerStatus"),
544
+ "centralHeatingPwmRequestedDutyCycle": obj.get("centralHeatingPwmRequestedDutyCycle"),
545
+ "dhwPwmRequestedDutyCycle": obj.get("dhwPwmRequestedDutyCycle"),
546
+ "sinr": obj.get("sinr"),
547
+ "error": obj.get("error"),
548
+ "errorDecodedDtcNone": obj.get("errorDecodedDtcNone"),
549
+ "errorDecodedDtcContinue": obj.get("errorDecodedDtcContinue"),
550
+ "errorDecodedDtcCompressorOff": obj.get("errorDecodedDtcCompressorOff"),
551
+ "errorDecodedDtcDefrostForbidden": obj.get("errorDecodedDtcDefrostForbidden"),
552
+ "errorDecodedDtcRequestService": obj.get("errorDecodedDtcRequestService"),
553
+ "errorDecodedDtcUseHeatingCurve": obj.get("errorDecodedDtcUseHeatingCurve"),
554
+ "errorDecodedDtcDhwForbidden": obj.get("errorDecodedDtcDhwForbidden"),
555
+ "errorDecodedDtcError": obj.get("errorDecodedDtcError"),
556
+ "errorDecodedDtcInactive": obj.get("errorDecodedDtcInactive"),
557
+ "controlBridgeStatusDecodedDhwValve": obj.get("controlBridgeStatusDecodedDhwValve"),
558
+ "tBoard": obj.get("tBoard"),
559
+ "tInverter": obj.get("tInverter"),
560
+ "compressorPowerLowAccuracy": obj.get("compressorPowerLowAccuracy"),
494
561
  "valve": obj.get("valve"),
495
- "exv_flow_step_gain": obj.get("exvFlowStepGain"),
496
- "cm_mass_flow": obj.get("cmMassFlow"),
497
- "cm_mass_power_in": obj.get("cmMassPowerIn"),
498
- "cm_mass_power_out": obj.get("cmMassPowerOut"),
499
- "p_requested": obj.get("pRequested"),
500
- "power_error_integral": obj.get("powerErrorIntegral"),
501
- "on_off_thermostat_state": obj.get("onOffThermostatState"),
502
- "thermostat_status": obj.get("thermostatStatus"),
503
- "t_room": obj.get("tRoom"),
504
- "t_room_target": obj.get("tRoomTarget"),
505
- "t_thermostat_setpoint": obj.get("tThermostatSetpoint"),
506
- "ot_boiler_status": obj.get("otBoilerStatus"),
507
- "ot_boiler_feed_temperature": obj.get("otBoilerFeedTemperature"),
508
- "ot_boiler_return_temperature": obj.get("otBoilerReturnTemperature"),
509
- "interval": obj.get("interval")
562
+ "inverterInputVoltage": obj.get("inverterInputVoltage"),
563
+ "indoorUnitHeaterTemperature": obj.get("indoorUnitHeaterTemperature"),
564
+ "indoorUnitInputCurrent": obj.get("indoorUnitInputCurrent"),
565
+ "coolingStatus": obj.get("coolingStatus"),
566
+ "cmMassPowerIn": obj.get("cmMassPowerIn"),
567
+ "cmMassPowerOut": obj.get("cmMassPowerOut"),
568
+ "debugVariable1": obj.get("debugVariable1"),
569
+ "debugVariable2": obj.get("debugVariable2"),
570
+ "debugVariable3": obj.get("debugVariable3"),
571
+ "debugVariable4": obj.get("debugVariable4"),
572
+ "debugVariable5": obj.get("debugVariable5")
510
573
  })
511
574
  return _obj
512
575