add number & action for manual aircon.
This commit is contained in:
37
components/truma_inetbox/number/TrumaAirconManualNumber.cpp
Normal file
37
components/truma_inetbox/number/TrumaAirconManualNumber.cpp
Normal 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
|
||||
26
components/truma_inetbox/number/TrumaAirconManualNumber.h
Normal file
26
components/truma_inetbox/number/TrumaAirconManualNumber.h
Normal 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
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
39
components/truma_inetbox/number/enum.h
Normal file
39
components/truma_inetbox/number/enum.h
Normal 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
|
||||
Reference in New Issue
Block a user