#include "QueueLib.h" #include "Wifi_ADI.h" #include "FS.h" #include "SD.h" int wifinum = 0; int lastwifinum = 10; int wifi_counter = 0; int wifiRSSI = -40; String Str; String wifistr; int scanrequest = 0; const char *WiFiErr[] = {"WL_IDLE_STATUS", "WL_NO_SSID_AVAIL", "WL_SCAN_COMPLETED", "WL_CONNECTED", "WL_CONNECT_FAILED", "WL_CONNECTION_LOST", "WL_DISCONNECTED"}; WiFiClient client; IPAddress ipp; #define WIFIRESPONSELIMIT 600 // AT100 Upload // const char* host = "at.automationtec.net"; const char *host = "automationtec.net"; const char *ftphost = "appdig.com"; // const char* faulthost = "appdig.com"; const char *faulthost = "faults.appdig.com"; const int httpPort = 80; int ssidCount = 0; char cstr[1500]; int replyindx = 0; int getHttpsBin = 0; int uploadparmftpbin = 0; int uploadlogftpbin = 0; int uploadParmHttpsBin = 3; int uploadRemoteParmHttps = 0; char tmpstrW[80]; String WiFiStr; int wifiForward = 0; // file File file; File file2 = SD.open("/PARMS.ADI"); //******************************************************* // //******************************************************* void UpdateLogFTP(void) { uploadlogftpbin = 1; } void UpdateParmHTTPs(void) { uploadParmHttpsBin = 1; } void UpdateRemoteParmFTP(void) { char tempbuff[128]; String Str; Str = String(remoteParmFetchSerial) + String(".PRM"); Str.toCharArray(tempbuff, 127); // SD_RemoteParmWrite(tempbuff); //SD_RemoteParmWrite("/TEMP.PRM"); uploadRemoteParmHttps = 1; } //******************************************************* // //******************************************************* void UpdateParmFTP(void) { uploadparmftpbin = 1; } //******************************************************* // //******************************************************* int32_t getWifiRSSI(void) { // return(-87); return (wifiRSSI); } //******************************************************* // //******************************************************* void beginOTA(void) { displayText("OTA Update Begin"); // kickDog(); getHttpsBin = 1; delay(2000); } //******************************************************* // //******************************************************* void requestScan(void) { scanrequest = 1; } //******************************************************* // //******************************************************* void initWiFi(void) { // Serial.println("Reading WiFi Credentials"); // SD_FileRead(reinterpret_cast(ssid), "/SS.ADI", sizeof(ssid)); //Read OK // SD_FileRead(reinterpret_cast(pass), "/PA.ADI", sizeof(pass)); //Read OK Serial.println("WiFi Config"); } //******************************************************* // //******************************************************* uint16_t numberNetworks(void) { return (ssidCount); } //******************************************************* // //******************************************************* void wifiService(void) { int i; uint32_t ep; char tmpstr[64]; byte tmpbyte[10]; if (lastwifinum != wifinum) { Serial.print("Wifi Case: "); Serial.println(wifinum); lastwifinum = wifinum; } // if(scanrequest == 1) wifinum = 0; WiFiStr = String(ssid); if (WiFiStr.length() == 0) ssid[0] = 'S'; if (Timers[WIFITIMEOUT] > 1200) // { wifinum = 999; // qualifyFault(5); } /* //fixed SS PA on Renlita if (scanrequest != 0) { wifinum = 30; scanrequest = 0; //if (VB) Serial.println("~ScanRequest WiFi"); //kickDog(); } */ /* if (VB) if (onesecondflag) { Serial.print("\nWIFI SWITCH: "); Serial.print(String(wifinum)); Serial.print(" / "); Serial.print(String(Timers[WIFIRESPONSETIMER])); Serial.print(" / "); Serial.println(String(replyindx)); } */ switch (wifinum) { case 0: // idle // digitalWrite(LED3, LOW); Timers[WIFITIMEOUT] = 1; // start/reset it if (getHttpsBin == 1) { wifinum = 1; wifiForward = 70; getHttpsBin = 0; Serial.println("~Get Https Bin"); displayText("Downloading Bin...."); // kickDog(); break; } if (uploadParmHttpsBin > 0) { wifinum = 1; wifiForward = 72; Serial.println("~Upload parms"); displayText("Uploading Parms..."); // kickDog(); break; } if (uploadRemoteParmHttps > 0) { wifinum = 1; wifiForward = 73; Serial.println("~Upload remote parms"); displayText("Uploading Remote Parms"); break; } if (atQ_size() != 0) { wifinum = 1; wifiForward = 20; Serial.println("~AT200Upload"); break; } if (faultQ_size() != 0) { wifinum = 1; wifiForward = 19; Serial.println("~Fault Upload"); break; } break; case 1: // Wifi Setup if (WiFi.status() == WL_CONNECTED) { Serial.println("WiFi Still connected"); wifiRSSI = WiFi.RSSI(); wifinum = wifiForward; } else // not connected { // We start by connecting to a WiFi network Serial.printf("Connecting to %s, %s\n", ssid, pass); WiFi.mode(WIFI_STA); delay(500); WiFi.begin(ssid, pass); wifi_counter = 0; wifinum++; } break; case 2: if (WiFi.status() != WL_CONNECTED) { if (++wifi_counter > 200) { // delay(10); sprintf(tmpstr, "WiFi ERR: %s\n", WiFiErr[WiFi.status()]); Serial.print(tmpstr); displayText(tmpstr); WiFi.disconnect(); delay(500); WiFi.begin(ssid, pass); delay(500); wifinum = 0; } } else { // wifinum++; Serial.println("WiFi connected"); displayText("WiFi connected"); ipp = WiFi.localIP(); sprintf(tmpstr, "IP: %d.%d.%d.%d", ipp[0], ipp[1], ipp[2], ipp[3]); Serial.println(tmpstr); WiFi.macAddress(tmpbyte); sprintf(tmpstr, "MAC: %02X:%02X:%02X:%02X:%0X:%02X", tmpbyte[5], tmpbyte[4], tmpbyte[3], tmpbyte[2], tmpbyte[1], tmpbyte[0]); Serial.println(tmpstr); wifiRSSI = WiFi.RSSI(); wifinum = wifiForward; } break; case 30: // Set WiFi to station mode and disconnect from an AP if it was previously connected // displayTextAttributes(0, 4, 0, 1, 1, tCADETBLUE, tBLACK); ipp = WiFi.localIP(); sprintf(tmpstr, "IP: %d.%d.%d.%d", ipp[0], ipp[1], ipp[2], ipp[3]); // displayText(510, 300, String(tmpstr)); WiFi.macAddress(tmpbyte); sprintf(tmpstr, "MAC: %02X:%02X:%02X:%02X:%0X:%02X", tmpbyte[5], tmpbyte[4], tmpbyte[3], tmpbyte[2], tmpbyte[1], tmpbyte[0]); // displayText(510, 325, String(tmpstr)); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Wifi Setup done"); wifinum++; break; case 31: // Scan Serial.println("AP scan start"); // displayTextAttributes(1, 4, 0, 2, 2, tGRAY, tAQUA); // displayText(145, 220, "Scanning"); // WiFi.scanNetworks will return the number of networks found // kickDog(); ssidCount = WiFi.scanNetworks(); // kickDog(); wifinum++; // displayText(145, 220, " "); Serial.println("AP scan done"); if (ssidCount == 0) { Serial.println("no networks found"); } else { Serial.print(ssidCount); Serial.println(" networks found"); Serial.println(" "); if (ssidCount > 6) ssidCount = 6; // only show the strongest 6 // scanrequest = n; for (i = 0; i < ssidCount; ++i) { // Print SSID and RSSI for each network found WiFiStr = String(i); WiFiStr += ": "; WiFiStr += String(WiFi.SSID(i)); WiFiStr += " ("; WiFiStr += String(WiFi.RSSI(i)); WiFiStr += ")"; if (WiFi.encryptionType(i) == WIFI_AUTH_OPEN) WiFiStr += " $"; WiFiStr += '\n'; Serial.println(WiFiStr); // displayTextAttributes(0, 4, 0, 1, 1, tCADETBLUE, tBLACK); // displayText(110, (i * 50) + 100, WiFiStr); } // displayTextAttributes(0, 4, 0, 1, 1, tCADETBLUE, tBLACK); // displayText(528, 100, ssid);* // displayText(528, 150, pass); } Serial.println(""); // wifinum = 0; break; case 32: // wait here for display to update break; case 19: // digitalWrite(LED3, HIGH); wifiForward = 19; wifinum = 21; clearbuffer(); Timers[WIFIRESPONSETIMER] = 0; faultQ_pull(); sendFaultpacket(); Serial.println(); break; case 20: wifiForward = 20; // digitalWrite(LED3, HIGH); wifinum = 21; Timers[WIFIRESPONSETIMER] = 0; // v980 // atQ_pull(); // sendAT100packet(); sendMultiDataString(); break; case 21: VB = 1; Serial.println("Looking for cloud response.."); while (client.available()) { cstr[replyindx++] = client.read(); // Serial.print(cstr[replyindx-1]); if (replyindx > 500) break; } Str = String(cstr); // Check for errors if ( (Timers[WIFIRESPONSETIMER] > WIFIRESPONSELIMIT) || (Str.indexOf("Too many connections") > 0)) { if (VB) Serial.println('\n'); if (VB) Serial.println(Str); if (VB) Serial.print(" ** ** ** ** ** Response Time: "); if (VB) Serial.println(String(Timers[WIFIRESPONSETIMER])); Timers[WIFIRESPONSETIMER] = -1; wifinum = 999; } // Check for good response if ( (Str.indexOf("BOOGYDAT") > 0) || (Str.indexOf("success") > 0)) { wifinum = 22; displayText("Uploading Finished"); if (VB) Serial.println('\n'); if (VB) Serial.println(Str); if (VB) Serial.print(" ** ** ** ** ** Response Time: "); if (VB) Serial.println(String(Timers[WIFIRESPONSETIMER])); Timers[WIFIRESPONSETIMER] = -1; } if (Str.indexOf("gimmedaparms") > 0) { UpdateParmFTP(); } if (Str.indexOf("gimmedalog") > 0) { UpdateLogFTP(); } // Check for OTA if (Str.indexOf("gimmedatupdate") > 0) { beginOTA(); } // Master Reset if (Str.indexOf("gimmeMasterReset") > 0) { displayText("Master Reset"); tone(HEARTBEATLED, 100, 500); // set wdog timeout to 2 sec delay(5000); displayText("WDT FAILED!!!!"); delay(2000); ESP.restart(); } char *ptr; // Check for Time Update if (Str.indexOf("BOOGYTIME") > 0) { ptr = strstr(cstr, "BOOGYTIME"); if (ptr) { // Move the pointer 9 positions forward to skip the "BOOGYTIME" prefix ptr += 9; // Convert the remaining characters to an unsigned long unsigned long tempEpoch = strtoul(ptr, NULL, 10); // Update the RTC with the new Unix timestamp (tempEpoch) setEpochRtc(tempEpoch); wifinum = 0; } } // Check for command command4U+12345,2255,954123,22***** long cmndarray[6]; for (i = 0; i < 6; i++) cmndarray[i] = 0; ptr = strstr(cstr, "command4U+"); if (ptr) { for (i = 0; i < 10; i++) ptr++; if (VB) { Serial.print("Start Char"); Serial.println(*ptr); } parse_commands(ptr, cmndarray); if (cmndarray[0] == 6) { if (cmndarray[1] < PARMSIZE) { parms.write(cmndarray[1], cmndarray[2]); } } /* if (cmndarray[0] == 7) { if(cmndarray[1] <= parm[21]) { motorArray[ (cmndarray[1]) ][0] = cmndarray[2]; Serial.println("Remote Command :"); } } */ //***command 6 if (cmndarray[0] == 6) { if (cmndarray[1] < PARMSIZE) { if (cmndarray[1] != 64) // can't write serial remotely { parm[cmndarray[1]] = cmndarray[2]; SD_ParmWrite(1); } } } //***command 116 // command4U+116,sssssss,pp,dd***** // rf parm write if (cmndarray[0] == 116) // rf Parm write { extParmsWrite[0] = 116; extParmsWrite[1] = cmndarray[1]; // serial # extParmsWrite[2] = cmndarray[2]; // parm# extParmsWrite[3] = cmndarray[3]; // data cmndarray[0] = 0; Serial.printf("Sending %d to parm %d in %d", cmndarray[3], cmndarray[2], cmndarray[1]); } //***command 105 if (cmndarray[0] == 105) // rf Parm fetch { remoteParmFetchSerial = cmndarray[1]; // serial # remoteParmNum = 0; parmRetryCounter = -1; remoteParmLast = -1; remoteParmCounter = -1; cmndarray[0] = 0; cmndarray[1] = 0; memset(remoteParm, 0, sizeof(remoteParm)); Timers[PARMFETCHTIMER] = 1; sprintf(tmpstrW, "Begin Parm Fetch from %d", remoteParmFetchSerial); Serial.println(tmpstrW); } // extParmRFWrite(248, 5154155, 65000, 52); // extParmRFWrite(248, extParmsWrite[1], extParmsWrite[2], extParmsWrite[3]); if (VB) for (i = 0; i < 4; i++) { Serial.print(cmndarray[i]); Serial.println("---"); } // process commands here } ptr = strstr(cstr, "gimmedaparms"); if (ptr) UpdateParmHTTPs(); if (replyindx > 500) wifinum = 999; VB = 0; break; case 22: wifinum = 0; clearbuffer(); // digitalWrite(LED3, LOW); if (wifiForward == 20) if (atQ_size() != 0) // some more to send? if (WiFi.status() == WL_CONNECTED) // still connected? { wifinum = wifiForward; // if (VB) Serial.print("..more AT to send: "); Serial.println(atQ_size()); } if (wifiForward == 19) if (faultQ_size() != 0) // some more to send? if (WiFi.status() == WL_CONNECTED) // still connected? { wifinum = wifiForward; if (VB) Serial.println("..more FLT to send"); } // if (VB) if (wifinum == 0) { displayText("Upload Finished"); Serial.println("queue is empty"); } break; case 70: // Go back to idle if an error occurs Serial.println("We made it to case 70"); wifinum = 0; // Set up the file where the bin will be stored file = fileLibSD.open(UPDATE_BIN, FILE_WRITE); if (!file) { Serial.println("Failed to open file for update"); break; } if (!https.connect(HTTPS_HOST)) { Serial.printf("Could not connect to server: %s", HTTPS_HOST); break; } // optional callback to track download progress https.setProgressCallback(drawLoadingBar); // set the bin source and target destination https.setTarget(BIN_SOURCE, file); //https.setCustomHeader(AUTH_HEADER); delay(2000); // if we make it here go to the download state wifinum = 71; break; case 71: https.advanceStateMachine(); delay(2000); Serial.println("MadeItToDownloadPhase"); if (https.isErrorOccurred()) { Serial.println("Error occurred during download."); wifinum = 0; break; } else if (https.isResponseComplete()) { Serial.println("Download complete."); delay(2000); updateFromFS(); wifinum = 0; break; } break; case 72: wifinum = 0; https.setCustomHeader(AUTH_HEADER); file2 = fileLibSD.open("/PARMS.ADI", FILE_READ); if (!file2) { Serial.println("Failed to open file"); break; } if (!https.connect(HTTPS_HOST)) { Serial.println("Could not connect to server."); break; } Str = String(parm[64]) + String(".PRM"); Serial.println("Uploading"); if (!https.uploadFile(UPLOAD_PARMS_DEST, file2, Str)) { Serial.println("Could not upload parms."); } else { Serial.println(("PARM HTTPS OK............................................")); delay(100); displayText("...Parms Upload OK"); uploadParmHttpsBin = 0; } uploadParmHttpsBin = 0; break; case 73: Str = "/httpdocs/aQParms/" + String(remoteParmFetchSerial) + String(".PRM"); //Str.toCharArray(tempbuff, 127); char tempbuff1[128]; Str = String(remoteParmFetchSerial) + String(".PRM"); Str.toCharArray(tempbuff1, 127); // open temp file file2 = SD.open("/TEMP.PRM", FILE_READ); if (!file2) { Serial.println("Failed to open file"); if (uploadParmHttpsBin > 0) uploadParmHttpsBin--; // try again break; } if (!https.connect(HTTPS_HOST)) { Serial.println("Could not connect to server."); break; } Str = String(remoteParmFetchSerial) + String(".PRM"); if (!https.uploadFile(UPLOAD_PARMS_DEST, file2, Str)) { Serial.println("Could not upload parms."); } else { Serial.println(("PARM FTP OK")); delay(100); displayText("...Parms Upload OK"); remoteParmFetchSerial = 0; uploadRemoteParmHttps = 1; } wifinum = 0; break; case 999: // timeout.. reset everything // digitalWrite(LED3, LOW); Timers[WIFITIMEOUT] = 0; clearbuffer(); wifinum = 1000; client.stop(); WiFi.disconnect(); delay(600); break; case 1000: wifinum = 0; break; default: wifinum = 0; // just in case break; } } // wifi service //******************************************************* // //******************************************************* void sendAT100packet(void) { int j; int i; clearbuffer(); if (VB) Serial.println(); if (VB) Serial.println("sending AT100 packet"); // connect if (!client.connect(host, httpPort)) { Serial.println("Wifi connection failed"); return; } // build it // String wifistr = String(""); wifistr = String(""); wifistr += String(at_QTempData.serial); wifistr += String(""); wifistr += String((at_QTempData.data / 10)); // data sent in x.x format wifistr += String('.'); wifistr += String((at_QTempData.data % 10)); wifistr += String(""); wifistr += String(at_QTempData.type); wifistr += String(""); wifistr += String(at_QTempData.stat); wifistr += String(""); wifistr += String(at_QTempData.ver); wifistr += String(""); wifistr += String(at_QTempData.rssi); wifistr += String(""); if (VB) Serial.println(String(WiFi.macAddress())); Str = String(WiFi.macAddress()); for (j = 0; j < 5; j++) { i = Str.indexOf(':'); Str.remove(i, 1); } wifistr += Str; wifistr += String(""); wifistr += String(""); wifistr += String(at_QTempData.chan); wifistr += String(""); wifistr += String(""); wifistr += String(at_QTempData.batt); wifistr += String(""); wifistr += String(""); wifistr += String(at_QTempData.etime); wifistr += "BOOGYDAT"; wifistr += ""; wifistr += String(parm[7]); wifistr += "\r\n\r\n "; // Serial.println(String(wifistr)); Serial.println(wifistr); // send it // client.print(String("POST / HTTP/1.1\r\nContent-Type: text/xml\r\nHost:at.automationtec.net\r\nContent-Length:")); client.print(String("POST /AutoTecSQL/ HTTP/1.1\r\nContent-Type: text/xml\r\nHost:automationtec.net\r\nContent-Length:")); i = wifistr.length(); client.print(String(i)); client.print(String("\r\nConnection: close\r\n\r\n")); client.print(wifistr); if (VB) Serial.println(String(wifistr)); // get reply // delay(600); if (VB) Serial.println("\n*******************Reply: "); if (VB) Serial.println(String(cstr)); if (VB) Serial.println(); } void sendMultiDataString(void) // v981 { String multiDataString; int count = 0; String Str7; int i, j; clearbuffer(); Serial.println(); Serial.println("sending new AT100 packets"); // connect if (!client.connect(host, httpPort)) { displayText("Wifi failed"); return; } if (atQ_size() > 0) // we have data { displayText("Uploading AT Data"); multiDataString = ""; multiDataString += ""; multiDataString += String(parm[64]); multiDataString += ""; multiDataString += ""; multiDataString += String(parm[14]); multiDataString += ""; multiDataString += ""; multiDataString += String(0); multiDataString += ""; multiDataString += ""; multiDataString += String(getWifiRSSI()); multiDataString += ""; multiDataString += ""; Str7 = String(WiFi.macAddress()); for (j = 0; j < 5; j++) { i = Str7.indexOf(':'); Str7.remove(i, 1); } multiDataString += Str7; multiDataString += String(""); multiDataString += ""; multiDataString += String(parm[7]); multiDataString += ""; multiDataString += "BOOGYDAT"; multiDataString += ""; while (atQ_size() > 0) { atQ_pull_FIFO(); // atQ_pullLIFO();//v528 multiDataString += ""; multiDataString += ""; multiDataString += String(at_QTempData.chan); multiDataString += ""; multiDataString += String(at_QTempData.type); multiDataString += ""; // v510 multiDataString += String((at_QTempData.data / 10)); // data sent in x.x format multiDataString += String('.'); multiDataString += String((at_QTempData.data % 10)); // multiDataString += String(at_QTempData.data); multiDataString += ""; multiDataString += String(at_QTempData.etime); multiDataString += ""; multiDataString += ""; // <-- Added v533 multiDataString += String(parm[14]); // <-- Added multiDataString += ""; // <-- Added multiDataString += ""; // Serial.println(multiDataString); if (++count > 6) break; } multiDataString += ""; multiDataString += "\r\n\r\n "; client.print(String("POST /AutoTecSQL/atecUpload.php HTTP/1.1\r\nContent-Type: text/xml\r\nHost:automationtec.net\r\nContent-Length:")); // new url // client.print(String("POST /AutoTecSQL/ HTTP/1.1\r\nContent-Type: text/xml\r\nHost:automationtec.net\r\nContent-Length:")); client.print(String(multiDataString.length())); client.print(String("\r\nConnection: close\r\n\r\n")); client.print(multiDataString); Serial.print(" Pull: "); Serial.print(multiDataString.length()); Serial.print(" "); Serial.println(multiDataString); // delay(1000);//v980 } } /* void sendAT100packetA(void) { int j; int i; clearbuffer(); if (VB)Serial.println(); if (VB)Serial.println("sending AT100 packet"); //connect if (!client.connect(host, httpPort)) { Serial.println("Wifi connection failed"); return; } //build it //String wifistr = String(""); wifistr = String(""); wifistr += String(at_QTempData.serial); wifistr += String(""); wifistr += String((at_QTempData.data / 10)); //data sent in x.x format wifistr += String('.'); wifistr += String((at_QTempData.data % 10)); wifistr += String(""); wifistr += String(at_QTempData.type); wifistr += String(""); wifistr += String(at_QTempData.stat); wifistr += String(""); wifistr += String(at_QTempData.ver); wifistr += String(""); wifistr += String(at_QTempData.rssi); wifistr += String(""); if (VB)Serial.println(String(WiFi.macAddress())); Str = String(WiFi.macAddress()); for (j = 0; j < 5; j++) { i = Str.indexOf(':'); Str.remove(i, 1); } wifistr += Str; wifistr += String(""); wifistr += String(at_QTempData.etime); wifistr += "BOOGYDAT"; wifistr += ""; wifistr += String(parm[7]); wifistr += "\r\n\r\n "; //Serial.println(String(wifistr)); // send it //client.print(String("POST / HTTP/1.1\r\nContent-Type: text/xml\r\nHost:at.automationtec.net\r\nContent-Length:")); client.print(String("POST /AutoTecSQL/ HTTP/1.1\r\nContent-Type: text/xml\r\nHost:automationtec.net\r\nContent-Length:")); i = wifistr.length(); client.print(String(i)); client.print(String("\r\nConnection: close\r\n\r\n")); client.print(wifistr); if (VB)Serial.println(String(wifistr)); // get reply //delay(600); if (VB)Serial.println("\n*******************Reply: "); if (VB)Serial.println(String(cstr)); if (VB)Serial.println(); } */ //******************************************************* // //******************************************************* void sendFaultpacket(void) { int j; int i; Serial.println(); Serial.println("sending Fault packet"); clearbuffer(); // connect if (!client.connect(faulthost, httpPort)) { Serial.println("Wifi connection failed"); return; } // build it // wifistr = String(""); wifistr = String(""); wifistr += String(parm[64]); // serial number wifistr += String(","); wifistr += String(fault_Qtempdata.faultnum); // fault wifistr += String(','); for (i = 0; i < 6; i++) { wifistr += String(fault_Qtempdata.data[i]); wifistr += String(','); } wifistr += String(fault_Qtempdata.etime); wifistr += String("\r\n\r\n"); // if(VB)Serial.println(String(WiFi.macAddress())); // send it // client.print(String("POST /faults/ HTTP/1.1\r\nContent-Type: text/xml\r\nHost:faults.appdig.com\r\nContent-Length:")); client.print(String("POST /faults HTTP/1.1\r\nContent-Type: text/xml\r\nHost:www.faults.appdig.com\r\nContent-Length:")); i = wifistr.length(); client.print(String(i)); client.print(String("\r\nConnection: close\r\n\r\n")); client.print(wifistr); // if (VB) Serial.println(wifistr); // get reply // delay(700); if (VB) Serial.println("\n*******************Reply: "); if (VB) Serial.println(String(cstr)); if (VB) Serial.println(); } /*void sendFaultpacket(void) { int j; int i; Serial.println(); Serial.println("sending Fault packet"); clearbuffer(); //connect if (!client.connect(faulthost, httpPort)) { Serial.println("Wifi connection failed"); return; } //build it // wifistr = String(""); wifistr = String(""); wifistr += String(parm[64]); wifistr += String(","); wifistr += String(fault_Qtempdata.faultnum); wifistr += String(','); wifistr += String("0,0,0,0,0,0,"); wifistr += String(fault_Qtempdata.etime); wifistr += String(','); wifistr += String(parm[7]); wifistr += String("\r\n\r\n"); //if(VB)Serial.println(String(WiFi.macAddress())); // send it client.print(String("POST /UltimoControls/RusticaNet/upload.php HTTP/1.1\r\nContent-Type: text/xml\r\nHost:www.appdig.com\r\nContent-Length:")); i = wifistr.length(); client.print(String(i)); client.print(String("\r\nConnection: close\r\n\r\n")); client.print(wifistr); if (VB)Serial.println(wifistr); // get reply //delay(700); if (VB)Serial.println("\n*******************Reply: "); if (VB)Serial.println(String(cstr)); if (VB)Serial.println(); } */ //******************************************************* // //******************************************************* void clearbuffer(void) { // int i; // for (i = 0; i < sizeof(cstr); cstr[i++] = 0); memset(cstr, 0, sizeof(cstr)); replyindx = 0; } void parse_commands(char *indata, long *cmnds) // points to next char { int i, j, minus = 0; for (i = 0; i < 4; i++) { j = 0; if (*indata == 45) // minus sign { indata++; minus = 1; } for (*cmnds = 0; isDigit(*indata);) // get the digits { *cmnds *= 10; *cmnds += (*indata - 48); indata++; if (j++ > 7) break; if (*indata == '*') break; } if (minus) *cmnds *= -1; cmnds++; indata++; if (*indata == '*') break; } } // Function that gets current epoch time //new ntp unsigned long getTime() { time_t now; struct tm timeinfo; if (!getLocalTime(&timeinfo)) { displayText("Failed to obtain time"); return (0); } time(&now); return now; }