From 04a53264b427c37ba4f39fd1811d31aa50941e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Metrich?= <45318189+FredM67@users.noreply.github.com> Date: Sat, 26 Sep 2026 16:37:31 +0200 Subject: [PATCH] [mk2pvrouter] Add text_sensor platform (#19720) Co-authored-by: Claude Opus 5.5 (1M context) --- .../mk2pvrouter/text_sensor/__init__.py | 27 +++++++++++++++++++ .../text_sensor/mk2pvrouter_text_sensor.cpp | 17 ++++++++++++ .../text_sensor/mk2pvrouter_text_sensor.h | 15 +++++++++++ tests/components/mk2pvrouter/common.yaml | 12 +++++++++ .../mk2pvrouter_text_sensor_test.cpp | 21 +++++++++++++++ 5 files changed, 92 insertions(+) create mode 100644 esphome/components/mk2pvrouter/text_sensor/__init__.py create mode 100644 esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.cpp create mode 100644 esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.h create mode 100644 tests/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor_test.cpp diff --git a/esphome/components/mk2pvrouter/text_sensor/__init__.py b/esphome/components/mk2pvrouter/text_sensor/__init__.py new file mode 100644 index 0000000000..11689f8bc7 --- /dev/null +++ b/esphome/components/mk2pvrouter/text_sensor/__init__.py @@ -0,0 +1,27 @@ +import esphome.codegen as cg +from esphome.components import text_sensor +from esphome.const import CONF_ID, CONF_TAG +from esphome.types import ConfigType + +from .. import ( + CONF_MK2PVROUTER_ID, + MK2PVROUTER_LISTENER_SCHEMA, + mk2pvrouter_ns, + register_mk2pvrouter_listener, +) + +Mk2PVRouterTextSensor = mk2pvrouter_ns.class_( + "Mk2PVRouterTextSensor", text_sensor.TextSensor, cg.Component +) + +CONFIG_SCHEMA = text_sensor.text_sensor_schema(Mk2PVRouterTextSensor).extend( + MK2PVROUTER_LISTENER_SCHEMA +) + + +async def to_code(config: ConfigType) -> None: + var = cg.new_Pvariable(config[CONF_ID], config[CONF_TAG]) + await cg.register_component(var, config) + await text_sensor.register_text_sensor(var, config) + mk2pvrouter = await cg.get_variable(config[CONF_MK2PVROUTER_ID]) + await register_mk2pvrouter_listener(mk2pvrouter, var) diff --git a/esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.cpp b/esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.cpp new file mode 100644 index 0000000000..4aea2ef7fc --- /dev/null +++ b/esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.cpp @@ -0,0 +1,17 @@ +#include "mk2pvrouter_text_sensor.h" +#include "esphome/core/log.h" + +namespace esphome::mk2pvrouter { + +static const char *const TAG = "mk2pvrouter_text_sensor"; + +Mk2PVRouterTextSensor::Mk2PVRouterTextSensor(const char *tag) : Mk2PVRouterListener(tag) {} + +void Mk2PVRouterTextSensor::publish_val(const char *val) { this->publish_state(val); } + +void Mk2PVRouterTextSensor::dump_config() { + LOG_TEXT_SENSOR(" ", "Mk2PVRouter Text Sensor", this); + ESP_LOGCONFIG(TAG, " Tag: %s", this->get_tag()); +} + +} // namespace esphome::mk2pvrouter diff --git a/esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.h b/esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.h new file mode 100644 index 0000000000..590c67005c --- /dev/null +++ b/esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.h @@ -0,0 +1,15 @@ +#pragma once + +#include "esphome/components/mk2pvrouter/mk2pvrouter.h" +#include "esphome/components/text_sensor/text_sensor.h" + +namespace esphome::mk2pvrouter { + +class Mk2PVRouterTextSensor final : public Mk2PVRouterListener, public text_sensor::TextSensor, public Component { + public: + explicit Mk2PVRouterTextSensor(const char *tag); + void publish_val(const char *val) override; + void dump_config() override; +}; + +} // namespace esphome::mk2pvrouter diff --git a/tests/components/mk2pvrouter/common.yaml b/tests/components/mk2pvrouter/common.yaml index c96f1404b8..c3efb85196 100644 --- a/tests/components/mk2pvrouter/common.yaml +++ b/tests/components/mk2pvrouter/common.yaml @@ -66,3 +66,15 @@ binary_sensor: name: Relay 2 Binary tag: R2 mk2pvrouter_id: test_mk2pvrouter + +text_sensor: + - platform: mk2pvrouter + name: S per MC + tag: S_MC + mk2pvrouter_id: test_mk2pvrouter + + # Test another text tag + - platform: mk2pvrouter + name: Status + tag: STATUS + mk2pvrouter_id: test_mk2pvrouter diff --git a/tests/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor_test.cpp b/tests/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor_test.cpp new file mode 100644 index 0000000000..666797906b --- /dev/null +++ b/tests/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor_test.cpp @@ -0,0 +1,21 @@ +#include + +#include "esphome/components/mk2pvrouter/text_sensor/mk2pvrouter_text_sensor.h" + +namespace esphome::mk2pvrouter::testing { + +TEST(Mk2PVRouterTextSensorTest, PublishesValueVerbatim) { + Mk2PVRouterTextSensor sensor("S_MC"); + sensor.publish_val("-1234"); + ASSERT_TRUE(sensor.has_state()); + EXPECT_EQ(sensor.get_state(), "-1234"); +} + +TEST(Mk2PVRouterTextSensorTest, ShorterValueReplacesPreviousOne) { + Mk2PVRouterTextSensor sensor("S_MC"); + sensor.publish_val("-1234"); + sensor.publish_val("5"); + EXPECT_EQ(sensor.get_state(), "5"); +} + +} // namespace esphome::mk2pvrouter::testing