Skip to content

Commit

Permalink
Merge pull request #97 from Mongey/cm-outdoor-temperature
Browse files Browse the repository at this point in the history
[NASA] Add outdoor temperature sensor
  • Loading branch information
lanwin authored Feb 13, 2024
2 parents b3d0c97 + 005d94c commit ed39d31
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 0 deletions.
12 changes: 12 additions & 0 deletions components/samsung_ac/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
CONF_DEVICE_ROOM_HUMIDITY = "room_humidity"
CONF_DEVICE_TARGET_TEMPERATURE = "target_temperature"
CONF_DEVICE_WATER_TEMPERATURE = "water_temperature"
CONF_DEVICE_OUTDOOR_TEMPERATURE = "outdoor_temperature"
CONF_DEVICE_POWER = "power"
CONF_DEVICE_MODE = "mode"
CONF_DEVICE_CLIMATE = "climate"
Expand All @@ -71,6 +72,12 @@
device_class=DEVICE_CLASS_TEMPERATURE,
state_class=STATE_CLASS_MEASUREMENT,
),
cv.Optional(CONF_DEVICE_OUTDOOR_TEMPERATURE): sensor.sensor_schema(
unit_of_measurement=UNIT_CELSIUS,
accuracy_decimals=1,
device_class=DEVICE_CLASS_TEMPERATURE,
state_class=STATE_CLASS_MEASUREMENT,
),
cv.Optional(CONF_DEVICE_ROOM_HUMIDITY): sensor.sensor_schema(
unit_of_measurement=UNIT_PERCENT,
accuracy_decimals=0,
Expand Down Expand Up @@ -134,6 +141,11 @@ async def to_code(config):
sens = await sensor.new_sensor(conf)
cg.add(var_dev.set_room_temperature_sensor(sens))

if CONF_DEVICE_OUTDOOR_TEMPERATURE in device:
conf = device[CONF_DEVICE_OUTDOOR_TEMPERATURE]
sens = await sensor.new_sensor(conf)
cg.add(var_dev.set_outdoor_temperature_sensor(sens))

if CONF_DEVICE_WATER_TEMPERATURE in device:
conf = device[CONF_DEVICE_WATER_TEMPERATURE]
sens = await sensor.new_sensor(conf)
Expand Down
1 change: 1 addition & 0 deletions components/samsung_ac/protocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ namespace esphome
virtual void set_water_temperature(const std::string address, float value) = 0;
virtual void set_room_humidity(const std::string address, float value) = 0;
virtual void set_target_temperature(const std::string address, float value) = 0;
virtual void set_outdoor_temperature(const std::string address, float value) = 0;
virtual void set_mode(const std::string address, Mode mode) = 0;
virtual void set_fanmode(const std::string address, FanMode fanmode) = 0;
virtual void set_altmode(const std::string address, AltMode fanmode) = 0;
Expand Down
8 changes: 8 additions & 0 deletions components/samsung_ac/protocol_nasa.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,14 @@ namespace esphome
ESP_LOGW(TAG, "s:%s d:%s NASA_OUTDOOR_CONTROL_WATTMETER_TOTAL_SUM_ACCUM %f", source.c_str(), dest.c_str(), value);
return;
}
if ((uint16_t)message.messageNumber == 0x8204)
{ // VAR_OUTDOOR_TEMP
double temp = (double)message.value / (double)10;
ESP_LOGW(TAG, "s:%s d:%s VAR_OUTDOOR_TEMP %li", source.c_str(), dest.c_str(), message.value);
// possibly outdoor temperature?
target->set_outdoor_temperature(source, temp);
return;
}
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions components/samsung_ac/samsung_ac.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,13 @@ namespace esphome
dev->update_room_humidity(value);
}

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

void /*MessageTarget::*/ set_target_temperature(const std::string address, float value) override
{
Samsung_AC_Device *dev = find_device(address);
Expand Down
12 changes: 12 additions & 0 deletions components/samsung_ac/samsung_ac_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ namespace esphome
std::string address;
sensor::Sensor *room_temperature{nullptr};
sensor::Sensor *water_temperature{nullptr};
sensor::Sensor *outdoor_temperature{nullptr};
sensor::Sensor *room_humidity{nullptr};
Samsung_AC_Number *target_temperature{nullptr};
Samsung_AC_Switch *power{nullptr};
Expand All @@ -89,6 +90,11 @@ namespace esphome
room_temperature = sensor;
}

void set_outdoor_temperature_sensor(sensor::Sensor *sensor)
{
outdoor_temperature = sensor;
}

void set_water_temperature_sensor(sensor::Sensor *sensor)
{
water_temperature = sensor;
Expand Down Expand Up @@ -138,6 +144,12 @@ namespace esphome
climate->device = this;
}

void update_outdoor_temperature(float value)
{
if (outdoor_temperature != nullptr)
outdoor_temperature->publish_state(value);
}

void update_target_temperature(float value)
{
if (target_temperature != nullptr)
Expand Down
9 changes: 9 additions & 0 deletions test/test_stuff.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,15 @@ class DebugTarget : public MessageTarget
last_set_target_temperature_value = value;
}

std::string last_set_outdoor_temperature_address;
float last_set_outdoor_temperature_value;
void set_outdoor_temperature(const std::string address, float value)
{
cout << "> " << address << " set_outdoor_temperature=" << to_string(value) << endl;
last_set_outdoor_temperature_address = address;
last_set_outdoor_temperature_value = value;
}

std::string last_set_room_humidity_address;
float last_set_room_humidity_value;
void set_room_humidity(const std::string address, float value)
Expand Down

0 comments on commit ed39d31

Please sign in to comment.