add number & action for manual aircon.

This commit is contained in:
Your Name
2023-03-22 20:48:37 +01:00
parent ea3eb4b007
commit a97f8ad31d
21 changed files with 218 additions and 33 deletions

View File

@@ -0,0 +1,37 @@
#include "TrumaAirconManualNumber.h"
#include "esphome/core/log.h"
#include "esphome/components/truma_inetbox/helpers.h"
namespace esphome {
namespace truma_inetbox {
static const char *const TAG = "truma_inetbox.aircon_manual_number";
void TrumaAirconManualNumber::setup() {
this->parent_->get_aircon_manual()->add_on_message_callback([this](const StatusFrameAirconManual *status) {
switch (this->type_) {
case TRUMA_NUMBER_TYPE::AIRCON_MANUAL_TEMPERATURE:
this->publish_state(temp_code_to_decimal(status->target_temp_aircon, 0));
break;
default:
break;
}
});
}
void TrumaAirconManualNumber::control(float value) {
switch (this->type_) {
case TRUMA_NUMBER_TYPE::AIRCON_MANUAL_TEMPERATURE:
this->parent_->get_aircon_manual()->action_set_temp(static_cast<u_int8_t>(value));
break;
default:
break;
}
}
void TrumaAirconManualNumber::dump_config() {
LOG_NUMBER("", "Truma Aircon Manual Number", this);
ESP_LOGCONFIG(TAG, " Type '%s'", enum_to_c_str(this->type_));
}
} // namespace truma_inetbox
} // namespace esphome

View File

@@ -0,0 +1,26 @@
#pragma once
#include "enum.h"
#include "esphome/components/number/number.h"
#include "esphome/components/truma_inetbox/TrumaiNetBoxApp.h"
namespace esphome {
namespace truma_inetbox {
class TrumaAirconManualNumber : public Component, public number::Number, public Parented<TrumaiNetBoxApp> {
public:
void setup() override;
void dump_config() override;
void set_type(TRUMA_NUMBER_TYPE val) { this->type_ = val; }
protected:
TRUMA_NUMBER_TYPE type_;
void control(float value) override;
private:
};
} // namespace truma_inetbox
} // namespace esphome

View File

@@ -19,6 +19,8 @@ void TrumaHeaterNumber::setup() {
case TRUMA_NUMBER_TYPE::ELECTRIC_POWER_LEVEL:
this->publish_state(static_cast<float>(status_heater->el_power_level_a));
break;
default:
break;
}
});
}
@@ -34,6 +36,8 @@ void TrumaHeaterNumber::control(float value) {
case TRUMA_NUMBER_TYPE::ELECTRIC_POWER_LEVEL:
this->parent_->get_heater()->action_heater_electric_power_level(static_cast<u_int16_t>(value));
break;
default:
break;
}
}

View File

@@ -1,34 +1,12 @@
#pragma once
#include "enum.h"
#include "esphome/components/number/number.h"
#include "esphome/components/truma_inetbox/TrumaiNetBoxApp.h"
namespace esphome {
namespace truma_inetbox {
enum class TRUMA_NUMBER_TYPE {
TARGET_ROOM_TEMPERATURE,
TARGET_WATER_TEMPERATURE,
ELECTRIC_POWER_LEVEL,
};
static const char *enum_to_c_str(const TRUMA_NUMBER_TYPE val) {
switch (val) {
case TRUMA_NUMBER_TYPE::TARGET_ROOM_TEMPERATURE:
return "TARGET_ROOM_TEMPERATURE";
break;
case TRUMA_NUMBER_TYPE::TARGET_WATER_TEMPERATURE:
return "TARGET_WATER_TEMPERATURE";
break;
case TRUMA_NUMBER_TYPE::ELECTRIC_POWER_LEVEL:
return "ELECTRIC_POWER_LEVEL";
break;
default:
return "";
break;
}
}
class TrumaHeaterNumber : public Component, public number::Number, public Parented<TrumaiNetBoxApp> {
public:
void setup() override;

View File

@@ -62,6 +62,18 @@ CONF_SUPPORTED_TYPE = {
CONF_MIN_VALUE: 0,
CONF_STEP: 900,
},
"AIRCON_MANUAL_TEMPERATURE": {
CONF_CLASS: truma_inetbox_ns.class_("TrumaAirconManualNumber", number.Number, cg.Component),
CONF_TYPE: TRUMA_NUMBER_TYPE_dummy_ns.AIRCON_MANUAL_TEMPERATURE,
CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
CONF_ICON: ICON_THERMOMETER,
CONF_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
CONF_MAX_VALUE: 31,
# Values between 0 and 16 are handeld as off.
CONF_MIN_VALUE: 15,
CONF_STEP: 1,
},
}

View File

@@ -0,0 +1,39 @@
#pragma once
namespace esphome {
namespace truma_inetbox {
enum class TRUMA_NUMBER_TYPE {
UNKNOWN,
TARGET_ROOM_TEMPERATURE,
TARGET_WATER_TEMPERATURE,
ELECTRIC_POWER_LEVEL,
AIRCON_MANUAL_TEMPERATURE,
};
static const char *enum_to_c_str(const TRUMA_NUMBER_TYPE val) {
switch (val) {
case TRUMA_NUMBER_TYPE::TARGET_ROOM_TEMPERATURE:
return "TARGET_ROOM_TEMPERATURE";
break;
case TRUMA_NUMBER_TYPE::TARGET_WATER_TEMPERATURE:
return "TARGET_WATER_TEMPERATURE";
break;
case TRUMA_NUMBER_TYPE::ELECTRIC_POWER_LEVEL:
return "ELECTRIC_POWER_LEVEL";
break;
case TRUMA_NUMBER_TYPE::AIRCON_MANUAL_TEMPERATURE:
return "AIRCON_MANUAL_TEMPERATURE";
break;
default:
return "";
break;
}
}
} // namespace truma_inetbox
} // namespace esphome