58 this->
queue_command_(EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED, 0, 0,
61 this->
queue_command_(EZO_PMP_COMMAND_READ_PAUSE_STATUS, 0, 0,
true);
72 this->
queue_command_(EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED, 0, 0,
79 ESP_LOGV(TAG,
"Not Scheduling new Command during update()");
109 uint8_t response_buffer[21] = {
'\0'};
111 response_buffer[0] = 0;
113 ESP_LOGE(TAG,
"read error");
118 switch (response_buffer[0]) {
124 ESP_LOGE(TAG,
"device returned a syntax error");
128 ESP_LOGE(TAG,
"device returned no data");
132 ESP_LOGE(TAG,
"device returned an unknown response: %d", response_buffer[0]);
137 char first_parameter_buffer[10] = {
'\0'};
138 char second_parameter_buffer[10] = {
'\0'};
139 char third_parameter_buffer[10] = {
'\0'};
141 first_parameter_buffer[0] =
'\0';
142 second_parameter_buffer[0] =
'\0';
143 third_parameter_buffer[0] =
'\0';
145 int current_parameter = 1;
147 size_t position_in_parameter_buffer = 0;
149 for (
size_t i = 1; i <
sizeof(response_buffer) - 1; i++) {
150 char current_char = response_buffer[i];
152 if (current_char ==
'\0') {
154 "Read Response from device: %s\n"
155 " First Component: %s\n"
156 " Second Component: %s\n"
157 " Third Component: %s",
158 (
char *) response_buffer, (
char *) first_parameter_buffer, (
char *) second_parameter_buffer,
159 (
char *) third_parameter_buffer);
164 if (current_char ==
',') {
166 position_in_parameter_buffer = 0;
170 if (position_in_parameter_buffer <
sizeof(first_parameter_buffer) - 1) {
171 switch (current_parameter) {
173 first_parameter_buffer[position_in_parameter_buffer] = current_char;
174 first_parameter_buffer[position_in_parameter_buffer + 1] =
'\0';
177 second_parameter_buffer[position_in_parameter_buffer] = current_char;
178 second_parameter_buffer[position_in_parameter_buffer + 1] =
'\0';
181 third_parameter_buffer[position_in_parameter_buffer] = current_char;
182 third_parameter_buffer[position_in_parameter_buffer + 1] =
'\0';
187 position_in_parameter_buffer++;
197 case EZO_PMP_COMMAND_READ_DOSING:
198 if (parsed_third_parameter.has_value())
201#ifdef USE_BINARY_SENSOR
207 if (parsed_second_parameter.has_value() && this->last_volume_requested_) {
212#ifdef USE_TEXT_SENSOR
222 case EZO_PMP_COMMAND_READ_SINGLE_REPORT:
224 if (parsed_first_parameter.has_value() && (
bool) this->current_volume_dosed_) {
230 case EZO_PMP_COMMAND_READ_MAX_FLOW_RATE:
232 if (parsed_second_parameter.has_value() && this->max_flow_rate_)
237 case EZO_PMP_COMMAND_READ_PAUSE_STATUS:
238 if (parsed_second_parameter.has_value())
241#ifdef USE_BINARY_SENSOR
247 case EZO_PMP_COMMAND_READ_TOTAL_VOLUME_DOSED:
249 if (parsed_second_parameter.has_value() && this->total_volume_dosed_)
254 case EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED:
256 if (parsed_second_parameter.has_value() && this->absolute_total_volume_dosed_)
261 case EZO_PMP_COMMAND_READ_CALIBRATION_STATUS:
262#ifdef USE_TEXT_SENSOR
263 if (parsed_second_parameter.has_value() && this->calibration_status_) {
264 if (parsed_second_parameter.value_or(0) == 1) {
266 }
else if (parsed_second_parameter.value_or(0) == 2) {
268 }
else if (parsed_second_parameter.value_or(0) == 3) {
277 case EZO_PMP_COMMAND_READ_PUMP_VOLTAGE:
279 if (parsed_second_parameter.has_value() && this->pump_voltage_)
286 case EZO_PMP_COMMAND_DOSE_VOLUME:
287#ifdef USE_TEXT_SENSOR
293 case EZO_PMP_COMMAND_DOSE_VOLUME_OVER_TIME:
294#ifdef USE_TEXT_SENSOR
300 case EZO_PMP_COMMAND_DOSE_WITH_CONSTANT_FLOW_RATE:
301#ifdef USE_TEXT_SENSOR
307 case EZO_PMP_COMMAND_DOSE_CONTINUOUSLY:
308#ifdef USE_TEXT_SENSOR
314 case EZO_PMP_COMMAND_STOP_DOSING:
316#ifdef USE_BINARY_SENSOR
320#ifdef USE_TEXT_SENSOR
326 case EZO_PMP_COMMAND_EXEC_ARBITRARY_COMMAND_ADDRESS:
327 ESP_LOGI(TAG,
"Arbitrary Command Response: %s", (
char *) response_buffer);
330 case EZO_PMP_COMMAND_CLEAR_CALIBRATION:
331 case EZO_PMP_COMMAND_PAUSE_DOSING:
332 case EZO_PMP_COMMAND_SET_CALIBRATION_VOLUME:
333 case EZO_PMP_COMMAND_CLEAR_TOTAL_VOLUME_DOSED:
334 case EZO_PMP_COMMAND_FIND:
338 case EZO_PMP_COMMAND_TYPE_READ:
339 case EZO_PMP_COMMAND_NONE:
349 int wait_time_for_command = 400;
350 uint8_t command_buffer[21];
351 int command_buffer_length = 0;
357 case EZO_PMP_COMMAND_READ_DOSING:
358 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,?");
361 case EZO_PMP_COMMAND_READ_SINGLE_REPORT:
362 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"R");
365 case EZO_PMP_COMMAND_READ_MAX_FLOW_RATE:
366 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"DC,?");
369 case EZO_PMP_COMMAND_READ_PAUSE_STATUS:
370 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"P,?");
373 case EZO_PMP_COMMAND_READ_TOTAL_VOLUME_DOSED:
374 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"TV,?");
377 case EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED:
378 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"ATV,?");
381 case EZO_PMP_COMMAND_READ_CALIBRATION_STATUS:
382 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Cal,?");
385 case EZO_PMP_COMMAND_READ_PUMP_VOLTAGE:
386 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"PV,?");
391 case EZO_PMP_COMMAND_FIND:
392 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Find");
393 wait_time_for_command = 60000;
396 case EZO_PMP_COMMAND_DOSE_CONTINUOUSLY:
397 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,*");
400 case EZO_PMP_COMMAND_CLEAR_TOTAL_VOLUME_DOSED:
401 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Clear");
404 case EZO_PMP_COMMAND_CLEAR_CALIBRATION:
405 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Cal,clear");
408 case EZO_PMP_COMMAND_PAUSE_DOSING:
409 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"P");
412 case EZO_PMP_COMMAND_STOP_DOSING:
413 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"X");
418 case EZO_PMP_COMMAND_DOSE_VOLUME:
419 command_buffer_length =
420 snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,%0.1f", this->
next_command_volume_);
423 case EZO_PMP_COMMAND_DOSE_VOLUME_OVER_TIME:
424 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,%0.1f,%i",
428 case EZO_PMP_COMMAND_DOSE_WITH_CONSTANT_FLOW_RATE:
429 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"DC,%0.1f,%i",
433 case EZO_PMP_COMMAND_SET_CALIBRATION_VOLUME:
434 command_buffer_length =
435 snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Cal,%0.2f", this->
next_command_volume_);
438 case EZO_PMP_COMMAND_CHANGE_I2C_ADDRESS:
439 command_buffer_length =
443 case EZO_PMP_COMMAND_EXEC_ARBITRARY_COMMAND_ADDRESS:
444 command_buffer_length =
445 snprintf((
char *) command_buffer,
sizeof(command_buffer),
"%s", this->
arbitrary_command_.c_str());
446 ESP_LOGI(TAG,
"Sending arbitrary command: %s", (
char *) command_buffer);
449 case EZO_PMP_COMMAND_TYPE_READ:
450 case EZO_PMP_COMMAND_NONE:
452 ESP_LOGE(TAG,
"Unsupported command received: %d", this->
next_command_);
457 ESP_LOGV(TAG,
"Sending command to device: %s", (
char *) command_buffer);
458 this->
write(command_buffer, command_buffer_length);