ESPHome 2025.5.0
Loading...
Searching...
No Matches
vbus_sensor.cpp
Go to the documentation of this file.
1#include "vbus_sensor.h"
3#include "esphome/core/log.h"
4
5namespace esphome {
6namespace vbus {
7
8static const char *const TAG = "vbus.sensor";
9
10static inline uint16_t get_u16(std::vector<uint8_t> &message, int start) {
11 return (message[start + 1] << 8) + message[start];
12}
13
14static inline int16_t get_i16(std::vector<uint8_t> &message, int start) {
15 return (int16_t) ((message[start + 1] << 8) + message[start]);
16}
17
19 ESP_LOGCONFIG(TAG, "Deltasol BS Plus:");
20 LOG_SENSOR(" ", "Temperature 1", this->temperature1_sensor_);
21 LOG_SENSOR(" ", "Temperature 2", this->temperature2_sensor_);
22 LOG_SENSOR(" ", "Temperature 3", this->temperature3_sensor_);
23 LOG_SENSOR(" ", "Temperature 4", this->temperature4_sensor_);
24 LOG_SENSOR(" ", "Pump Speed 1", this->pump_speed1_sensor_);
25 LOG_SENSOR(" ", "Pump Speed 2", this->pump_speed2_sensor_);
26 LOG_SENSOR(" ", "Operating Hours 1", this->operating_hours1_sensor_);
27 LOG_SENSOR(" ", "Operating Hours 2", this->operating_hours2_sensor_);
28 LOG_SENSOR(" ", "Heat Quantity", this->heat_quantity_sensor_);
29 LOG_SENSOR(" ", "System Time", this->time_sensor_);
30 LOG_SENSOR(" ", "FW Version", this->version_sensor_);
31}
32
33void DeltaSolBSPlusSensor::handle_message(std::vector<uint8_t> &message) {
34 if (this->temperature1_sensor_ != nullptr)
35 this->temperature1_sensor_->publish_state(get_i16(message, 0) * 0.1f);
36 if (this->temperature2_sensor_ != nullptr)
37 this->temperature2_sensor_->publish_state(get_i16(message, 2) * 0.1f);
38 if (this->temperature3_sensor_ != nullptr)
39 this->temperature3_sensor_->publish_state(get_i16(message, 4) * 0.1f);
40 if (this->temperature4_sensor_ != nullptr)
41 this->temperature4_sensor_->publish_state(get_i16(message, 6) * 0.1f);
42 if (this->pump_speed1_sensor_ != nullptr)
43 this->pump_speed1_sensor_->publish_state(message[8]);
44 if (this->pump_speed2_sensor_ != nullptr)
45 this->pump_speed2_sensor_->publish_state(message[9]);
46 if (this->operating_hours1_sensor_ != nullptr)
47 this->operating_hours1_sensor_->publish_state(get_u16(message, 16));
48 if (this->operating_hours2_sensor_ != nullptr)
49 this->operating_hours2_sensor_->publish_state(get_u16(message, 18));
50 if (this->heat_quantity_sensor_ != nullptr) {
51 this->heat_quantity_sensor_->publish_state(get_u16(message, 20) + get_u16(message, 22) * 1000 +
52 get_u16(message, 24) * 1000000);
53 }
54 if (this->time_sensor_ != nullptr)
55 this->time_sensor_->publish_state(get_u16(message, 12));
56 if (this->version_sensor_ != nullptr)
57 this->version_sensor_->publish_state(get_u16(message, 26) * 0.01f);
58}
59
61 ESP_LOGCONFIG(TAG, "Deltasol BS 2009:");
62 LOG_SENSOR(" ", "Temperature 1", this->temperature1_sensor_);
63 LOG_SENSOR(" ", "Temperature 2", this->temperature2_sensor_);
64 LOG_SENSOR(" ", "Temperature 3", this->temperature3_sensor_);
65 LOG_SENSOR(" ", "Temperature 4", this->temperature4_sensor_);
66 LOG_SENSOR(" ", "Pump Speed 1", this->pump_speed1_sensor_);
67 LOG_SENSOR(" ", "Pump Speed 2", this->pump_speed2_sensor_);
68 LOG_SENSOR(" ", "Operating Hours 1", this->operating_hours1_sensor_);
69 LOG_SENSOR(" ", "Operating Hours 2", this->operating_hours2_sensor_);
70 LOG_SENSOR(" ", "Heat Quantity", this->heat_quantity_sensor_);
71 LOG_SENSOR(" ", "System Time", this->time_sensor_);
72 LOG_SENSOR(" ", "FW Version", this->version_sensor_);
73}
74
75void DeltaSolBS2009Sensor::handle_message(std::vector<uint8_t> &message) {
76 if (this->temperature1_sensor_ != nullptr)
77 this->temperature1_sensor_->publish_state(get_i16(message, 0) * 0.1f);
78 if (this->temperature2_sensor_ != nullptr)
79 this->temperature2_sensor_->publish_state(get_i16(message, 2) * 0.1f);
80 if (this->temperature3_sensor_ != nullptr)
81 this->temperature3_sensor_->publish_state(get_i16(message, 4) * 0.1f);
82 if (this->temperature4_sensor_ != nullptr)
83 this->temperature4_sensor_->publish_state(get_i16(message, 6) * 0.1f);
84 if (this->pump_speed1_sensor_ != nullptr)
85 this->pump_speed1_sensor_->publish_state(message[8]);
86 if (this->pump_speed2_sensor_ != nullptr)
87 this->pump_speed2_sensor_->publish_state(message[12]);
88 if (this->operating_hours1_sensor_ != nullptr)
89 this->operating_hours1_sensor_->publish_state(get_u16(message, 10));
90 if (this->operating_hours2_sensor_ != nullptr)
91 this->operating_hours2_sensor_->publish_state(get_u16(message, 18));
92 if (this->heat_quantity_sensor_ != nullptr) {
93 this->heat_quantity_sensor_->publish_state(get_u16(message, 28) + get_u16(message, 30) * 1000);
94 }
95 if (this->time_sensor_ != nullptr)
96 this->time_sensor_->publish_state(get_u16(message, 22));
97 if (this->version_sensor_ != nullptr)
98 this->version_sensor_->publish_state(get_u16(message, 32) * 0.01f);
99}
100
102 ESP_LOGCONFIG(TAG, "Deltasol C:");
103 LOG_SENSOR(" ", "Temperature 1", this->temperature1_sensor_);
104 LOG_SENSOR(" ", "Temperature 2", this->temperature2_sensor_);
105 LOG_SENSOR(" ", "Temperature 3", this->temperature3_sensor_);
106 LOG_SENSOR(" ", "Temperature 4", this->temperature4_sensor_);
107 LOG_SENSOR(" ", "Pump Speed 1", this->pump_speed1_sensor_);
108 LOG_SENSOR(" ", "Pump Speed 2", this->pump_speed2_sensor_);
109 LOG_SENSOR(" ", "Operating Hours 1", this->operating_hours1_sensor_);
110 LOG_SENSOR(" ", "Operating Hours 2", this->operating_hours2_sensor_);
111 LOG_SENSOR(" ", "Heat Quantity", this->heat_quantity_sensor_);
112 LOG_SENSOR(" ", "System Time", this->time_sensor_);
113}
114
115void DeltaSolCSensor::handle_message(std::vector<uint8_t> &message) {
116 if (this->temperature1_sensor_ != nullptr)
117 this->temperature1_sensor_->publish_state(get_i16(message, 0) * 0.1f);
118 if (this->temperature2_sensor_ != nullptr)
119 this->temperature2_sensor_->publish_state(get_i16(message, 2) * 0.1f);
120 if (this->temperature3_sensor_ != nullptr)
121 this->temperature3_sensor_->publish_state(get_i16(message, 4) * 0.1f);
122 if (this->temperature4_sensor_ != nullptr)
123 this->temperature4_sensor_->publish_state(get_i16(message, 6) * 0.1f);
124 if (this->pump_speed1_sensor_ != nullptr)
125 this->pump_speed1_sensor_->publish_state(message[8]);
126 if (this->pump_speed2_sensor_ != nullptr)
127 this->pump_speed2_sensor_->publish_state(message[9]);
128 if (this->operating_hours1_sensor_ != nullptr)
129 this->operating_hours1_sensor_->publish_state(get_u16(message, 12));
130 if (this->operating_hours2_sensor_ != nullptr)
131 this->operating_hours2_sensor_->publish_state(get_u16(message, 14));
132 if (this->heat_quantity_sensor_ != nullptr) {
133 this->heat_quantity_sensor_->publish_state(get_u16(message, 16) + get_u16(message, 18) * 1000 +
134 get_u16(message, 20) * 1000000);
135 }
136 if (this->time_sensor_ != nullptr)
137 this->time_sensor_->publish_state(get_u16(message, 22));
138}
139
141 ESP_LOGCONFIG(TAG, "Deltasol CS2:");
142 LOG_SENSOR(" ", "Temperature 1", this->temperature1_sensor_);
143 LOG_SENSOR(" ", "Temperature 2", this->temperature2_sensor_);
144 LOG_SENSOR(" ", "Temperature 3", this->temperature3_sensor_);
145 LOG_SENSOR(" ", "Temperature 4", this->temperature4_sensor_);
146 LOG_SENSOR(" ", "Pump Speed", this->pump_speed_sensor_);
147 LOG_SENSOR(" ", "Operating Hours", this->operating_hours_sensor_);
148 LOG_SENSOR(" ", "Heat Quantity", this->heat_quantity_sensor_);
149 LOG_SENSOR(" ", "FW Version", this->version_sensor_);
150}
151
152void DeltaSolCS2Sensor::handle_message(std::vector<uint8_t> &message) {
153 if (this->temperature1_sensor_ != nullptr)
154 this->temperature1_sensor_->publish_state(get_i16(message, 0) * 0.1f);
155 if (this->temperature2_sensor_ != nullptr)
156 this->temperature2_sensor_->publish_state(get_i16(message, 2) * 0.1f);
157 if (this->temperature3_sensor_ != nullptr)
158 this->temperature3_sensor_->publish_state(get_i16(message, 4) * 0.1f);
159 if (this->temperature4_sensor_ != nullptr)
160 this->temperature4_sensor_->publish_state(get_i16(message, 6) * 0.1f);
161 if (this->pump_speed_sensor_ != nullptr)
162 this->pump_speed_sensor_->publish_state(message[12]);
163 if (this->operating_hours_sensor_ != nullptr)
164 this->operating_hours_sensor_->publish_state(get_u16(message, 14));
165 if (this->heat_quantity_sensor_ != nullptr)
166 this->heat_quantity_sensor_->publish_state((get_u16(message, 26) << 16) + get_u16(message, 24));
167 if (this->version_sensor_ != nullptr)
168 this->version_sensor_->publish_state(get_u16(message, 28) * 0.01f);
169}
170
172 ESP_LOGCONFIG(TAG, "Deltasol CS Plus:");
173 LOG_SENSOR(" ", "Temperature 1", this->temperature1_sensor_);
174 LOG_SENSOR(" ", "Temperature 2", this->temperature2_sensor_);
175 LOG_SENSOR(" ", "Temperature 3", this->temperature3_sensor_);
176 LOG_SENSOR(" ", "Temperature 4", this->temperature4_sensor_);
177 LOG_SENSOR(" ", "Temperature 5", this->temperature5_sensor_);
178 LOG_SENSOR(" ", "Pump Speed 1", this->pump_speed1_sensor_);
179 LOG_SENSOR(" ", "Pump Speed 2", this->pump_speed2_sensor_);
180 LOG_SENSOR(" ", "Operating Hours 1", this->operating_hours1_sensor_);
181 LOG_SENSOR(" ", "Operating Hours 2", this->operating_hours2_sensor_);
182 LOG_SENSOR(" ", "Heat Quantity", this->heat_quantity_sensor_);
183 LOG_SENSOR(" ", "System Time", this->time_sensor_);
184 LOG_SENSOR(" ", "FW Version", this->version_sensor_);
185 LOG_SENSOR(" ", "Flow Rate", this->flow_rate_sensor_);
186}
187
188void DeltaSolCSPlusSensor::handle_message(std::vector<uint8_t> &message) {
189 if (this->temperature1_sensor_ != nullptr)
190 this->temperature1_sensor_->publish_state(get_i16(message, 0) * 0.1f);
191 if (this->temperature2_sensor_ != nullptr)
192 this->temperature2_sensor_->publish_state(get_i16(message, 2) * 0.1f);
193 if (this->temperature3_sensor_ != nullptr)
194 this->temperature3_sensor_->publish_state(get_i16(message, 4) * 0.1f);
195 if (this->temperature4_sensor_ != nullptr)
196 this->temperature4_sensor_->publish_state(get_i16(message, 6) * 0.1f);
197 if (this->temperature5_sensor_ != nullptr)
198 this->temperature5_sensor_->publish_state(get_i16(message, 36) * 0.1f);
199 if (this->pump_speed1_sensor_ != nullptr)
200 this->pump_speed1_sensor_->publish_state(message[8]);
201 if (this->pump_speed2_sensor_ != nullptr)
202 this->pump_speed2_sensor_->publish_state(message[12]);
203 if (this->operating_hours1_sensor_ != nullptr)
204 this->operating_hours1_sensor_->publish_state(get_u16(message, 10));
205 if (this->operating_hours2_sensor_ != nullptr)
206 this->operating_hours2_sensor_->publish_state(get_u16(message, 14));
207 if (this->heat_quantity_sensor_ != nullptr)
208 this->heat_quantity_sensor_->publish_state((get_u16(message, 30) << 16) + get_u16(message, 28));
209 if (this->time_sensor_ != nullptr)
210 this->time_sensor_->publish_state(get_u16(message, 22));
211 if (this->version_sensor_ != nullptr)
212 this->version_sensor_->publish_state(get_u16(message, 32) * 0.01f);
213 if (this->flow_rate_sensor_ != nullptr)
214 this->flow_rate_sensor_->publish_state(get_u16(message, 38));
215}
216
218 ESP_LOGCONFIG(TAG, "VBus Custom Sensor:");
219 if (this->source_ == 0xffff) {
220 ESP_LOGCONFIG(TAG, " Source address: ANY");
221 } else {
222 ESP_LOGCONFIG(TAG, " Source address: 0x%04x", this->source_);
223 }
224 if (this->dest_ == 0xffff) {
225 ESP_LOGCONFIG(TAG, " Dest address: ANY");
226 } else {
227 ESP_LOGCONFIG(TAG, " Dest address: 0x%04x", this->dest_);
228 }
229 if (this->command_ == 0xffff) {
230 ESP_LOGCONFIG(TAG, " Command: ANY");
231 } else {
232 ESP_LOGCONFIG(TAG, " Command: 0x%04x", this->command_);
233 }
234 ESP_LOGCONFIG(TAG, " Sensors:");
235 for (VBusCustomSubSensor *sensor : this->sensors_) {
236 LOG_SENSOR(" ", "-", sensor);
237 }
238}
239
240void VBusCustomSensor::handle_message(std::vector<uint8_t> &message) {
241 for (VBusCustomSubSensor *sensor : this->sensors_)
242 sensor->parse_message(message);
243}
244
245void VBusCustomSubSensor::parse_message(std::vector<uint8_t> &message) {
246 this->publish_state(this->message_parser_(message));
247}
248
249} // namespace vbus
250} // namespace esphome
void publish_state(float state)
Publish a new state to the front-end.
Definition sensor.cpp:39
void handle_message(std::vector< uint8_t > &message) override
sensor::Sensor * operating_hours1_sensor_
Definition vbus_sensor.h:62
sensor::Sensor * operating_hours2_sensor_
Definition vbus_sensor.h:63
sensor::Sensor * operating_hours2_sensor_
Definition vbus_sensor.h:32
void handle_message(std::vector< uint8_t > &message) override
sensor::Sensor * operating_hours1_sensor_
Definition vbus_sensor.h:31
sensor::Sensor * temperature3_sensor_
sensor::Sensor * temperature4_sensor_
sensor::Sensor * temperature2_sensor_
sensor::Sensor * heat_quantity_sensor_
sensor::Sensor * operating_hours_sensor_
sensor::Sensor * temperature1_sensor_
void handle_message(std::vector< uint8_t > &message) override
sensor::Sensor * pump_speed_sensor_
sensor::Sensor * operating_hours2_sensor_
void handle_message(std::vector< uint8_t > &message) override
sensor::Sensor * operating_hours1_sensor_
sensor::Sensor * temperature2_sensor_
Definition vbus_sensor.h:87
sensor::Sensor * temperature3_sensor_
Definition vbus_sensor.h:88
void handle_message(std::vector< uint8_t > &message) override
sensor::Sensor * pump_speed1_sensor_
Definition vbus_sensor.h:90
sensor::Sensor * temperature1_sensor_
Definition vbus_sensor.h:86
sensor::Sensor * operating_hours1_sensor_
Definition vbus_sensor.h:92
sensor::Sensor * time_sensor_
Definition vbus_sensor.h:95
sensor::Sensor * pump_speed2_sensor_
Definition vbus_sensor.h:91
sensor::Sensor * operating_hours2_sensor_
Definition vbus_sensor.h:93
sensor::Sensor * temperature4_sensor_
Definition vbus_sensor.h:89
sensor::Sensor * heat_quantity_sensor_
Definition vbus_sensor.h:94
void handle_message(std::vector< uint8_t > &message) override
std::vector< VBusCustomSubSensor * > sensors_
void parse_message(std::vector< uint8_t > &message)
const char *const TAG
Definition spi.cpp:8
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7