From c5ba314c68667879f8d334f4fd08ac81bbd9a77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Sat, 15 Oct 2016 14:21:31 +0200 Subject: [PATCH] save measurements in databse once all received --- main.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 111 insertions(+), 16 deletions(-) diff --git a/main.c b/main.c index 6f49dcf..310d876 100644 --- a/main.c +++ b/main.c @@ -194,7 +194,7 @@ static bool http_post_header(char* host, uint16_t port, size_t length) fprintf(stderr,"TCP connection failed\n"); return false; } - if (!http_send((uint8_t*)"POST /write?db=test HTTP/1.1\r\n", 0)) { // send data + if (!http_send((uint8_t*)"POST /write?db=spark_abacus HTTP/1.1\r\n", 0)) { // send data return false; } if (snprintf(http_line, LENGTH(http_line), "Content-Length: %u\r\n", length)<0) { // set content length (for measurements) @@ -281,20 +281,6 @@ void main(void) } #endif - // send HTTP POST request - printf("making HTTP request: "); - char line[256] = {0}; // measurement line to send - if (snprintf(line, LENGTH(line), "cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000")<0) { - fprintf(stderr,"could not create line\n"); - } else if (!http_post_header("192.168.42.3", 8086, strlen(line))) { // send header - fprintf(stderr,"could not sent HTTP POST header\n"); - } else if (!http_send((uint8_t*)line, 0)) { // send data - fprintf(stderr,"could not send measurement\n"); - } else { - http_end(); // end HTTP request (don't care about the result) - printf("OK\n"); - } - // main loop printf("command input: ready\n"); bool action = false; // if an action has been performed don't go to sleep @@ -362,7 +348,7 @@ void main(void) printf("PZEM-004T meter %u current: %.02f A\n", pzem_meter, measurement.value.current); break; case SENSOR_PZEM_POWER: - printf("PZEM-004T meter %u power: %.00f W\n", pzem_meter, measurement.value.power); + printf("PZEM-004T meter %u power: %u W\n", pzem_meter, measurement.value.power); break; case SENSOR_PZEM_ENERGY: printf("PZEM-004T meter %u energy: %lu Wh\n", pzem_meter, measurement.value.energy); @@ -439,6 +425,115 @@ void main(void) printf("uptime: %02lu:%02lu:%02lu\n", ticks_time/(60*60), (ticks_time%(60*60))/60, (ticks_time%60)); // display external time } } + while (pzem_meter>=LENGTH(pzem_measurements) && sdm120_meter>=LENGTH(sdm120_measurements)) { // all measurements received for all meter + printf("saving measurements to database: "); + const char* pzem_strings[SENSOR_PZEM_MAX] = { + "voltage,meter=PZEM-004T,phase=%u value=%.1f\n", + "current,meter=PZEM-004T,phase=%u value=%.2f\n", + "power,meter=PZEM-004T,phase=%u value=%u\n", + "energy,meter=PZEM-004T,phase=%u value=%lu\n" + }; + const char* sdm120_strings[SENSOR_SDM120_MEASUREMENT_MAX] = { + "voltage,meter=SDM120,phase=%u value=%.3f\n", + "current,meter=SDM120,phase=%u value=%.3f\n", + "power,meter=SDM120,phase=%u,type=active value=%.3f\n", + "power,meter=SDM120,phase=%u,type=apparent value=%.3f\n", + "power,meter=SDM120,phase=%u,type=reactive value=%.3f\n", + "power,meter=SDM120,phase=%u,type=factor value=%.3f\n", + "frequency,meter=SDM120,phase=%u value=%.3f\n", + "energy,meter=SDM120,phase=%u,type=active,direction=import value=%.3f\n", + "energy,meter=SDM120,phase=%u,type=active,direction=export value=%.3f\n", + "energy,meter=SDM120,phase=%u,type=reactive,direction=import value=%.3f\n", + "energy,meter=SDM120,phase=%u,type=reactive,direction=export value=%.3f\n", + "energy,meter=SDM120,phase=%u,type=active,direction=total value=%.3f\n", + "energy,meter=SDM120,phase=%u,type=reactive,direction=total value=%.3f\n" + }; + + char line[256] = {0}; // measurement line to send + size_t data_length = 0; /**< length of the data string to send */ + for (pzem_meter = 0; pzem_meter0) { + http_send((uint8_t*)line, 0); // don't care about the result + } + } else { + if (snprintf(line, LENGTH(line), sdm120_strings[sdm120_measurement], sdm120_meter, sdm120_measurements[sdm120_meter][sdm120_measurement]*1000.0)>0) { + http_send((uint8_t*)line, 0); // don't care about the result + } + } + } + } + http_end(); // end HTTP request (don't care about the result) + printf("OK\n"); + } + + pzem_meter = 0; // reset meter + sdm120_meter = 0; // reset meter + + } if (action) { // go to sleep if nothing had to be done, else recheck for activity action = false; } else {