Skip to content

Commit

Permalink
Merge pull request #147 from north3221/water_outlet_setpoint
Browse files Browse the repository at this point in the history
add Water outlet setpoint
  • Loading branch information
lanwin authored Aug 9, 2024
2 parents 47b2845 + 2443420 commit 0e7f791
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 3 deletions.
13 changes: 12 additions & 1 deletion components/samsung_ac/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
CONF_DEVICE_ROOM_TEMPERATURE = "room_temperature"
CONF_DEVICE_ROOM_TEMPERATURE_OFFSET = "room_temperature_offset"
CONF_DEVICE_TARGET_TEMPERATURE = "target_temperature"
CONF_DEVICE_WATER_OUTLET_TARGET = "water_outlet_target"
CONF_DEVICE_OUTDOOR_TEMPERATURE = "outdoor_temperature"
CONF_DEVICE_WATER_TEMPERATURE = "water_temperature"
CONF_DEVICE_WATER_TARGET_TEMPERATURE = "water_target_temperature"
Expand All @@ -61,7 +62,6 @@
CONF_DEVICE_MODE = "mode"
CONF_DEVICE_CLIMATE = "climate"
CONF_DEVICE_ROOM_HUMIDITY = "room_humidity"
CONF_DEVICE_WATER_TEMPERATURE = "water_temperature"
CONF_DEVICE_CUSTOM = "custom_sensor"
CONF_DEVICE_CUSTOM_MESSAGE = "message"
CONF_DEVICE_CUSTOM_RAW_FILTERS = "raw_filters"
Expand Down Expand Up @@ -180,6 +180,7 @@ def humidity_sensor_schema(message: int):
state_class=STATE_CLASS_MEASUREMENT,
),
cv.Optional(CONF_DEVICE_TARGET_TEMPERATURE): NUMBER_SCHEMA,
cv.Optional(CONF_DEVICE_WATER_OUTLET_TARGET): NUMBER_SCHEMA,
cv.Optional(CONF_DEVICE_WATER_TARGET_TEMPERATURE): NUMBER_SCHEMA,
cv.Optional(CONF_DEVICE_POWER): switch.switch_schema(Samsung_AC_Switch),
cv.Optional(CONF_DEVICE_WATER_HEATER_POWER): switch.switch_schema(Samsung_AC_Switch),
Expand Down Expand Up @@ -332,6 +333,16 @@ async def to_code(config):
max_value=30.0,
step=1.0)
cg.add(var_dev.set_target_temperature_number(num))

if CONF_DEVICE_WATER_OUTLET_TARGET in device:
conf = device[CONF_DEVICE_WATER_OUTLET_TARGET]
conf[CONF_UNIT_OF_MEASUREMENT] = UNIT_CELSIUS
conf[CONF_DEVICE_CLASS] = DEVICE_CLASS_TEMPERATURE
num = await number.new_number(conf,
min_value=15.0,
max_value=55.0,
step=0.1)
cg.add(var_dev.set_water_outlet_target_number(num))

if CONF_DEVICE_MODE in device:
conf = device[CONF_DEVICE_MODE]
Expand Down
2 changes: 2 additions & 0 deletions components/samsung_ac/protocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ namespace esphome
virtual void set_water_heater_power(const std::string address, bool value) = 0;
virtual void set_room_temperature(const std::string address, float value) = 0;
virtual void set_target_temperature(const std::string address, float value) = 0;
virtual void set_water_outlet_target(const std::string address, float value) = 0;
virtual void set_outdoor_temperature(const std::string address, float value) = 0;
virtual void set_target_water_temperature(const std::string address, float value) = 0;
virtual void set_mode(const std::string address, Mode mode) = 0;
Expand All @@ -88,6 +89,7 @@ namespace esphome
optional<bool> water_heater_power;
optional<Mode> mode;
optional<float> target_temp;
optional<float> water_outlet_target;
optional<float> target_water_temp;
optional<FanMode> fan_mode;
optional<SwingMode> swing_mode;
Expand Down
15 changes: 14 additions & 1 deletion components/samsung_ac/protocol_nasa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,13 @@ namespace esphome
packet.messages.push_back(targettemp);
}

if (request.water_outlet_target)
{
MessageSet wateroutlettarget(MessageNumber::VAR_in_temp_water_outlet_target_f);
wateroutlettarget.value = request.water_outlet_target.value() * 10.0;
packet.messages.push_back(wateroutlettarget);
}

if (request.target_water_temp)
{
MessageSet targetwatertemp(MessageNumber::VAR_in_temp_water_heater_target_f);
Expand Down Expand Up @@ -535,7 +542,13 @@ namespace esphome
target->set_target_temperature(source, temp);
return;
}

case MessageNumber::VAR_in_temp_water_outlet_target_f: // unit = 'Celsius' from XML
{
double temp = (double)message.value / (double)10;
ESP_LOGW(TAG, "s:%s d:%s VAR_in_temp_water_outlet_target_f %f", source.c_str(), dest.c_str(), temp);
target->set_water_outlet_target(source, temp);
return;
}
case MessageNumber::VAR_in_temp_water_heater_target_f: // unit = 'Celsius' from XML
{
double temp = (double)message.value / (double)10;
Expand Down
1 change: 1 addition & 0 deletions components/samsung_ac/protocol_nasa.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ namespace esphome
ENUM_in_state_humidity_percent = 0x4038,
VAR_in_temp_room_f = 0x4203,
VAR_in_temp_target_f = 0x4201,
VAR_in_temp_water_outlet_target_f = 0x4247,
VAR_in_temp_water_tank_f = 0x4237,
VAR_out_sensor_airout = 0x8204,
VAR_in_temp_water_heater_target_f = 0x4235,
Expand Down
2 changes: 2 additions & 0 deletions components/samsung_ac/protocol_non_nasa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,8 @@ namespace esphome
last_command20s_[nonpacket_.src] = nonpacket_.command20;
target->set_target_temperature(nonpacket_.src, nonpacket_.command20.target_temp);
// TODO
target->set_water_outlet_target(nonpacket_.src, false);
// TODO
target->set_target_water_temperature(nonpacket_.src, false);
target->set_room_temperature(nonpacket_.src, nonpacket_.command20.room_temp);
target->set_power(nonpacket_.src, nonpacket_.command20.power);
Expand Down
8 changes: 7 additions & 1 deletion components/samsung_ac/samsung_ac.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,13 @@ namespace esphome
if (dev != nullptr)
dev->update_target_temperature(value);
}

void /*MessageTarget::*/ set_water_outlet_target(const std::string address, float value) override
{
Samsung_AC_Device *dev = find_device(address);
if (dev != nullptr)
dev->update_water_outlet_target(value);
}

void /*MessageTarget::*/ set_target_water_temperature(const std::string address, float value) override
{
Expand All @@ -100,7 +107,6 @@ namespace esphome
if (dev != nullptr)
dev->update_power(value);
}

void /*MessageTarget::*/ set_water_heater_power(const std::string address, bool value) override
{
Samsung_AC_Device *dev = find_device(address);
Expand Down
18 changes: 18 additions & 0 deletions components/samsung_ac/samsung_ac_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ namespace esphome
sensor::Sensor *room_temperature{nullptr};
sensor::Sensor *outdoor_temperature{nullptr};
Samsung_AC_Number *target_temperature{nullptr};
Samsung_AC_Number *water_outlet_target{nullptr};
Samsung_AC_Number *target_water_temperature{nullptr};
Samsung_AC_Switch *power{nullptr};
Samsung_AC_Switch *water_heater_power{nullptr};
Expand Down Expand Up @@ -167,6 +168,17 @@ namespace esphome
publish_request(request);
};
};

void set_water_outlet_target_number(Samsung_AC_Number *number)
{
water_outlet_target = number;
water_outlet_target->write_state_ = [this](float value)
{
ProtocolRequest request;
request.water_outlet_target = value;
publish_request(request);
};
};

void set_target_water_temperature_number(Samsung_AC_Number *number)
{
Expand Down Expand Up @@ -195,6 +207,12 @@ namespace esphome
climate->publish_state();
}
}

void update_water_outlet_target(float value)
{
if (water_outlet_target != nullptr)
water_outlet_target->publish_state(value);
}

void update_target_water_temperature(float value)
{
Expand Down

0 comments on commit 0e7f791

Please sign in to comment.