ESPHome 2026.5.0b1
Loading...
Searching...
No Matches
anova_base.cpp
Go to the documentation of this file.
1#include "anova_base.h"
2#include <cstdio>
3#include <cstring>
4
6
7namespace esphome::anova {
8
9float ftoc(float f) { return (f - 32.0) * (5.0f / 9.0f); }
10
11float ctof(float c) { return (c * 9.0f / 5.0f) + 32.0; }
12
14 this->packet_.length = strlen((char *) this->packet_.data);
15 this->packet_.data[this->packet_.length] = '\0';
16 ESP_LOGV("anova", "SendPkt: %s\n", this->packet_.data);
17 return &this->packet_;
18}
19
22 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_READ_DEVICE_STATUS);
23 return this->clean_packet_();
24}
25
28 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_READ_TARGET_TEMP);
29 return this->clean_packet_();
30}
31
34 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_READ_CURRENT_TEMP);
35 return this->clean_packet_();
36}
37
40 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_READ_UNIT);
41 return this->clean_packet_();
42}
43
46 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_READ_DATA);
47 return this->clean_packet_();
48}
49
52 if (this->fahrenheit_)
53 temperature = ctof(temperature);
54 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), CMD_SET_TARGET_TEMP, temperature);
55 return this->clean_packet_();
56}
57
60 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), CMD_SET_TEMP_UNIT, unit);
61 return this->clean_packet_();
62}
63
65 this->current_query_ = START;
66 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_START);
67 return this->clean_packet_();
68}
69
71 this->current_query_ = STOP;
72 snprintf((char *) this->packet_.data, sizeof(this->packet_.data), "%s", CMD_STOP);
73 return this->clean_packet_();
74}
75
76void AnovaCodec::decode(const uint8_t *data, uint16_t length) {
77 char buf[32];
78 memset(buf, 0, sizeof(buf));
79 strncpy(buf, (char *) data, std::min<uint16_t>(length, sizeof(buf) - 1));
80 this->has_target_temp_ = this->has_current_temp_ = this->has_unit_ = this->has_running_ = false;
81 switch (this->current_query_) {
82 case READ_DEVICE_STATUS: {
83 if (!strncmp(buf, "stopped", 7)) {
84 this->has_running_ = true;
85 this->running_ = false;
86 }
87 if (!strncmp(buf, "running", 7)) {
88 this->has_running_ = true;
89 this->running_ = true;
90 }
91 break;
92 }
93 case START: {
94 if (!strncmp(buf, "start", 5)) {
95 this->has_running_ = true;
96 this->running_ = true;
97 }
98 break;
99 }
100 case STOP: {
101 if (!strncmp(buf, "stop", 4)) {
102 this->has_running_ = true;
103 this->running_ = false;
104 }
105 break;
106 }
109 this->target_temp_ = parse_number<float>(str_until(buf, '\r')).value_or(0.0f); // NOLINT
110 if (this->fahrenheit_)
111 this->target_temp_ = ftoc(this->target_temp_);
112 this->has_target_temp_ = true;
113 break;
114 }
116 this->current_temp_ = parse_number<float>(str_until(buf, '\r')).value_or(0.0f); // NOLINT
117 if (this->fahrenheit_)
118 this->current_temp_ = ftoc(this->current_temp_);
119 this->has_current_temp_ = true;
120 break;
121 }
122 case SET_UNIT:
123 case READ_UNIT: {
124 this->unit_ = buf[0];
125 this->fahrenheit_ = buf[0] == 'f';
126 this->has_unit_ = true;
127 break;
128 }
129 default:
130 break;
131 }
132}
133
134} // namespace esphome::anova
Heap-allocating helper functions.
AnovaPacket * get_read_current_temp_request()
AnovaPacket * get_set_target_temp_request(float temperature)
void decode(const uint8_t *data, uint16_t length)
AnovaPacket * get_set_unit_request(char unit)
AnovaPacket * get_read_device_status_request()
AnovaPacket * get_start_request()
AnovaPacket * clean_packet_()
AnovaPacket * get_read_target_temp_request()
CurrentQuery current_query_
Definition anova_base.h:74
AnovaPacket * get_stop_request()
AnovaPacket * get_read_data_request()
AnovaPacket * get_read_unit_request()
float ftoc(float f)
Definition anova_base.cpp:9
@ READ_TARGET_TEMPERATURE
Definition anova_base.h:11
@ READ_CURRENT_TEMPERATURE
Definition anova_base.h:12
float ctof(float c)
optional< T > parse_number(const char *str)
Parse an unsigned decimal number from a null-terminated string.
Definition helpers.h:1143
std::string str_until(const char *str, char ch)
Extract the part of the string until either the first occurrence of the specified character,...
uint16_t temperature
Definition sun_gtil2.cpp:12
uint16_t length
Definition tt21100.cpp:0