59 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);
71 this->
queue_command_(EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED, 0, 0,
77 ESP_LOGV(TAG,
"Not Scheduling new Command during update()");
107 uint8_t response_buffer[21] = {
'\0'};
109 response_buffer[0] = 0;
111 ESP_LOGE(TAG,
"read error");
116 switch (response_buffer[0]) {
122 ESP_LOGE(TAG,
"device returned a syntax error");
126 ESP_LOGE(TAG,
"device returned no data");
130 ESP_LOGE(TAG,
"device returned an unknown response: %d", response_buffer[0]);
135 char first_parameter_buffer[10] = {
'\0'};
136 char second_parameter_buffer[10] = {
'\0'};
137 char third_parameter_buffer[10] = {
'\0'};
139 first_parameter_buffer[0] =
'\0';
140 second_parameter_buffer[0] =
'\0';
141 third_parameter_buffer[0] =
'\0';
143 int current_parameter = 1;
145 size_t position_in_parameter_buffer = 0;
147 for (
size_t i = 1; i <
sizeof(response_buffer) - 1; i++) {
148 char current_char = response_buffer[i];
150 if (current_char ==
'\0') {
152 "Read Response from device: %s\n"
153 " First Component: %s\n"
154 " Second Component: %s\n"
155 " Third Component: %s",
156 (
char *) response_buffer, (
char *) first_parameter_buffer, (
char *) second_parameter_buffer,
157 (
char *) third_parameter_buffer);
162 if (current_char ==
',') {
164 position_in_parameter_buffer = 0;
168 if (position_in_parameter_buffer <
sizeof(first_parameter_buffer) - 1) {
169 switch (current_parameter) {
171 first_parameter_buffer[position_in_parameter_buffer] = current_char;
172 first_parameter_buffer[position_in_parameter_buffer + 1] =
'\0';
175 second_parameter_buffer[position_in_parameter_buffer] = current_char;
176 second_parameter_buffer[position_in_parameter_buffer + 1] =
'\0';
179 third_parameter_buffer[position_in_parameter_buffer] = current_char;
180 third_parameter_buffer[position_in_parameter_buffer + 1] =
'\0';
183 position_in_parameter_buffer++;
193 case EZO_PMP_COMMAND_READ_DOSING:
194 if (parsed_third_parameter.has_value())
200 if (parsed_second_parameter.has_value() && this->last_volume_requested_) {
212 case EZO_PMP_COMMAND_READ_SINGLE_REPORT:
213 if (parsed_first_parameter.has_value() && (
bool) this->current_volume_dosed_) {
218 case EZO_PMP_COMMAND_READ_MAX_FLOW_RATE:
219 if (parsed_second_parameter.has_value() && this->max_flow_rate_)
223 case EZO_PMP_COMMAND_READ_PAUSE_STATUS:
224 if (parsed_second_parameter.has_value())
231 case EZO_PMP_COMMAND_READ_TOTAL_VOLUME_DOSED:
232 if (parsed_second_parameter.has_value() && this->total_volume_dosed_)
236 case EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED:
237 if (parsed_second_parameter.has_value() && this->absolute_total_volume_dosed_)
241 case EZO_PMP_COMMAND_READ_CALIBRATION_STATUS:
242 if (parsed_second_parameter.has_value() && this->calibration_status_) {
243 if (parsed_second_parameter.value_or(0) == 1) {
245 }
else if (parsed_second_parameter.value_or(0) == 2) {
247 }
else if (parsed_second_parameter.value_or(0) == 3) {
255 case EZO_PMP_COMMAND_READ_PUMP_VOLTAGE:
256 if (parsed_second_parameter.has_value() && this->pump_voltage_)
262 case EZO_PMP_COMMAND_DOSE_VOLUME:
267 case EZO_PMP_COMMAND_DOSE_VOLUME_OVER_TIME:
272 case EZO_PMP_COMMAND_DOSE_WITH_CONSTANT_FLOW_RATE:
277 case EZO_PMP_COMMAND_DOSE_CONTINUOUSLY:
282 case EZO_PMP_COMMAND_STOP_DOSING:
290 case EZO_PMP_COMMAND_EXEC_ARBITRARY_COMMAND_ADDRESS:
291 ESP_LOGI(TAG,
"Arbitrary Command Response: %s", (
char *) response_buffer);
294 case EZO_PMP_COMMAND_CLEAR_CALIBRATION:
295 case EZO_PMP_COMMAND_PAUSE_DOSING:
296 case EZO_PMP_COMMAND_SET_CALIBRATION_VOLUME:
297 case EZO_PMP_COMMAND_CLEAR_TOTAL_VOLUME_DOSED:
298 case EZO_PMP_COMMAND_FIND:
302 case EZO_PMP_COMMAND_TYPE_READ:
303 case EZO_PMP_COMMAND_NONE:
313 int wait_time_for_command = 400;
314 uint8_t command_buffer[21];
315 int command_buffer_length = 0;
321 case EZO_PMP_COMMAND_READ_DOSING:
322 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,?");
325 case EZO_PMP_COMMAND_READ_SINGLE_REPORT:
326 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"R");
329 case EZO_PMP_COMMAND_READ_MAX_FLOW_RATE:
330 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"DC,?");
333 case EZO_PMP_COMMAND_READ_PAUSE_STATUS:
334 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"P,?");
337 case EZO_PMP_COMMAND_READ_TOTAL_VOLUME_DOSED:
338 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"TV,?");
341 case EZO_PMP_COMMAND_READ_ABSOLUTE_TOTAL_VOLUME_DOSED:
342 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"ATV,?");
345 case EZO_PMP_COMMAND_READ_CALIBRATION_STATUS:
346 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Cal,?");
349 case EZO_PMP_COMMAND_READ_PUMP_VOLTAGE:
350 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"PV,?");
355 case EZO_PMP_COMMAND_FIND:
356 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Find");
357 wait_time_for_command = 60000;
360 case EZO_PMP_COMMAND_DOSE_CONTINUOUSLY:
361 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,*");
364 case EZO_PMP_COMMAND_CLEAR_TOTAL_VOLUME_DOSED:
365 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Clear");
368 case EZO_PMP_COMMAND_CLEAR_CALIBRATION:
369 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Cal,clear");
372 case EZO_PMP_COMMAND_PAUSE_DOSING:
373 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"P");
376 case EZO_PMP_COMMAND_STOP_DOSING:
377 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"X");
382 case EZO_PMP_COMMAND_DOSE_VOLUME:
383 command_buffer_length =
384 snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,%0.1f", this->
next_command_volume_);
387 case EZO_PMP_COMMAND_DOSE_VOLUME_OVER_TIME:
388 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"D,%0.1f,%i",
392 case EZO_PMP_COMMAND_DOSE_WITH_CONSTANT_FLOW_RATE:
393 command_buffer_length = snprintf((
char *) command_buffer,
sizeof(command_buffer),
"DC,%0.1f,%i",
397 case EZO_PMP_COMMAND_SET_CALIBRATION_VOLUME:
398 command_buffer_length =
399 snprintf((
char *) command_buffer,
sizeof(command_buffer),
"Cal,%0.2f", this->
next_command_volume_);
402 case EZO_PMP_COMMAND_CHANGE_I2C_ADDRESS:
403 command_buffer_length =
407 case EZO_PMP_COMMAND_EXEC_ARBITRARY_COMMAND_ADDRESS:
408 command_buffer_length =
409 snprintf((
char *) command_buffer,
sizeof(command_buffer),
"%s", this->
arbitrary_command_.c_str());
410 ESP_LOGI(TAG,
"Sending arbitrary command: %s", (
char *) command_buffer);
413 case EZO_PMP_COMMAND_TYPE_READ:
414 case EZO_PMP_COMMAND_NONE:
416 ESP_LOGE(TAG,
"Unsupported command received: %d", this->
next_command_);
421 ESP_LOGV(TAG,
"Sending command to device: %s", (
char *) command_buffer);
422 this->
write(command_buffer, command_buffer_length);