#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) .withIcon("mdi:brightness-7") .restoreStateFromCommand() .build(); auto hourFormatMqtt = Builder::instance(new Switch{ "Format 24h", "format_24h", [](const char* msg) { Display::hourFormat24 = (strcmp("ON", msg) == 0); } }).withIcon("mdi:hours-24").restoreStateFromCommand().build(); Number* displayTimerMqtt = Builder::instance(new Number{ "Timer duration", "timer_duration", [](const char* msg) { auto value = String{ msg }.toInt(); timer = value; displayTimerMqtt->updateState(value); if (Display::tTimer.isEnabled()) { Display::tTimer.cancel(); Display::tTimer.enable(); } } }) .withMin(0).withMax(90).withStep(5) .withDeviceClass("duration") .withUnitMeasure("min") .withIcon("mdi:timer-edit-outline") .restoreStateFromCommand() .build(); Sensor* timerRemainingMqtt = Builder::instance(new Sensor("Timer remaining", "timer_remaining")) .withUnitMeasure("min").withPrecision(0).withIcon("mdi:timer-sand").build(); Switch* timerMqtt = Builder::instance(new Switch{"Timer", "timer", [](const char* msg) { if (strcmp("ON", msg) == 0) { Display::tTimer.restart(); timerMqtt->updateState(true); } else { Display::tTimer.cancel(); timerMqtt->updateState(false); } } }).withIcon("mdi:timer-play-outline").restoreStateFromCommand().build(); auto button = HaESP::restartButton() .asDevice(espClockDevice) .addSecondary( Builder