mirror of
https://github.com/esphome/esphome.git
synced 2024-12-02 11:44:13 +01:00
79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/helpers.h"
|
|
#include "esphome/core/log.h"
|
|
|
|
namespace esphome {
|
|
namespace anova {
|
|
|
|
enum CurrentQuery {
|
|
NONE,
|
|
READ_DEVICE_STATUS,
|
|
READ_TARGET_TEMPERATURE,
|
|
READ_CURRENT_TEMPERATURE,
|
|
READ_DATA,
|
|
READ_UNIT,
|
|
SET_TARGET_TEMPERATURE,
|
|
SET_UNIT,
|
|
START,
|
|
STOP,
|
|
};
|
|
|
|
struct AnovaPacket {
|
|
uint16_t length;
|
|
uint8_t data[24];
|
|
};
|
|
|
|
#define CMD_READ_DEVICE_STATUS "status\r"
|
|
#define CMD_READ_TARGET_TEMP "read set temp\r"
|
|
#define CMD_READ_CURRENT_TEMP "read temp\r"
|
|
#define CMD_READ_UNIT "read unit\r"
|
|
#define CMD_READ_DATA "read data\r"
|
|
#define CMD_SET_TARGET_TEMP "set temp %.1f\r"
|
|
#define CMD_SET_TEMP_UNIT "set unit %c\r"
|
|
|
|
#define CMD_START "start\r"
|
|
#define CMD_STOP "stop\r"
|
|
|
|
class AnovaCodec {
|
|
public:
|
|
AnovaPacket *get_read_device_status_request();
|
|
AnovaPacket *get_read_target_temp_request();
|
|
AnovaPacket *get_read_current_temp_request();
|
|
AnovaPacket *get_read_data_request();
|
|
AnovaPacket *get_read_unit_request();
|
|
|
|
AnovaPacket *get_set_target_temp_request(float temperature);
|
|
AnovaPacket *get_set_unit_request(char unit);
|
|
|
|
AnovaPacket *get_start_request();
|
|
AnovaPacket *get_stop_request();
|
|
|
|
void decode(const uint8_t *data, uint16_t length);
|
|
bool has_target_temp() { return this->has_target_temp_; }
|
|
bool has_current_temp() { return this->has_current_temp_; }
|
|
bool has_unit() { return this->has_unit_; }
|
|
bool has_running() { return this->has_running_; }
|
|
|
|
union {
|
|
float target_temp_;
|
|
float current_temp_;
|
|
char unit_;
|
|
bool running_;
|
|
};
|
|
|
|
protected:
|
|
AnovaPacket *clean_packet_();
|
|
AnovaPacket packet_;
|
|
|
|
bool has_target_temp_;
|
|
bool has_current_temp_;
|
|
bool has_unit_;
|
|
bool has_running_;
|
|
bool fahrenheit_;
|
|
|
|
CurrentQuery current_query_;
|
|
};
|
|
|
|
} // namespace anova
|
|
} // namespace esphome
|