Files
homeassistant-config/esphome/components/air_quality_web/air_quality_web.h
T

48 lines
1.7 KiB
C++

#pragma once
#include "esphome/core/component.h"
#include "esphome/core/helpers.h"
#include "esphome/components/sensor/sensor.h"
#include "esphome/components/web_server_base/web_server_base.h"
#include <string>
namespace esphome::air_quality_web {
// Separate IDF listener: do not use WebServerBase or its global instance/headers.
// The stock begin() has a shared control port and generic POST body processing.
class AirQualityServer : public AsyncWebServer {
public:
AirQualityServer() : AsyncWebServer(8080) {}
void set_port(uint16_t port) { this->port_ = port; }
esp_err_t start(esp_err_t (*handler)(httpd_req_t *), void *context);
};
class AirQualityWeb : public PollingComponent {
public:
AirQualityWeb() : PollingComponent(1000) {}
void set_port(uint16_t port) { this->server_.set_port(port); }
void set_mdns_hostname(const std::string &hostname) { this->mdns_hostname_ = hostname; }
void set_co2_sensor(sensor::Sensor *value) { this->co2_ = value; }
void set_temperature_sensor(sensor::Sensor *value) { this->temperature_ = value; }
void set_humidity_sensor(sensor::Sensor *value) { this->humidity_ = value; }
void setup() override;
void update() override;
void on_shutdown() override { this->server_.end(); }
float get_setup_priority() const override { return setup_priority::AFTER_CONNECTION - 1.0f; }
protected:
static esp_err_t handle_request_(httpd_req_t *request);
std::string snapshot_();
AirQualityServer server_;
std::string mdns_hostname_;
sensor::Sensor *co2_{nullptr};
sensor::Sensor *temperature_{nullptr};
sensor::Sensor *humidity_{nullptr};
Mutex snapshot_mutex_;
std::string json_{"{\"co2\":null,\"temperature\":null,\"humidity\":null}"};
};
} // namespace esphome::air_quality_web