initial commit.
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
#include "TrumaCpPlusBinarySensor.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.binary_sensor";
|
||||
|
||||
void TrumaCpPlusBinarySensor::update() {
|
||||
if (this->parent_->get_lin_bus_fault() || (this->parent_->get_last_cp_plus_request() == 0)) {
|
||||
this->publish_state(false);
|
||||
return;
|
||||
}
|
||||
auto timeout = this->parent_->get_last_cp_plus_request() + 30 * 1000 * 1000 /* 30 seconds*/;
|
||||
this->publish_state(esp_timer_get_time() < timeout);
|
||||
}
|
||||
|
||||
void TrumaCpPlusBinarySensor::dump_config() { ESP_LOGCONFIG("", "Truma CP Plus Binary Sensor"); }
|
||||
} // namespace truma_inetbox
|
||||
} // namespace esphome
|
||||
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/binary_sensor/binary_sensor.h"
|
||||
#include "esphome/components/truma_inetbox/TrumaiNetBoxApp.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace truma_inetbox {
|
||||
|
||||
class TrumaCpPlusBinarySensor : public PollingComponent,
|
||||
public binary_sensor::BinarySensor,
|
||||
public Parented<TrumaiNetBoxApp> {
|
||||
public:
|
||||
void update() override;
|
||||
void dump_config() override;
|
||||
|
||||
protected:
|
||||
private:
|
||||
};
|
||||
} // namespace truma_inetbox
|
||||
} // namespace esphome
|
||||
@@ -0,0 +1,42 @@
|
||||
#include "TrumaHeaterBinarySensor.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.binary_sensor";
|
||||
|
||||
void TrumaHeaterBinarySensor::setup() {
|
||||
this->parent_->register_listener([this](const StatusFrameHeater *status_heater) {
|
||||
switch (this->type_) {
|
||||
case TRUMA_BINARY_SENSOR_TYPE::HEATER_ROOM:
|
||||
this->publish_state(status_heater->target_temp_room != TargetTemp::TARGET_TEMP_OFF);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::HEATER_WATER:
|
||||
this->publish_state(status_heater->target_temp_water != TargetTemp::TARGET_TEMP_OFF);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::HEATER_GAS:
|
||||
this->publish_state(status_heater->energy_mix_a == EnergyMix::ENERGY_MIX_GAS);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::HEATER_MIX_1:
|
||||
this->publish_state(status_heater->energy_mix_a == EnergyMix::ENERGY_MIX_MIX &&
|
||||
status_heater->el_power_level_a == ElectricPowerLevel::ELECTRIC_POWER_LEVEL_900);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::HEATER_MIX_2:
|
||||
this->publish_state(status_heater->energy_mix_a == EnergyMix::ENERGY_MIX_MIX &&
|
||||
status_heater->el_power_level_a == ElectricPowerLevel::ELECTRIC_POWER_LEVEL_1800);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::HEATER_ELECTRICITY:
|
||||
this->publish_state(status_heater->energy_mix_a == EnergyMix::ENERGY_MIX_ELECTRICITY);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void TrumaHeaterBinarySensor::dump_config() {
|
||||
ESP_LOGCONFIG("", "Truma Heater Binary Sensor");
|
||||
ESP_LOGCONFIG(TAG, "Type %u", this->type_);
|
||||
}
|
||||
} // namespace truma_inetbox
|
||||
} // namespace esphome
|
||||
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/binary_sensor/binary_sensor.h"
|
||||
#include "esphome/components/truma_inetbox/TrumaiNetBoxApp.h"
|
||||
#include "enum.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace truma_inetbox {
|
||||
|
||||
class TrumaHeaterBinarySensor : public Component, public binary_sensor::BinarySensor, public Parented<TrumaiNetBoxApp> {
|
||||
public:
|
||||
void setup() override;
|
||||
void dump_config() override;
|
||||
|
||||
void set_type(TRUMA_BINARY_SENSOR_TYPE val) { this->type_ = val; }
|
||||
|
||||
protected:
|
||||
TRUMA_BINARY_SENSOR_TYPE type_;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
} // namespace truma_inetbox
|
||||
} // namespace esphome
|
||||
@@ -0,0 +1,31 @@
|
||||
#include "TrumaTimerBinarySensor.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.binary_sensor";
|
||||
|
||||
void TrumaTimerBinarySensor::setup() {
|
||||
this->parent_->register_listener([this](const StatusFrameTimer *status_timer) {
|
||||
switch (this->type_) {
|
||||
case TRUMA_BINARY_SENSOR_TYPE::TIMER_ACTIVE:
|
||||
this->publish_state(status_timer->timer_active == TimerActive::TIMER_ACTIVE_ON);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::TIMER_ROOM:
|
||||
this->publish_state(status_timer->timer_target_temp_room != TargetTemp::TARGET_TEMP_OFF);
|
||||
break;
|
||||
case TRUMA_BINARY_SENSOR_TYPE::TIMER_WATER:
|
||||
this->publish_state(status_timer->timer_target_temp_water != TargetTemp::TARGET_TEMP_OFF);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void TrumaTimerBinarySensor::dump_config() {
|
||||
ESP_LOGCONFIG("", "Truma Timer Binary Sensor");
|
||||
ESP_LOGCONFIG(TAG, "Type %u", this->type_);
|
||||
}
|
||||
} // namespace truma_inetbox
|
||||
} // namespace esphome
|
||||
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/binary_sensor/binary_sensor.h"
|
||||
#include "esphome/components/truma_inetbox/TrumaiNetBoxApp.h"
|
||||
#include "enum.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace truma_inetbox {
|
||||
|
||||
class TrumaTimerBinarySensor : public Component, public binary_sensor::BinarySensor, public Parented<TrumaiNetBoxApp> {
|
||||
public:
|
||||
void setup() override;
|
||||
void dump_config() override;
|
||||
|
||||
void set_type(TRUMA_BINARY_SENSOR_TYPE val) { this->type_ = val; }
|
||||
|
||||
protected:
|
||||
TRUMA_BINARY_SENSOR_TYPE type_;
|
||||
|
||||
private:
|
||||
};
|
||||
} // namespace truma_inetbox
|
||||
} // namespace esphome
|
||||
70
components/truma_inetbox/binary_sensor/__init__.py
Normal file
70
components/truma_inetbox/binary_sensor/__init__.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from esphome.components import binary_sensor
|
||||
import esphome.config_validation as cv
|
||||
import esphome.codegen as cg
|
||||
from esphome.const import (
|
||||
CONF_ID,
|
||||
CONF_TYPE,
|
||||
CONF_UPDATE_INTERVAL
|
||||
)
|
||||
from .. import truma_inetbox_ns, CONF_TRUMA_INETBOX_ID, TrumaINetBoxApp
|
||||
|
||||
DEPENDENCIES = ["truma_inetbox"]
|
||||
CODEOWNERS = ["@Fabian-Schmidt"]
|
||||
|
||||
TrumaSensor = truma_inetbox_ns.class_(
|
||||
"TrumaBinarySensor", binary_sensor.BinarySensor, cg.Component)
|
||||
|
||||
# `TRUMA_BINARY_SENSOR_TYPE` is a enum class and not a namespace but it works.
|
||||
TRUMA_BINARY_SENSOR_TYPE_dummy_ns = truma_inetbox_ns.namespace(
|
||||
"TRUMA_BINARY_SENSOR_TYPE")
|
||||
|
||||
# 0 - C++ class
|
||||
# 1 - C++ enum
|
||||
CONF_SUPPORTED_TYPE = {
|
||||
# TrumaCpPlusBinarySensor
|
||||
"CP_PLUS_CONNECTED": (truma_inetbox_ns.class_("TrumaCpPlusBinarySensor", binary_sensor.BinarySensor, cg.PollingComponent), None),
|
||||
# TrumaHeaterBinarySensor
|
||||
"HEATER_ROOM": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_ROOM),
|
||||
"HEATER_WATER": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_WATER),
|
||||
"HEATER_GAS": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_GAS),
|
||||
"HEATER_MIX_1": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_MIX_1),
|
||||
"HEATER_MIX_2": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_MIX_2),
|
||||
"HEATER_ELECTRICITY": (truma_inetbox_ns.class_("TrumaHeaterBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.HEATER_ELECTRICITY),
|
||||
# TrumaTimerBinarySensor
|
||||
"TIMER_ACTIVE": (truma_inetbox_ns.class_("TrumaTimerBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.TIMER_ACTIVE),
|
||||
"TIMER_ROOM": (truma_inetbox_ns.class_("TrumaTimerBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.TIMER_ROOM),
|
||||
"TIMER_WATER": (truma_inetbox_ns.class_("TrumaTimerBinarySensor", binary_sensor.BinarySensor, cg.Component), TRUMA_BINARY_SENSOR_TYPE_dummy_ns.TIMER_WATER),
|
||||
}
|
||||
|
||||
|
||||
def set_default_based_on_type():
|
||||
def set_defaults_(config):
|
||||
# Update type based on configuration
|
||||
config[CONF_ID].type = CONF_SUPPORTED_TYPE[config[CONF_TYPE]][0]
|
||||
|
||||
# set defaults based on sensor type:
|
||||
if config[CONF_TYPE] == "CP_PLUS_CONNECTED":
|
||||
if CONF_UPDATE_INTERVAL not in config:
|
||||
config[CONF_UPDATE_INTERVAL] = 500 # 0.5 seconds
|
||||
return config
|
||||
|
||||
return set_defaults_
|
||||
|
||||
|
||||
CONFIG_SCHEMA = (
|
||||
binary_sensor.binary_sensor_schema(TrumaSensor)
|
||||
.extend({
|
||||
cv.GenerateID(CONF_TRUMA_INETBOX_ID): cv.use_id(TrumaINetBoxApp),
|
||||
cv.Required(CONF_TYPE): cv.enum(CONF_SUPPORTED_TYPE, upper=True),
|
||||
}).extend(cv.COMPONENT_SCHEMA)
|
||||
)
|
||||
FINAL_VALIDATE_SCHEMA = set_default_based_on_type()
|
||||
|
||||
|
||||
async def to_code(config):
|
||||
var = await binary_sensor.new_binary_sensor(config)
|
||||
await cg.register_component(var, config)
|
||||
await cg.register_parented(var, config[CONF_TRUMA_INETBOX_ID])
|
||||
|
||||
if CONF_SUPPORTED_TYPE[config[CONF_TYPE]][1]:
|
||||
cg.add(var.set_type(CONF_SUPPORTED_TYPE[config[CONF_TYPE]][1]))
|
||||
20
components/truma_inetbox/binary_sensor/enum.h
Normal file
20
components/truma_inetbox/binary_sensor/enum.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
namespace esphome {
|
||||
namespace truma_inetbox {
|
||||
|
||||
enum class TRUMA_BINARY_SENSOR_TYPE {
|
||||
HEATER_ROOM,
|
||||
HEATER_WATER,
|
||||
HEATER_GAS,
|
||||
HEATER_MIX_1,
|
||||
HEATER_MIX_2,
|
||||
HEATER_ELECTRICITY,
|
||||
|
||||
TIMER_ACTIVE,
|
||||
TIMER_ROOM,
|
||||
TIMER_WATER,
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user