2023-12-30 07:32:40 +00:00
|
|
|
#pragma once
|
|
|
|
#include <IoTComponent.hpp>
|
|
|
|
#include <ExpansionCard.hpp>
|
|
|
|
#include <ClimateCard.hpp>
|
|
|
|
|
|
|
|
#define AC_MODE_REPORT_TOPIC "mode"
|
|
|
|
#define AC_MODE_SET_TOPIC "set/mode"
|
|
|
|
#define AC_TEMPERATURE_REPORT_TOPIC "temperature"
|
|
|
|
#define AC_TEMPERATURE_SET_TOPIC "set/temperature"
|
|
|
|
#define AC_FAN_SPEED_REPORT_TOPIC "fan_speed"
|
|
|
|
#define AC_FAN_SPEED_SET_TOPIC "set/fan_speed"
|
|
|
|
#define AC_ROOM_TEMPERATURE_REPORT_TOPIC "room_temperature"
|
|
|
|
#define AC_HUMIDITY_REPORT_TOPIC "humidity"
|
|
|
|
#define AC_REQUEST_STATE_TOPIC "request_state"
|
|
|
|
|
|
|
|
class ClimateIoT : public IoTComponent {
|
|
|
|
public:
|
|
|
|
ClimateIoT();
|
|
|
|
~ClimateIoT();
|
|
|
|
bool begin(uint8_t card_id, ExpansionCard *card, PubSubClient *mqtt, char *base_topic);
|
|
|
|
void handleMqttMessage(char *topic, char *payload);
|
|
|
|
void publishClimate();
|
|
|
|
void publishClimateTemperature();
|
|
|
|
void publishClimateMode();
|
|
|
|
void publishClimateFanSpeed();
|
|
|
|
void publishSensor();
|
|
|
|
void publishRoomTemperature();
|
|
|
|
void publishHumidity();
|
|
|
|
void handleStateChange(uint8_t temperature, uint8_t mode, uint8_t fan_speed);
|
|
|
|
void handleSensorUpdate(float temperature, float humidity);
|
|
|
|
void handleAirConditionerUpdate(uint8_t mode, uint8_t fan_speed, uint8_t temperature);
|
|
|
|
void publishReport();
|
|
|
|
void subscribe();
|
|
|
|
void loop();
|
|
|
|
uint8_t getType();
|
|
|
|
private:
|
2023-12-30 08:03:20 +00:00
|
|
|
ClimateCard *climate_card;
|
2023-12-30 07:32:40 +00:00
|
|
|
bool processSetTemperatureMessage(char *topic, char *payload, uint8_t topic_length);
|
|
|
|
bool processSetModeMessage(char *topic, char *payload, uint8_t topic_length);
|
|
|
|
bool processSetFanSpeedMessage(char *topic, char *payload, uint8_t topic_length);
|
|
|
|
bool processRequestStateMessage(char *topic, char *payload, uint8_t topic_length);
|
|
|
|
};
|