1263 lines
30 KiB
C++
1263 lines
30 KiB
C++
#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<uint8_t*>(ssid), "/SS.ADI", sizeof(ssid)); //Read OK
|
|
// SD_FileRead(reinterpret_cast<uint8_t*>(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("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><AT100><ATID>");
|
|
wifistr = String("<AT100><ATID>");
|
|
|
|
wifistr += String(at_QTempData.serial);
|
|
wifistr += String("</ATID><DATA>");
|
|
|
|
wifistr += String((at_QTempData.data / 10)); // data sent in x.x format
|
|
wifistr += String('.');
|
|
wifistr += String((at_QTempData.data % 10));
|
|
|
|
wifistr += String("</DATA><TYPE>");
|
|
wifistr += String(at_QTempData.type);
|
|
wifistr += String("</TYPE><STATE>");
|
|
wifistr += String(at_QTempData.stat);
|
|
wifistr += String("</STATE><VER>");
|
|
wifistr += String(at_QTempData.ver);
|
|
|
|
wifistr += String("</VER><RSSI>");
|
|
|
|
wifistr += String(at_QTempData.rssi);
|
|
|
|
wifistr += String("</RSSI><MAC>");
|
|
|
|
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("</MAC>");
|
|
|
|
wifistr += String("<CH>");
|
|
wifistr += String(at_QTempData.chan);
|
|
wifistr += String("</CH>");
|
|
|
|
wifistr += String("<BATT>");
|
|
wifistr += String(at_QTempData.batt);
|
|
wifistr += String("</BATT>");
|
|
|
|
wifistr += String("<ESTAMP>");
|
|
wifistr += String(at_QTempData.etime);
|
|
wifistr += "</ESTAMP><SYS>BOOGYDAT</SYS>";
|
|
wifistr += "<TZ>";
|
|
wifistr += String(parm[7]);
|
|
wifistr += "</TZ></AT100>\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 = "<ATEC>";
|
|
multiDataString += "<ID>";
|
|
multiDataString += String(parm[64]);
|
|
multiDataString += "</ID>";
|
|
multiDataString += "<V>";
|
|
multiDataString += String(parm[14]);
|
|
multiDataString += "</V>";
|
|
multiDataString += "<ST>";
|
|
multiDataString += String(0);
|
|
multiDataString += "</ST>";
|
|
multiDataString += "<R>";
|
|
multiDataString += String(getWifiRSSI());
|
|
multiDataString += "</R>";
|
|
|
|
multiDataString += "<M>";
|
|
Str7 = String(WiFi.macAddress());
|
|
|
|
for (j = 0; j < 5; j++)
|
|
{
|
|
i = Str7.indexOf(':');
|
|
Str7.remove(i, 1);
|
|
}
|
|
multiDataString += Str7;
|
|
multiDataString += String("</M>");
|
|
|
|
multiDataString += "<TZ>";
|
|
multiDataString += String(parm[7]);
|
|
multiDataString += "</TZ>";
|
|
multiDataString += "<SYS>BOOGYDAT</SYS>";
|
|
|
|
multiDataString += "<I>";
|
|
|
|
while (atQ_size() > 0)
|
|
{
|
|
atQ_pull_FIFO();
|
|
// atQ_pullLIFO();//v528
|
|
|
|
multiDataString += "<S>";
|
|
multiDataString += "<C>";
|
|
multiDataString += String(at_QTempData.chan);
|
|
multiDataString += "</C><T>";
|
|
multiDataString += String(at_QTempData.type);
|
|
multiDataString += "</T><D>";
|
|
// 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 += "</D><E>";
|
|
|
|
multiDataString += String(at_QTempData.etime);
|
|
multiDataString += "</E>";
|
|
|
|
multiDataString += "<SV>"; // <-- Added v533
|
|
multiDataString += String(parm[14]); // <-- Added
|
|
multiDataString += "</SV>"; // <-- Added
|
|
|
|
multiDataString += "</S>";
|
|
|
|
// Serial.println(multiDataString);
|
|
|
|
if (++count > 6)
|
|
break;
|
|
}
|
|
|
|
multiDataString += "</I>";
|
|
multiDataString += "</ATEC>\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("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><AT100><ATID>");
|
|
wifistr = String("<AT100><ATID>");
|
|
|
|
wifistr += String(at_QTempData.serial);
|
|
wifistr += String("</ATID><DATA>");
|
|
|
|
wifistr += String((at_QTempData.data / 10)); //data sent in x.x format
|
|
wifistr += String('.');
|
|
wifistr += String((at_QTempData.data % 10));
|
|
|
|
wifistr += String("</DATA><TYPE>");
|
|
wifistr += String(at_QTempData.type);
|
|
wifistr += String("</TYPE><STATE>");
|
|
wifistr += String(at_QTempData.stat);
|
|
wifistr += String("</STATE><VER>");
|
|
wifistr += String(at_QTempData.ver);
|
|
|
|
wifistr += String("</VER><RSSI>");
|
|
|
|
wifistr += String(at_QTempData.rssi);
|
|
|
|
wifistr += String("</RSSI><MAC>");
|
|
|
|
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("</MAC><ESTAMP>");
|
|
wifistr += String(at_QTempData.etime);
|
|
wifistr += "</ESTAMP><SYS>BOOGYDAT</SYS>";
|
|
wifistr += "<TZ>";
|
|
wifistr += String(parm[7]);
|
|
wifistr += "</TZ></AT100>\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("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><AFC><EM>");
|
|
wifistr = String("<APPDIG><DATA>");
|
|
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("</DATA></APPDIG>\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("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><AFC><EM>");
|
|
wifistr = String("<AFC><EM>");
|
|
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("</EM></AFC>\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;
|
|
}
|