diff --git a/firmware/components/project_version/__init__.py b/firmware/components/project_version/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/firmware/components/project_version/project_version_text_sensor.cpp b/firmware/components/project_version/project_version_text_sensor.cpp new file mode 100644 index 0000000..55db8b8 --- /dev/null +++ b/firmware/components/project_version/project_version_text_sensor.cpp @@ -0,0 +1,19 @@ +#include "project_version_text_sensor.h" +#include "esphome/core/log.h" +#include "esphome/core/application.h" +#include "esphome/core/version.h" + +namespace esphome { +namespace project_version { + +static const char *const TAG = "project_version.text_sensor"; + +void ProjectVersionTextSensor::setup() { + this->publish_state(ESPHOME_PROJECT_VERSION); +} +float ProjectVersionTextSensor::get_setup_priority() const { return setup_priority::DATA; } +std::string ProjectVersionTextSensor::unique_id() { return get_mac_address() + "-project-version"; } +void ProjectVersionTextSensor::dump_config() { LOG_TEXT_SENSOR("", "Project Version Text Sensor", this); } + +} // namespace version +} // namespace esphome diff --git a/firmware/components/project_version/project_version_text_sensor.h b/firmware/components/project_version/project_version_text_sensor.h new file mode 100644 index 0000000..bd65316 --- /dev/null +++ b/firmware/components/project_version/project_version_text_sensor.h @@ -0,0 +1,18 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/text_sensor/text_sensor.h" + +namespace esphome { +namespace project_version { + +class ProjectVersionTextSensor : public text_sensor::TextSensor, public Component { + public: + void setup() override; + void dump_config() override; + float get_setup_priority() const override; + std::string unique_id() override; +}; + +} // namespace version +} // namespace esphome diff --git a/firmware/components/project_version/text_sensor.py b/firmware/components/project_version/text_sensor.py new file mode 100644 index 0000000..c4c1c12 --- /dev/null +++ b/firmware/components/project_version/text_sensor.py @@ -0,0 +1,31 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import text_sensor +from esphome.const import ( + ENTITY_CATEGORY_DIAGNOSTIC, + ICON_NEW_BOX, +) + +project_version = cg.esphome_ns.namespace("project_version") +ProjectVersionTextSensor = project_version.class_( + "ProjectVersionTextSensor", text_sensor.TextSensor, cg.Component +) + +CONFIG_SCHEMA = ( + text_sensor.text_sensor_schema( + icon=ICON_NEW_BOX, + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + ) + .extend( + { + cv.GenerateID(): cv.declare_id(ProjectVersionTextSensor), + } + ) + .extend(cv.COMPONENT_SCHEMA) +) + + +async def to_code(config): + var = await text_sensor.new_text_sensor(config) + await cg.register_component(var, config) + diff --git a/firmware/stock.yaml b/firmware/stock.yaml index faecaaa..5514203 100644 --- a/firmware/stock.yaml +++ b/firmware/stock.yaml @@ -1,6 +1,15 @@ packages: base: !include base.yaml +external_components: + - source: ./components + components: [ project_version ] + +text_sensor: + - platform: project_version + name: "Upsy Desky Firmware Version" + internal: true + logger: level: INFO