From 0c65f53abcc340fc72efb4884f28c081dcbba242 Mon Sep 17 00:00:00 2001 From: fredlcore Date: Mon, 27 Feb 2017 23:56:08 +0100 Subject: [PATCH] Add files via upload --- BSB_lan/BSB_lan/BSB_lan.ino | 104 ++++++++++++++++++++++++++++--- BSB_lan/BSB_lan/BSB_lan_config.h | 19 ++++-- BSB_lan/BSB_lan/BSB_lan_defs.h | 86 ++++++++++++++----------- 3 files changed, 162 insertions(+), 47 deletions(-) diff --git a/BSB_lan/BSB_lan/BSB_lan.ino b/BSB_lan/BSB_lan/BSB_lan.ino index a6ff0c03..453c4999 100644 --- a/BSB_lan/BSB_lan/BSB_lan.ino +++ b/BSB_lan/BSB_lan/BSB_lan.ino @@ -34,8 +34,12 @@ * 0.23 - 12.02.2017 * 0.24 - 14.02.2017 * 0.25 - 21.02.2017 + * 0.26 - 27.02.2017 * * Changelog: + * version 0.26 + * - added functionality for logging on micro SD card, using the slot of the w5100 Ethernet shield + * - more parameters added (e.g. 8009) * version 0.25 * - more FUJITSU parameters added * version 0.24 @@ -146,6 +150,11 @@ EthernetClient client; +#ifdef LOGGER + #include + File Logfile; +#endif + #ifdef ONE_WIRE_BUS #include "OneWire.h" #include @@ -164,7 +173,9 @@ EthernetClient client; dht DHT; #endif -static unsigned long nextAvgTime = millis(); +static unsigned long lastAvgTime = millis(); +static unsigned long lastLogTime = millis(); +static unsigned long oldmillis = millis(); int numAverages = sizeof(avg_parameters) / sizeof(int); double *avgValues = new double[numAverages]; double *avgValues_Old = new double[numAverages]; @@ -1377,6 +1388,10 @@ void webPrintSite() { #ifdef USE_BROADCAST client.print(F(" /B query accumulated duration of burner on status captured from broadcast messages")); client.print(F(" /B0 reset accumulated duration of burner on status captured from broadcast messages")); +#endif +#ifdef LOGGER + client.print(F(" /D dump logged data from datalog.txt on micro SD card")); + client.print(F(" /D0 delete datalog.txt on micro SD card")); #endif client.print(F(" ")); client.print(F(" multiple queries are possible, e.g. /K0/710/8000-8999/T

")); @@ -2045,12 +2060,12 @@ void Ipwe() { webPrintHeader(); int i; int counter = 0; - int numIPWESensors = sizeof(bsb_parameters) / sizeof(int); + int numIPWESensors = sizeof(ipwe_parameters) / sizeof(int); Serial.print("IPWE sensors: "); Serial.println(numIPWESensors); double ipwe_sensors[numIPWESensors]; for (i=0; i < numIPWESensors; i++) { - ipwe_sensors[i] = strtod(query(bsb_parameters[i],bsb_parameters[i],1),NULL); + ipwe_sensors[i] = strtod(query(ipwe_parameters[i],ipwe_parameters[i],1),NULL); } client.print(F("
")); @@ -2059,7 +2074,7 @@ void Ipwe() { client.print(F("")); @@ -2282,7 +2297,7 @@ void loop() { } // Answer to unknown requests - if(!isdigit(p[1]) && strchr("KSIREVMTBGHA",p[1])==NULL){ + if(!isdigit(p[1]) && strchr("KSIREVMTBGHAD",p[1])==NULL){ webPrintHeader(); webPrintFooter(); break; @@ -2454,6 +2469,34 @@ void loop() { webPrintFooter(); break; } + +#ifdef LOGGER + if(p[1]=='D'){ // access datalog file + if (p[2]=='0') { // remove datalog file + webPrintHeader(); + SD.remove("datalog.txt"); + client.println(F("datalog.txt removed")); + Serial.println(F("datalog.txt removed")); + webPrintFooter(); + } else { // dump datalog file + client.println(F("HTTP/1.1 200 OK")); + client.println(F("Content-Type: text/plain")); + client.println(); + File dataFile = SD.open("datalog.txt"); + // if the file is available, write to it: + if (dataFile) { + while (dataFile.available()) { + char c = dataFile.read(); + client.write(c); + Serial.write(c); + } + dataFile.close(); + } + } + break; + } +#endif + // print queries webPrintHeader(); char* range; @@ -2471,7 +2514,7 @@ void loop() { #ifdef DHT_BUS dht22(); #endif - }else if(range[0]=='A'){ // handle average command + }else if(range[0]=='A') { // handle average command for (int i=0; i")); client.print(avg_parameters[i]); @@ -2593,8 +2636,40 @@ void loop() { client.stop(); } // endif, client +#ifdef LOGGER + + if (millis() - lastLogTime >= (log_interval * 1000)) { + + int numLogValues = sizeof(log_parameters) / sizeof(int); + double log_values[numLogValues]; + for (int i=0; i < numLogValues; i++) { + log_values[i] = strtod(query(log_parameters[i],log_parameters[i],1),NULL); + } + File dataFile = SD.open("datalog.txt", FILE_WRITE); + + if (dataFile) { + for (int i=0; i < numLogValues; i++) { + dataFile.print(millis()); + dataFile.print(F(";")); + dataFile.print(log_parameters[i]); + dataFile.print(F(";")); + dataFile.print(lookup_descr(log_parameters[i])); + dataFile.print(F(";")); + dataFile.println(log_values[i]); + } + dataFile.close(); + // print to the serial port too: + } else { + // if the file isn't open, pop up an error: + client.println(F("error opening datalog.txt")); + Serial.println(F("error opening datalog.txt")); + } + lastLogTime += log_interval * 1000; + } +#endif + // Calculate 24h averages - if (nextAvgTime < millis()) { + if (millis() - lastAvgTime >= 60000) { if (avgCounter == 1441) { for (int i=0; i
SensortypAdresseBeschreibungTemperaturLuftfeuchtigkeitWindgeschwindigkeitRegenmenge
T
")); client.print(counter); client.print(F("
")); - client.print(lookup_descr(bsb_parameters[i])); + client.print(lookup_descr(ipwe_parameters[i])); client.print(F("
")); client.print(ipwe_sensors[i]); client.print(F("
0
0
0