#pragma once #define SENSOR_ID "bme280" #include "ha.h" #include "esp.h" #include "display.h" using namespace Ha; namespace Devices { auto espClockDevice = &DeviceConfig::create(MAIN_DEVICE_ID) .withName("ESP Clock") .withManufacturer("Espressif") .withModel("Esp8266 D1 Mini") .withArea("Living room"); Sensor* sensor = Builder::instance(SENSOR_ID) .withValueTemplate("{{ value_json.temperature }}") .withPrecision(1) .asDevice(&DeviceConfig::create("esp-clock-living-room") .withName("Living room") .withModel("BPE280") .withArea("Living room") .withParent(espClockDevice) ) .addSecondary(Builder::instance(SENSOR_ID).withValueTemplate("{{ value_json.humidity }}").withPrecision(1).build()) .addSecondary(Builder::instance(SENSOR_ID).withValueTemplate("{{ value_json.pressure }}").withPrecision(1).build()) .build(); auto ledMqtt = Builder::instance(new Light{ "Led", "led", [](const char* msg) { turnLed(strcmp("ON", msg) == 0); } }).restoreStateFromCommand().build(); auto brightnessMqtt = Builder::instance(new Number{ "Brightness", "brightness", [](const char* msg) { Display::brightness = String{ msg }.toInt(); } }).withMin(Display::Brightness::MIN).withMax(Display::Brightness::MAX).withStep(1).restoreStateFromCommand().build(); auto hourFormatMqtt = Builder::instance(new Switch{ "Format 24h", "format_24h", [](const char* msg) { Display::hourFormat24 = (strcmp("ON", msg) == 0); } }).restoreStateFromCommand().build(); Number* displayTimerMqtt = Builder::instance(new Number{ "Timer duration", "timer_duration", [](const char* msg) { auto value = String{ msg }.toInt(); Display::Timer::timer = value; displayTimerMqtt->updateState(value); } }).withMin(0).withMax(90).withStep(5).restoreStateFromCommand().build(); Sensor* timerRemainingMqtt = Builder::instance(new Sensor("Timer remaining", "timer_remaining")) .withUnitMeasure("min").withPrecision(0).build(); Switch* timerMqtt = Builder::instance(new Switch{"Timer", "timer", [](const char* msg) { if (strcmp("ON", msg) == 0) { Display::Timer::start(); timerMqtt->updateState(true); } else { Display::Timer::stop(); timerMqtt->updateState(false); } } }).restoreStateFromCommand().build(); auto button = Builder