From 6aede26cd4f6dea4296149f89db783e5c6356932 Mon Sep 17 00:00:00 2001 From: HB Date: Wed, 30 Sep 2020 05:02:09 +0200 Subject: [PATCH] empty compound sensor --- .../empty_compound_sensor.cpp | 31 +++++++++++ .../empty_compound_sensor.h | 27 ++++++++++ .../empty_compound_sensor/sensor.py | 51 +++++++++++++++++++ test_empty.yaml | 9 ++++ 4 files changed, 118 insertions(+) create mode 100644 custom_components/empty_compound_sensor/empty_compound_sensor.cpp create mode 100644 custom_components/empty_compound_sensor/empty_compound_sensor.h create mode 100644 custom_components/empty_compound_sensor/sensor.py diff --git a/custom_components/empty_compound_sensor/empty_compound_sensor.cpp b/custom_components/empty_compound_sensor/empty_compound_sensor.cpp new file mode 100644 index 0000000..5d7a03a --- /dev/null +++ b/custom_components/empty_compound_sensor/empty_compound_sensor.cpp @@ -0,0 +1,31 @@ +#include "esphome/core/log.h" +#include "empty_compound_sensor.h" + +namespace esphome { +namespace empty_compound_sensor { + +static const char *TAG = "empty_compound_sensor.sensor"; + +void EmptyCompoundSensor::setup() { + +} + +void EmptyCompoundSensor::loop() { + +} + +void EmptyCompoundSensor::update() { + if (this->sensor1_ != nullptr) + this->sensor1_->publish_state(1.0f); + if (this->sensor2_ != nullptr) + this->sensor2_->publish_state(2.0f); + if (this->sensor3_ != nullptr) + this->sensor3_->publish_state(3.0f); +} + +void EmptyCompoundSensor::dump_config() { + ESP_LOGCONFIG(TAG, "Empty compound sensor"); +} + +} //namespace empty_compound_sensor +} //namespace esphome \ No newline at end of file diff --git a/custom_components/empty_compound_sensor/empty_compound_sensor.h b/custom_components/empty_compound_sensor/empty_compound_sensor.h new file mode 100644 index 0000000..67e11a1 --- /dev/null +++ b/custom_components/empty_compound_sensor/empty_compound_sensor.h @@ -0,0 +1,27 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/sensor/sensor.h" + +namespace esphome { +namespace empty_compound_sensor { + +class EmptyCompoundSensor : public sensor::Sensor, public PollingComponent { + public: + void set_sensor1(sensor::Sensor *sensor1) { sensor1_ = sensor1; } + void set_sensor2(sensor::Sensor *sensor2) { sensor2_ = sensor2; } + void set_sensor3(sensor::Sensor *sensor3) { sensor3_ = sensor3; } + + void setup() override; + void loop() override; + void update() override; + void dump_config() override; + + protected: + sensor::Sensor *sensor1_; + sensor::Sensor *sensor2_; + sensor::Sensor *sensor3_; +}; + +} //namespace empty_compound_sensor +} //namespace esphome \ No newline at end of file diff --git a/custom_components/empty_compound_sensor/sensor.py b/custom_components/empty_compound_sensor/sensor.py new file mode 100644 index 0000000..c804c6c --- /dev/null +++ b/custom_components/empty_compound_sensor/sensor.py @@ -0,0 +1,51 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import CONF_ID, UNIT_EMPTY, ICON_EMPTY + +empty_compound_sensor_ns = cg.esphome_ns.namespace('empty_compound_sensor') +EmptyCompoundSensor = empty_compound_sensor_ns.class_('EmptyCompoundSensor', cg.PollingComponent) + +CONF_SENSOR1 = "sensor1" +CONF_SENSOR2 = "sensor2" +CONF_SENSOR3 = "sensor3" + +CONFIG_SCHEMA = cv.Schema({ + cv.GenerateID(): cv.declare_id(EmptyCompoundSensor), + cv.Optional(CONF_SENSOR1): + sensor.sensor_schema(UNIT_EMPTY, ICON_EMPTY, 1).extend({ + #cv.Optional(CONF_OVERSAMPLING, default='16X'): + # cv.enum(OVERSAMPLING_OPTIONS, upper=True), + }), + cv.Optional(CONF_SENSOR2): + sensor.sensor_schema(UNIT_EMPTY, ICON_EMPTY, 1).extend({ + #cv.Optional(CONF_OVERSAMPLING, default='16X'): + # cv.enum(OVERSAMPLING_OPTIONS, upper=True), + }), + cv.Optional(CONF_SENSOR3): + sensor.sensor_schema(UNIT_EMPTY, ICON_EMPTY, 1).extend({ + #cv.Optional(CONF_OVERSAMPLING, default='16X'): + # cv.enum(OVERSAMPLING_OPTIONS, upper=True), + }) +}).extend(cv.polling_component_schema('60s')) + + +def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + yield cg.register_component(var, config) + + if CONF_SENSOR1 in config: + conf = config[CONF_SENSOR1] + sens = yield sensor.new_sensor(conf) + cg.add(var.set_sensor1(sens)) + + if CONF_SENSOR2 in config: + conf = config[CONF_SENSOR2] + sens = yield sensor.new_sensor(conf) + cg.add(var.set_sensor2(sens)) + + if CONF_SENSOR3 in config: + conf = config[CONF_SENSOR3] + sens = yield sensor.new_sensor(conf) + cg.add(var.set_sensor3(sens)) + \ No newline at end of file diff --git a/test_empty.yaml b/test_empty.yaml index 97ce525..14ad7f9 100644 --- a/test_empty.yaml +++ b/test_empty.yaml @@ -15,6 +15,15 @@ sensor: - platform: empty_uart_sensor id: empty_uart_sensor_1 + - platform: empty_compound_sensor + id: empty_compound_sensor_1 + sensor1: + name: "Sensor 1" + sensor2: + name: "Sensor 2" + sensor3: + name: "Sensor 3" + binary_sensor: - platform: empty_binary_sensor id: empty_binary_sensor_1