emma controller code in production board v1

Dependencies:   ADE7758_v1 Crypto DHT11 MQTT MbedJSONValueEmma SDFileSystem TFT_ILI9341 SWSPI SetRTC TFT_fonts Touch W5500Interface mbed-rtos mbed-src SoftSerial

Fork of emma_controller_energy by Emma

Committer:
arsenalist
Date:
Wed Aug 26 07:18:33 2015 +0000
Revision:
44:c1d11c491237
Parent:
43:612547648ed1
Child:
45:2406c2b6995a
Working ETH in emmaModeReserved.; ETH in emmaModeOperation is not fully working.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arsenalist 0:f4e449fa34d7 1 #include "emmaCode.h"
arsenalist 0:f4e449fa34d7 2
arsenalist 0:f4e449fa34d7 3 //init debug port
arsenalist 0:f4e449fa34d7 4 Serial DBG(PA_9, PA_10); //tx, rx
arsenalist 0:f4e449fa34d7 5
arsenalist 0:f4e449fa34d7 6 //init wifi port
arsenalist 0:f4e449fa34d7 7 Serial _ESP(PA_2, PA_3); //tx, rx
arsenalist 8:51a0ca9079ca 8 //init espduino - without ch_pd pin
arsenalist 8:51a0ca9079ca 9 ESP esp(&_ESP, &DBG, ESP_BAUD);
arsenalist 0:f4e449fa34d7 10 //init wifi mqtt
arsenalist 27:562a95c120cc 11 //ESPMQTT mqtt(&esp);
arsenalist 0:f4e449fa34d7 12 //init wifi rest
arsenalist 0:f4e449fa34d7 13 REST rest(&esp);
arsenalist 0:f4e449fa34d7 14
arsenalist 0:f4e449fa34d7 15 //init eth port
arsenalist 0:f4e449fa34d7 16 SPI spi(PB_15, PB_14, PB_13); //mosi, miso, sck
arsenalist 44:c1d11c491237 17 EthernetInterface eth(&spi, PB_12, PC_6); //spi, cs, reset
arsenalist 44:c1d11c491237 18 //MQTTEthernet ipstack(&spi, PB_12, PC_6); //spi, cs, reset
arsenalist 37:93f196daf5cf 19 //MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack);
arsenalist 0:f4e449fa34d7 20
arsenalist 0:f4e449fa34d7 21 //init sd card
arsenalist 8:51a0ca9079ca 22 SDFileSystem sd(PA_7, PA_6, PA_5, PB_3, "sd"); //mosi, miso, sck, cs
arsenalist 0:f4e449fa34d7 23
arsenalist 8:51a0ca9079ca 24 //init ade7758 - without cs pin
arsenalist 14:8287f0f5d987 25 ADE7758 ADE(PB_6, PB_4, PB_5, PB_7); //mosi, miso, sck, irq
arsenalist 0:f4e449fa34d7 26
arsenalist 12:96f637ed37f9 27 //init tft lcd
arsenalist 12:96f637ed37f9 28 SPI_TFT_ILI9341 TFT(PA_7, PA_6, PA_5, PA_4, PC_5, PC_4,"TFT"); //mosi, miso, sclk, cs, reset, dc
arsenalist 12:96f637ed37f9 29 //init touch screen - without cs pin
arsenalist 12:96f637ed37f9 30 TouchScreenADS7843 TP(PB_10, PB_0, PB_1, PB_2, &TFT); //mosi, miso, sclk, irq, tft
arsenalist 12:96f637ed37f9 31
arsenalist 21:33bd8b82560f 32 //init dht sensor
arsenalist 21:33bd8b82560f 33 DHT11 d(PD_2);
arsenalist 21:33bd8b82560f 34
arsenalist 0:f4e449fa34d7 35 //emma settings
arsenalist 0:f4e449fa34d7 36 string emmaUID;
arsenalist 4:76ab12e2f8a3 37 string hmac;
arsenalist 38:e44f35f8129d 38 string appNAME;
arsenalist 38:e44f35f8129d 39 string mqttDOMAIN;
arsenalist 38:e44f35f8129d 40 string mqttKEY;
arsenalist 38:e44f35f8129d 41 string mqttSECRET;
arsenalist 38:e44f35f8129d 42 string mqttSERVER;
arsenalist 38:e44f35f8129d 43 string mqttPORT;
arsenalist 38:e44f35f8129d 44 string restSERVER;
arsenalist 38:e44f35f8129d 45 string restPORT;
arsenalist 0:f4e449fa34d7 46 string wifiSSID;
arsenalist 0:f4e449fa34d7 47 string wifiPASS;
arsenalist 0:f4e449fa34d7 48 string gprsAPN;
arsenalist 0:f4e449fa34d7 49 string proxySERVER;
arsenalist 0:f4e449fa34d7 50 string proxyPORT;
arsenalist 0:f4e449fa34d7 51 string proxyAUTH;
arsenalist 0:f4e449fa34d7 52
arsenalist 4:76ab12e2f8a3 53 //nodes settings
arsenalist 4:76ab12e2f8a3 54 class NODES {
arsenalist 4:76ab12e2f8a3 55 public:
arsenalist 4:76ab12e2f8a3 56 REST *restConn;
arsenalist 4:76ab12e2f8a3 57 NODES(REST *r);
arsenalist 40:77bd44f57ad3 58 int type;
arsenalist 4:76ab12e2f8a3 59 string macAddr;
arsenalist 4:76ab12e2f8a3 60 string ipAddr;
arsenalist 4:76ab12e2f8a3 61 };
arsenalist 4:76ab12e2f8a3 62 NODES::NODES(REST *r) {
arsenalist 4:76ab12e2f8a3 63 restConn = r;
arsenalist 4:76ab12e2f8a3 64 }
arsenalist 4:76ab12e2f8a3 65 REST restObj[NODES_MAX] = {REST(&esp),REST(&esp),REST(&esp),REST(&esp),REST(&esp)};
arsenalist 4:76ab12e2f8a3 66 NODES nodes[NODES_MAX] = {NODES(&restObj[0]),NODES(&restObj[1]),NODES(&restObj[2]),NODES(&restObj[3]),NODES(&restObj[4])};
arsenalist 4:76ab12e2f8a3 67
arsenalist 12:96f637ed37f9 68 //mode box class for main menu
arsenalist 12:96f637ed37f9 69 class modeBox {
arsenalist 12:96f637ed37f9 70 public:
arsenalist 12:96f637ed37f9 71 int xTL; //TopLeft
arsenalist 12:96f637ed37f9 72 int yTL;
arsenalist 12:96f637ed37f9 73 int xBR; //BottomRight
arsenalist 12:96f637ed37f9 74 int yBR;
arsenalist 29:4d94a03d38e0 75 string text;
arsenalist 29:4d94a03d38e0 76 string name;
arsenalist 12:96f637ed37f9 77 };
arsenalist 12:96f637ed37f9 78
arsenalist 0:f4e449fa34d7 79 //ade7758 variables
arsenalist 25:36c6a5db50ed 80 uint32_t AWattHrValue, BWattHrValue, CWattHrValue;
arsenalist 25:36c6a5db50ed 81 uint32_t AVAHrValue, BVAHrValue, CVAHrValue;
arsenalist 19:7e3e9332f719 82 uint32_t AWattHrSum = 0;
arsenalist 19:7e3e9332f719 83 uint32_t BWattHrSum = 0;
arsenalist 19:7e3e9332f719 84 uint32_t CWattHrSum = 0;
arsenalist 0:f4e449fa34d7 85 float AWattHr, BWattHr, CWattHr;
arsenalist 4:76ab12e2f8a3 86 float AVrms, BVrms, CVrms;
arsenalist 4:76ab12e2f8a3 87 float AIrms, BIrms, CIrms;
arsenalist 4:76ab12e2f8a3 88 float AWatt, BWatt, CWatt;
arsenalist 4:76ab12e2f8a3 89 float XWattHr,XVrms,XWatt;
arsenalist 0:f4e449fa34d7 90
arsenalist 0:f4e449fa34d7 91 //variables
arsenalist 0:f4e449fa34d7 92 bool ethAvailable = false;
arsenalist 0:f4e449fa34d7 93 bool wifiAvailable = false;
arsenalist 0:f4e449fa34d7 94 bool gprsAvailable = false;
arsenalist 0:f4e449fa34d7 95 bool ethConnected = false;
arsenalist 0:f4e449fa34d7 96 bool wifiConnected = false;
arsenalist 9:a58c04da4476 97 bool gprsConnected = false;
arsenalist 0:f4e449fa34d7 98 bool useProxy = false;
arsenalist 0:f4e449fa34d7 99 bool newCommand = false;
arsenalist 37:93f196daf5cf 100 bool espFreeMemory = true; //for after bootup
arsenalist 27:562a95c120cc 101 bool espDHCPClientStart = false;
arsenalist 22:e18d361bf688 102 bool newEnergyData = false;
arsenalist 0:f4e449fa34d7 103 string globalCommand;
arsenalist 4:76ab12e2f8a3 104 string rxBuf;
arsenalist 27:562a95c120cc 105 string rxLog;
arsenalist 27:562a95c120cc 106 string rxLogA;
arsenalist 0:f4e449fa34d7 107
arsenalist 12:96f637ed37f9 108 /*start lcd and touch*/
arsenalist 12:96f637ed37f9 109 int emmaModeSelection(void) {
arsenalist 12:96f637ed37f9 110 bool modeSelected = false;
arsenalist 12:96f637ed37f9 111 int md=0;
arsenalist 12:96f637ed37f9 112 int TPx;
arsenalist 12:96f637ed37f9 113 int TPy;
arsenalist 31:e2abded4d85f 114 Timer t;
arsenalist 12:96f637ed37f9 115
arsenalist 12:96f637ed37f9 116 TFT.background(Black);
arsenalist 12:96f637ed37f9 117 TFT.foreground(White);
arsenalist 12:96f637ed37f9 118
arsenalist 12:96f637ed37f9 119 TFT.set_font((unsigned char*) Arial12x12);
arsenalist 12:96f637ed37f9 120 TFT.set_orientation(1);
arsenalist 12:96f637ed37f9 121 TFT.cls();
arsenalist 12:96f637ed37f9 122 TFT.locate(0,0);
arsenalist 12:96f637ed37f9 123 TFT.printf("Hello, I'm Emma!");
arsenalist 13:e8adfe305dbc 124 wait(2);
arsenalist 12:96f637ed37f9 125 TFT.cls();
arsenalist 12:96f637ed37f9 126
arsenalist 12:96f637ed37f9 127 Matrix matrix;
arsenalist 12:96f637ed37f9 128 Coordinate ScreenSample[3];
arsenalist 12:96f637ed37f9 129
arsenalist 44:c1d11c491237 130 //lcd type 1
arsenalist 44:c1d11c491237 131 //matrix.An = 580;
arsenalist 44:c1d11c491237 132 //matrix.Bn = 75980;
arsenalist 44:c1d11c491237 133 //matrix.Cn = -3410580;
arsenalist 44:c1d11c491237 134 //matrix.Dn = 57855;
arsenalist 44:c1d11c491237 135 //matrix.En = -2465;
arsenalist 44:c1d11c491237 136 //matrix.Fn = -3483515;
arsenalist 44:c1d11c491237 137 //matrix.Divider = 209144;
arsenalist 44:c1d11c491237 138
arsenalist 44:c1d11c491237 139 //ScreenSample[0].x = 230;
arsenalist 44:c1d11c491237 140 //ScreenSample[0].y = 167;
arsenalist 44:c1d11c491237 141 //ScreenSample[1].x = 754;
arsenalist 44:c1d11c491237 142 //ScreenSample[1].y = 163;
arsenalist 44:c1d11c491237 143 //ScreenSample[2].x = 771;
arsenalist 44:c1d11c491237 144 //ScreenSample[2].y = 562;
arsenalist 12:96f637ed37f9 145
arsenalist 44:c1d11c491237 146 //lcd type 2
arsenalist 44:c1d11c491237 147 matrix.An = 1305;
arsenalist 44:c1d11c491237 148 matrix.Bn = -77430;
arsenalist 44:c1d11c491237 149 matrix.Cn = 75296670;
arsenalist 44:c1d11c491237 150 matrix.Dn = -57275;
arsenalist 44:c1d11c491237 151 matrix.En = -1160;
arsenalist 44:c1d11c491237 152 matrix.Fn = 55285220;
arsenalist 44:c1d11c491237 153 matrix.Divider = 211002;
arsenalist 44:c1d11c491237 154
arsenalist 44:c1d11c491237 155 ScreenSample[0].x = 782;
arsenalist 44:c1d11c491237 156 ScreenSample[0].y = 863;
arsenalist 44:c1d11c491237 157 ScreenSample[1].x = 248;
arsenalist 44:c1d11c491237 158 ScreenSample[1].y = 854;
arsenalist 44:c1d11c491237 159 ScreenSample[2].x = 256;
arsenalist 44:c1d11c491237 160 ScreenSample[2].y = 459;
arsenalist 12:96f637ed37f9 161
arsenalist 12:96f637ed37f9 162 TP.SetCalibration(&matrix, &ScreenSample[0]);
arsenalist 12:96f637ed37f9 163
arsenalist 12:96f637ed37f9 164 //draw border
arsenalist 12:96f637ed37f9 165 TFT.line(15,15,310,15,Orange);
arsenalist 12:96f637ed37f9 166 TFT.line(310,15,310,250,Orange);
arsenalist 12:96f637ed37f9 167 TFT.line(310,250,15,250,Orange);
arsenalist 12:96f637ed37f9 168 TFT.line(15,250,15,15,Orange);
arsenalist 12:96f637ed37f9 169
arsenalist 12:96f637ed37f9 170 //init main menu
arsenalist 12:96f637ed37f9 171 modeBox menu[6];
arsenalist 12:96f637ed37f9 172
arsenalist 12:96f637ed37f9 173 //wifi config mode
arsenalist 12:96f637ed37f9 174 menu[MODE_WIFI_CONFIG].xTL = 25;
arsenalist 12:96f637ed37f9 175 menu[MODE_WIFI_CONFIG].yTL = 25;
arsenalist 12:96f637ed37f9 176 menu[MODE_WIFI_CONFIG].xBR = 110;
arsenalist 12:96f637ed37f9 177 menu[MODE_WIFI_CONFIG].yBR = 90;
arsenalist 29:4d94a03d38e0 178 menu[MODE_WIFI_CONFIG].text = "1.wifi config";
arsenalist 29:4d94a03d38e0 179 menu[MODE_WIFI_CONFIG].name = "wifi config";
arsenalist 12:96f637ed37f9 180
arsenalist 12:96f637ed37f9 181 //setting mode
arsenalist 29:4d94a03d38e0 182 menu[MODE_SETTINGS].xTL = 25;
arsenalist 29:4d94a03d38e0 183 menu[MODE_SETTINGS].yTL = 100;
arsenalist 29:4d94a03d38e0 184 menu[MODE_SETTINGS].xBR = 110;
arsenalist 29:4d94a03d38e0 185 menu[MODE_SETTINGS].yBR = 165;
arsenalist 29:4d94a03d38e0 186 menu[MODE_SETTINGS].text = "2.settings ";
arsenalist 29:4d94a03d38e0 187 menu[MODE_SETTINGS].name = "settings";
arsenalist 12:96f637ed37f9 188
arsenalist 12:96f637ed37f9 189 //register mode
arsenalist 29:4d94a03d38e0 190 menu[MODE_REGISTER].xTL = 120;
arsenalist 29:4d94a03d38e0 191 menu[MODE_REGISTER].yTL = 25;
arsenalist 29:4d94a03d38e0 192 menu[MODE_REGISTER].xBR = 205;
arsenalist 29:4d94a03d38e0 193 menu[MODE_REGISTER].yBR = 90;
arsenalist 29:4d94a03d38e0 194 menu[MODE_REGISTER].text = "3.register ";
arsenalist 29:4d94a03d38e0 195 menu[MODE_REGISTER].name = "register";
arsenalist 12:96f637ed37f9 196
arsenalist 12:96f637ed37f9 197 //operational mode
arsenalist 12:96f637ed37f9 198 menu[MODE_OPERATION].xTL = 120;
arsenalist 12:96f637ed37f9 199 menu[MODE_OPERATION].yTL = 100;
arsenalist 12:96f637ed37f9 200 menu[MODE_OPERATION].xBR = 205;
arsenalist 12:96f637ed37f9 201 menu[MODE_OPERATION].yBR = 165;
arsenalist 29:4d94a03d38e0 202 menu[MODE_OPERATION].text = "4.operation ";
arsenalist 29:4d94a03d38e0 203 menu[MODE_OPERATION].name = "operation";
arsenalist 12:96f637ed37f9 204
arsenalist 12:96f637ed37f9 205 //firmware download mode
arsenalist 12:96f637ed37f9 206 menu[MODE_FIRMWARE_DOWNLOAD].xTL = 215;
arsenalist 12:96f637ed37f9 207 menu[MODE_FIRMWARE_DOWNLOAD].yTL = 25;
arsenalist 12:96f637ed37f9 208 menu[MODE_FIRMWARE_DOWNLOAD].xBR = 300;
arsenalist 12:96f637ed37f9 209 menu[MODE_FIRMWARE_DOWNLOAD].yBR = 90;
arsenalist 29:4d94a03d38e0 210 menu[MODE_FIRMWARE_DOWNLOAD].text = "5.fw dwld ";
arsenalist 29:4d94a03d38e0 211 menu[MODE_FIRMWARE_DOWNLOAD].name = "fw dwld";
arsenalist 12:96f637ed37f9 212
arsenalist 12:96f637ed37f9 213 //reserved mode
arsenalist 44:c1d11c491237 214 menu[MODE_RESERVED].xTL = 215;
arsenalist 44:c1d11c491237 215 menu[MODE_RESERVED].yTL = 100;
arsenalist 44:c1d11c491237 216 menu[MODE_RESERVED].xBR = 300;
arsenalist 44:c1d11c491237 217 menu[MODE_RESERVED].yBR = 165;
arsenalist 44:c1d11c491237 218 menu[MODE_RESERVED].text = "6.reserved ";
arsenalist 44:c1d11c491237 219 menu[MODE_RESERVED].name = "reserved";
arsenalist 12:96f637ed37f9 220
arsenalist 17:b3ced0e67916 221 //draw main menu
arsenalist 12:96f637ed37f9 222 for(int i=0; i<6; i++) {
arsenalist 12:96f637ed37f9 223 TFT.fillrect(menu[i].xTL,menu[i].yTL,menu[i].xBR,menu[i].yBR,Orange);
arsenalist 12:96f637ed37f9 224 }
arsenalist 12:96f637ed37f9 225
arsenalist 17:b3ced0e67916 226 //add text to main menu
arsenalist 17:b3ced0e67916 227 for(int i=0; i<6; i++) {
arsenalist 17:b3ced0e67916 228 TFT.locate(menu[i].xTL,menu[i].yTL);
arsenalist 31:e2abded4d85f 229 TFT.printf("%s",menu[i].text.c_str());
arsenalist 31:e2abded4d85f 230 }
arsenalist 31:e2abded4d85f 231
arsenalist 31:e2abded4d85f 232 //read emma settings
arsenalist 31:e2abded4d85f 233 emmaReadSettings();
arsenalist 31:e2abded4d85f 234
arsenalist 38:e44f35f8129d 235 //mqttDOMAIN is not empty -> has been registered
arsenalist 38:e44f35f8129d 236 if(!mqttDOMAIN.empty()) {
arsenalist 31:e2abded4d85f 237 TFT.locate(25,170);
arsenalist 31:e2abded4d85f 238 TFT.printf(" auto select enabled");
arsenalist 31:e2abded4d85f 239 t.start();
arsenalist 17:b3ced0e67916 240 }
arsenalist 17:b3ced0e67916 241
arsenalist 12:96f637ed37f9 242 while(!modeSelected) {
arsenalist 12:96f637ed37f9 243 if(!TP._tp_irq) {
arsenalist 12:96f637ed37f9 244 if(TP.Read_Ads7843()) {
arsenalist 12:96f637ed37f9 245 TP.getDisplayPoint();
arsenalist 12:96f637ed37f9 246 TPx = TP.display.x;
arsenalist 12:96f637ed37f9 247 TPy = TP.display.y;
arsenalist 12:96f637ed37f9 248 TP.TP_DrawPoint(TPx,TPy, Blue);
arsenalist 12:96f637ed37f9 249
arsenalist 12:96f637ed37f9 250 for(int i=0; i<6; i++) {
arsenalist 12:96f637ed37f9 251 if((menu[i].xTL < TPx && TPx < menu[i].xBR) && (menu[i].yTL < TPy && TPy < menu[i].yBR)) {
arsenalist 12:96f637ed37f9 252 md = i;
arsenalist 12:96f637ed37f9 253 modeSelected = true;
arsenalist 12:96f637ed37f9 254 }
arsenalist 12:96f637ed37f9 255 }
arsenalist 12:96f637ed37f9 256 }
arsenalist 31:e2abded4d85f 257 }
arsenalist 31:e2abded4d85f 258
arsenalist 31:e2abded4d85f 259 //auto select (to emmaModeOperation) after some times
arsenalist 38:e44f35f8129d 260 if(!mqttDOMAIN.empty()) {
arsenalist 31:e2abded4d85f 261 if(t.read()>20) {
arsenalist 31:e2abded4d85f 262 md = MODE_OPERATION;
arsenalist 31:e2abded4d85f 263 modeSelected = true;
arsenalist 31:e2abded4d85f 264 t.stop();
arsenalist 31:e2abded4d85f 265 t.reset();
arsenalist 31:e2abded4d85f 266 }
arsenalist 31:e2abded4d85f 267 }
arsenalist 31:e2abded4d85f 268
arsenalist 12:96f637ed37f9 269 }
arsenalist 12:96f637ed37f9 270
arsenalist 12:96f637ed37f9 271 TFT.locate(25,170);
arsenalist 12:96f637ed37f9 272 TFT.printf(" ");
arsenalist 12:96f637ed37f9 273 TFT.locate(25,170);
arsenalist 29:4d94a03d38e0 274 TFT.printf("mode: %s is selected",menu[md].name.c_str());
arsenalist 13:e8adfe305dbc 275 wait(2);
arsenalist 12:96f637ed37f9 276 TFT.cls();
arsenalist 12:96f637ed37f9 277
arsenalist 12:96f637ed37f9 278 return md;
arsenalist 12:96f637ed37f9 279 }
arsenalist 12:96f637ed37f9 280 /*end lcd and touch*/
arsenalist 12:96f637ed37f9 281
arsenalist 31:e2abded4d85f 282 /*start emma read settings*/
arsenalist 31:e2abded4d85f 283 void emmaReadSettings(void) {
arsenalist 4:76ab12e2f8a3 284 char s[64];
arsenalist 0:f4e449fa34d7 285 DBG.baud(19200);
arsenalist 31:e2abded4d85f 286 DBG.printf("\r\nemmaReadSettings\r\n");
arsenalist 0:f4e449fa34d7 287
arsenalist 0:f4e449fa34d7 288 //read settings
arsenalist 9:a58c04da4476 289 emmaUID = readSetting("emmaUID");
arsenalist 9:a58c04da4476 290 //emmaUID = "066eff575349896767073038";
arsenalist 0:f4e449fa34d7 291 DBG.printf("emmaUID:%s\r\n",emmaUID.c_str());
arsenalist 37:93f196daf5cf 292
arsenalist 4:76ab12e2f8a3 293 //calculate hmac
arsenalist 4:76ab12e2f8a3 294 for(int i=0; i<sizeof(s); i++) {
arsenalist 4:76ab12e2f8a3 295 s[i]=0; }
arsenalist 4:76ab12e2f8a3 296 sprintf(s,"emma-%s",emmaUID.c_str());
arsenalist 4:76ab12e2f8a3 297 hmac = calculateMD5(s);
arsenalist 4:76ab12e2f8a3 298 DBG.printf("hmac:%s\r\n",hmac.c_str());
arsenalist 37:93f196daf5cf 299
arsenalist 38:e44f35f8129d 300 appNAME = readSetting("appNAME");
arsenalist 38:e44f35f8129d 301 DBG.printf("appNAME:%s\r\n",appNAME.c_str());
arsenalist 38:e44f35f8129d 302
arsenalist 38:e44f35f8129d 303 mqttDOMAIN = readSetting("mqttDOMAIN");
arsenalist 38:e44f35f8129d 304 DBG.printf("mqttDOMAIN:%s\r\n",mqttDOMAIN.c_str());
arsenalist 38:e44f35f8129d 305 mqttKEY = readSetting("mqttKEY");
arsenalist 38:e44f35f8129d 306 DBG.printf("mqttKEY:%s\r\n",mqttKEY.c_str());
arsenalist 38:e44f35f8129d 307 mqttSECRET = readSetting("mqttSECRET");
arsenalist 38:e44f35f8129d 308 DBG.printf("mqttSECRET:%s\r\n",mqttSECRET.c_str());
arsenalist 38:e44f35f8129d 309 mqttSERVER = readSetting("mqttSERVER");
arsenalist 38:e44f35f8129d 310 DBG.printf("mqttSERVER:%s\r\n",mqttSERVER.c_str());
arsenalist 38:e44f35f8129d 311 mqttPORT = readSetting("mqttPORT");
arsenalist 38:e44f35f8129d 312 DBG.printf("mqttPORT:%s\r\n",mqttPORT.c_str());
arsenalist 38:e44f35f8129d 313
arsenalist 38:e44f35f8129d 314 restSERVER = readSetting("restSERVER");
arsenalist 38:e44f35f8129d 315 DBG.printf("restSERVER:%s\r\n",restSERVER.c_str());
arsenalist 38:e44f35f8129d 316 restPORT = readSetting("restPORT");
arsenalist 38:e44f35f8129d 317 DBG.printf("restPORT:%s\r\n",restPORT.c_str());
arsenalist 38:e44f35f8129d 318
arsenalist 9:a58c04da4476 319 proxySERVER = readSetting("proxySERVER");
arsenalist 0:f4e449fa34d7 320 DBG.printf("proxySERVER:%s\r\n",proxySERVER.c_str());
arsenalist 9:a58c04da4476 321 proxyPORT = readSetting("proxyPORT");
arsenalist 0:f4e449fa34d7 322 DBG.printf("proxyPORT:%s\r\n",proxyPORT.c_str());
arsenalist 9:a58c04da4476 323 proxyAUTH = readSetting("proxyAUTH");
arsenalist 0:f4e449fa34d7 324 DBG.printf("proxyAUTH:%s\r\n",proxyAUTH.c_str());
arsenalist 28:7561035e3df5 325 wifiSSID = readSetting("wifiSSID");
arsenalist 28:7561035e3df5 326 DBG.printf("wifiSSID:%s\r\n",wifiSSID.c_str());
arsenalist 28:7561035e3df5 327 wifiPASS = readSetting("wifiPASS");
arsenalist 28:7561035e3df5 328 DBG.printf("wifiPASS:%s\r\n",wifiPASS.c_str());
arsenalist 31:e2abded4d85f 329 }
arsenalist 31:e2abded4d85f 330 /*end emma read settings*/
arsenalist 31:e2abded4d85f 331
arsenalist 31:e2abded4d85f 332 /*start emma mode*/
arsenalist 31:e2abded4d85f 333 void emmaInit(int mode) {
arsenalist 31:e2abded4d85f 334 DBG.printf("\r\nemmaInit\r\n");
arsenalist 31:e2abded4d85f 335 DBG.printf("mode:%d\r\n",mode);
arsenalist 0:f4e449fa34d7 336
arsenalist 0:f4e449fa34d7 337 //check proxy
arsenalist 0:f4e449fa34d7 338 if(!proxySERVER.empty() && !proxyPORT.empty() && !proxyAUTH.empty()) {
arsenalist 0:f4e449fa34d7 339 useProxy = true;
arsenalist 0:f4e449fa34d7 340 } else {
arsenalist 0:f4e449fa34d7 341 useProxy = false;
arsenalist 0:f4e449fa34d7 342 }
arsenalist 0:f4e449fa34d7 343 //testing purpose
arsenalist 32:78633fb9b2a1 344 //useProxy = false;
arsenalist 0:f4e449fa34d7 345 DBG.printf("proxy:%d\r\n",useProxy);
arsenalist 0:f4e449fa34d7 346
arsenalist 8:51a0ca9079ca 347 //check available interface
arsenalist 8:51a0ca9079ca 348 isEthAvailable(); //check whether cable is connected
arsenalist 31:e2abded4d85f 349 wifiAvailable = true; //wifi module will always on the board
arsenalist 31:e2abded4d85f 350 gprsAvailable = true; //gprs module will always on the board
arsenalist 8:51a0ca9079ca 351 DBG.printf("eth:%d\r\n",ethAvailable);
arsenalist 8:51a0ca9079ca 352 DBG.printf("wifi:%d\r\n",wifiAvailable);
arsenalist 8:51a0ca9079ca 353 DBG.printf("gprs:%d\r\n",gprsAvailable);
arsenalist 0:f4e449fa34d7 354 }
arsenalist 0:f4e449fa34d7 355 void emmaModeWiFiConfig(void) {
arsenalist 0:f4e449fa34d7 356 string str;
arsenalist 18:87f30ba9ddc5 357 TFT.locate(0,0);
arsenalist 18:87f30ba9ddc5 358 TFT.printf(" please wait");
arsenalist 0:f4e449fa34d7 359
arsenalist 0:f4e449fa34d7 360 if(wifiAvailable) {
arsenalist 0:f4e449fa34d7 361 DBG.printf("emmaModeWiFiConfig\r\n");
arsenalist 0:f4e449fa34d7 362
arsenalist 0:f4e449fa34d7 363 //set wifi module to configuration
arsenalist 0:f4e449fa34d7 364 _ESP.printf("MODE=C");
arsenalist 0:f4e449fa34d7 365 while(1) {
arsenalist 0:f4e449fa34d7 366 char rcv[128] = {};
arsenalist 0:f4e449fa34d7 367 rcvReply(rcv,3000);
arsenalist 0:f4e449fa34d7 368 str = rcv;
arsenalist 0:f4e449fa34d7 369 if(str.find("SC_STATUS_FIND_CHANNEL") != std::string::npos)
arsenalist 0:f4e449fa34d7 370 break;
arsenalist 0:f4e449fa34d7 371 }
arsenalist 18:87f30ba9ddc5 372
arsenalist 18:87f30ba9ddc5 373 TFT.locate(0,0);
arsenalist 18:87f30ba9ddc5 374 TFT.printf(" emmaModeWiFiConfig");
arsenalist 18:87f30ba9ddc5 375 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 376 TFT.printf(" connect with emma app now");
arsenalist 18:87f30ba9ddc5 377
arsenalist 0:f4e449fa34d7 378 DBG.printf("entering wifi configuration mode\r\n");
arsenalist 0:f4e449fa34d7 379 while(1) {
arsenalist 0:f4e449fa34d7 380 char rcv[128] = {};
arsenalist 0:f4e449fa34d7 381 rcvReply(rcv,3000);
arsenalist 0:f4e449fa34d7 382 str = rcv;
arsenalist 0:f4e449fa34d7 383 if(str.find("MODE=C OK") != std::string::npos) {
arsenalist 0:f4e449fa34d7 384 //save wifiSSID and wifiPASS
arsenalist 0:f4e449fa34d7 385 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 0:f4e449fa34d7 386 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 0:f4e449fa34d7 387 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 0:f4e449fa34d7 388
arsenalist 0:f4e449fa34d7 389 MbedJSONValue jsonValue;
arsenalist 0:f4e449fa34d7 390 parse(jsonValue,str.c_str());
arsenalist 0:f4e449fa34d7 391
arsenalist 0:f4e449fa34d7 392 char *parameter[2] = {"wifiSSID","wifiPASS"};
arsenalist 0:f4e449fa34d7 393
arsenalist 0:f4e449fa34d7 394 for(int i=0; i<2; i++) {
arsenalist 0:f4e449fa34d7 395 if(jsonValue.hasMember(parameter[i])) {
arsenalist 0:f4e449fa34d7 396 string val = jsonValue[parameter[i]].get<std::string>();
arsenalist 11:2311b2d5157d 397 int st = writeSetting(parameter[i],val.c_str());
arsenalist 11:2311b2d5157d 398 if(st) {
arsenalist 11:2311b2d5157d 399 DBG.printf("%s is saved\r\n",parameter[i]);
arsenalist 18:87f30ba9ddc5 400 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 401 TFT.printf(" %s is saved",parameter[i]);
arsenalist 18:87f30ba9ddc5 402 wait(3);
arsenalist 18:87f30ba9ddc5 403 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 404 TFT.printf(" ");
arsenalist 11:2311b2d5157d 405 } else {
arsenalist 11:2311b2d5157d 406 DBG.printf("%s is not saved\r\n",parameter[i]);
arsenalist 18:87f30ba9ddc5 407 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 408 TFT.printf(" %s is not saved",parameter[i]);
arsenalist 18:87f30ba9ddc5 409 wait(3);
arsenalist 18:87f30ba9ddc5 410 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 411 TFT.printf(" ");
arsenalist 11:2311b2d5157d 412 }
arsenalist 0:f4e449fa34d7 413 }
arsenalist 0:f4e449fa34d7 414 }
arsenalist 18:87f30ba9ddc5 415
arsenalist 18:87f30ba9ddc5 416 //wificonfig finish
arsenalist 18:87f30ba9ddc5 417 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 418 TFT.printf(" ");
arsenalist 18:87f30ba9ddc5 419 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 420 TFT.printf(" wificonfig finish. please restart.");
arsenalist 18:87f30ba9ddc5 421
arsenalist 0:f4e449fa34d7 422 }
arsenalist 18:87f30ba9ddc5 423 } else if(str.find("SC_STATUS_GETTING_SSID_PSWD") != std::string::npos){
arsenalist 18:87f30ba9ddc5 424 DBG.printf("app connected\r\n");
arsenalist 18:87f30ba9ddc5 425 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 426 TFT.printf(" ");
arsenalist 18:87f30ba9ddc5 427 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 428 TFT.printf(" app connected");
arsenalist 0:f4e449fa34d7 429 }
arsenalist 0:f4e449fa34d7 430 }
arsenalist 0:f4e449fa34d7 431 } else {
arsenalist 0:f4e449fa34d7 432 DBG.printf("no wifi found\r\n");
arsenalist 18:87f30ba9ddc5 433 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 434 TFT.printf(" no wifi found");
arsenalist 0:f4e449fa34d7 435 }
arsenalist 0:f4e449fa34d7 436 }
arsenalist 0:f4e449fa34d7 437 void emmaModeSettings(void) {
arsenalist 0:f4e449fa34d7 438 bool clientIsConnected = false;
arsenalist 0:f4e449fa34d7 439 bool serverIsListened = false;
arsenalist 0:f4e449fa34d7 440 char s[32];
arsenalist 0:f4e449fa34d7 441 string str;
arsenalist 0:f4e449fa34d7 442
arsenalist 18:87f30ba9ddc5 443 TFT.locate(0,0);
arsenalist 18:87f30ba9ddc5 444 TFT.printf(" please wait");
arsenalist 18:87f30ba9ddc5 445
arsenalist 8:51a0ca9079ca 446 //create settings dir
arsenalist 0:f4e449fa34d7 447 mkdir("/sd/settings",0777);
arsenalist 8:51a0ca9079ca 448
arsenalist 0:f4e449fa34d7 449 //get and write emmaUID
arsenalist 0:f4e449fa34d7 450 string uid = getUID();
arsenalist 0:f4e449fa34d7 451 sprintf(s,"(%s)",uid.c_str());
arsenalist 0:f4e449fa34d7 452 uid = s;
arsenalist 0:f4e449fa34d7 453 writeSetting("emmaUID",uid);
arsenalist 0:f4e449fa34d7 454
arsenalist 8:51a0ca9079ca 455 if(ethAvailable) {
arsenalist 0:f4e449fa34d7 456 DBG.printf("emmaModeSettings - eth\r\n");
arsenalist 37:93f196daf5cf 457 wait(2);
arsenalist 37:93f196daf5cf 458 TFT.locate(0,0);
arsenalist 37:93f196daf5cf 459 TFT.printf(" ");
arsenalist 37:93f196daf5cf 460 TFT.locate(0,0);
arsenalist 37:93f196daf5cf 461 TFT.printf(" emmaModeSettings");
arsenalist 0:f4e449fa34d7 462
arsenalist 0:f4e449fa34d7 463 TCPSocketServer svr;
arsenalist 0:f4e449fa34d7 464 TCPSocketConnection clientSock;
arsenalist 0:f4e449fa34d7 465
arsenalist 0:f4e449fa34d7 466 if(svr.bind(SERVER_PORT) < 0) {
arsenalist 0:f4e449fa34d7 467 DBG.printf("tcp server bind failed\r\n");
arsenalist 0:f4e449fa34d7 468 } else {
arsenalist 0:f4e449fa34d7 469 DBG.printf("tcp server bind success\r\n");
arsenalist 0:f4e449fa34d7 470 serverIsListened = true;
arsenalist 0:f4e449fa34d7 471 }
arsenalist 0:f4e449fa34d7 472
arsenalist 44:c1d11c491237 473 //DBG.printf("please connect to %s\r\n",ipstack.getEth().getIPAddress());
arsenalist 44:c1d11c491237 474 DBG.printf("please connect to %s\r\n",eth.getIPAddress());
arsenalist 0:f4e449fa34d7 475
arsenalist 0:f4e449fa34d7 476 if(svr.listen(1) < 0) {
arsenalist 37:93f196daf5cf 477 DBG.printf("tcp server listen failed\r\n");
arsenalist 37:93f196daf5cf 478 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 479 TFT.printf(" settings error. please restart.");
arsenalist 37:93f196daf5cf 480 while(1);
arsenalist 0:f4e449fa34d7 481 } else {
arsenalist 37:93f196daf5cf 482 DBG.printf("tcp server is listening...\r\n");
arsenalist 37:93f196daf5cf 483 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 484 TFT.printf(" connect with emma app now!");
arsenalist 0:f4e449fa34d7 485 }
arsenalist 0:f4e449fa34d7 486
arsenalist 0:f4e449fa34d7 487 clientSock.set_blocking(false,30000); //timeout after 30sec
arsenalist 0:f4e449fa34d7 488
arsenalist 0:f4e449fa34d7 489 //listening
arsenalist 0:f4e449fa34d7 490 while (serverIsListened) {
arsenalist 0:f4e449fa34d7 491 if(svr.accept(clientSock) < 0) {
arsenalist 37:93f196daf5cf 492 DBG.printf("failed to accept connection\r\n");
arsenalist 37:93f196daf5cf 493 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 494 TFT.printf(" ");
arsenalist 37:93f196daf5cf 495 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 496 TFT.printf("failed to accept connection");
arsenalist 0:f4e449fa34d7 497 } else {
arsenalist 0:f4e449fa34d7 498 DBG.printf("connection success!\r\nIP: %s\r\n",clientSock.get_address());
arsenalist 37:93f196daf5cf 499 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 500 TFT.printf(" ");
arsenalist 37:93f196daf5cf 501 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 502 //TFT.printf(" connection success! IP: %s",clientSock.get_address());
arsenalist 37:93f196daf5cf 503 TFT.printf(" connection success!");
arsenalist 0:f4e449fa34d7 504 clientIsConnected = true;
arsenalist 0:f4e449fa34d7 505
arsenalist 0:f4e449fa34d7 506 while(clientIsConnected) {
arsenalist 0:f4e449fa34d7 507 char buffer[1024] = {};
arsenalist 0:f4e449fa34d7 508 switch(clientSock.receive(buffer,1023)) {
arsenalist 0:f4e449fa34d7 509 case 0:
arsenalist 0:f4e449fa34d7 510 DBG.printf("received buffer is empty\r\n");
arsenalist 0:f4e449fa34d7 511 clientIsConnected = false;
arsenalist 0:f4e449fa34d7 512 break;
arsenalist 0:f4e449fa34d7 513 case -1:
arsenalist 0:f4e449fa34d7 514 DBG.printf("failed to read data from client\r\n");
arsenalist 0:f4e449fa34d7 515 clientIsConnected = false;
arsenalist 0:f4e449fa34d7 516 break;
arsenalist 0:f4e449fa34d7 517 default:
arsenalist 0:f4e449fa34d7 518 //DBG.printf("received data: %d\r\n%s\r\n",strlen(buffer),buffer);
arsenalist 0:f4e449fa34d7 519 DBG.printf("\r\n");
arsenalist 0:f4e449fa34d7 520
arsenalist 0:f4e449fa34d7 521 str = buffer;
arsenalist 0:f4e449fa34d7 522 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 0:f4e449fa34d7 523 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 0:f4e449fa34d7 524 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 0:f4e449fa34d7 525
arsenalist 0:f4e449fa34d7 526 MbedJSONValue jsonValue;
arsenalist 0:f4e449fa34d7 527 parse(jsonValue,str.c_str());
arsenalist 0:f4e449fa34d7 528
arsenalist 14:8287f0f5d987 529 char *parameter[5] = {"gprsAPN","proxySERVER","proxyPORT","proxyAUTH","epochTime"};
arsenalist 0:f4e449fa34d7 530
arsenalist 0:f4e449fa34d7 531 for(int i=0; i<4; i++) {
arsenalist 0:f4e449fa34d7 532 if(jsonValue.hasMember(parameter[i])) {
arsenalist 0:f4e449fa34d7 533 string val = jsonValue[parameter[i]].get<std::string>();
arsenalist 0:f4e449fa34d7 534 int st = writeSetting(parameter[i],val.c_str());
arsenalist 0:f4e449fa34d7 535 if(st) {
arsenalist 0:f4e449fa34d7 536 DBG.printf("%s: %s is saved\r\n",parameter[i],val.c_str());
arsenalist 37:93f196daf5cf 537 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 538 TFT.printf(" %s: %s is saved",parameter[i],val.c_str());
arsenalist 37:93f196daf5cf 539 wait(1);
arsenalist 37:93f196daf5cf 540 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 541 TFT.printf(" ");
arsenalist 0:f4e449fa34d7 542 } else {
arsenalist 0:f4e449fa34d7 543 DBG.printf("%s is not saved\r\n",parameter[i]);
arsenalist 37:93f196daf5cf 544 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 545 TFT.printf(" %s is not saved",parameter[i]);
arsenalist 37:93f196daf5cf 546 wait(1);
arsenalist 37:93f196daf5cf 547 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 548 TFT.printf(" ");
arsenalist 0:f4e449fa34d7 549 }
arsenalist 0:f4e449fa34d7 550 }
arsenalist 0:f4e449fa34d7 551 }
arsenalist 14:8287f0f5d987 552
arsenalist 14:8287f0f5d987 553 //set time
arsenalist 14:8287f0f5d987 554 if(jsonValue.hasMember(parameter[4])) {
arsenalist 14:8287f0f5d987 555 string epTime = jsonValue[parameter[4]].get<std::string>();
arsenalist 20:ea14f175bbb4 556 time_t seconds;
arsenalist 14:8287f0f5d987 557 sscanf(epTime.c_str(),"%d",&seconds);
arsenalist 14:8287f0f5d987 558 set_time(seconds);
arsenalist 14:8287f0f5d987 559 DBG.printf("time is set\r\n");
arsenalist 37:93f196daf5cf 560 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 561 TFT.printf(" time is set");
arsenalist 37:93f196daf5cf 562 wait(1);
arsenalist 37:93f196daf5cf 563 TFT.locate(0,40);
arsenalist 37:93f196daf5cf 564 TFT.printf(" ");
arsenalist 14:8287f0f5d987 565 }
arsenalist 0:f4e449fa34d7 566 }
arsenalist 0:f4e449fa34d7 567 break;
arsenalist 0:f4e449fa34d7 568 }
arsenalist 0:f4e449fa34d7 569 }
arsenalist 0:f4e449fa34d7 570 DBG.printf("close connection\r\n");
arsenalist 37:93f196daf5cf 571 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 572 TFT.printf(" ");
arsenalist 37:93f196daf5cf 573 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 574 TFT.printf(" settings finish. please restart.");
arsenalist 0:f4e449fa34d7 575 clientSock.close();
arsenalist 0:f4e449fa34d7 576 }
arsenalist 0:f4e449fa34d7 577 }
arsenalist 8:51a0ca9079ca 578 } else if(wifiAvailable) {
arsenalist 8:51a0ca9079ca 579 DBG.printf("emmaModeSettings - wifi\r\n");
arsenalist 8:51a0ca9079ca 580
arsenalist 8:51a0ca9079ca 581 _ESP.printf("MODE=S");
arsenalist 8:51a0ca9079ca 582 while(1) {
arsenalist 8:51a0ca9079ca 583 char rcv[128] = {};
arsenalist 8:51a0ca9079ca 584 rcvReply(rcv,3000);
arsenalist 8:51a0ca9079ca 585 str = rcv;
arsenalist 8:51a0ca9079ca 586 if(str.find("MODE=S_OK") != std::string::npos)
arsenalist 8:51a0ca9079ca 587 break;
arsenalist 8:51a0ca9079ca 588 }
arsenalist 8:51a0ca9079ca 589 DBG.printf("entering settings mode\r\n");
arsenalist 17:b3ced0e67916 590 TFT.locate(0,0);
arsenalist 17:b3ced0e67916 591 TFT.printf(" emmaModeSettings");
arsenalist 17:b3ced0e67916 592 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 593 TFT.printf(" connect with emma app now!");
arsenalist 17:b3ced0e67916 594
arsenalist 8:51a0ca9079ca 595 while(1) {
arsenalist 8:51a0ca9079ca 596 char rcv[512] = {};
arsenalist 8:51a0ca9079ca 597 rcvReply(rcv,3000);
arsenalist 8:51a0ca9079ca 598 //DBG.printf("rcv:%s\r\n",rcv);
arsenalist 8:51a0ca9079ca 599 str = rcv;
arsenalist 8:51a0ca9079ca 600 if(str.find("MODE=S_Config") != std::string::npos) {
arsenalist 8:51a0ca9079ca 601 //save gprs and proxy setting
arsenalist 8:51a0ca9079ca 602 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 8:51a0ca9079ca 603 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 8:51a0ca9079ca 604 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 8:51a0ca9079ca 605
arsenalist 8:51a0ca9079ca 606 MbedJSONValue jsonValue;
arsenalist 8:51a0ca9079ca 607 parse(jsonValue,str.c_str());
arsenalist 8:51a0ca9079ca 608
arsenalist 14:8287f0f5d987 609 char *parameter[5] = {"gprsAPN","proxySERVER","proxyPORT","proxyAUTH","epochTime"};
arsenalist 8:51a0ca9079ca 610
arsenalist 8:51a0ca9079ca 611 for(int i=0; i<4; i++) {
arsenalist 8:51a0ca9079ca 612 if(jsonValue.hasMember(parameter[i])) {
arsenalist 8:51a0ca9079ca 613 string val = jsonValue[parameter[i]].get<std::string>();
arsenalist 8:51a0ca9079ca 614 int st = writeSetting(parameter[i],val.c_str());
arsenalist 8:51a0ca9079ca 615 if(st) {
arsenalist 8:51a0ca9079ca 616 DBG.printf("%s: %s is saved\r\n",parameter[i],val.c_str());
arsenalist 17:b3ced0e67916 617 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 618 TFT.printf(" %s: %s is saved",parameter[i],val.c_str());
arsenalist 37:93f196daf5cf 619 wait(1);
arsenalist 17:b3ced0e67916 620 TFT.locate(0,40);
arsenalist 17:b3ced0e67916 621 TFT.printf(" ");
arsenalist 8:51a0ca9079ca 622 } else {
arsenalist 8:51a0ca9079ca 623 DBG.printf("%s is not saved\r\n",parameter[i]);
arsenalist 17:b3ced0e67916 624 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 625 TFT.printf(" %s is not saved",parameter[i]);
arsenalist 37:93f196daf5cf 626 wait(1);
arsenalist 17:b3ced0e67916 627 TFT.locate(0,40);
arsenalist 17:b3ced0e67916 628 TFT.printf(" ");
arsenalist 8:51a0ca9079ca 629 }
arsenalist 8:51a0ca9079ca 630 }
arsenalist 8:51a0ca9079ca 631 }
arsenalist 14:8287f0f5d987 632
arsenalist 14:8287f0f5d987 633 //set time
arsenalist 14:8287f0f5d987 634 if(jsonValue.hasMember(parameter[4])) {
arsenalist 14:8287f0f5d987 635 string epTime = jsonValue[parameter[4]].get<std::string>();
arsenalist 14:8287f0f5d987 636 time_t seconds;
arsenalist 14:8287f0f5d987 637 sscanf(epTime.c_str(),"%d",&seconds);
arsenalist 14:8287f0f5d987 638 set_time(seconds);
arsenalist 14:8287f0f5d987 639 DBG.printf("time is set\r\n");
arsenalist 17:b3ced0e67916 640 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 641 TFT.printf(" time is set");
arsenalist 37:93f196daf5cf 642 wait(1);
arsenalist 17:b3ced0e67916 643 TFT.locate(0,40);
arsenalist 17:b3ced0e67916 644 TFT.printf(" ");
arsenalist 14:8287f0f5d987 645 }
arsenalist 18:87f30ba9ddc5 646
arsenalist 18:87f30ba9ddc5 647 //setting finish
arsenalist 18:87f30ba9ddc5 648 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 649 TFT.printf(" ");
arsenalist 18:87f30ba9ddc5 650 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 651 TFT.printf(" settings finish. please restart.");
arsenalist 8:51a0ca9079ca 652 }
arsenalist 8:51a0ca9079ca 653 } else if(str.find("connect") != std::string::npos) {
arsenalist 8:51a0ca9079ca 654 DBG.printf("connection success!\r\n");
arsenalist 17:b3ced0e67916 655 TFT.locate(0,20);
arsenalist 17:b3ced0e67916 656 TFT.printf(" ");
arsenalist 17:b3ced0e67916 657 TFT.locate(0,20);
arsenalist 37:93f196daf5cf 658 TFT.printf(" connection success!");
arsenalist 8:51a0ca9079ca 659 }
arsenalist 8:51a0ca9079ca 660 }
arsenalist 0:f4e449fa34d7 661 } else {
arsenalist 9:a58c04da4476 662 DBG.printf("no eth or wifi is available\r\n");
arsenalist 17:b3ced0e67916 663 TFT.locate(0,0);
arsenalist 18:87f30ba9ddc5 664 TFT.printf(" no iface avail, please restart!");
arsenalist 0:f4e449fa34d7 665 }
arsenalist 0:f4e449fa34d7 666 }
arsenalist 0:f4e449fa34d7 667 void emmaModeRegister(void) {
arsenalist 0:f4e449fa34d7 668 bool emmaGetRegKey = false;
arsenalist 0:f4e449fa34d7 669 bool emmaRegistered = false;
arsenalist 39:f51aa948acee 670 char connBody[256];
arsenalist 0:f4e449fa34d7 671 char s[512];
arsenalist 0:f4e449fa34d7 672 char r[256];
arsenalist 39:f51aa948acee 673 int connBodyLen;
arsenalist 0:f4e449fa34d7 674 int connPort;
arsenalist 0:f4e449fa34d7 675 int loop = 0;
arsenalist 0:f4e449fa34d7 676 string connData;
arsenalist 0:f4e449fa34d7 677 string connHost;
arsenalist 0:f4e449fa34d7 678 string str;
arsenalist 0:f4e449fa34d7 679 string regKey;
arsenalist 0:f4e449fa34d7 680 Timer t;
arsenalist 0:f4e449fa34d7 681
arsenalist 18:87f30ba9ddc5 682 TFT.locate(0,0);
arsenalist 18:87f30ba9ddc5 683 TFT.printf(" please wait");
arsenalist 18:87f30ba9ddc5 684
arsenalist 0:f4e449fa34d7 685 //check connected interface
arsenalist 8:51a0ca9079ca 686 isEthConnected();
arsenalist 8:51a0ca9079ca 687 isWiFiConnected();
arsenalist 8:51a0ca9079ca 688 isGprsConnected();
arsenalist 0:f4e449fa34d7 689 DBG.printf("ethConnected:%d\r\n",ethConnected);
arsenalist 0:f4e449fa34d7 690 DBG.printf("wifiConnected:%d\r\n",wifiConnected);
arsenalist 0:f4e449fa34d7 691
arsenalist 9:a58c04da4476 692 if(ethConnected) {
arsenalist 9:a58c04da4476 693 DBG.printf("emmaModeRegister - eth\r\n");
arsenalist 38:e44f35f8129d 694 wait(2);
arsenalist 38:e44f35f8129d 695 TFT.locate(0,0);
arsenalist 38:e44f35f8129d 696 TFT.printf(" ");
arsenalist 38:e44f35f8129d 697 TFT.locate(0,0);
arsenalist 38:e44f35f8129d 698 TFT.printf(" emmaModeRegister");
arsenalist 9:a58c04da4476 699
arsenalist 39:f51aa948acee 700 //set connBody, connHost, connPort, connData
arsenalist 39:f51aa948acee 701 connBodyLen = sprintf(connBody,"{\"uid\":\"%s\",\"hmac\":\"%s\"}",emmaUID.c_str(),hmac.c_str());
arsenalist 39:f51aa948acee 702
arsenalist 9:a58c04da4476 703 if(useProxy) {
arsenalist 9:a58c04da4476 704 DBG.printf("use proxy\r\n");
arsenalist 9:a58c04da4476 705 connHost = proxySERVER;
arsenalist 9:a58c04da4476 706 sscanf(proxyPORT.c_str(),"%d",&connPort);
arsenalist 9:a58c04da4476 707 for(int i=0; i<sizeof(s); i++) {
arsenalist 9:a58c04da4476 708 s[i]=0; }
arsenalist 39:f51aa948acee 709 //sprintf(s,"GET http://%s:%s/emma/api/controller/register?uid=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),emmaUID.c_str(),hmac.c_str(),restSERVER.c_str());
arsenalist 39:f51aa948acee 710 //sprintf(s,"POST http://%s:%s/emma/api/controller/register HTTP/1.0\nHost: %s\nContent-Length: 76\n\n{\"uid\":\"%s\",\"hmac\":\"%s\"}\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),restSERVER.c_str(),emmaUID.c_str(),hmac.c_str());
arsenalist 43:612547648ed1 711 sprintf(s,"POST http://%s:%s/%s/api/controller/register HTTP/1.0\nHost: %s\nContent-Length: %d\n\n%s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),appNAME.c_str(),restSERVER.c_str(),connBodyLen,connBody);
arsenalist 9:a58c04da4476 712 connData = s;
arsenalist 9:a58c04da4476 713 } else {
arsenalist 9:a58c04da4476 714 DBG.printf("no proxy\r\n");
arsenalist 38:e44f35f8129d 715 connHost = restSERVER;
arsenalist 38:e44f35f8129d 716 //connPort = restPORT;
arsenalist 38:e44f35f8129d 717 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 9:a58c04da4476 718 for(int i=0; i<sizeof(s); i++) {
arsenalist 9:a58c04da4476 719 s[i]=0; }
arsenalist 39:f51aa948acee 720 //sprintf(s,"GET /emma/api/controller/register?uid=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",emmaUID.c_str(),hmac.c_str(),restSERVER.c_str());
arsenalist 39:f51aa948acee 721 //sprintf(s,"POST /emma/api/controller/register HTTP/1.0\nHost: %s\nContent-Length: 76\n\n{\"uid\":\"%s\",\"hmac\":\"%s\"}\r\n\r\n",restSERVER.c_str(),emmaUID.c_str(),hmac.c_str());
arsenalist 43:612547648ed1 722 sprintf(s,"POST /%s/api/controller/register HTTP/1.0\nHost: %s\nContent-Length: %d\n\n%s\r\n\r\n",appNAME.c_str(),restSERVER.c_str(),connBodyLen,connBody);
arsenalist 9:a58c04da4476 723 connData = s;
arsenalist 9:a58c04da4476 724 }
arsenalist 9:a58c04da4476 725
arsenalist 9:a58c04da4476 726 //register
arsenalist 9:a58c04da4476 727 while(!emmaGetRegKey) {
arsenalist 38:e44f35f8129d 728 //DBG.printf("post:%s\r\n",s);
arsenalist 38:e44f35f8129d 729 str.clear();
arsenalist 40:77bd44f57ad3 730 str = ethREST(connHost,connPort,connData);
arsenalist 9:a58c04da4476 731 DBG.printf("rsp reg:%s\r\n",str.c_str());
arsenalist 9:a58c04da4476 732
arsenalist 38:e44f35f8129d 733 //check and save mqtt setting
arsenalist 9:a58c04da4476 734 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 9:a58c04da4476 735 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 9:a58c04da4476 736 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 9:a58c04da4476 737
arsenalist 9:a58c04da4476 738 MbedJSONValue jsonValue;
arsenalist 9:a58c04da4476 739 parse(jsonValue,str.c_str());
arsenalist 9:a58c04da4476 740
arsenalist 38:e44f35f8129d 741 char *parameter[4] = {"mqttDOMAIN","mqttKEY","mqttSECRET","registrationKey"};
arsenalist 9:a58c04da4476 742
arsenalist 38:e44f35f8129d 743 //save mqtt parameter
arsenalist 9:a58c04da4476 744 writeSetting(parameter[0],"()"); //sd card need to be initialized
arsenalist 9:a58c04da4476 745 for(int i=0; i<3; i++) {
arsenalist 9:a58c04da4476 746 if(jsonValue.hasMember(parameter[i])) {
arsenalist 9:a58c04da4476 747 string val = jsonValue[parameter[i]].get<std::string>();
arsenalist 9:a58c04da4476 748 int st = writeSetting(parameter[i],val.c_str());
arsenalist 9:a58c04da4476 749 if(st) {
arsenalist 9:a58c04da4476 750 DBG.printf("%s: %s is saved\r\n",parameter[i],val.c_str());
arsenalist 9:a58c04da4476 751 } else {
arsenalist 9:a58c04da4476 752 DBG.printf("%s is not saved\r\n",parameter[i]);
arsenalist 9:a58c04da4476 753 }
arsenalist 9:a58c04da4476 754 }
arsenalist 9:a58c04da4476 755 }
arsenalist 9:a58c04da4476 756
arsenalist 9:a58c04da4476 757 //get registrationKey
arsenalist 9:a58c04da4476 758 if(jsonValue.hasMember(parameter[3])) {
arsenalist 9:a58c04da4476 759 string val = jsonValue[parameter[3]].get<std::string>();
arsenalist 9:a58c04da4476 760 if(val.find("(") != std::string::npos && val.find(")") != std::string::npos) {
arsenalist 9:a58c04da4476 761 val.erase(val.begin(),val.begin()+val.find("(")+1);
arsenalist 9:a58c04da4476 762 val.erase(val.begin()+val.find(")"),val.end());
arsenalist 9:a58c04da4476 763 regKey = val;
arsenalist 9:a58c04da4476 764 DBG.printf("%s: %s\r\n",parameter[3],regKey.c_str());
arsenalist 38:e44f35f8129d 765
arsenalist 38:e44f35f8129d 766 TFT.locate(0,20);
arsenalist 38:e44f35f8129d 767 TFT.printf(" %s: %s\r\n",parameter[3],regKey.c_str());
arsenalist 38:e44f35f8129d 768
arsenalist 9:a58c04da4476 769 emmaGetRegKey = true;
arsenalist 9:a58c04da4476 770 }
arsenalist 9:a58c04da4476 771 }
arsenalist 9:a58c04da4476 772 }
arsenalist 9:a58c04da4476 773 }
arsenalist 9:a58c04da4476 774
arsenalist 9:a58c04da4476 775 //calculate hmac
arsenalist 9:a58c04da4476 776 for(int i=0; i<sizeof(r); i++) {
arsenalist 9:a58c04da4476 777 r[i]=0; }
arsenalist 9:a58c04da4476 778 sprintf(r,"emma-%s-%s",emmaUID.c_str(),regKey.c_str());
arsenalist 9:a58c04da4476 779 hmac = calculateMD5(r);
arsenalist 9:a58c04da4476 780 DBG.printf("hmac:%s\r\n",hmac.c_str());
arsenalist 9:a58c04da4476 781
arsenalist 39:f51aa948acee 782 //set connBody and connData
arsenalist 39:f51aa948acee 783 connBodyLen = sprintf(connBody,"{\"uid\":\"%s\",\"registrationKey\":\"%s\",\"hmac\":\"%s\"}",emmaUID.c_str(),regKey.c_str(),hmac.c_str());
arsenalist 39:f51aa948acee 784
arsenalist 9:a58c04da4476 785 if(useProxy) {
arsenalist 9:a58c04da4476 786 DBG.printf("use proxy\r\n");
arsenalist 9:a58c04da4476 787 for(int i=0; i<sizeof(s); i++) {
arsenalist 9:a58c04da4476 788 s[i]=0; }
arsenalist 39:f51aa948acee 789 //sprintf(s,"GET http://%s:%s/emma/api/controller/verify?uid=%s&registrationKey=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),emmaUID.c_str(),regKey.c_str(),hmac.c_str(),restSERVER.c_str());
arsenalist 43:612547648ed1 790 sprintf(s,"POST http://%s:%s/%s/api/controller/verify HTTP/1.0\nHost: %s\nContent-Length: %d\n\n%s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),appNAME.c_str(),restSERVER.c_str(),connBodyLen,connBody);
arsenalist 9:a58c04da4476 791 connData = s;
arsenalist 9:a58c04da4476 792 } else {
arsenalist 9:a58c04da4476 793 DBG.printf("no proxy\r\n");
arsenalist 9:a58c04da4476 794 for(int i=0; i<sizeof(s); i++) {
arsenalist 9:a58c04da4476 795 s[i]=0; }
arsenalist 39:f51aa948acee 796 //sprintf(s,"GET /emma/api/controller/verify?uid=%s&registrationKey=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",emmaUID.c_str(),regKey.c_str(),hmac.c_str(),restSERVER.c_str());
arsenalist 43:612547648ed1 797 sprintf(s,"POST /%s/api/controller/verify HTTP/1.0\nHost: %s\nContent-Length: %d\n\n%s\r\n\r\n",appNAME.c_str(),restSERVER.c_str(),connBodyLen,connBody);
arsenalist 9:a58c04da4476 798 connData = s;
arsenalist 9:a58c04da4476 799 }
arsenalist 9:a58c04da4476 800
arsenalist 9:a58c04da4476 801 //verify registration
arsenalist 9:a58c04da4476 802 while(!emmaRegistered && loop < 12){
arsenalist 9:a58c04da4476 803 str.clear();
arsenalist 40:77bd44f57ad3 804 str = ethREST(connHost,connPort,connData);
arsenalist 9:a58c04da4476 805 DBG.printf("rsp vrf:%s\r\n",str.c_str());
arsenalist 38:e44f35f8129d 806
arsenalist 38:e44f35f8129d 807 TFT.locate(0,40);
arsenalist 38:e44f35f8129d 808 TFT.printf(" ");
arsenalist 38:e44f35f8129d 809 TFT.locate(0,40);
arsenalist 38:e44f35f8129d 810 TFT.printf(" wait:%d\r\n",loop);
arsenalist 9:a58c04da4476 811
arsenalist 9:a58c04da4476 812 //check verification
arsenalist 9:a58c04da4476 813 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 9:a58c04da4476 814 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 9:a58c04da4476 815 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 9:a58c04da4476 816
arsenalist 9:a58c04da4476 817 MbedJSONValue jsonValue;
arsenalist 9:a58c04da4476 818 parse(jsonValue,str.c_str());
arsenalist 9:a58c04da4476 819 if(jsonValue.hasMember("user")) {
arsenalist 9:a58c04da4476 820 string val = jsonValue["user"].get<std::string>();
arsenalist 9:a58c04da4476 821 DBG.printf("%s is registered\r\n",val.c_str());
arsenalist 38:e44f35f8129d 822 TFT.locate(0,40);
arsenalist 38:e44f35f8129d 823 TFT.printf(" ");
arsenalist 38:e44f35f8129d 824 TFT.locate(0,40);
arsenalist 38:e44f35f8129d 825 TFT.printf(" %s is registered\r\n",val.c_str());
arsenalist 9:a58c04da4476 826 emmaRegistered = true;
arsenalist 9:a58c04da4476 827 }
arsenalist 9:a58c04da4476 828 }
arsenalist 9:a58c04da4476 829 wait(5);
arsenalist 9:a58c04da4476 830 loop++;
arsenalist 9:a58c04da4476 831 }
arsenalist 9:a58c04da4476 832
arsenalist 9:a58c04da4476 833 //check whether registration success
arsenalist 9:a58c04da4476 834 if(emmaRegistered) {
arsenalist 9:a58c04da4476 835 DBG.printf("registration successful\r\n");
arsenalist 38:e44f35f8129d 836 TFT.locate(0,60);
arsenalist 38:e44f35f8129d 837 TFT.printf(" registration successful\r\n");
arsenalist 9:a58c04da4476 838 } else {
arsenalist 9:a58c04da4476 839 DBG.printf("registration unsuccessful\r\n");
arsenalist 38:e44f35f8129d 840 TFT.locate(0,60);
arsenalist 38:e44f35f8129d 841 TFT.printf(" registration unsuccessful. please restart.\r\n");
arsenalist 9:a58c04da4476 842 }
arsenalist 9:a58c04da4476 843 while(1);
arsenalist 9:a58c04da4476 844
arsenalist 9:a58c04da4476 845 } else if(wifiConnected) {
arsenalist 0:f4e449fa34d7 846 DBG.printf("emmaModeRegister - wifi\r\n");
arsenalist 0:f4e449fa34d7 847
arsenalist 0:f4e449fa34d7 848 _ESP.printf("MODE=B");
arsenalist 0:f4e449fa34d7 849 wait(1);
arsenalist 0:f4e449fa34d7 850 while(!esp.ready());
arsenalist 0:f4e449fa34d7 851
arsenalist 0:f4e449fa34d7 852 //set connHost, connPort
arsenalist 0:f4e449fa34d7 853 if(useProxy) {
arsenalist 0:f4e449fa34d7 854 connHost = proxySERVER;
arsenalist 0:f4e449fa34d7 855 sscanf(proxyPORT.c_str(),"%d",&connPort);
arsenalist 0:f4e449fa34d7 856 } else {
arsenalist 38:e44f35f8129d 857 connHost = restSERVER;
arsenalist 38:e44f35f8129d 858 //connPort = restPORT;
arsenalist 38:e44f35f8129d 859 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 0:f4e449fa34d7 860 }
arsenalist 18:87f30ba9ddc5 861 TFT.locate(0,0);
arsenalist 18:87f30ba9ddc5 862 TFT.printf(" emmaModeRegister");
arsenalist 0:f4e449fa34d7 863
arsenalist 0:f4e449fa34d7 864 //rest begin
arsenalist 0:f4e449fa34d7 865 if(!rest.begin(connHost.c_str(),connPort,false)) {
arsenalist 0:f4e449fa34d7 866 DBG.printf("EMMA: fail to setup rest");
arsenalist 32:78633fb9b2a1 867 TFT.locate(0,20);
arsenalist 32:78633fb9b2a1 868 TFT.printf(" fail setup connection");
arsenalist 32:78633fb9b2a1 869 TFT.locate(0,40);
arsenalist 32:78633fb9b2a1 870 TFT.printf(" check your wifi connection or");
arsenalist 32:78633fb9b2a1 871 TFT.locate(0,60);
arsenalist 32:78633fb9b2a1 872 TFT.printf(" you should setup proxy!");
arsenalist 0:f4e449fa34d7 873 while(1);
arsenalist 0:f4e449fa34d7 874 }
arsenalist 0:f4e449fa34d7 875 //wifiConnected = true; //with custom firmware, wifi module should connect automatically
arsenalist 0:f4e449fa34d7 876
arsenalist 0:f4e449fa34d7 877 esp.process();
arsenalist 0:f4e449fa34d7 878 if(wifiConnected) {
arsenalist 32:78633fb9b2a1 879 //check proxy
arsenalist 0:f4e449fa34d7 880 if(useProxy) {
arsenalist 43:612547648ed1 881 sprintf(r,"http://%s:%s/%s/api/controller/register",restSERVER.c_str(),restPORT.c_str(),appNAME.c_str());
arsenalist 38:e44f35f8129d 882 //sprintf(r,"http://%s:%d/emma/api/controller/register HTTP/1.0\nHost: %s:%d\nProxy-Authorization: Basic %s\nCache-Control: no-cache\nContent-Length: %d\n\n",restSERVER,restPORT,restSERVER,restPORT,proxyAUTH.c_str(),76);
arsenalist 38:e44f35f8129d 883 //sprintf(r,"http://%s:%d/emma/api/controller/register HTTP/1.0\nAccept: */*\nAccept-Encoding: gzip,deflate\nContent-Length: %d\r\n\r\n",restSERVER,restPORT,76);
arsenalist 39:f51aa948acee 884 //sprintf(r,"http://%s:%d/emma/coba",restSERVER,REST_SERVER_PORT);
arsenalist 0:f4e449fa34d7 885 } else {
arsenalist 43:612547648ed1 886 sprintf(r,"/%s/api/controller/register",appNAME.c_str());
arsenalist 0:f4e449fa34d7 887 }
arsenalist 0:f4e449fa34d7 888
arsenalist 0:f4e449fa34d7 889 //register
arsenalist 0:f4e449fa34d7 890 while(!emmaGetRegKey) {
arsenalist 32:78633fb9b2a1 891 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\"}",emmaUID.c_str(),hmac.c_str());
arsenalist 39:f51aa948acee 892 //DBG.printf("s:%s\r\n",s);
arsenalist 32:78633fb9b2a1 893 //string iniStr = "{\"uid\":\"005300553533510334313732\",\"hmac\":\"45fc6a4447989a9434d1f21087a78061\"}";
arsenalist 32:78633fb9b2a1 894 //DBG.printf("s:%s\r\n",iniStr.c_str());
arsenalist 32:78633fb9b2a1 895
arsenalist 32:78633fb9b2a1 896 //rest.post(r,iniStr.c_str());
arsenalist 32:78633fb9b2a1 897 rest.post(r,s);
arsenalist 0:f4e449fa34d7 898 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 899 s[i]=0; }
arsenalist 0:f4e449fa34d7 900 rest.getResponse(s,sizeof(s));
arsenalist 0:f4e449fa34d7 901 DBG.printf("rsp reg:%s\r\n",s);
arsenalist 0:f4e449fa34d7 902
arsenalist 38:e44f35f8129d 903 //check and save mqtt setting
arsenalist 0:f4e449fa34d7 904 str = s;
arsenalist 0:f4e449fa34d7 905 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 0:f4e449fa34d7 906 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 0:f4e449fa34d7 907 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 0:f4e449fa34d7 908
arsenalist 0:f4e449fa34d7 909 MbedJSONValue jsonValue;
arsenalist 0:f4e449fa34d7 910 parse(jsonValue,str.c_str());
arsenalist 0:f4e449fa34d7 911
arsenalist 38:e44f35f8129d 912 char *parameter[4] = {"mqttDOMAIN","mqttKEY","mqttSECRET","registrationKey"};
arsenalist 0:f4e449fa34d7 913
arsenalist 38:e44f35f8129d 914 //save mqtt parameter
arsenalist 0:f4e449fa34d7 915 writeSetting(parameter[0],"()"); //sd card need to be initialized
arsenalist 0:f4e449fa34d7 916 for(int i=0; i<3; i++) {
arsenalist 0:f4e449fa34d7 917 if(jsonValue.hasMember(parameter[i])) {
arsenalist 0:f4e449fa34d7 918 string val = jsonValue[parameter[i]].get<std::string>();
arsenalist 0:f4e449fa34d7 919 int st = writeSetting(parameter[i],val.c_str());
arsenalist 0:f4e449fa34d7 920 if(st) {
arsenalist 0:f4e449fa34d7 921 DBG.printf("%s: %s is saved\r\n",parameter[i],val.c_str());
arsenalist 0:f4e449fa34d7 922 } else {
arsenalist 0:f4e449fa34d7 923 DBG.printf("%s is not saved\r\n",parameter[i]);
arsenalist 0:f4e449fa34d7 924 }
arsenalist 0:f4e449fa34d7 925 }
arsenalist 0:f4e449fa34d7 926 }
arsenalist 0:f4e449fa34d7 927
arsenalist 0:f4e449fa34d7 928 //get registrationKey
arsenalist 0:f4e449fa34d7 929 if(jsonValue.hasMember(parameter[3])) {
arsenalist 0:f4e449fa34d7 930 string val = jsonValue[parameter[3]].get<std::string>();
arsenalist 0:f4e449fa34d7 931 if(val.find("(") != std::string::npos && val.find(")") != std::string::npos) {
arsenalist 0:f4e449fa34d7 932 val.erase(val.begin(),val.begin()+val.find("(")+1);
arsenalist 0:f4e449fa34d7 933 val.erase(val.begin()+val.find(")"),val.end());
arsenalist 0:f4e449fa34d7 934 regKey = val;
arsenalist 0:f4e449fa34d7 935 DBG.printf("%s: %s\r\n",parameter[3],regKey.c_str());
arsenalist 18:87f30ba9ddc5 936
arsenalist 18:87f30ba9ddc5 937 TFT.locate(0,20);
arsenalist 18:87f30ba9ddc5 938 TFT.printf(" %s: %s\r\n",parameter[3],regKey.c_str());
arsenalist 18:87f30ba9ddc5 939
arsenalist 0:f4e449fa34d7 940 emmaGetRegKey = true;
arsenalist 0:f4e449fa34d7 941 }
arsenalist 0:f4e449fa34d7 942 }
arsenalist 0:f4e449fa34d7 943 }
arsenalist 32:78633fb9b2a1 944 wait(1);
arsenalist 0:f4e449fa34d7 945 }
arsenalist 0:f4e449fa34d7 946
arsenalist 0:f4e449fa34d7 947 //calculate hmac
arsenalist 0:f4e449fa34d7 948 for(int i=0; i<sizeof(r); i++) {
arsenalist 0:f4e449fa34d7 949 r[i]=0; }
arsenalist 0:f4e449fa34d7 950 sprintf(r,"emma-%s-%s",emmaUID.c_str(),regKey.c_str());
arsenalist 0:f4e449fa34d7 951 hmac = calculateMD5(r);
arsenalist 0:f4e449fa34d7 952 DBG.printf("hmac:%s\r\n",hmac.c_str());
arsenalist 0:f4e449fa34d7 953
arsenalist 32:78633fb9b2a1 954 //check proxy
arsenalist 0:f4e449fa34d7 955 if(useProxy) {
arsenalist 43:612547648ed1 956 sprintf(r,"http://%s:%s/%s/api/controller/verify",restSERVER.c_str(),restPORT.c_str(),appNAME.c_str());
arsenalist 0:f4e449fa34d7 957 } else {
arsenalist 43:612547648ed1 958 sprintf(r,"/%s/api/controller/verify",appNAME.c_str());
arsenalist 0:f4e449fa34d7 959 }
arsenalist 0:f4e449fa34d7 960
arsenalist 0:f4e449fa34d7 961 //verify registration
arsenalist 0:f4e449fa34d7 962 while(!emmaRegistered && loop < 12){
arsenalist 32:78633fb9b2a1 963 sprintf(s,"{\"uid\":\"%s\",\"registrationKey\":\"%s\",\"hmac\":\"%s\"}",emmaUID.c_str(),regKey.c_str(),hmac.c_str());
arsenalist 32:78633fb9b2a1 964 rest.post(r,s);
arsenalist 0:f4e449fa34d7 965 rest.getResponse(s,sizeof(s));
arsenalist 0:f4e449fa34d7 966 DBG.printf("rsp vrf:%s\r\n",s);
arsenalist 18:87f30ba9ddc5 967 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 968 TFT.printf(" ");
arsenalist 18:87f30ba9ddc5 969 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 970 TFT.printf(" wait:%d\r\n",loop);
arsenalist 0:f4e449fa34d7 971
arsenalist 0:f4e449fa34d7 972 //check verification
arsenalist 0:f4e449fa34d7 973 str = s;
arsenalist 0:f4e449fa34d7 974 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 0:f4e449fa34d7 975 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 0:f4e449fa34d7 976 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 0:f4e449fa34d7 977
arsenalist 0:f4e449fa34d7 978 MbedJSONValue jsonValue;
arsenalist 0:f4e449fa34d7 979 parse(jsonValue,str.c_str());
arsenalist 0:f4e449fa34d7 980 if(jsonValue.hasMember("user")) {
arsenalist 0:f4e449fa34d7 981 string val = jsonValue["user"].get<std::string>();
arsenalist 18:87f30ba9ddc5 982 DBG.printf(" %s is registered\r\n",val.c_str());
arsenalist 18:87f30ba9ddc5 983 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 984 TFT.printf(" ");
arsenalist 18:87f30ba9ddc5 985 TFT.locate(0,40);
arsenalist 18:87f30ba9ddc5 986 TFT.printf(" %s is registered\r\n",val.c_str());
arsenalist 0:f4e449fa34d7 987 emmaRegistered = true;
arsenalist 0:f4e449fa34d7 988 }
arsenalist 0:f4e449fa34d7 989 }
arsenalist 0:f4e449fa34d7 990 wait(5);
arsenalist 0:f4e449fa34d7 991 loop++;
arsenalist 0:f4e449fa34d7 992 }
arsenalist 0:f4e449fa34d7 993
arsenalist 0:f4e449fa34d7 994 //check whether registration success
arsenalist 0:f4e449fa34d7 995 if(emmaRegistered) {
arsenalist 0:f4e449fa34d7 996 DBG.printf("registration successful\r\n");
arsenalist 18:87f30ba9ddc5 997 TFT.locate(0,60);
arsenalist 18:87f30ba9ddc5 998 TFT.printf(" registration successful\r\n");
arsenalist 0:f4e449fa34d7 999 } else {
arsenalist 0:f4e449fa34d7 1000 DBG.printf("registration unsuccessful\r\n");
arsenalist 18:87f30ba9ddc5 1001 TFT.locate(0,60);
arsenalist 38:e44f35f8129d 1002 TFT.printf(" registration unsuccessful. please restart.\r\n");
arsenalist 0:f4e449fa34d7 1003 }
arsenalist 0:f4e449fa34d7 1004 while(1);
arsenalist 0:f4e449fa34d7 1005 }
arsenalist 0:f4e449fa34d7 1006
arsenalist 9:a58c04da4476 1007 } else if(gprsConnected) {
arsenalist 0:f4e449fa34d7 1008 DBG.printf("emmaModeRegister - gprs\r\n");
arsenalist 0:f4e449fa34d7 1009
arsenalist 0:f4e449fa34d7 1010 } else {
arsenalist 9:a58c04da4476 1011 DBG.printf("no eth, wifi, or gprs is connected\r\n");
arsenalist 18:87f30ba9ddc5 1012 TFT.locate(0,60);
arsenalist 18:87f30ba9ddc5 1013 TFT.printf(" no iface connected. please restart.\r\n");
arsenalist 0:f4e449fa34d7 1014 }
arsenalist 0:f4e449fa34d7 1015 }
arsenalist 0:f4e449fa34d7 1016
arsenalist 0:f4e449fa34d7 1017 void emmaModeOperation(void) {
arsenalist 27:562a95c120cc 1018 //char mqttClientId[32];
arsenalist 40:77bd44f57ad3 1019 char connBody[256];
arsenalist 22:e18d361bf688 1020 char p[64];
arsenalist 14:8287f0f5d987 1021 char q[32];
arsenalist 4:76ab12e2f8a3 1022 char r[32];
arsenalist 44:c1d11c491237 1023 //char s[4096];
arsenalist 44:c1d11c491237 1024 char s[512];
arsenalist 40:77bd44f57ad3 1025 int connBodyLen;
arsenalist 38:e44f35f8129d 1026 int connPort;
arsenalist 0:f4e449fa34d7 1027 int loop=0;
arsenalist 21:33bd8b82560f 1028 int trial=0;
arsenalist 22:e18d361bf688 1029 string hmacTime;
arsenalist 23:fb369e171b7d 1030 string hmacCmd;
arsenalist 0:f4e449fa34d7 1031 string str;
arsenalist 14:8287f0f5d987 1032 time_t seconds;
arsenalist 0:f4e449fa34d7 1033 Timer t;
arsenalist 24:5d58515ba510 1034 Timer tPanelEnergy;
arsenalist 24:5d58515ba510 1035 Timer tPanel;
arsenalist 4:76ab12e2f8a3 1036 Timer tNodes;
arsenalist 0:f4e449fa34d7 1037
arsenalist 19:7e3e9332f719 1038 TFT.locate(0,0);
arsenalist 19:7e3e9332f719 1039 TFT.printf(" please wait");
arsenalist 19:7e3e9332f719 1040
arsenalist 0:f4e449fa34d7 1041 //check connected interface
arsenalist 8:51a0ca9079ca 1042 isEthConnected();
arsenalist 8:51a0ca9079ca 1043 isWiFiConnected();
arsenalist 8:51a0ca9079ca 1044 isGprsConnected();
arsenalist 0:f4e449fa34d7 1045 DBG.printf("ethConnected:%d\r\n",ethConnected);
arsenalist 0:f4e449fa34d7 1046 DBG.printf("wifiConnected:%d\r\n",wifiConnected);
arsenalist 0:f4e449fa34d7 1047
arsenalist 13:e8adfe305dbc 1048 TFT.locate(0,0);
arsenalist 13:e8adfe305dbc 1049 TFT.printf(" emmaModeOperation");
arsenalist 13:e8adfe305dbc 1050
arsenalist 13:e8adfe305dbc 1051 TFT.locate(0,20);
arsenalist 44:c1d11c491237 1052 TFT.printf(" Interface:");
arsenalist 44:c1d11c491237 1053
arsenalist 44:c1d11c491237 1054 TFT.locate(75,20);
arsenalist 13:e8adfe305dbc 1055 if(ethConnected) {
arsenalist 44:c1d11c491237 1056 TFT.printf("ETH");
arsenalist 44:c1d11c491237 1057 } else if(wifiConnected) {
arsenalist 44:c1d11c491237 1058 TFT.printf("WiFi");
arsenalist 44:c1d11c491237 1059 } else if(gprsConnected) {
arsenalist 44:c1d11c491237 1060 TFT.printf("GPRS");
arsenalist 13:e8adfe305dbc 1061 } else {
arsenalist 44:c1d11c491237 1062 TFT.printf("N/A");
arsenalist 13:e8adfe305dbc 1063 }
arsenalist 13:e8adfe305dbc 1064
arsenalist 44:c1d11c491237 1065 //set ade7758 parameter
arsenalist 44:c1d11c491237 1066 ADE.begin();
arsenalist 44:c1d11c491237 1067 ADE.writeRMSOffset(AIRMSOFFSET, BIRMSOFFSET, CIRMSOFFSET, AVRMSOFFSET, BVRMSOFFSET, CVRMSOFFSET);
arsenalist 44:c1d11c491237 1068 ADE.write16bits(AWG, 0);
arsenalist 44:c1d11c491237 1069 ADE.write16bits(BWG, 0);
arsenalist 44:c1d11c491237 1070 ADE.write16bits(CWG, 0);
arsenalist 44:c1d11c491237 1071 ADE.write16bits(AVAG, 0);
arsenalist 44:c1d11c491237 1072 ADE.write16bits(BVAG, 0);
arsenalist 44:c1d11c491237 1073 ADE.write16bits(CVAG, 0);
arsenalist 13:e8adfe305dbc 1074
arsenalist 10:1dc69e0ce7fd 1075 if(ethConnected) {
arsenalist 10:1dc69e0ce7fd 1076 DBG.printf("emmaModeOperation - eth\r\n");
arsenalist 44:c1d11c491237 1077
arsenalist 44:c1d11c491237 1078 //new log indicator
arsenalist 40:77bd44f57ad3 1079 seconds = time(NULL);
arsenalist 40:77bd44f57ad3 1080 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 40:77bd44f57ad3 1081 DBG.printf("newLog:%d\r\n",writeLog(q,"++++++++++Ethernet++++++++++"));
arsenalist 40:77bd44f57ad3 1082
arsenalist 40:77bd44f57ad3 1083 //check firmware update
arsenalist 40:77bd44f57ad3 1084
arsenalist 40:77bd44f57ad3 1085 //execute last state of switches on board
arsenalist 40:77bd44f57ad3 1086
arsenalist 40:77bd44f57ad3 1087 //get list of nodes from server
arsenalist 40:77bd44f57ad3 1088 connBodyLen = sprintf(connBody,"{\"uid\":\"%s\",\"hmac\":\"%s\"}",emmaUID.c_str(),hmac.c_str());
arsenalist 40:77bd44f57ad3 1089
arsenalist 40:77bd44f57ad3 1090 //sprintf(s,"GET /emma/api/controller/remotes?uid=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",emmaUID.c_str(),hmac.c_str(),restSERVER.c_str());
arsenalist 40:77bd44f57ad3 1091 sprintf(s,"POST /emma/api/controller/wifinodes HTTP/1.0\nHost: %s\nContent-Length:%d\n\n%s\r\n\r\n",restSERVER.c_str(),connBodyLen,connBody);
arsenalist 44:c1d11c491237 1092 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 40:77bd44f57ad3 1093 str.clear();
arsenalist 40:77bd44f57ad3 1094 str = ethREST(restSERVER,connPort,s);
arsenalist 44:c1d11c491237 1095 //DBG.printf("str:%s\r\n",str.c_str());
arsenalist 40:77bd44f57ad3 1096 if(str.rfind("[{\"type\"") != std::string::npos) {
arsenalist 40:77bd44f57ad3 1097 DBG.printf("get nodes from server\r\n");
arsenalist 40:77bd44f57ad3 1098 str.erase(str.begin(),str.begin()+str.rfind("[{\"type\""));
arsenalist 40:77bd44f57ad3 1099 str.erase(str.begin()+str.rfind("}]")+2,str.end());
arsenalist 40:77bd44f57ad3 1100
arsenalist 40:77bd44f57ad3 1101 MbedJSONValue jsonValue;
arsenalist 40:77bd44f57ad3 1102 parse(jsonValue,str.c_str());
arsenalist 40:77bd44f57ad3 1103 char *parameter[3] = {"type","mac","ip"};
arsenalist 40:77bd44f57ad3 1104
arsenalist 40:77bd44f57ad3 1105 TFT.locate(0,40);
arsenalist 40:77bd44f57ad3 1106 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1107 TFT.locate(0,40);
arsenalist 40:77bd44f57ad3 1108 TFT.printf("get %d nodes from server",jsonValue.size());
arsenalist 40:77bd44f57ad3 1109 wait(0.5);
arsenalist 40:77bd44f57ad3 1110 TFT.locate(0,40);
arsenalist 40:77bd44f57ad3 1111 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1112
arsenalist 40:77bd44f57ad3 1113 //check whether nodes valid
arsenalist 40:77bd44f57ad3 1114 bool validNodes = true;
arsenalist 40:77bd44f57ad3 1115 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 40:77bd44f57ad3 1116 for(int j=0; j<3; j++) {
arsenalist 40:77bd44f57ad3 1117 validNodes = validNodes && jsonValue[i].hasMember(parameter[j]);
arsenalist 40:77bd44f57ad3 1118 }
arsenalist 40:77bd44f57ad3 1119 }
arsenalist 40:77bd44f57ad3 1120 DBG.printf("nodes validity:%d\r\n",validNodes);
arsenalist 40:77bd44f57ad3 1121
arsenalist 40:77bd44f57ad3 1122 if(validNodes) {
arsenalist 40:77bd44f57ad3 1123 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 44:c1d11c491237 1124 int typeValue = jsonValue[i][parameter[0]].get<int>();
arsenalist 40:77bd44f57ad3 1125 string macValue = jsonValue[i][parameter[1]].get<std::string>();
arsenalist 40:77bd44f57ad3 1126 string ipValue = jsonValue[i][parameter[2]].get<std::string>();
arsenalist 40:77bd44f57ad3 1127 nodes[i].type = typeValue;
arsenalist 40:77bd44f57ad3 1128 nodes[i].macAddr = macValue;
arsenalist 40:77bd44f57ad3 1129 nodes[i].ipAddr = ipValue;
arsenalist 44:c1d11c491237 1130 DBG.printf("nodes[%d]type:%d\r\n",i,nodes[i].type);
arsenalist 40:77bd44f57ad3 1131 DBG.printf("nodes[%d]mac:%s\r\n",i,nodes[i].macAddr.c_str());
arsenalist 40:77bd44f57ad3 1132 DBG.printf("nodes[%d]ip:%s\r\n",i,nodes[i].ipAddr.c_str());
arsenalist 40:77bd44f57ad3 1133 }
arsenalist 36:ed696fd1b44e 1134 }
arsenalist 40:77bd44f57ad3 1135
arsenalist 40:77bd44f57ad3 1136 } else {
arsenalist 40:77bd44f57ad3 1137 DBG.printf("no nodes from server\r\n");
arsenalist 40:77bd44f57ad3 1138 }
arsenalist 40:77bd44f57ad3 1139
arsenalist 40:77bd44f57ad3 1140 //define thread
arsenalist 40:77bd44f57ad3 1141 osThreadDef(energyThread, osPriorityBelowNormal, (8*DEFAULT_STACK_SIZE));
arsenalist 40:77bd44f57ad3 1142 //create thread
arsenalist 40:77bd44f57ad3 1143 osThreadCreate(osThread(energyThread),NULL);
arsenalist 40:77bd44f57ad3 1144
arsenalist 40:77bd44f57ad3 1145 tPanelEnergy.start();
arsenalist 40:77bd44f57ad3 1146 tPanel.start();
arsenalist 40:77bd44f57ad3 1147 tNodes.start();
arsenalist 40:77bd44f57ad3 1148 wait(1);
arsenalist 40:77bd44f57ad3 1149 while(1) {
arsenalist 40:77bd44f57ad3 1150 //checkVoltagePower(); //need revision to support ethernet
arsenalist 40:77bd44f57ad3 1151
arsenalist 40:77bd44f57ad3 1152 //panelEnergy, panelVoltage, and panelPower
arsenalist 44:c1d11c491237 1153 /*
arsenalist 40:77bd44f57ad3 1154 if(tPanelEnergy.read() > 30.0f) {
arsenalist 40:77bd44f57ad3 1155 DBG.printf("[%d]WattHR for each phase: %.2f, %.2f, %.2f\r\n", loop, AWattHr, BWattHr, CWattHr);
arsenalist 40:77bd44f57ad3 1156 TFT.locate(0,60);
arsenalist 40:77bd44f57ad3 1157 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1158 TFT.locate(0,60);
arsenalist 40:77bd44f57ad3 1159 TFT.printf("[%d]WHR: %.1f, %.1f, %.1f", loop, AWattHr, BWattHr, CWattHr);
arsenalist 40:77bd44f57ad3 1160
arsenalist 40:77bd44f57ad3 1161 DBG.printf("VRMS for each phase: %.2f, %.2f, %.2f\r\n", AVrms, BVrms, CVrms);
arsenalist 40:77bd44f57ad3 1162 TFT.locate(0,80);
arsenalist 40:77bd44f57ad3 1163 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1164 TFT.locate(0,80);
arsenalist 40:77bd44f57ad3 1165 TFT.printf("VRMS: %.1f, %.1f, %.1f", AVrms, BVrms, CVrms);
arsenalist 40:77bd44f57ad3 1166
arsenalist 40:77bd44f57ad3 1167 DBG.printf("Watt for each phase: %.2f, %.2f, %.2f\r\n", AWatt, BWatt, CWatt);
arsenalist 40:77bd44f57ad3 1168 TFT.locate(0,100);
arsenalist 40:77bd44f57ad3 1169 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1170 TFT.locate(0,100);
arsenalist 40:77bd44f57ad3 1171 TFT.printf("Watt: %.1f, %.1f, %.1f", AWatt, BWatt, CWatt);
arsenalist 40:77bd44f57ad3 1172
arsenalist 40:77bd44f57ad3 1173 if(newEnergyData) {
arsenalist 40:77bd44f57ad3 1174 //for(int i=1; i<4; i++) {
arsenalist 40:77bd44f57ad3 1175 for(int i=1; i<2; i++) {
arsenalist 40:77bd44f57ad3 1176 DBG.printf("sending channel: %d\r\n",i);
arsenalist 40:77bd44f57ad3 1177 if(i==1){
arsenalist 40:77bd44f57ad3 1178 XWattHr = AWattHr;
arsenalist 40:77bd44f57ad3 1179 XVrms = AVrms;
arsenalist 40:77bd44f57ad3 1180 XWatt = AWatt;
arsenalist 40:77bd44f57ad3 1181 } else if(i==2) {
arsenalist 40:77bd44f57ad3 1182 XWattHr = BWattHr;
arsenalist 40:77bd44f57ad3 1183 XVrms = BVrms;
arsenalist 40:77bd44f57ad3 1184 XWatt = BWatt;
arsenalist 40:77bd44f57ad3 1185 } else {
arsenalist 40:77bd44f57ad3 1186 XWattHr = CWattHr;
arsenalist 40:77bd44f57ad3 1187 XVrms = CVrms;
arsenalist 40:77bd44f57ad3 1188 XWatt = CWatt;
arsenalist 40:77bd44f57ad3 1189 }
arsenalist 40:77bd44f57ad3 1190
arsenalist 40:77bd44f57ad3 1191 if(XWattHr != 0.0f) {
arsenalist 40:77bd44f57ad3 1192 seconds = time(NULL);
arsenalist 40:77bd44f57ad3 1193 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 40:77bd44f57ad3 1194
arsenalist 40:77bd44f57ad3 1195 //calculate hmacTime
arsenalist 44:c1d11c491237 1196 //for(int j=0; j<sizeof(p); j++) {
arsenalist 44:c1d11c491237 1197 // p[j]=0; }
arsenalist 40:77bd44f57ad3 1198 sprintf(p,"emma-%s-%s",emmaUID.c_str(),q);
arsenalist 40:77bd44f57ad3 1199 hmacTime = calculateMD5(p);
arsenalist 40:77bd44f57ad3 1200
arsenalist 40:77bd44f57ad3 1201 connBodyLen = sprintf(connBody,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"energy\":%.2f,\"voltage\":%.2f,\"power\":%.2f}",
arsenalist 40:77bd44f57ad3 1202 emmaUID.c_str(),hmacTime.c_str(),q,XWattHr,XVrms,XWatt);
arsenalist 40:77bd44f57ad3 1203 //DBG.printf("dataEnergy:\r\n%s\r\n",connBody);
arsenalist 40:77bd44f57ad3 1204
arsenalist 40:77bd44f57ad3 1205 sprintf(r,"POST /emma/api/controller/energy/%d HTTP/1.0\nHost:%s\nContent-Length:%d\n\n%s\r\n\r\n",i,restSERVER.c_str(),connBodyLen,connBody);
arsenalist 40:77bd44f57ad3 1206
arsenalist 40:77bd44f57ad3 1207 str.clear();
arsenalist 40:77bd44f57ad3 1208 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 40:77bd44f57ad3 1209 str = ethREST(restSERVER,connPort,r);
arsenalist 44:c1d11c491237 1210 DBG.printf("str:%s",str.c_str());
arsenalist 40:77bd44f57ad3 1211 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 40:77bd44f57ad3 1212 //logging purpose
arsenalist 40:77bd44f57ad3 1213 seconds = time(NULL);
arsenalist 40:77bd44f57ad3 1214 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 40:77bd44f57ad3 1215 DBG.printf("logPE:%d\r\n",writeLog(q,"sendEnergyData success"));
arsenalist 40:77bd44f57ad3 1216
arsenalist 40:77bd44f57ad3 1217 DBG.printf("send channel: %d success\r\n",i);
arsenalist 40:77bd44f57ad3 1218 TFT.foreground(Green);
arsenalist 40:77bd44f57ad3 1219 TFT.locate(0,120);
arsenalist 40:77bd44f57ad3 1220 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1221 TFT.locate(0,120);
arsenalist 40:77bd44f57ad3 1222 TFT.printf("send ch%d success",i);
arsenalist 40:77bd44f57ad3 1223 wait(1);
arsenalist 40:77bd44f57ad3 1224 TFT.locate(0,120);
arsenalist 40:77bd44f57ad3 1225 TFT.printf(" ");
arsenalist 44:c1d11c491237 1226 TFT.foreground(White);
arsenalist 40:77bd44f57ad3 1227 } else {
arsenalist 40:77bd44f57ad3 1228 //logging purpose
arsenalist 40:77bd44f57ad3 1229 seconds = time(NULL);
arsenalist 40:77bd44f57ad3 1230 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 40:77bd44f57ad3 1231 DBG.printf("logPE:%d\r\n",writeLog(q,"sendEnergyData failed"));
arsenalist 40:77bd44f57ad3 1232
arsenalist 40:77bd44f57ad3 1233 DBG.printf("send channel: %d failed\r\n",i);
arsenalist 40:77bd44f57ad3 1234 TFT.foreground(Red);
arsenalist 40:77bd44f57ad3 1235 TFT.locate(0,120);
arsenalist 40:77bd44f57ad3 1236 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1237 TFT.locate(0,120);
arsenalist 40:77bd44f57ad3 1238 TFT.printf("send ch%d failed",i);
arsenalist 40:77bd44f57ad3 1239 wait(1);
arsenalist 40:77bd44f57ad3 1240 TFT.locate(0,120);
arsenalist 40:77bd44f57ad3 1241 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1242 TFT.foreground(White);
arsenalist 40:77bd44f57ad3 1243 }
arsenalist 40:77bd44f57ad3 1244 }
arsenalist 40:77bd44f57ad3 1245 }
arsenalist 40:77bd44f57ad3 1246
arsenalist 40:77bd44f57ad3 1247 newEnergyData = false;
arsenalist 40:77bd44f57ad3 1248 }
arsenalist 40:77bd44f57ad3 1249
arsenalist 40:77bd44f57ad3 1250 tPanelEnergy.reset();
arsenalist 40:77bd44f57ad3 1251 loop++;
arsenalist 36:ed696fd1b44e 1252 }
arsenalist 44:c1d11c491237 1253 */
arsenalist 40:77bd44f57ad3 1254
arsenalist 40:77bd44f57ad3 1255 //panel environment
arsenalist 40:77bd44f57ad3 1256
arsenalist 44:c1d11c491237 1257 //command
arsenalist 44:c1d11c491237 1258 connBodyLen = sprintf(connBody,"{\"uid\":\"005e00553533510334313732\",\"hmac\":\"9424c60e708d8e3d3dff6d23fb104339\"}");
arsenalist 44:c1d11c491237 1259 sprintf(s,"POST /emma/api/controller/command HTTP/1.0\nHost: 36.80.35.8\nContent-Length:%d\n\n%s\r\n\r\n",connBodyLen,connBody);
arsenalist 44:c1d11c491237 1260 str.clear();
arsenalist 44:c1d11c491237 1261 str = ethREST("36.80.35.8",8080,s);
arsenalist 44:c1d11c491237 1262 DBG.printf("str:%s\r\n",str.c_str());
arsenalist 44:c1d11c491237 1263
arsenalist 40:77bd44f57ad3 1264 osDelay(5000);
arsenalist 10:1dc69e0ce7fd 1265 }
arsenalist 10:1dc69e0ce7fd 1266 } else if(wifiConnected) {
arsenalist 0:f4e449fa34d7 1267 DBG.printf("emmaModeOperation - wifi\r\n");
arsenalist 29:4d94a03d38e0 1268
arsenalist 44:c1d11c491237 1269 //new log and dbg indicator
arsenalist 29:4d94a03d38e0 1270 seconds = time(NULL);
arsenalist 29:4d94a03d38e0 1271 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 40:77bd44f57ad3 1272 DBG.printf("newLog:%d\r\n",writeLog(q,"++++++++++WiFi++++++++++"));
arsenalist 36:ed696fd1b44e 1273 //DBG.printf("newDbg:%d\r\n",writeDbg(q,"++++++++++++++++++++"));
arsenalist 0:f4e449fa34d7 1274
arsenalist 0:f4e449fa34d7 1275 //do not delete code below - indicator that esp need to MODE=B and esp.ready() to work
arsenalist 0:f4e449fa34d7 1276 //_ESP.printf("MODE=B");
arsenalist 0:f4e449fa34d7 1277 //wait(1);
arsenalist 0:f4e449fa34d7 1278 //while(!esp.ready());
arsenalist 0:f4e449fa34d7 1279
arsenalist 24:5d58515ba510 1280 /*
arsenalist 0:f4e449fa34d7 1281 DBG.printf("emma: setup mqtt client\r\n");
arsenalist 0:f4e449fa34d7 1282 sprintf(mqttClientId,"emma/%s",emmaUID.c_str());
arsenalist 0:f4e449fa34d7 1283
arsenalist 38:e44f35f8129d 1284 if(mqtt.begin(mqttClientId, mqttKEY.c_str(), mqttSECRET.c_str(), 120, 1)) {
arsenalist 0:f4e449fa34d7 1285 mqtt.connectedCb.attach(&mqttConnected);
arsenalist 0:f4e449fa34d7 1286 mqtt.disconnectedCb.attach(&mqttDisconnected);
arsenalist 38:e44f35f8129d 1287 mqtt.connect(mqttSERVER,mqttPORT,false);
arsenalist 13:e8adfe305dbc 1288 DBG.printf("emma: success to setup mqtt\r\n");
arsenalist 13:e8adfe305dbc 1289 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1290 TFT.printf("emma: success to setup mqtt");
arsenalist 0:f4e449fa34d7 1291 }
arsenalist 0:f4e449fa34d7 1292 DBG.printf("emma: system started\r\n");
arsenalist 24:5d58515ba510 1293 */
arsenalist 0:f4e449fa34d7 1294
arsenalist 24:5d58515ba510 1295 //t.start();
arsenalist 24:5d58515ba510 1296 //while(t.read_ms() < 5000) {
arsenalist 24:5d58515ba510 1297 // esp.process();
arsenalist 24:5d58515ba510 1298 //}
arsenalist 24:5d58515ba510 1299 //t.stop();
arsenalist 24:5d58515ba510 1300 //t.reset();
arsenalist 0:f4e449fa34d7 1301
arsenalist 0:f4e449fa34d7 1302 //set ade7758 parameter
arsenalist 44:c1d11c491237 1303 //start set beforehand
arsenalist 44:c1d11c491237 1304 /*
arsenalist 0:f4e449fa34d7 1305 ADE.begin();
arsenalist 0:f4e449fa34d7 1306
arsenalist 0:f4e449fa34d7 1307 ADE.writeRMSOffset(AIRMSOFFSET, BIRMSOFFSET, CIRMSOFFSET, AVRMSOFFSET, BVRMSOFFSET, CVRMSOFFSET);
arsenalist 0:f4e449fa34d7 1308
arsenalist 0:f4e449fa34d7 1309 ADE.write16bits(AWG, 0);
arsenalist 0:f4e449fa34d7 1310 ADE.write16bits(BWG, 0);
arsenalist 0:f4e449fa34d7 1311 ADE.write16bits(CWG, 0);
arsenalist 0:f4e449fa34d7 1312 ADE.write16bits(AVAG, 0);
arsenalist 0:f4e449fa34d7 1313 ADE.write16bits(BVAG, 0);
arsenalist 0:f4e449fa34d7 1314 ADE.write16bits(CVAG, 0);
arsenalist 44:c1d11c491237 1315 */
arsenalist 44:c1d11c491237 1316 //end start beforehand
arsenalist 0:f4e449fa34d7 1317
arsenalist 4:76ab12e2f8a3 1318 //init rest to server
arsenalist 38:e44f35f8129d 1319 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 38:e44f35f8129d 1320 if(rest.begin(restSERVER.c_str(),connPort,false)) {
arsenalist 4:76ab12e2f8a3 1321 DBG.printf("rest to server is created\r\n");
arsenalist 13:e8adfe305dbc 1322 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1323 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1324 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1325 TFT.printf("rest to server is created");
arsenalist 4:76ab12e2f8a3 1326 } else {
arsenalist 4:76ab12e2f8a3 1327 DBG.printf("rest to server is NOT created\r\n");
arsenalist 13:e8adfe305dbc 1328 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1329 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1330 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1331 TFT.printf("rest to server is NOT created");
arsenalist 4:76ab12e2f8a3 1332 }
arsenalist 4:76ab12e2f8a3 1333
arsenalist 7:7e8c6ad3fd64 1334 //check firmware update
arsenalist 7:7e8c6ad3fd64 1335
arsenalist 7:7e8c6ad3fd64 1336 //execute last state of switches on board
arsenalist 7:7e8c6ad3fd64 1337
arsenalist 7:7e8c6ad3fd64 1338 //get list of nodes from server
arsenalist 40:77bd44f57ad3 1339 /*
arsenalist 40:77bd44f57ad3 1340 //working
arsenalist 7:7e8c6ad3fd64 1341 sprintf(s,"/emma/api/controller/remotes?uid=%s&hmac=%s",emmaUID.c_str(),hmac.c_str());
arsenalist 7:7e8c6ad3fd64 1342 rest.get(s);
arsenalist 7:7e8c6ad3fd64 1343 for(int i=0; i<sizeof(s); i++) {
arsenalist 7:7e8c6ad3fd64 1344 s[i]=0; }
arsenalist 7:7e8c6ad3fd64 1345 rest.getResponse(s,sizeof(s));
arsenalist 7:7e8c6ad3fd64 1346 str = s;
arsenalist 7:7e8c6ad3fd64 1347 if(str.rfind("[{\"mac\"") != std::string::npos) {
arsenalist 7:7e8c6ad3fd64 1348 DBG.printf("get nodes from server\r\n");
arsenalist 7:7e8c6ad3fd64 1349 str.erase(str.begin(),str.begin()+str.rfind("[{\"mac\""));
arsenalist 7:7e8c6ad3fd64 1350 str.erase(str.begin()+str.rfind("}]")+2,str.end());
arsenalist 7:7e8c6ad3fd64 1351
arsenalist 7:7e8c6ad3fd64 1352 MbedJSONValue jsonValue;
arsenalist 7:7e8c6ad3fd64 1353 parse(jsonValue,str.c_str());
arsenalist 7:7e8c6ad3fd64 1354 char *parameter[2] = {"mac","ip"};
arsenalist 7:7e8c6ad3fd64 1355
arsenalist 13:e8adfe305dbc 1356 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1357 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1358 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1359 TFT.printf("get %d nodes from server",jsonValue.size());
arsenalist 13:e8adfe305dbc 1360 wait(0.5);
arsenalist 13:e8adfe305dbc 1361 TFT.locate(0,40);
arsenalist 13:e8adfe305dbc 1362 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1363
arsenalist 7:7e8c6ad3fd64 1364 //check whether nodes valid
arsenalist 7:7e8c6ad3fd64 1365 bool validNodes = true;
arsenalist 7:7e8c6ad3fd64 1366 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 7:7e8c6ad3fd64 1367 for(int j=0; j<2; j++) {
arsenalist 7:7e8c6ad3fd64 1368 validNodes = validNodes && jsonValue[i].hasMember(parameter[j]);
arsenalist 7:7e8c6ad3fd64 1369 }
arsenalist 7:7e8c6ad3fd64 1370 }
arsenalist 7:7e8c6ad3fd64 1371 DBG.printf("nodes validity:%d\r\n",validNodes);
arsenalist 7:7e8c6ad3fd64 1372
arsenalist 7:7e8c6ad3fd64 1373 if(validNodes) {
arsenalist 7:7e8c6ad3fd64 1374 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 7:7e8c6ad3fd64 1375 string macValue = jsonValue[i][parameter[0]].get<std::string>();
arsenalist 7:7e8c6ad3fd64 1376 string ipValue = jsonValue[i][parameter[1]].get<std::string>();
arsenalist 7:7e8c6ad3fd64 1377 nodes[i].macAddr = macValue;
arsenalist 7:7e8c6ad3fd64 1378 nodes[i].ipAddr = ipValue;
arsenalist 13:e8adfe305dbc 1379 DBG.printf("nodes[%d]mac:%s\r\n",i,nodes[i].macAddr.c_str());
arsenalist 13:e8adfe305dbc 1380 DBG.printf("nodes[%d]ip:%s\r\n",i,nodes[i].ipAddr.c_str());
arsenalist 7:7e8c6ad3fd64 1381 }
arsenalist 7:7e8c6ad3fd64 1382 }
arsenalist 7:7e8c6ad3fd64 1383
arsenalist 7:7e8c6ad3fd64 1384 } else {
arsenalist 7:7e8c6ad3fd64 1385 DBG.printf("no nodes from server\r\n");
arsenalist 7:7e8c6ad3fd64 1386 }
arsenalist 40:77bd44f57ad3 1387 */
arsenalist 40:77bd44f57ad3 1388
arsenalist 40:77bd44f57ad3 1389 _ESP.attach(&rxInterrupt,Serial::RxIrq);
arsenalist 40:77bd44f57ad3 1390
arsenalist 40:77bd44f57ad3 1391 //get list of nodes from server (post)
arsenalist 43:612547648ed1 1392 sprintf(p,"/%s/api/controller/wifinodes",appNAME.c_str());
arsenalist 40:77bd44f57ad3 1393 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\"}",emmaUID.c_str(),hmacTime.c_str());
arsenalist 40:77bd44f57ad3 1394 rest.post(p,s);
arsenalist 40:77bd44f57ad3 1395 wait(2);
arsenalist 40:77bd44f57ad3 1396 str = rxBuf;
arsenalist 40:77bd44f57ad3 1397 if(str.rfind("[{\"type\"") != std::string::npos) {
arsenalist 40:77bd44f57ad3 1398 DBG.printf("get nodes from server\r\n");
arsenalist 40:77bd44f57ad3 1399 str.erase(str.begin(),str.begin()+str.rfind("[{\"type\""));
arsenalist 40:77bd44f57ad3 1400 str.erase(str.begin()+str.rfind("}]")+2,str.end());
arsenalist 40:77bd44f57ad3 1401 //DBG.printf("strCrop:%s\r\n",str.c_str());
arsenalist 40:77bd44f57ad3 1402
arsenalist 40:77bd44f57ad3 1403 //start special handler
arsenalist 40:77bd44f57ad3 1404 while(1){
arsenalist 40:77bd44f57ad3 1405 if(str.find("}],") != std::string::npos) {
arsenalist 40:77bd44f57ad3 1406 str.erase(str.begin()+str.find("}],")+1,str.begin()+str.find("}],")+2);
arsenalist 40:77bd44f57ad3 1407 } else {
arsenalist 40:77bd44f57ad3 1408 break;
arsenalist 40:77bd44f57ad3 1409 }
arsenalist 40:77bd44f57ad3 1410 }
arsenalist 40:77bd44f57ad3 1411 //end special handler
arsenalist 40:77bd44f57ad3 1412
arsenalist 40:77bd44f57ad3 1413 DBG.printf("strCrop:%s\r\n",str.c_str());
arsenalist 40:77bd44f57ad3 1414
arsenalist 40:77bd44f57ad3 1415 MbedJSONValue jsonValue;
arsenalist 40:77bd44f57ad3 1416 parse(jsonValue,str.c_str());
arsenalist 40:77bd44f57ad3 1417 char *parameter[3] = {"type","mac","ip"};
arsenalist 40:77bd44f57ad3 1418
arsenalist 40:77bd44f57ad3 1419 TFT.locate(0,40);
arsenalist 40:77bd44f57ad3 1420 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1421 TFT.locate(0,40);
arsenalist 40:77bd44f57ad3 1422 TFT.printf("get %d nodes from server",jsonValue.size());
arsenalist 40:77bd44f57ad3 1423 wait(0.5);
arsenalist 40:77bd44f57ad3 1424 TFT.locate(0,40);
arsenalist 40:77bd44f57ad3 1425 TFT.printf(" ");
arsenalist 40:77bd44f57ad3 1426
arsenalist 40:77bd44f57ad3 1427 //check whether nodes valid
arsenalist 40:77bd44f57ad3 1428 bool validNodes = true;
arsenalist 40:77bd44f57ad3 1429 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 40:77bd44f57ad3 1430 for(int j=0; j<3; j++) {
arsenalist 40:77bd44f57ad3 1431 validNodes = validNodes && jsonValue[i].hasMember(parameter[j]);
arsenalist 40:77bd44f57ad3 1432 }
arsenalist 40:77bd44f57ad3 1433 }
arsenalist 40:77bd44f57ad3 1434 DBG.printf("nodes validity:%d\r\n",validNodes);
arsenalist 40:77bd44f57ad3 1435
arsenalist 40:77bd44f57ad3 1436 if(validNodes) {
arsenalist 40:77bd44f57ad3 1437 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 40:77bd44f57ad3 1438 int typeValue = jsonValue[i][parameter[0]].get<int>();
arsenalist 40:77bd44f57ad3 1439 string macValue = jsonValue[i][parameter[1]].get<std::string>();
arsenalist 40:77bd44f57ad3 1440 string ipValue = jsonValue[i][parameter[2]].get<std::string>();
arsenalist 40:77bd44f57ad3 1441 nodes[i].type = typeValue;
arsenalist 40:77bd44f57ad3 1442 nodes[i].macAddr = macValue;
arsenalist 40:77bd44f57ad3 1443 nodes[i].ipAddr = ipValue;
arsenalist 40:77bd44f57ad3 1444 DBG.printf("nodes[%d]type:%d\r\n",i,nodes[i].type);
arsenalist 40:77bd44f57ad3 1445 DBG.printf("nodes[%d]mac:%s\r\n",i,nodes[i].macAddr.c_str());
arsenalist 40:77bd44f57ad3 1446 DBG.printf("nodes[%d]ip:%s\r\n",i,nodes[i].ipAddr.c_str());
arsenalist 40:77bd44f57ad3 1447 }
arsenalist 40:77bd44f57ad3 1448 }
arsenalist 40:77bd44f57ad3 1449
arsenalist 40:77bd44f57ad3 1450 } else {
arsenalist 40:77bd44f57ad3 1451 DBG.printf("no nodes from server\r\n");
arsenalist 40:77bd44f57ad3 1452 }
arsenalist 7:7e8c6ad3fd64 1453
arsenalist 24:5d58515ba510 1454 /*
arsenalist 36:ed696fd1b44e 1455 //working
arsenalist 24:5d58515ba510 1456 DBG.printf("emma: setup mqtt client\r\n");
arsenalist 24:5d58515ba510 1457 sprintf(mqttClientId,"emma/%s",emmaUID.c_str());
arsenalist 38:e44f35f8129d 1458 if(mqtt.begin(mqttClientId, mqttKEY.c_str(), mqttSECRET.c_str(), 120, 1)) {
arsenalist 24:5d58515ba510 1459 mqtt.connectedCb.attach(&mqttConnected);
arsenalist 24:5d58515ba510 1460 mqtt.disconnectedCb.attach(&mqttDisconnected);
arsenalist 38:e44f35f8129d 1461 mqtt.connect(mqttSERVER,mqttPORT,false);
arsenalist 24:5d58515ba510 1462 DBG.printf("emma: success to setup mqtt\r\n");
arsenalist 24:5d58515ba510 1463 TFT.locate(0,40);
arsenalist 24:5d58515ba510 1464 TFT.printf("emma: success to setup mqtt");
arsenalist 24:5d58515ba510 1465 }
arsenalist 24:5d58515ba510 1466 DBG.printf("emma: system started\r\n");
arsenalist 24:5d58515ba510 1467
arsenalist 24:5d58515ba510 1468 t.start();
arsenalist 24:5d58515ba510 1469 while(t.read_ms() < 5000) {
arsenalist 24:5d58515ba510 1470 esp.process();
arsenalist 24:5d58515ba510 1471 }
arsenalist 24:5d58515ba510 1472 t.stop();
arsenalist 24:5d58515ba510 1473 t.reset();
arsenalist 24:5d58515ba510 1474 */
arsenalist 7:7e8c6ad3fd64 1475
arsenalist 40:77bd44f57ad3 1476 //disable UART2
arsenalist 40:77bd44f57ad3 1477 NVIC_DisableIRQ(USART2_IRQn);
arsenalist 40:77bd44f57ad3 1478
arsenalist 4:76ab12e2f8a3 1479 //init rest to remotes
arsenalist 4:76ab12e2f8a3 1480 for(int i=0; i<NODES_MAX; i++) {
arsenalist 4:76ab12e2f8a3 1481 if(!nodes[i].ipAddr.empty()) {
arsenalist 4:76ab12e2f8a3 1482 DBG.printf("restConn nodes[%d] is created\r\n",i);
arsenalist 4:76ab12e2f8a3 1483 nodes[i].restConn->begin(nodes[i].ipAddr.c_str(),16038,false);
arsenalist 4:76ab12e2f8a3 1484 wait(1);
arsenalist 4:76ab12e2f8a3 1485 } else {
arsenalist 4:76ab12e2f8a3 1486 DBG.printf("restConn nodes[%d] is NOT created\r\n",i);
arsenalist 4:76ab12e2f8a3 1487 wait(1);
arsenalist 4:76ab12e2f8a3 1488 }
arsenalist 4:76ab12e2f8a3 1489 }
arsenalist 4:76ab12e2f8a3 1490
arsenalist 40:77bd44f57ad3 1491 //enable UART2
arsenalist 40:77bd44f57ad3 1492 NVIC_EnableIRQ(USART2_IRQn);
arsenalist 40:77bd44f57ad3 1493
arsenalist 40:77bd44f57ad3 1494 //_ESP.attach(&rxInterrupt,Serial::RxIrq);
arsenalist 4:76ab12e2f8a3 1495
arsenalist 4:76ab12e2f8a3 1496 //define thread
arsenalist 17:b3ced0e67916 1497 osThreadDef(energyThread, osPriorityBelowNormal, (8*DEFAULT_STACK_SIZE));
arsenalist 0:f4e449fa34d7 1498 //create thread
arsenalist 2:fdfdeb5fd6fd 1499 osThreadCreate(osThread(energyThread),NULL);
arsenalist 0:f4e449fa34d7 1500
arsenalist 24:5d58515ba510 1501 tPanelEnergy.start();
arsenalist 24:5d58515ba510 1502 tPanel.start();
arsenalist 4:76ab12e2f8a3 1503 tNodes.start();
arsenalist 4:76ab12e2f8a3 1504 wait(1);
arsenalist 0:f4e449fa34d7 1505 while(1) {
arsenalist 4:76ab12e2f8a3 1506 checkRxBuffer();
arsenalist 20:ea14f175bbb4 1507 checkVoltagePower();
arsenalist 20:ea14f175bbb4 1508
arsenalist 24:5d58515ba510 1509 //whether espFreeMemory occurs
arsenalist 24:5d58515ba510 1510 if(espFreeMemory) {
arsenalist 30:08d290158fa7 1511 //logging
arsenalist 27:562a95c120cc 1512 seconds = time(NULL);
arsenalist 27:562a95c120cc 1513 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 27:562a95c120cc 1514 DBG.printf("logFreeMemory:%d\r\n",writeLog(q,rxLog.c_str()));
arsenalist 24:5d58515ba510 1515
arsenalist 27:562a95c120cc 1516 espFreeMemory = false;
arsenalist 27:562a95c120cc 1517 }
arsenalist 27:562a95c120cc 1518
arsenalist 27:562a95c120cc 1519 //whether espDHCPClientStart occurs
arsenalist 27:562a95c120cc 1520 if(espDHCPClientStart) {
arsenalist 30:08d290158fa7 1521 //logging
arsenalist 27:562a95c120cc 1522 seconds = time(NULL);
arsenalist 27:562a95c120cc 1523 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 27:562a95c120cc 1524 DBG.printf("logDHCPClientStart:%d\r\n",writeLog(q,rxLogA.c_str()));
arsenalist 27:562a95c120cc 1525
arsenalist 27:562a95c120cc 1526 _ESP.printf("MODE=B");
arsenalist 27:562a95c120cc 1527 wait(2);
arsenalist 27:562a95c120cc 1528 espDHCPClientStart = false;
arsenalist 24:5d58515ba510 1529 }
arsenalist 24:5d58515ba510 1530
arsenalist 4:76ab12e2f8a3 1531 //panelEnergy, panelVoltage, and panelPower
arsenalist 24:5d58515ba510 1532 if(tPanelEnergy.read() > 30.0f) {
arsenalist 4:76ab12e2f8a3 1533 DBG.printf("[%d]WattHR for each phase: %.2f, %.2f, %.2f\r\n", loop, AWattHr, BWattHr, CWattHr);
arsenalist 13:e8adfe305dbc 1534 TFT.locate(0,60);
arsenalist 13:e8adfe305dbc 1535 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1536 TFT.locate(0,60);
arsenalist 13:e8adfe305dbc 1537 TFT.printf("[%d]WHR: %.1f, %.1f, %.1f", loop, AWattHr, BWattHr, CWattHr);
arsenalist 13:e8adfe305dbc 1538
arsenalist 4:76ab12e2f8a3 1539 DBG.printf("VRMS for each phase: %.2f, %.2f, %.2f\r\n", AVrms, BVrms, CVrms);
arsenalist 13:e8adfe305dbc 1540 TFT.locate(0,80);
arsenalist 13:e8adfe305dbc 1541 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1542 TFT.locate(0,80);
arsenalist 13:e8adfe305dbc 1543 TFT.printf("VRMS: %.1f, %.1f, %.1f", AVrms, BVrms, CVrms);
arsenalist 13:e8adfe305dbc 1544
arsenalist 4:76ab12e2f8a3 1545 DBG.printf("Watt for each phase: %.2f, %.2f, %.2f\r\n", AWatt, BWatt, CWatt);
arsenalist 13:e8adfe305dbc 1546 TFT.locate(0,100);
arsenalist 13:e8adfe305dbc 1547 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1548 TFT.locate(0,100);
arsenalist 13:e8adfe305dbc 1549 TFT.printf("Watt: %.1f, %.1f, %.1f", AWatt, BWatt, CWatt);
arsenalist 4:76ab12e2f8a3 1550
arsenalist 22:e18d361bf688 1551 if(newEnergyData) {
arsenalist 22:e18d361bf688 1552 //for(int i=1; i<4; i++) {
arsenalist 22:e18d361bf688 1553 for(int i=1; i<2; i++) {
arsenalist 22:e18d361bf688 1554 DBG.printf("sending channel: %d\r\n",i);
arsenalist 22:e18d361bf688 1555 if(i==1){
arsenalist 22:e18d361bf688 1556 XWattHr = AWattHr;
arsenalist 22:e18d361bf688 1557 XVrms = AVrms;
arsenalist 22:e18d361bf688 1558 XWatt = AWatt;
arsenalist 22:e18d361bf688 1559 } else if(i==2) {
arsenalist 22:e18d361bf688 1560 XWattHr = BWattHr;
arsenalist 22:e18d361bf688 1561 XVrms = BVrms;
arsenalist 22:e18d361bf688 1562 XWatt = BWatt;
arsenalist 22:e18d361bf688 1563 } else {
arsenalist 22:e18d361bf688 1564 XWattHr = CWattHr;
arsenalist 22:e18d361bf688 1565 XVrms = CVrms;
arsenalist 22:e18d361bf688 1566 XWatt = CWatt;
arsenalist 22:e18d361bf688 1567 }
arsenalist 24:5d58515ba510 1568
arsenalist 24:5d58515ba510 1569 if(XWattHr != 0.0f) {
arsenalist 22:e18d361bf688 1570
arsenalist 43:612547648ed1 1571 sprintf(r,"/%s/api/controller/energy/%d",appNAME.c_str(),i);
arsenalist 24:5d58515ba510 1572 seconds = time(NULL);
arsenalist 24:5d58515ba510 1573 //for(int j=0; j<sizeof(q); j++) {
arsenalist 24:5d58515ba510 1574 // q[j]=0; }
arsenalist 24:5d58515ba510 1575 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 24:5d58515ba510 1576
arsenalist 24:5d58515ba510 1577 //calculate hmacTime
arsenalist 24:5d58515ba510 1578 for(int j=0; j<sizeof(p); j++) {
arsenalist 24:5d58515ba510 1579 p[j]=0; }
arsenalist 24:5d58515ba510 1580 sprintf(p,"emma-%s-%s",emmaUID.c_str(),q);
arsenalist 24:5d58515ba510 1581 hmacTime = calculateMD5(p);
arsenalist 22:e18d361bf688 1582
arsenalist 24:5d58515ba510 1583 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"energy\":%.2f,\"voltage\":%.2f,\"power\":%.2f}",
arsenalist 24:5d58515ba510 1584 emmaUID.c_str(),hmacTime.c_str(),q,XWattHr,XVrms,XWatt);
arsenalist 24:5d58515ba510 1585 //DBG.printf("dataEnergy:\r\n%s\r\n",s);
arsenalist 24:5d58515ba510 1586 rest.post(r,s);
arsenalist 24:5d58515ba510 1587 wait(2);
arsenalist 24:5d58515ba510 1588 if(rxBuf.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 27:562a95c120cc 1589 //logging purpose
arsenalist 27:562a95c120cc 1590 seconds = time(NULL);
arsenalist 27:562a95c120cc 1591 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 27:562a95c120cc 1592 DBG.printf("logPE:%d\r\n",writeLog(q,"sendEnergyData success"));
arsenalist 27:562a95c120cc 1593
arsenalist 24:5d58515ba510 1594 DBG.printf("send channel: %d success\r\n",i);
arsenalist 24:5d58515ba510 1595 TFT.foreground(Green);
arsenalist 24:5d58515ba510 1596 TFT.locate(0,120);
arsenalist 24:5d58515ba510 1597 TFT.printf(" ");
arsenalist 24:5d58515ba510 1598 TFT.locate(0,120);
arsenalist 24:5d58515ba510 1599 TFT.printf("send ch%d success",i);
arsenalist 24:5d58515ba510 1600 wait(1);
arsenalist 24:5d58515ba510 1601 TFT.locate(0,120);
arsenalist 24:5d58515ba510 1602 TFT.printf(" ");
arsenalist 24:5d58515ba510 1603 TFT.foreground(White);
arsenalist 24:5d58515ba510 1604 } else {
arsenalist 27:562a95c120cc 1605 //logging purpose
arsenalist 27:562a95c120cc 1606 seconds = time(NULL);
arsenalist 27:562a95c120cc 1607 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 27:562a95c120cc 1608 DBG.printf("logPE:%d\r\n",writeLog(q,"sendEnergyData failed"));
arsenalist 27:562a95c120cc 1609
arsenalist 24:5d58515ba510 1610 DBG.printf("send channel: %d failed\r\n",i);
arsenalist 24:5d58515ba510 1611 TFT.foreground(Red);
arsenalist 24:5d58515ba510 1612 TFT.locate(0,120);
arsenalist 24:5d58515ba510 1613 TFT.printf(" ");
arsenalist 24:5d58515ba510 1614 TFT.locate(0,120);
arsenalist 24:5d58515ba510 1615 TFT.printf("send ch%d failed",i);
arsenalist 24:5d58515ba510 1616 wait(1);
arsenalist 24:5d58515ba510 1617 TFT.locate(0,120);
arsenalist 24:5d58515ba510 1618 TFT.printf(" ");
arsenalist 24:5d58515ba510 1619 TFT.foreground(White);
arsenalist 24:5d58515ba510 1620 }
arsenalist 22:e18d361bf688 1621 }
arsenalist 4:76ab12e2f8a3 1622 }
arsenalist 22:e18d361bf688 1623
arsenalist 22:e18d361bf688 1624 newEnergyData = false;
arsenalist 0:f4e449fa34d7 1625 }
arsenalist 22:e18d361bf688 1626
arsenalist 24:5d58515ba510 1627 tPanelEnergy.reset();
arsenalist 4:76ab12e2f8a3 1628 loop++;
arsenalist 0:f4e449fa34d7 1629 }
arsenalist 0:f4e449fa34d7 1630
arsenalist 21:33bd8b82560f 1631 //panel environment
arsenalist 5:d00233dd36f5 1632 checkRxBuffer();
arsenalist 25:36c6a5db50ed 1633 if(tPanel.read() > 900.0f) { //900 is 15 minutes
arsenalist 21:33bd8b82560f 1634 int dTemp=0;
arsenalist 21:33bd8b82560f 1635 int dHum=0;
arsenalist 21:33bd8b82560f 1636 int dGas=0;
arsenalist 21:33bd8b82560f 1637
arsenalist 21:33bd8b82560f 1638 DBG.printf("getPanelEnvironment\r\n");
arsenalist 21:33bd8b82560f 1639
arsenalist 21:33bd8b82560f 1640 //get environment sensor
arsenalist 21:33bd8b82560f 1641 trial=0;
arsenalist 21:33bd8b82560f 1642 while(1) {
arsenalist 21:33bd8b82560f 1643 if(trial>=2) { //two times trial
arsenalist 21:33bd8b82560f 1644 break;
arsenalist 21:33bd8b82560f 1645 }
arsenalist 21:33bd8b82560f 1646 if(d.readData() == DHT11::OK) {
arsenalist 21:33bd8b82560f 1647 dTemp = d.readTemperature();
arsenalist 21:33bd8b82560f 1648 dHum = d.readHumidity();
arsenalist 21:33bd8b82560f 1649 break;
arsenalist 21:33bd8b82560f 1650 }
arsenalist 21:33bd8b82560f 1651 trial++;
arsenalist 21:33bd8b82560f 1652 wait(3);
arsenalist 21:33bd8b82560f 1653 }
arsenalist 21:33bd8b82560f 1654
arsenalist 21:33bd8b82560f 1655 //send environment sensor
arsenalist 24:5d58515ba510 1656 if(dTemp!=0 && dHum!=0) {
arsenalist 24:5d58515ba510 1657 seconds = time(NULL);
arsenalist 24:5d58515ba510 1658 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 22:e18d361bf688 1659
arsenalist 24:5d58515ba510 1660 //calculate hmacTime
arsenalist 24:5d58515ba510 1661 for(int j=0; j<sizeof(p); j++) {
arsenalist 24:5d58515ba510 1662 p[j]=0; }
arsenalist 24:5d58515ba510 1663 sprintf(p,"emma-%s-%s",emmaUID.c_str(),q);
arsenalist 24:5d58515ba510 1664 hmacTime = calculateMD5(p);
arsenalist 22:e18d361bf688 1665
arsenalist 24:5d58515ba510 1666 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"temp\":%d,\"hum\":%d,\"gas\":%d}",
arsenalist 24:5d58515ba510 1667 emmaUID.c_str(),hmacTime.c_str(),q,dTemp,dHum,dGas);
arsenalist 24:5d58515ba510 1668 //DBG.printf("dataEnvironment:\r\n%s\r\n",s);
arsenalist 43:612547648ed1 1669 sprintf(p,"/%s/api/controller/environment",appNAME.c_str());
arsenalist 43:612547648ed1 1670 rest.post(p,s);
arsenalist 43:612547648ed1 1671 //rest.post("/emma/api/controller/environment",s); //working
arsenalist 24:5d58515ba510 1672 wait(2);
arsenalist 24:5d58515ba510 1673 str = rxBuf;
arsenalist 24:5d58515ba510 1674 if(str.rfind("/environment") != std::string::npos) {
arsenalist 24:5d58515ba510 1675 str.erase(str.begin(),str.begin()+str.rfind("/environment"));
arsenalist 24:5d58515ba510 1676 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 27:562a95c120cc 1677 //logging purpose
arsenalist 27:562a95c120cc 1678 seconds = time(NULL);
arsenalist 27:562a95c120cc 1679 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 27:562a95c120cc 1680 DBG.printf("logPEnv:%d\r\n",writeLog(q,"sendPanelEnv success"));
arsenalist 24:5d58515ba510 1681 DBG.printf("send panel environment success\r\n");
arsenalist 24:5d58515ba510 1682 } else {
arsenalist 27:562a95c120cc 1683 //logging purpose
arsenalist 27:562a95c120cc 1684 seconds = time(NULL);
arsenalist 27:562a95c120cc 1685 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 27:562a95c120cc 1686 DBG.printf("logPEnv:%d\r\n",writeLog(q,"sendPanelEnv failed"));
arsenalist 24:5d58515ba510 1687 DBG.printf("send panel environment failed\r\n");
arsenalist 24:5d58515ba510 1688 }
arsenalist 21:33bd8b82560f 1689 }
arsenalist 24:5d58515ba510 1690 checkRxBuffer();
arsenalist 21:33bd8b82560f 1691 }
arsenalist 21:33bd8b82560f 1692 tPanel.reset();
arsenalist 21:33bd8b82560f 1693 }
arsenalist 21:33bd8b82560f 1694
arsenalist 0:f4e449fa34d7 1695 //nodeTemp
arsenalist 21:33bd8b82560f 1696 checkRxBuffer();
arsenalist 25:36c6a5db50ed 1697 if(tNodes.read() > 900.0f) { //900 is 15 minutes
arsenalist 5:d00233dd36f5 1698 DBG.printf("getNodesTemperature\r\n");
arsenalist 5:d00233dd36f5 1699
arsenalist 5:d00233dd36f5 1700 for(int i=0; i<NODES_MAX; i++) {
arsenalist 5:d00233dd36f5 1701 if(!nodes[i].ipAddr.empty()) {
arsenalist 5:d00233dd36f5 1702 //get node's temp
arsenalist 5:d00233dd36f5 1703 string temp;
arsenalist 5:d00233dd36f5 1704 nodes[i].restConn->get("/","<?xml version=\"1.0\" encoding=\"utf-8\"?><app_cmd cmd=\"2\"/>\r\n");
arsenalist 5:d00233dd36f5 1705 wait(2);
arsenalist 5:d00233dd36f5 1706 temp = rxBuf;
arsenalist 5:d00233dd36f5 1707 if(temp.rfind(nodes[i].ipAddr) != std::string::npos) {
arsenalist 5:d00233dd36f5 1708 temp.erase(temp.begin(),temp.begin()+temp.rfind(nodes[i].ipAddr));
arsenalist 5:d00233dd36f5 1709 if(temp.rfind("temp=") != std::string::npos) {
arsenalist 5:d00233dd36f5 1710 temp.erase(temp.begin(),temp.begin()+temp.rfind("temp=")+6);
arsenalist 5:d00233dd36f5 1711 temp.erase(temp.begin()+temp.find("\""),temp.end());
arsenalist 5:d00233dd36f5 1712 } else {
arsenalist 5:d00233dd36f5 1713 temp = "0"; //connect to node, but receive none
arsenalist 5:d00233dd36f5 1714 }
arsenalist 5:d00233dd36f5 1715 } else {
arsenalist 5:d00233dd36f5 1716 temp = "0"; //not connected to node
arsenalist 5:d00233dd36f5 1717 }
arsenalist 0:f4e449fa34d7 1718
arsenalist 5:d00233dd36f5 1719 DBG.printf("nodeTemp[%d]:%s\r\n",i,temp.c_str());
arsenalist 5:d00233dd36f5 1720
arsenalist 5:d00233dd36f5 1721 //send node's temp
arsenalist 25:36c6a5db50ed 1722 if(temp != "0") {
arsenalist 25:36c6a5db50ed 1723 seconds = time(NULL);
arsenalist 25:36c6a5db50ed 1724 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 22:e18d361bf688 1725
arsenalist 25:36c6a5db50ed 1726 //calculate hmacTime
arsenalist 25:36c6a5db50ed 1727 for(int j=0; j<sizeof(p); j++) {
arsenalist 25:36c6a5db50ed 1728 p[j]=0; }
arsenalist 25:36c6a5db50ed 1729 sprintf(p,"emma-%s-%s",emmaUID.c_str(),q);
arsenalist 25:36c6a5db50ed 1730 hmacTime = calculateMD5(p);
arsenalist 22:e18d361bf688 1731
arsenalist 25:36c6a5db50ed 1732 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"mac\":\"%s\",\"value\":%s}",
arsenalist 25:36c6a5db50ed 1733 emmaUID.c_str(),hmacTime.c_str(),q,nodes[i].macAddr.c_str(),temp.c_str());
arsenalist 25:36c6a5db50ed 1734 //DBG.printf("dataNodeTemp:\r\n%s\r\n",s);
arsenalist 43:612547648ed1 1735 sprintf(p,"/%s/api/controller/nodetemp",appNAME.c_str());
arsenalist 43:612547648ed1 1736 rest.post(p,s);
arsenalist 43:612547648ed1 1737 //rest.post("/emma/api/controller/nodetemp",s); //working
arsenalist 25:36c6a5db50ed 1738 wait(2);
arsenalist 25:36c6a5db50ed 1739 str = rxBuf;
arsenalist 25:36c6a5db50ed 1740 if(str.rfind("/nodetemp") != std::string::npos) {
arsenalist 25:36c6a5db50ed 1741 str.erase(str.begin(),str.begin()+str.rfind("/nodetemp"));
arsenalist 25:36c6a5db50ed 1742 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 25:36c6a5db50ed 1743 DBG.printf("send nodeTemp success\r\n");
arsenalist 25:36c6a5db50ed 1744 } else {
arsenalist 25:36c6a5db50ed 1745 DBG.printf("send nodeTemp failed\r\n");
arsenalist 25:36c6a5db50ed 1746 }
arsenalist 5:d00233dd36f5 1747 }
arsenalist 25:36c6a5db50ed 1748 checkRxBuffer();
arsenalist 5:d00233dd36f5 1749 }
arsenalist 5:d00233dd36f5 1750 }
arsenalist 0:f4e449fa34d7 1751 }
arsenalist 19:7e3e9332f719 1752 tNodes.reset();
arsenalist 19:7e3e9332f719 1753 }
arsenalist 21:33bd8b82560f 1754
arsenalist 21:33bd8b82560f 1755 //command
arsenalist 43:612547648ed1 1756 sprintf(r,"/%s/api/controller/command",appNAME.c_str());
arsenalist 40:77bd44f57ad3 1757 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\"}",
arsenalist 44:c1d11c491237 1758 emmaUID.c_str(),hmacTime.c_str()); //INI HARUSNYA HMAC BUKAN?
arsenalist 40:77bd44f57ad3 1759 //rest.get("/emma/api/controller/command");
arsenalist 40:77bd44f57ad3 1760 rest.post(r,s);
arsenalist 40:77bd44f57ad3 1761
arsenalist 5:d00233dd36f5 1762 checkRxBuffer();
arsenalist 0:f4e449fa34d7 1763 if(newCommand) {
arsenalist 42:b32e51a374c7 1764 //DBG.printf("newCommand:\r\n%s\r\n",globalCommand.c_str());
arsenalist 13:e8adfe305dbc 1765 TFT.locate(0,160);
arsenalist 13:e8adfe305dbc 1766 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 1767 TFT.locate(0,160);
arsenalist 13:e8adfe305dbc 1768 TFT.printf("newCommand");
arsenalist 13:e8adfe305dbc 1769
arsenalist 0:f4e449fa34d7 1770 MbedJSONValue jsonValue;
arsenalist 0:f4e449fa34d7 1771 parse(jsonValue,globalCommand.c_str());
arsenalist 40:77bd44f57ad3 1772 char *parameter[5] = {"from","nType","nAddr","dType","cmd"};
arsenalist 0:f4e449fa34d7 1773
arsenalist 41:2d023bd80a9c 1774 DBG.printf("get %d command\r\n",jsonValue.size());
arsenalist 41:2d023bd80a9c 1775
arsenalist 41:2d023bd80a9c 1776 //processing each command
arsenalist 41:2d023bd80a9c 1777 bool validCommand;
arsenalist 41:2d023bd80a9c 1778 for(int i=0; i<jsonValue.size(); i++) {
arsenalist 41:2d023bd80a9c 1779 //check whether command is valid
arsenalist 41:2d023bd80a9c 1780 DBG.printf("\r\nprocessing cmd[%d]\r\n",i);
arsenalist 41:2d023bd80a9c 1781 validCommand = true;
arsenalist 41:2d023bd80a9c 1782 for(int j=0; j<5; j++) {
arsenalist 41:2d023bd80a9c 1783 validCommand = validCommand && jsonValue[i].hasMember(parameter[j]);
arsenalist 41:2d023bd80a9c 1784 }
arsenalist 41:2d023bd80a9c 1785 DBG.printf("command validity:%d\r\n",validCommand);
arsenalist 41:2d023bd80a9c 1786
arsenalist 41:2d023bd80a9c 1787 if(validCommand) {
arsenalist 41:2d023bd80a9c 1788 string commandFrom = jsonValue[i][parameter[0]].get<std::string>();
arsenalist 41:2d023bd80a9c 1789 string commandNType = jsonValue[i][parameter[1]].get<std::string>();
arsenalist 41:2d023bd80a9c 1790 string commandNAddr = jsonValue[i][parameter[2]].get<std::string>();
arsenalist 41:2d023bd80a9c 1791 string commandDType = jsonValue[i][parameter[3]].get<std::string>();
arsenalist 41:2d023bd80a9c 1792 string commandCmd = jsonValue[i][parameter[4]].get<std::string>();
arsenalist 41:2d023bd80a9c 1793
arsenalist 41:2d023bd80a9c 1794 if(commandNType == "0") { //switch on panel controller
arsenalist 41:2d023bd80a9c 1795 DBG.printf("command for switch\r\n");
arsenalist 41:2d023bd80a9c 1796 }
arsenalist 42:b32e51a374c7 1797 else if(commandNType == "1") { //ir&rf remote control
arsenalist 42:b32e51a374c7 1798 DBG.printf("command for remote control\r\n");
arsenalist 41:2d023bd80a9c 1799 //get node ip address based on node mac address
arsenalist 41:2d023bd80a9c 1800 //string nodeIP;
arsenalist 41:2d023bd80a9c 1801 //nodeIp = readNodeIP(commandNAddr);
arsenalist 41:2d023bd80a9c 1802 //nodeIP = "192.168.2.15";
arsenalist 41:2d023bd80a9c 1803 //DBG.printf("nodeIP: %s\r\n",nodeIP.c_str());
arsenalist 41:2d023bd80a9c 1804
arsenalist 41:2d023bd80a9c 1805 //get index of node list based on mac address
arsenalist 41:2d023bd80a9c 1806 int idx = NODES_INVALID;
arsenalist 41:2d023bd80a9c 1807 for(int i=0; i<NODES_MAX; i++) {
arsenalist 41:2d023bd80a9c 1808 if(!nodes[i].macAddr.compare(commandNAddr)) {
arsenalist 41:2d023bd80a9c 1809 idx = i;
arsenalist 41:2d023bd80a9c 1810 }
arsenalist 41:2d023bd80a9c 1811 }
arsenalist 41:2d023bd80a9c 1812
arsenalist 41:2d023bd80a9c 1813 //execution process
arsenalist 41:2d023bd80a9c 1814 string execResult = "failed";
arsenalist 41:2d023bd80a9c 1815 if(idx != NODES_INVALID) {
arsenalist 41:2d023bd80a9c 1816 DBG.printf("index found at %d\r\n",idx);
arsenalist 41:2d023bd80a9c 1817
arsenalist 41:2d023bd80a9c 1818 //get cmd string based on device type and command number
arsenalist 41:2d023bd80a9c 1819 string nodeCmd;
arsenalist 41:2d023bd80a9c 1820 nodeCmd = readNodeCmd(commandDType,commandCmd);
arsenalist 41:2d023bd80a9c 1821
arsenalist 41:2d023bd80a9c 1822 //execute command
arsenalist 41:2d023bd80a9c 1823 DBG.printf("executing command\r\n");
arsenalist 41:2d023bd80a9c 1824 sprintf(s,"<?xml version=\"1.0\" encoding=\"utf-8\"?><app_cmd cmd=\"5\" /><app_data code=\"%s\"/>\r\n",nodeCmd.c_str());
arsenalist 41:2d023bd80a9c 1825
arsenalist 41:2d023bd80a9c 1826 trial=0;
arsenalist 41:2d023bd80a9c 1827 while(1) {
arsenalist 41:2d023bd80a9c 1828 rxBuf.clear();
arsenalist 41:2d023bd80a9c 1829 if(trial>=2) { //two times trial
arsenalist 41:2d023bd80a9c 1830 DBG.printf("cmd is not executed\r\n");
arsenalist 41:2d023bd80a9c 1831 TFT.foreground(Red);
arsenalist 41:2d023bd80a9c 1832 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1833 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 1834 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1835 TFT.printf("cmd is not executed");
arsenalist 41:2d023bd80a9c 1836 wait(1);
arsenalist 41:2d023bd80a9c 1837 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1838 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 1839 TFT.foreground(White);
arsenalist 41:2d023bd80a9c 1840 break;
arsenalist 41:2d023bd80a9c 1841 }
arsenalist 41:2d023bd80a9c 1842 nodes[idx].restConn->get("/",s);
arsenalist 41:2d023bd80a9c 1843 wait(2);
arsenalist 41:2d023bd80a9c 1844 if(rxBuf.find("REST: status = 200") != std::string::npos) {
arsenalist 41:2d023bd80a9c 1845 DBG.printf("cmd is executed\r\n");
arsenalist 41:2d023bd80a9c 1846 TFT.foreground(Green);
arsenalist 41:2d023bd80a9c 1847 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1848 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 1849 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1850 TFT.printf("cmd is executed");
arsenalist 41:2d023bd80a9c 1851 wait(1);
arsenalist 41:2d023bd80a9c 1852 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1853 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 1854 TFT.foreground(White);
arsenalist 41:2d023bd80a9c 1855 execResult = "success";
arsenalist 41:2d023bd80a9c 1856 break;
arsenalist 41:2d023bd80a9c 1857 }
arsenalist 41:2d023bd80a9c 1858 trial++;
arsenalist 41:2d023bd80a9c 1859 }
arsenalist 41:2d023bd80a9c 1860 } else {
arsenalist 41:2d023bd80a9c 1861 TFT.foreground(Red);
arsenalist 41:2d023bd80a9c 1862 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1863 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 1864 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1865 TFT.printf("node is invalid");
arsenalist 41:2d023bd80a9c 1866 wait(1);
arsenalist 41:2d023bd80a9c 1867 TFT.locate(0,180);
arsenalist 41:2d023bd80a9c 1868 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 1869 TFT.foreground(White);
arsenalist 41:2d023bd80a9c 1870 }
arsenalist 41:2d023bd80a9c 1871
arsenalist 41:2d023bd80a9c 1872 wait(2);
arsenalist 41:2d023bd80a9c 1873 //send execution result
arsenalist 41:2d023bd80a9c 1874 //DBG.printf("send execution result\r\n");
arsenalist 41:2d023bd80a9c 1875
arsenalist 41:2d023bd80a9c 1876 //calculate hmacCmd
arsenalist 41:2d023bd80a9c 1877 //for(int j=0; j<sizeof(p); j++) {
arsenalist 41:2d023bd80a9c 1878 // p[j]=0; }
arsenalist 41:2d023bd80a9c 1879 sprintf(p,"emma-%s-%s",emmaUID.c_str(),commandCmd.c_str());
arsenalist 41:2d023bd80a9c 1880 hmacCmd = calculateMD5(p);
arsenalist 41:2d023bd80a9c 1881
arsenalist 41:2d023bd80a9c 1882 sprintf(s,"{\"uid\":\"%s\",\"nType\":\"%s\",\"nAddr\":\"%s\",\"dType\":\"%s\",\"cmd\":\"%s\",\"from\":\"%s\",\"result\":\"%s\",\"hmac\":\"%s\"}",
arsenalist 41:2d023bd80a9c 1883 emmaUID.c_str(), commandNType.c_str(),commandNAddr.c_str(),commandDType.c_str(),commandCmd.c_str(),commandFrom.c_str(),execResult.c_str(),hmacCmd.c_str());
arsenalist 41:2d023bd80a9c 1884
arsenalist 41:2d023bd80a9c 1885 trial=0;
arsenalist 41:2d023bd80a9c 1886 while(1) {
arsenalist 41:2d023bd80a9c 1887 if(trial>=2) { //two times trial
arsenalist 41:2d023bd80a9c 1888 DBG.printf("failed to send execution result\r\n");
arsenalist 41:2d023bd80a9c 1889 break;
arsenalist 41:2d023bd80a9c 1890 }
arsenalist 43:612547648ed1 1891 sprintf(p,"/%s/api/controller/result",appNAME.c_str());
arsenalist 43:612547648ed1 1892 rest.post(p,s);
arsenalist 43:612547648ed1 1893 //rest.post("/emma/api/controller/result",s); //working
arsenalist 41:2d023bd80a9c 1894 wait(2);
arsenalist 41:2d023bd80a9c 1895 str = rxBuf;
arsenalist 41:2d023bd80a9c 1896 if(str.rfind("/result") != std::string::npos) {
arsenalist 41:2d023bd80a9c 1897 str.erase(str.begin(),str.begin()+str.rfind("/result"));
arsenalist 41:2d023bd80a9c 1898 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 41:2d023bd80a9c 1899 DBG.printf("success to send execution result\r\n");
arsenalist 41:2d023bd80a9c 1900 break;
arsenalist 41:2d023bd80a9c 1901 }
arsenalist 41:2d023bd80a9c 1902 }
arsenalist 42:b32e51a374c7 1903 //checkRxBuffer();
arsenalist 42:b32e51a374c7 1904 trial++;
arsenalist 42:b32e51a374c7 1905 }
arsenalist 42:b32e51a374c7 1906 } else if(commandNType == "2") { //wifi smart plug
arsenalist 42:b32e51a374c7 1907 DBG.printf("command for smart plug\r\n");
arsenalist 42:b32e51a374c7 1908
arsenalist 42:b32e51a374c7 1909 //get index of node list based on mac address
arsenalist 42:b32e51a374c7 1910 int idx = NODES_INVALID;
arsenalist 42:b32e51a374c7 1911 for(int i=0; i<NODES_MAX; i++) {
arsenalist 42:b32e51a374c7 1912 if(!nodes[i].macAddr.compare(commandNAddr)) {
arsenalist 42:b32e51a374c7 1913 idx = i;
arsenalist 42:b32e51a374c7 1914 }
arsenalist 42:b32e51a374c7 1915 }
arsenalist 42:b32e51a374c7 1916
arsenalist 42:b32e51a374c7 1917 //execution process
arsenalist 42:b32e51a374c7 1918 string execResult = "failed";
arsenalist 42:b32e51a374c7 1919 if(idx != NODES_INVALID) {
arsenalist 42:b32e51a374c7 1920 DBG.printf("index found at %d\r\n",idx);
arsenalist 42:b32e51a374c7 1921
arsenalist 42:b32e51a374c7 1922 //execute command
arsenalist 42:b32e51a374c7 1923 DBG.printf("executing command\r\n");
arsenalist 42:b32e51a374c7 1924 sprintf(s,"<?xml version=\"1.0\" encoding=\"utf-8\"?><app_cmd cmd=\"13\"/><app_data on-off=\"%s\"/>\r\n",commandCmd.c_str());
arsenalist 42:b32e51a374c7 1925
arsenalist 42:b32e51a374c7 1926 trial=0;
arsenalist 42:b32e51a374c7 1927 while(1) {
arsenalist 42:b32e51a374c7 1928 rxBuf.clear();
arsenalist 42:b32e51a374c7 1929 if(trial>=2) { //two times trial
arsenalist 42:b32e51a374c7 1930 DBG.printf("cmd is not executed\r\n");
arsenalist 42:b32e51a374c7 1931 TFT.foreground(Red);
arsenalist 42:b32e51a374c7 1932 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1933 TFT.printf(" ");
arsenalist 42:b32e51a374c7 1934 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1935 TFT.printf("cmd is not executed");
arsenalist 42:b32e51a374c7 1936 wait(1);
arsenalist 42:b32e51a374c7 1937 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1938 TFT.printf(" ");
arsenalist 42:b32e51a374c7 1939 TFT.foreground(White);
arsenalist 42:b32e51a374c7 1940 break;
arsenalist 42:b32e51a374c7 1941 }
arsenalist 42:b32e51a374c7 1942 nodes[idx].restConn->get("/",s);
arsenalist 42:b32e51a374c7 1943 wait(2);
arsenalist 42:b32e51a374c7 1944 if(rxBuf.find("REST: status = 200") != std::string::npos) {
arsenalist 42:b32e51a374c7 1945 DBG.printf("cmd is executed\r\n");
arsenalist 42:b32e51a374c7 1946 TFT.foreground(Green);
arsenalist 42:b32e51a374c7 1947 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1948 TFT.printf(" ");
arsenalist 42:b32e51a374c7 1949 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1950 TFT.printf("cmd is executed");
arsenalist 42:b32e51a374c7 1951 wait(1);
arsenalist 42:b32e51a374c7 1952 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1953 TFT.printf(" ");
arsenalist 42:b32e51a374c7 1954 TFT.foreground(White);
arsenalist 42:b32e51a374c7 1955 execResult = "success";
arsenalist 42:b32e51a374c7 1956 break;
arsenalist 42:b32e51a374c7 1957 }
arsenalist 42:b32e51a374c7 1958 trial++;
arsenalist 42:b32e51a374c7 1959 }
arsenalist 42:b32e51a374c7 1960 } else {
arsenalist 42:b32e51a374c7 1961 TFT.foreground(Red);
arsenalist 42:b32e51a374c7 1962 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1963 TFT.printf(" ");
arsenalist 42:b32e51a374c7 1964 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1965 TFT.printf("node is invalid");
arsenalist 42:b32e51a374c7 1966 wait(1);
arsenalist 42:b32e51a374c7 1967 TFT.locate(0,180);
arsenalist 42:b32e51a374c7 1968 TFT.printf(" ");
arsenalist 42:b32e51a374c7 1969 TFT.foreground(White);
arsenalist 42:b32e51a374c7 1970 }
arsenalist 42:b32e51a374c7 1971
arsenalist 42:b32e51a374c7 1972 wait(2);
arsenalist 42:b32e51a374c7 1973 //send execution result
arsenalist 42:b32e51a374c7 1974 //DBG.printf("send execution result\r\n");
arsenalist 42:b32e51a374c7 1975
arsenalist 42:b32e51a374c7 1976 //calculate hmacCmd
arsenalist 42:b32e51a374c7 1977 sprintf(p,"emma-%s-%s",emmaUID.c_str(),commandCmd.c_str());
arsenalist 42:b32e51a374c7 1978 hmacCmd = calculateMD5(p);
arsenalist 42:b32e51a374c7 1979
arsenalist 42:b32e51a374c7 1980 sprintf(s,"{\"uid\":\"%s\",\"nType\":\"%s\",\"nAddr\":\"%s\",\"dType\":\"%s\",\"cmd\":\"%s\",\"from\":\"%s\",\"result\":\"%s\",\"hmac\":\"%s\"}",
arsenalist 42:b32e51a374c7 1981 emmaUID.c_str(), commandNType.c_str(),commandNAddr.c_str(),commandDType.c_str(),commandCmd.c_str(),commandFrom.c_str(),execResult.c_str(),hmacCmd.c_str());
arsenalist 42:b32e51a374c7 1982
arsenalist 42:b32e51a374c7 1983 trial=0;
arsenalist 42:b32e51a374c7 1984 while(1) {
arsenalist 42:b32e51a374c7 1985 if(trial>=2) { //two times trial
arsenalist 42:b32e51a374c7 1986 DBG.printf("failed to send execution result\r\n");
arsenalist 42:b32e51a374c7 1987 break;
arsenalist 42:b32e51a374c7 1988 }
arsenalist 43:612547648ed1 1989 sprintf(p,"/%s/api/controller/result",appNAME.c_str());
arsenalist 43:612547648ed1 1990 rest.post(p,s);
arsenalist 43:612547648ed1 1991 //rest.post("/emma/api/controller/result",s); //working
arsenalist 42:b32e51a374c7 1992 wait(2);
arsenalist 42:b32e51a374c7 1993 str = rxBuf;
arsenalist 42:b32e51a374c7 1994 if(str.rfind("/result") != std::string::npos) {
arsenalist 42:b32e51a374c7 1995 str.erase(str.begin(),str.begin()+str.rfind("/result"));
arsenalist 42:b32e51a374c7 1996 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 42:b32e51a374c7 1997 DBG.printf("success to send execution result\r\n");
arsenalist 42:b32e51a374c7 1998 break;
arsenalist 42:b32e51a374c7 1999 }
arsenalist 42:b32e51a374c7 2000 }
arsenalist 42:b32e51a374c7 2001 //checkRxBuffer();
arsenalist 41:2d023bd80a9c 2002 trial++;
arsenalist 41:2d023bd80a9c 2003 }
arsenalist 41:2d023bd80a9c 2004 }
arsenalist 41:2d023bd80a9c 2005 }
arsenalist 41:2d023bd80a9c 2006 }
arsenalist 41:2d023bd80a9c 2007 //clear text on lcd
arsenalist 41:2d023bd80a9c 2008 TFT.locate(0,160);
arsenalist 41:2d023bd80a9c 2009 TFT.printf(" ");
arsenalist 41:2d023bd80a9c 2010
arsenalist 41:2d023bd80a9c 2011 newCommand = false;
arsenalist 41:2d023bd80a9c 2012
arsenalist 41:2d023bd80a9c 2013 /*
arsenalist 7:7e8c6ad3fd64 2014 //check whether command is valid
arsenalist 0:f4e449fa34d7 2015 bool validCommand = true;
arsenalist 15:136526c28afb 2016 for(int i=0; i<5; i++) {
arsenalist 0:f4e449fa34d7 2017 validCommand = validCommand && jsonValue.hasMember(parameter[i]);
arsenalist 0:f4e449fa34d7 2018 }
arsenalist 0:f4e449fa34d7 2019 DBG.printf("command validity:%d\r\n",validCommand);
arsenalist 0:f4e449fa34d7 2020
arsenalist 0:f4e449fa34d7 2021 if(validCommand) {
arsenalist 40:77bd44f57ad3 2022 string commandFrom = jsonValue[parameter[0]].get<std::string>();
arsenalist 15:136526c28afb 2023 string commandNType = jsonValue[parameter[1]].get<std::string>();
arsenalist 15:136526c28afb 2024 string commandNAddr = jsonValue[parameter[2]].get<std::string>();
arsenalist 15:136526c28afb 2025 string commandDType = jsonValue[parameter[3]].get<std::string>();
arsenalist 15:136526c28afb 2026 string commandCmd = jsonValue[parameter[4]].get<std::string>();
arsenalist 0:f4e449fa34d7 2027
arsenalist 0:f4e449fa34d7 2028 if(commandNType == "0") { //switch on panel controller
arsenalist 0:f4e449fa34d7 2029 DBG.printf("command for switch\r\n");
arsenalist 0:f4e449fa34d7 2030 }
arsenalist 0:f4e449fa34d7 2031 else if(commandNType == "1") { //node with mac address
arsenalist 0:f4e449fa34d7 2032 DBG.printf("command for node\r\n");
arsenalist 0:f4e449fa34d7 2033 //get node ip address based on node mac address
arsenalist 5:d00233dd36f5 2034 //string nodeIP;
arsenalist 1:d314a43ae6f7 2035 //nodeIp = readNodeIP(commandNAddr);
arsenalist 5:d00233dd36f5 2036 //nodeIP = "192.168.2.15";
arsenalist 0:f4e449fa34d7 2037 //DBG.printf("nodeIP: %s\r\n",nodeIP.c_str());
arsenalist 5:d00233dd36f5 2038
arsenalist 5:d00233dd36f5 2039 //get index of node list based on mac address
arsenalist 5:d00233dd36f5 2040 int idx = NODES_INVALID;
arsenalist 5:d00233dd36f5 2041 for(int i=0; i<NODES_MAX; i++) {
arsenalist 5:d00233dd36f5 2042 if(!nodes[i].macAddr.compare(commandNAddr)) {
arsenalist 5:d00233dd36f5 2043 idx = i;
arsenalist 5:d00233dd36f5 2044 }
arsenalist 5:d00233dd36f5 2045 }
arsenalist 5:d00233dd36f5 2046
arsenalist 5:d00233dd36f5 2047 //execution process
arsenalist 21:33bd8b82560f 2048 //int trial;
arsenalist 15:136526c28afb 2049 string execResult = "failed";
arsenalist 5:d00233dd36f5 2050 if(idx != NODES_INVALID) {
arsenalist 5:d00233dd36f5 2051 DBG.printf("index found at %d\r\n",idx);
arsenalist 0:f4e449fa34d7 2052
arsenalist 5:d00233dd36f5 2053 //get cmd string based on device type and command number
arsenalist 5:d00233dd36f5 2054 string nodeCmd;
arsenalist 14:8287f0f5d987 2055 nodeCmd = readNodeCmd(commandDType,commandCmd);
arsenalist 14:8287f0f5d987 2056 //nodeCmd = "020129A0163B161315131613153C151316131514143C153C16141414141415151315141414141514141415141414143D1514143D141415141414143D14000D"; //turn off
arsenalist 5:d00233dd36f5 2057 //DBG.printf("nodeCmd: %s\r\n",nodeCmd.c_str());
arsenalist 0:f4e449fa34d7 2058
arsenalist 5:d00233dd36f5 2059 //execute command
arsenalist 5:d00233dd36f5 2060 DBG.printf("executing command\r\n");
arsenalist 0:f4e449fa34d7 2061 sprintf(s,"<?xml version=\"1.0\" encoding=\"utf-8\"?><app_cmd cmd=\"5\" /><app_data code=\"%s\"/>\r\n",nodeCmd.c_str());
arsenalist 0:f4e449fa34d7 2062
arsenalist 5:d00233dd36f5 2063 trial=0;
arsenalist 0:f4e449fa34d7 2064 while(1) {
arsenalist 35:b8ba2b73201b 2065 rxBuf.clear();
arsenalist 5:d00233dd36f5 2066 //cmdExecuted = false;
arsenalist 5:d00233dd36f5 2067 if(trial>=2) { //two times trial
arsenalist 0:f4e449fa34d7 2068 DBG.printf("cmd is not executed\r\n");
arsenalist 13:e8adfe305dbc 2069 TFT.foreground(Red);
arsenalist 13:e8adfe305dbc 2070 TFT.locate(0,180);
arsenalist 13:e8adfe305dbc 2071 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 2072 TFT.locate(0,180);
arsenalist 13:e8adfe305dbc 2073 TFT.printf("cmd is not executed");
arsenalist 14:8287f0f5d987 2074 wait(1);
arsenalist 13:e8adfe305dbc 2075 TFT.locate(0,180);
arsenalist 13:e8adfe305dbc 2076 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 2077 TFT.foreground(White);
arsenalist 0:f4e449fa34d7 2078 break;
arsenalist 0:f4e449fa34d7 2079 }
arsenalist 5:d00233dd36f5 2080 nodes[idx].restConn->get("/",s);
arsenalist 5:d00233dd36f5 2081 wait(2);
arsenalist 35:b8ba2b73201b 2082 if(rxBuf.find("REST: status = 200") != std::string::npos) {
arsenalist 13:e8adfe305dbc 2083 DBG.printf("cmd is executed\r\n");
arsenalist 13:e8adfe305dbc 2084 TFT.foreground(Green);
arsenalist 13:e8adfe305dbc 2085 TFT.locate(0,180);
arsenalist 13:e8adfe305dbc 2086 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 2087 TFT.locate(0,180);
arsenalist 13:e8adfe305dbc 2088 TFT.printf("cmd is executed");
arsenalist 14:8287f0f5d987 2089 wait(1);
arsenalist 13:e8adfe305dbc 2090 TFT.locate(0,180);
arsenalist 13:e8adfe305dbc 2091 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 2092 TFT.foreground(White);
arsenalist 15:136526c28afb 2093 execResult = "success";
arsenalist 5:d00233dd36f5 2094 break;
arsenalist 5:d00233dd36f5 2095 }
arsenalist 0:f4e449fa34d7 2096 trial++;
arsenalist 5:d00233dd36f5 2097 }
arsenalist 14:8287f0f5d987 2098 } else {
arsenalist 14:8287f0f5d987 2099 TFT.foreground(Red);
arsenalist 14:8287f0f5d987 2100 TFT.locate(0,180);
arsenalist 14:8287f0f5d987 2101 TFT.printf(" ");
arsenalist 14:8287f0f5d987 2102 TFT.locate(0,180);
arsenalist 14:8287f0f5d987 2103 TFT.printf("node is invalid");
arsenalist 14:8287f0f5d987 2104 wait(1);
arsenalist 14:8287f0f5d987 2105 TFT.locate(0,180);
arsenalist 14:8287f0f5d987 2106 TFT.printf(" ");
arsenalist 14:8287f0f5d987 2107 TFT.foreground(White);
arsenalist 5:d00233dd36f5 2108 }
arsenalist 5:d00233dd36f5 2109
arsenalist 5:d00233dd36f5 2110 wait(2);
arsenalist 5:d00233dd36f5 2111 //send execution result
arsenalist 21:33bd8b82560f 2112 //DBG.printf("send execution result\r\n");
arsenalist 23:fb369e171b7d 2113
arsenalist 23:fb369e171b7d 2114 //calculate hmacCmd
arsenalist 23:fb369e171b7d 2115 for(int j=0; j<sizeof(p); j++) {
arsenalist 23:fb369e171b7d 2116 p[j]=0; }
arsenalist 23:fb369e171b7d 2117 sprintf(p,"emma-%s-%s",emmaUID.c_str(),commandCmd.c_str());
arsenalist 23:fb369e171b7d 2118 hmacCmd = calculateMD5(p);
arsenalist 23:fb369e171b7d 2119
arsenalist 40:77bd44f57ad3 2120 sprintf(s,"{\"uid\":\"%s\",\"nType\":\"%s\",\"nAddr\":\"%s\",\"dType\":\"%s\",\"cmd\":\"%s\",\"from\":\"%s\",\"result\":\"%s\",\"hmac\":\"%s\"}",
arsenalist 40:77bd44f57ad3 2121 emmaUID.c_str(), commandNType.c_str(),commandNAddr.c_str(),commandDType.c_str(),commandCmd.c_str(),commandFrom.c_str(),execResult.c_str(),hmacCmd.c_str());
arsenalist 5:d00233dd36f5 2122
arsenalist 5:d00233dd36f5 2123 trial=0;
arsenalist 5:d00233dd36f5 2124 while(1) {
arsenalist 5:d00233dd36f5 2125 if(trial>=2) { //two times trial
arsenalist 23:fb369e171b7d 2126 DBG.printf("failed to send execution result\r\n");
arsenalist 5:d00233dd36f5 2127 break;
arsenalist 0:f4e449fa34d7 2128 }
arsenalist 23:fb369e171b7d 2129 rest.post("/emma/api/controller/result",s);
arsenalist 5:d00233dd36f5 2130 wait(2);
arsenalist 23:fb369e171b7d 2131 str = rxBuf;
arsenalist 23:fb369e171b7d 2132 if(str.rfind("/result") != std::string::npos) {
arsenalist 23:fb369e171b7d 2133 str.erase(str.begin(),str.begin()+str.rfind("/result"));
arsenalist 23:fb369e171b7d 2134 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 23:fb369e171b7d 2135 DBG.printf("success to send execution result\r\n");
arsenalist 23:fb369e171b7d 2136 break;
arsenalist 23:fb369e171b7d 2137 }
arsenalist 0:f4e449fa34d7 2138 }
arsenalist 23:fb369e171b7d 2139 checkRxBuffer();
arsenalist 5:d00233dd36f5 2140 trial++;
arsenalist 0:f4e449fa34d7 2141 }
arsenalist 0:f4e449fa34d7 2142 }
arsenalist 0:f4e449fa34d7 2143 }
arsenalist 13:e8adfe305dbc 2144
arsenalist 13:e8adfe305dbc 2145 //clear text on lcd
arsenalist 13:e8adfe305dbc 2146 TFT.locate(0,160);
arsenalist 13:e8adfe305dbc 2147 TFT.printf(" ");
arsenalist 13:e8adfe305dbc 2148
arsenalist 0:f4e449fa34d7 2149 newCommand = false;
arsenalist 41:2d023bd80a9c 2150 */
arsenalist 2:fdfdeb5fd6fd 2151 }
arsenalist 30:08d290158fa7 2152
arsenalist 4:76ab12e2f8a3 2153 osDelay(5000);
arsenalist 0:f4e449fa34d7 2154 }
arsenalist 0:f4e449fa34d7 2155 }
arsenalist 0:f4e449fa34d7 2156 }
arsenalist 0:f4e449fa34d7 2157 void emmaModeFirmwareDownload(void) {
arsenalist 0:f4e449fa34d7 2158 bool emmaGetFirmwareParam = false;
arsenalist 0:f4e449fa34d7 2159
arsenalist 0:f4e449fa34d7 2160 DBG.printf("emmaModeFirmwareDownload\r\n");
arsenalist 0:f4e449fa34d7 2161
arsenalist 0:f4e449fa34d7 2162 char s[384];
arsenalist 0:f4e449fa34d7 2163 string str;
arsenalist 0:f4e449fa34d7 2164 string connData;
arsenalist 0:f4e449fa34d7 2165 string chunk;
arsenalist 0:f4e449fa34d7 2166
arsenalist 0:f4e449fa34d7 2167 //firmware parameter
arsenalist 0:f4e449fa34d7 2168 string firmwareVer;
arsenalist 0:f4e449fa34d7 2169 string firmwareName;
arsenalist 0:f4e449fa34d7 2170 int numPart;
arsenalist 0:f4e449fa34d7 2171
arsenalist 0:f4e449fa34d7 2172 //downloading
arsenalist 0:f4e449fa34d7 2173 string firmwarePart;
arsenalist 0:f4e449fa34d7 2174 string calcMD5;
arsenalist 0:f4e449fa34d7 2175 string srvrMD5;
arsenalist 0:f4e449fa34d7 2176 bool nextPart;
arsenalist 0:f4e449fa34d7 2177
arsenalist 0:f4e449fa34d7 2178 //set wifi to mode bridge
arsenalist 0:f4e449fa34d7 2179 _ESP.printf("MODE=B");
arsenalist 0:f4e449fa34d7 2180 DBG.printf("set mode bridge\r\n");
arsenalist 0:f4e449fa34d7 2181 while(1) {
arsenalist 0:f4e449fa34d7 2182 char rcv[128] = {};
arsenalist 0:f4e449fa34d7 2183 rcvReply(rcv,3000);
arsenalist 0:f4e449fa34d7 2184 str = rcv;
arsenalist 0:f4e449fa34d7 2185 if(str.find("MODE=B_OK") != std::string::npos)
arsenalist 0:f4e449fa34d7 2186 break;
arsenalist 0:f4e449fa34d7 2187 }
arsenalist 0:f4e449fa34d7 2188 DBG.printf("MODE=B\r\n");
arsenalist 0:f4e449fa34d7 2189
arsenalist 0:f4e449fa34d7 2190 esp.enable();
arsenalist 0:f4e449fa34d7 2191 wait(1);
arsenalist 0:f4e449fa34d7 2192 while(!esp.ready());
arsenalist 0:f4e449fa34d7 2193
arsenalist 0:f4e449fa34d7 2194 if(!rest.begin("candra.tritronik.com",3128,false)) {
arsenalist 0:f4e449fa34d7 2195 DBG.printf("EMMA: fail to setup rest");
arsenalist 0:f4e449fa34d7 2196 while(1);
arsenalist 0:f4e449fa34d7 2197 }
arsenalist 0:f4e449fa34d7 2198
arsenalist 0:f4e449fa34d7 2199 //wifiConnected = true; //with custom firmware, panel should connect wifi automatically
arsenalist 0:f4e449fa34d7 2200 useProxy = true;
arsenalist 0:f4e449fa34d7 2201
arsenalist 0:f4e449fa34d7 2202 esp.process();
arsenalist 0:f4e449fa34d7 2203 //set connData
arsenalist 0:f4e449fa34d7 2204 if(useProxy) {
arsenalist 0:f4e449fa34d7 2205 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2206 s[i]=0; }
arsenalist 38:e44f35f8129d 2207 //sprintf(s,"http://%s:%d/emma/api/controller/register?uid=%s&hmac=%s",restSERVER,restPORT,emmaUID.c_str(),hmac.c_str());
arsenalist 0:f4e449fa34d7 2208 sprintf(s,"http://192.168.128.69/emmaController/firmware/firmwareParameter");
arsenalist 0:f4e449fa34d7 2209 connData = s;
arsenalist 0:f4e449fa34d7 2210 } else {
arsenalist 0:f4e449fa34d7 2211 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2212 s[i]=0; }
arsenalist 0:f4e449fa34d7 2213 //sprintf(s,"/emma/api/controller/register?uid=%s&hmac=%s",emmaUID.c_str(),hmac.c_str());
arsenalist 0:f4e449fa34d7 2214 sprintf(s,"/emmaController/firmware/firmwareParameter");
arsenalist 0:f4e449fa34d7 2215 connData = s;
arsenalist 0:f4e449fa34d7 2216 }
arsenalist 0:f4e449fa34d7 2217
arsenalist 0:f4e449fa34d7 2218 //get parameter of firmware to be downloaded
arsenalist 0:f4e449fa34d7 2219 while(!emmaGetFirmwareParam) {
arsenalist 0:f4e449fa34d7 2220 rest.get(connData.c_str());
arsenalist 0:f4e449fa34d7 2221 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2222 s[i]=0; }
arsenalist 0:f4e449fa34d7 2223 rest.getResponse(s,sizeof(s));
arsenalist 0:f4e449fa34d7 2224 //DBG.printf("rsp param:%s\r\n",s);
arsenalist 0:f4e449fa34d7 2225
arsenalist 0:f4e449fa34d7 2226 str = s;
arsenalist 0:f4e449fa34d7 2227 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2228 str.erase(str.begin(),str.begin()+str.find("[")+1);
arsenalist 0:f4e449fa34d7 2229 str.erase(str.begin()+str.find("]"),str.end());
arsenalist 0:f4e449fa34d7 2230
arsenalist 0:f4e449fa34d7 2231 MbedJSONValue jsonValue;
arsenalist 0:f4e449fa34d7 2232 parse(jsonValue,str.c_str());
arsenalist 0:f4e449fa34d7 2233
arsenalist 0:f4e449fa34d7 2234 char *parameter[2] = {"firmwareVer","numPart"};
arsenalist 0:f4e449fa34d7 2235
arsenalist 0:f4e449fa34d7 2236 for(int i=0; i<2; i++) {
arsenalist 0:f4e449fa34d7 2237 if(jsonValue.hasMember(parameter[i])) {
arsenalist 0:f4e449fa34d7 2238 string val = jsonValue[parameter[i]].get<std::string>();
arsenalist 0:f4e449fa34d7 2239 if(i==0) {
arsenalist 0:f4e449fa34d7 2240 firmwareVer = val;
arsenalist 0:f4e449fa34d7 2241 } else if(i==1) {
arsenalist 0:f4e449fa34d7 2242 sscanf(val.c_str(),"%d",&numPart);
arsenalist 0:f4e449fa34d7 2243 }
arsenalist 0:f4e449fa34d7 2244 }
arsenalist 0:f4e449fa34d7 2245 }
arsenalist 0:f4e449fa34d7 2246
arsenalist 0:f4e449fa34d7 2247 if(!firmwareVer.empty() && numPart!=0) {
arsenalist 0:f4e449fa34d7 2248 emmaGetFirmwareParam = true;
arsenalist 0:f4e449fa34d7 2249 }
arsenalist 0:f4e449fa34d7 2250 }
arsenalist 0:f4e449fa34d7 2251 }
arsenalist 0:f4e449fa34d7 2252 DBG.printf("firmwareVer:%s\r\n",firmwareVer.c_str());
arsenalist 0:f4e449fa34d7 2253 DBG.printf("numPart:%d\r\n",numPart);
arsenalist 0:f4e449fa34d7 2254
arsenalist 0:f4e449fa34d7 2255 //clear firmware file
arsenalist 0:f4e449fa34d7 2256 while(1) {
arsenalist 0:f4e449fa34d7 2257 if(clearFirmware()){
arsenalist 0:f4e449fa34d7 2258 DBG.printf("clear firmware on sd card\r\n\r\n");
arsenalist 0:f4e449fa34d7 2259 break;
arsenalist 0:f4e449fa34d7 2260 }
arsenalist 0:f4e449fa34d7 2261 wait(1);
arsenalist 0:f4e449fa34d7 2262 }
arsenalist 0:f4e449fa34d7 2263
arsenalist 0:f4e449fa34d7 2264 //set connData
arsenalist 0:f4e449fa34d7 2265 if(useProxy) {
arsenalist 0:f4e449fa34d7 2266 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2267 s[i]=0; }
arsenalist 0:f4e449fa34d7 2268 sprintf(s,"http://192.168.128.69/emmaController/firmware/%s",firmwareVer.c_str());
arsenalist 0:f4e449fa34d7 2269 connData = s;
arsenalist 0:f4e449fa34d7 2270 } else {
arsenalist 0:f4e449fa34d7 2271 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2272 s[i]=0; }
arsenalist 0:f4e449fa34d7 2273 sprintf(s,"/emmaController/firmware/%s",firmwareVer.c_str());
arsenalist 0:f4e449fa34d7 2274 connData = s;
arsenalist 0:f4e449fa34d7 2275 }
arsenalist 0:f4e449fa34d7 2276
arsenalist 0:f4e449fa34d7 2277 //download firmware
arsenalist 0:f4e449fa34d7 2278 for(int n=0; n<numPart; n++) {
arsenalist 0:f4e449fa34d7 2279 nextPart = false;
arsenalist 0:f4e449fa34d7 2280 while(!nextPart) {
arsenalist 0:f4e449fa34d7 2281 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2282 s[i]=0; }
arsenalist 0:f4e449fa34d7 2283 sprintf(s,"%s/firmware_Hex_%s_%d",connData.c_str(),firmwareVer.c_str(),n);
arsenalist 0:f4e449fa34d7 2284 rest.get(s);
arsenalist 0:f4e449fa34d7 2285 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2286 s[i]=0; }
arsenalist 0:f4e449fa34d7 2287 rest.getResponse(s,sizeof(s));
arsenalist 0:f4e449fa34d7 2288 //DBG.printf("rsp[%d]:%s\r\n",n,s);
arsenalist 0:f4e449fa34d7 2289
arsenalist 0:f4e449fa34d7 2290 str = s;
arsenalist 0:f4e449fa34d7 2291 if(str.find("{") != std::string::npos && str.find("}") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2292 str.erase(str.begin(),str.begin()+str.find("{")+1);
arsenalist 0:f4e449fa34d7 2293 str.erase(str.begin()+str.find("}"),str.end());
arsenalist 0:f4e449fa34d7 2294 //DBG.printf("firmwarePart[%d]:%s\r\n",n,str.c_str());
arsenalist 0:f4e449fa34d7 2295 firmwarePart = str;
arsenalist 0:f4e449fa34d7 2296
arsenalist 0:f4e449fa34d7 2297 //calculated MD5
arsenalist 0:f4e449fa34d7 2298 calcMD5 = calculateMD5(firmwarePart);
arsenalist 0:f4e449fa34d7 2299 //DBG.printf("calcMD5[%d]:%s\r\n",n,calcMD5.c_str());
arsenalist 0:f4e449fa34d7 2300
arsenalist 0:f4e449fa34d7 2301 //MD5 from server
arsenalist 0:f4e449fa34d7 2302 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2303 s[i]=0; }
arsenalist 0:f4e449fa34d7 2304 sprintf(s,"%s/MD5/firmware_MD5_%s_%d",connData.c_str(),firmwareVer.c_str(),n);
arsenalist 0:f4e449fa34d7 2305 rest.get(s);
arsenalist 0:f4e449fa34d7 2306 for(int i=0; i<sizeof(s); i++) {
arsenalist 0:f4e449fa34d7 2307 s[i]=0; }
arsenalist 0:f4e449fa34d7 2308 rest.getResponse(s,sizeof(s));
arsenalist 0:f4e449fa34d7 2309
arsenalist 0:f4e449fa34d7 2310 str = s;
arsenalist 0:f4e449fa34d7 2311 if(str.find("{") != std::string::npos && str.find("}") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2312 str.erase(str.begin(),str.begin()+str.find("{")+1);
arsenalist 0:f4e449fa34d7 2313 str.erase(str.begin()+str.find("}"),str.end());
arsenalist 0:f4e449fa34d7 2314 srvrMD5 = str;
arsenalist 0:f4e449fa34d7 2315 //DBG.printf("srvrMD5[%d]:%s\r\n",n,srvrMD5.c_str());
arsenalist 0:f4e449fa34d7 2316
arsenalist 0:f4e449fa34d7 2317 //compare original MD5 vs MD5 from server
arsenalist 0:f4e449fa34d7 2318 if(strcmp(calcMD5.c_str(),srvrMD5.c_str()) == 0) {
arsenalist 0:f4e449fa34d7 2319 //DBG.printf("MD5 correct\r\n");
arsenalist 0:f4e449fa34d7 2320
arsenalist 0:f4e449fa34d7 2321 //save to sd card
arsenalist 0:f4e449fa34d7 2322 int st = writeFirmwareHexToChar(firmwarePart);
arsenalist 0:f4e449fa34d7 2323 if(st) {
arsenalist 0:f4e449fa34d7 2324 DBG.printf("firmwarePart[%d/%d] written\r\n",n,numPart-1);
arsenalist 0:f4e449fa34d7 2325 nextPart = true;
arsenalist 0:f4e449fa34d7 2326 }
arsenalist 0:f4e449fa34d7 2327
arsenalist 0:f4e449fa34d7 2328 } else {
arsenalist 0:f4e449fa34d7 2329 DBG.printf("MD5 incorrect\r\n");
arsenalist 0:f4e449fa34d7 2330 }
arsenalist 0:f4e449fa34d7 2331 }
arsenalist 0:f4e449fa34d7 2332 } else {
arsenalist 0:f4e449fa34d7 2333 DBG.printf("retry to fetch firmwarePart[%d]\r\n",n);
arsenalist 0:f4e449fa34d7 2334 }
arsenalist 0:f4e449fa34d7 2335 wait(0.5);
arsenalist 0:f4e449fa34d7 2336 }
arsenalist 0:f4e449fa34d7 2337 }
arsenalist 0:f4e449fa34d7 2338 DBG.printf("download finished\r\n");
arsenalist 0:f4e449fa34d7 2339 }
arsenalist 44:c1d11c491237 2340
arsenalist 44:c1d11c491237 2341 void emmaModeReserved(void) {
arsenalist 44:c1d11c491237 2342 char connBody[128];
arsenalist 44:c1d11c491237 2343 char s[256];
arsenalist 44:c1d11c491237 2344 char buf[1024];
arsenalist 44:c1d11c491237 2345 int connBodyLen;
arsenalist 44:c1d11c491237 2346 int i=0;
arsenalist 44:c1d11c491237 2347 int ret=99;
arsenalist 44:c1d11c491237 2348 string str;
arsenalist 44:c1d11c491237 2349 Timer t;
arsenalist 44:c1d11c491237 2350 TCPSocketConnection sock;
arsenalist 44:c1d11c491237 2351
arsenalist 44:c1d11c491237 2352 /*
arsenalist 44:c1d11c491237 2353 eth.init();
arsenalist 44:c1d11c491237 2354 while(1) {
arsenalist 44:c1d11c491237 2355 //command
arsenalist 44:c1d11c491237 2356 connBodyLen = sprintf(connBody,"{\"uid\":\"005e00553533510334313732\",\"hmac\":\"9424c60e708d8e3d3dff6d23fb104339\"}");
arsenalist 44:c1d11c491237 2357 sprintf(s,"POST /emma/api/controller/command HTTP/1.0\nHost: 36.80.35.8\nContent-Length:%d\n\n%s\r\n\r\n",connBodyLen,connBody);
arsenalist 44:c1d11c491237 2358 str.clear();
arsenalist 44:c1d11c491237 2359 str = ethREST("36.80.35.8",8080,s);
arsenalist 44:c1d11c491237 2360 DBG.printf("[%d]str:%s\r\n",i,str.c_str());
arsenalist 44:c1d11c491237 2361 i++;
arsenalist 44:c1d11c491237 2362 wait(5);
arsenalist 44:c1d11c491237 2363 }
arsenalist 44:c1d11c491237 2364 */
arsenalist 44:c1d11c491237 2365
arsenalist 44:c1d11c491237 2366 //start working as expected
arsenalist 44:c1d11c491237 2367 eth.init();
arsenalist 44:c1d11c491237 2368 eth.connect();
arsenalist 44:c1d11c491237 2369 connBodyLen = sprintf(connBody,"{\"uid\":\"005e00553533510334313732\",\"hmac\":\"9424c60e708d8e3d3dff6d23fb104339\"}");
arsenalist 44:c1d11c491237 2370 sprintf(s,"POST /emma/api/controller/command HTTP/1.0\nHost: 36.80.35.8\nContent-Length:%d\n\n%s\r\n\r\n",connBodyLen,connBody);
arsenalist 44:c1d11c491237 2371
arsenalist 44:c1d11c491237 2372 while(1) {
arsenalist 44:c1d11c491237 2373 //eth.connect();
arsenalist 44:c1d11c491237 2374 t.start();
arsenalist 44:c1d11c491237 2375 while(eth.linkstatus() && t.read() < 5 && ret !=0) {
arsenalist 44:c1d11c491237 2376 ret = sock.connect("36.80.35.8",8080);
arsenalist 44:c1d11c491237 2377 }
arsenalist 44:c1d11c491237 2378 t.stop();
arsenalist 44:c1d11c491237 2379 t.reset();
arsenalist 44:c1d11c491237 2380
arsenalist 44:c1d11c491237 2381 memset(buf,0,sizeof(buf));
arsenalist 44:c1d11c491237 2382 if(sock.is_connected()) {
arsenalist 44:c1d11c491237 2383 DBG.printf("connect\r\n");
arsenalist 44:c1d11c491237 2384 sock.send_all(s,sizeof(s)-1);
arsenalist 44:c1d11c491237 2385 wait(2);
arsenalist 44:c1d11c491237 2386 //receive return
arsenalist 44:c1d11c491237 2387 t.start();
arsenalist 44:c1d11c491237 2388 while(1) {
arsenalist 44:c1d11c491237 2389 ret = sock.receive(buf, sizeof(buf));
arsenalist 44:c1d11c491237 2390 if(ret<=0 || t.read() > 5) {
arsenalist 44:c1d11c491237 2391 t.stop();
arsenalist 44:c1d11c491237 2392 t.reset();
arsenalist 44:c1d11c491237 2393 break;
arsenalist 44:c1d11c491237 2394 }
arsenalist 44:c1d11c491237 2395 }
arsenalist 44:c1d11c491237 2396 sock.close();
arsenalist 44:c1d11c491237 2397 } else {
arsenalist 44:c1d11c491237 2398 DBG.printf("not connected\r\n");
arsenalist 44:c1d11c491237 2399 }
arsenalist 44:c1d11c491237 2400 //eth.disconnect();
arsenalist 44:c1d11c491237 2401 DBG.printf("[%d]BUF:%s\r\n\r\n",i,buf);
arsenalist 44:c1d11c491237 2402 i++;
arsenalist 44:c1d11c491237 2403 wait(5);
arsenalist 44:c1d11c491237 2404 }
arsenalist 44:c1d11c491237 2405 //end working as expected
arsenalist 44:c1d11c491237 2406 }
arsenalist 12:96f637ed37f9 2407 /*end emma mode*/
arsenalist 0:f4e449fa34d7 2408
arsenalist 4:76ab12e2f8a3 2409 /*start energy related*/
arsenalist 0:f4e449fa34d7 2410 void energyThread(void const*) {
arsenalist 19:7e3e9332f719 2411 Timer tEnergy;
arsenalist 19:7e3e9332f719 2412
arsenalist 19:7e3e9332f719 2413 while(1) {
arsenalist 19:7e3e9332f719 2414 tEnergy.start();
arsenalist 19:7e3e9332f719 2415 DBG.printf("energyThread-start\r\n");
arsenalist 19:7e3e9332f719 2416
arsenalist 19:7e3e9332f719 2417 AWattHrSum = 0;
arsenalist 19:7e3e9332f719 2418 BWattHrSum = 0;
arsenalist 19:7e3e9332f719 2419 CWattHrSum = 0;
arsenalist 19:7e3e9332f719 2420
arsenalist 20:ea14f175bbb4 2421 while(tEnergy.read() < 1*60.0) {
arsenalist 19:7e3e9332f719 2422 AWattHrValue = ADE.getWattHR(PHASE_A);
arsenalist 19:7e3e9332f719 2423 BWattHrValue = ADE.getWattHR(PHASE_B);
arsenalist 19:7e3e9332f719 2424 CWattHrValue = ADE.getWattHR(PHASE_C);
arsenalist 19:7e3e9332f719 2425
arsenalist 19:7e3e9332f719 2426 AWattHrSum += AWattHrValue;
arsenalist 19:7e3e9332f719 2427 BWattHrSum += BWattHrValue;
arsenalist 20:ea14f175bbb4 2428 CWattHrSum += CWattHrValue;
arsenalist 20:ea14f175bbb4 2429
arsenalist 20:ea14f175bbb4 2430
arsenalist 20:ea14f175bbb4 2431 //start check voltage and power
arsenalist 21:33bd8b82560f 2432 AVrms = ADE.VRMS(PHASE_A) * 0.000124f; //0.000158; //constants are from calculateVRMS function
arsenalist 21:33bd8b82560f 2433 BVrms = ADE.VRMS(PHASE_B) * 0.000123f;
arsenalist 21:33bd8b82560f 2434 CVrms = ADE.VRMS(PHASE_C) * 0.000122f;
arsenalist 20:ea14f175bbb4 2435
arsenalist 21:33bd8b82560f 2436 AIrms = ADE.IRMS(PHASE_A) * 0.00001006f; //0.0000125f; //constants are from calculateIRMS function
arsenalist 21:33bd8b82560f 2437 BIrms = ADE.IRMS(PHASE_B) * 0.00001005f;
arsenalist 21:33bd8b82560f 2438 CIrms = ADE.IRMS(PHASE_C) * 0.00001004f;
arsenalist 20:ea14f175bbb4 2439
arsenalist 20:ea14f175bbb4 2440 AWatt = AVrms * AIrms;
arsenalist 20:ea14f175bbb4 2441 BWatt = BVrms * BIrms;
arsenalist 20:ea14f175bbb4 2442 CWatt = CVrms * CIrms;
arsenalist 20:ea14f175bbb4 2443 //end check voltage and power
arsenalist 20:ea14f175bbb4 2444
arsenalist 19:7e3e9332f719 2445 }
arsenalist 19:7e3e9332f719 2446
arsenalist 25:36c6a5db50ed 2447 AWattHr = AWattHrSum * 0.000044169f; //0.0000198f;
arsenalist 25:36c6a5db50ed 2448 BWattHr = BWattHrSum * 0.000044168f; //0.0000197f;
arsenalist 25:36c6a5db50ed 2449 CWattHr = CWattHrSum * 0.000044167f; //0.0000196f;
arsenalist 19:7e3e9332f719 2450
arsenalist 22:e18d361bf688 2451 newEnergyData = true;
arsenalist 22:e18d361bf688 2452
arsenalist 19:7e3e9332f719 2453 tEnergy.stop();
arsenalist 19:7e3e9332f719 2454 tEnergy.reset();
arsenalist 19:7e3e9332f719 2455 DBG.printf("energyThread-finish\r\n");
arsenalist 19:7e3e9332f719 2456 }
arsenalist 0:f4e449fa34d7 2457 }
arsenalist 21:33bd8b82560f 2458 void checkVoltagePower(void) {
arsenalist 4:76ab12e2f8a3 2459 //check if voltage or power violates threshold
arsenalist 22:e18d361bf688 2460 char p[64];
arsenalist 20:ea14f175bbb4 2461 char q[32];
arsenalist 4:76ab12e2f8a3 2462 char s[256];
arsenalist 22:e18d361bf688 2463 string hmacTime;
arsenalist 4:76ab12e2f8a3 2464 string str;
arsenalist 20:ea14f175bbb4 2465 time_t seconds;
arsenalist 4:76ab12e2f8a3 2466
arsenalist 4:76ab12e2f8a3 2467 //DBG.printf("checkVoltagePower-start\r\n");
arsenalist 4:76ab12e2f8a3 2468
arsenalist 20:ea14f175bbb4 2469 //vrms and irms might be placed inside energy calculation routine
arsenalist 20:ea14f175bbb4 2470 /*
arsenalist 19:7e3e9332f719 2471 AVrms = ADE.VRMS(PHASE_A) * 0.000128f; //0.000158; //constants are from calculateVRMS function
arsenalist 19:7e3e9332f719 2472 BVrms = ADE.VRMS(PHASE_B) * 0.000127f; //0.000157;
arsenalist 19:7e3e9332f719 2473 CVrms = ADE.VRMS(PHASE_C) * 0.000126f; //0.000156;
arsenalist 19:7e3e9332f719 2474
arsenalist 19:7e3e9332f719 2475 AIrms = ADE.IRMS(PHASE_A) * 0.0000125f; //constants are from calculateIRMS function
arsenalist 19:7e3e9332f719 2476 BIrms = ADE.IRMS(PHASE_B) * 0.0000123f;
arsenalist 19:7e3e9332f719 2477 CIrms = ADE.IRMS(PHASE_C) * 0.0000124f;
arsenalist 4:76ab12e2f8a3 2478
arsenalist 4:76ab12e2f8a3 2479 AWatt = AVrms * AIrms;
arsenalist 4:76ab12e2f8a3 2480 BWatt = BVrms * BIrms;
arsenalist 4:76ab12e2f8a3 2481 CWatt = CVrms * CIrms;
arsenalist 20:ea14f175bbb4 2482 */
arsenalist 4:76ab12e2f8a3 2483
arsenalist 21:33bd8b82560f 2484 //DBG.printf("Vrms of each phase:%.2f - %.2f - %.2f\r\n", AVrms, BVrms, CVrms);
arsenalist 21:33bd8b82560f 2485 //DBG.printf("Watt of each phase:%.2f - %.2f - %.2f\r\n", AWatt, BWatt, CWatt);
arsenalist 21:33bd8b82560f 2486 //wait(1);
arsenalist 19:7e3e9332f719 2487
arsenalist 20:ea14f175bbb4 2488 //get time
arsenalist 20:ea14f175bbb4 2489 seconds = time(NULL);
arsenalist 20:ea14f175bbb4 2490 strftime(q, 32, "%Y-%m-%d %H:%M:%S",localtime(&seconds));
arsenalist 20:ea14f175bbb4 2491
arsenalist 22:e18d361bf688 2492 //calculate hmacTime
arsenalist 22:e18d361bf688 2493 for(int j=0; j<sizeof(p); j++) {
arsenalist 22:e18d361bf688 2494 p[j]=0; }
arsenalist 22:e18d361bf688 2495 sprintf(p,"emma-%s-%s",emmaUID.c_str(),q);
arsenalist 22:e18d361bf688 2496 hmacTime = calculateMD5(p);
arsenalist 22:e18d361bf688 2497
arsenalist 4:76ab12e2f8a3 2498 if(AVrms > VRMSTHRESHOLD || AWatt > WATTTHRESHOLD) {
arsenalist 4:76ab12e2f8a3 2499 DBG.printf("alert on ch1\r\n");
arsenalist 20:ea14f175bbb4 2500 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"voltage\":%.2f,\"power\":%.2f}",
arsenalist 22:e18d361bf688 2501 emmaUID.c_str(),hmacTime.c_str(),q,AVrms,AWatt);
arsenalist 43:612547648ed1 2502
arsenalist 43:612547648ed1 2503 sprintf(p,"/%s/api/controller/alert/1",appNAME.c_str());
arsenalist 43:612547648ed1 2504 rest.post(p,s);
arsenalist 43:612547648ed1 2505 //rest.post("/emma/api/controller/alert/1",s); //working
arsenalist 4:76ab12e2f8a3 2506 wait(2);
arsenalist 4:76ab12e2f8a3 2507 str = rxBuf;
arsenalist 4:76ab12e2f8a3 2508 if(str.rfind("/alert/1") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2509 str.erase(str.begin(),str.begin()+str.rfind("/alert/1"));
arsenalist 4:76ab12e2f8a3 2510 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2511 DBG.printf("send alert ch1 success\r\n");
arsenalist 4:76ab12e2f8a3 2512 } else {
arsenalist 4:76ab12e2f8a3 2513 DBG.printf("send alert ch1 failed\r\n");
arsenalist 4:76ab12e2f8a3 2514 }
arsenalist 4:76ab12e2f8a3 2515 }
arsenalist 4:76ab12e2f8a3 2516 }
arsenalist 4:76ab12e2f8a3 2517
arsenalist 4:76ab12e2f8a3 2518 if(BVrms > VRMSTHRESHOLD || BWatt > WATTTHRESHOLD) {
arsenalist 4:76ab12e2f8a3 2519 DBG.printf("alert on ch2\r\n");
arsenalist 20:ea14f175bbb4 2520 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"voltage\":%.2f,\"power\":%.2f}",
arsenalist 22:e18d361bf688 2521 emmaUID.c_str(),hmacTime.c_str(),q,BVrms,BWatt);
arsenalist 43:612547648ed1 2522 sprintf(p,"/%s/api/controller/alert/2",appNAME.c_str());
arsenalist 43:612547648ed1 2523 rest.post(p,s);
arsenalist 43:612547648ed1 2524 //rest.post("/emma/api/controller/alert/2",s);
arsenalist 4:76ab12e2f8a3 2525 wait(2);
arsenalist 4:76ab12e2f8a3 2526 str = rxBuf;
arsenalist 4:76ab12e2f8a3 2527 if(str.rfind("/alert/2") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2528 str.erase(str.begin(),str.begin()+str.rfind("/alert/2"));
arsenalist 4:76ab12e2f8a3 2529 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2530 DBG.printf("send alert ch2 success\r\n");
arsenalist 4:76ab12e2f8a3 2531 } else {
arsenalist 4:76ab12e2f8a3 2532 DBG.printf("send alert ch2 failed\r\n");
arsenalist 4:76ab12e2f8a3 2533 }
arsenalist 4:76ab12e2f8a3 2534 }
arsenalist 4:76ab12e2f8a3 2535 }
arsenalist 4:76ab12e2f8a3 2536
arsenalist 4:76ab12e2f8a3 2537 if(CVrms > VRMSTHRESHOLD || CWatt > WATTTHRESHOLD) {
arsenalist 7:7e8c6ad3fd64 2538 DBG.printf("alert on ch3\r\n");
arsenalist 4:76ab12e2f8a3 2539 DBG.printf("alert on ch3\r\n");
arsenalist 20:ea14f175bbb4 2540 sprintf(s,"{\"uid\":\"%s\",\"hmac\":\"%s\",\"time\":\"%s\",\"voltage\":%.2f,\"power\":%.2f}",
arsenalist 22:e18d361bf688 2541 emmaUID.c_str(),hmacTime.c_str(),q,CVrms,CWatt);
arsenalist 43:612547648ed1 2542 sprintf(p,"/%s/api/controller/alert/3",appNAME.c_str());
arsenalist 43:612547648ed1 2543 rest.post(p,s);
arsenalist 43:612547648ed1 2544 //rest.post("/emma/api/controller/alert/3",s);
arsenalist 4:76ab12e2f8a3 2545 wait(2);
arsenalist 4:76ab12e2f8a3 2546 str = rxBuf;
arsenalist 4:76ab12e2f8a3 2547 if(str.rfind("/alert/3") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2548 str.erase(str.begin(),str.begin()+str.rfind("/alert/3"));
arsenalist 4:76ab12e2f8a3 2549 if(str.find("\"status\":\"success\"") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2550 DBG.printf("send alert ch3 success\r\n");
arsenalist 4:76ab12e2f8a3 2551 } else {
arsenalist 4:76ab12e2f8a3 2552 DBG.printf("send alert ch3 failed\r\n");
arsenalist 4:76ab12e2f8a3 2553 }
arsenalist 4:76ab12e2f8a3 2554 }
arsenalist 4:76ab12e2f8a3 2555 }
arsenalist 4:76ab12e2f8a3 2556 //DBG.printf("checkVoltagePower-finish\r\n");
arsenalist 4:76ab12e2f8a3 2557 }
arsenalist 4:76ab12e2f8a3 2558 /*end energy related*/
arsenalist 0:f4e449fa34d7 2559
arsenalist 0:f4e449fa34d7 2560 /*start wifi mqtt*/
arsenalist 0:f4e449fa34d7 2561 void mqttConnected(void* response) {
arsenalist 1:d314a43ae6f7 2562 DBG.printf("MQTT Connected\r\n");
arsenalist 0:f4e449fa34d7 2563 char mqttTopic[64];
arsenalist 38:e44f35f8129d 2564 sprintf(mqttTopic,"%s/%s/command",mqttDOMAIN.c_str(),emmaUID.c_str());
arsenalist 27:562a95c120cc 2565 //mqtt.subscribe(mqttTopic);
arsenalist 0:f4e449fa34d7 2566 }
arsenalist 0:f4e449fa34d7 2567 void mqttDisconnected(void* response) {
arsenalist 1:d314a43ae6f7 2568 DBG.printf("MQTT Disconnected\r\n");
arsenalist 0:f4e449fa34d7 2569 }
arsenalist 0:f4e449fa34d7 2570 /*end wifi mqtt*/
arsenalist 0:f4e449fa34d7 2571
arsenalist 0:f4e449fa34d7 2572 /*start wifi rest*/
arsenalist 27:562a95c120cc 2573 void wifiCb(void* response) {
arsenalist 27:562a95c120cc 2574 uint32_t status;
arsenalist 27:562a95c120cc 2575 RESPONSE res(response);
arsenalist 27:562a95c120cc 2576
arsenalist 27:562a95c120cc 2577 if(res.getArgc() == 1) {
arsenalist 27:562a95c120cc 2578 res.popArgs((uint8_t*)&status,4);
arsenalist 27:562a95c120cc 2579 if(status == STATION_GOT_IP) {
arsenalist 27:562a95c120cc 2580 DBG.printf("WIFI Connected\r\n");
arsenalist 27:562a95c120cc 2581 //wifiConnected = true;
arsenalist 27:562a95c120cc 2582 }
arsenalist 27:562a95c120cc 2583 else {
arsenalist 27:562a95c120cc 2584 //wifiConnected = false;
arsenalist 27:562a95c120cc 2585 }
arsenalist 27:562a95c120cc 2586 }
arsenalist 27:562a95c120cc 2587 }
arsenalist 27:562a95c120cc 2588
arsenalist 4:76ab12e2f8a3 2589 void rxInterrupt(void) {
arsenalist 4:76ab12e2f8a3 2590 char c;
arsenalist 4:76ab12e2f8a3 2591
arsenalist 4:76ab12e2f8a3 2592 while(_ESP.readable()) {
arsenalist 4:76ab12e2f8a3 2593 c = _ESP.getc();
arsenalist 4:76ab12e2f8a3 2594 if(c != 0) { //char is not null
arsenalist 4:76ab12e2f8a3 2595 rxBuf += c;
arsenalist 4:76ab12e2f8a3 2596 }
arsenalist 4:76ab12e2f8a3 2597 }
arsenalist 4:76ab12e2f8a3 2598 }
arsenalist 4:76ab12e2f8a3 2599 void checkRxBuffer(void) {
arsenalist 4:76ab12e2f8a3 2600 //check new command
arsenalist 4:76ab12e2f8a3 2601 if(rxBuf.rfind("/command") != std::string::npos) {
arsenalist 4:76ab12e2f8a3 2602 rxBuf.erase(rxBuf.begin(),rxBuf.begin()+rxBuf.rfind("/command"));
arsenalist 41:2d023bd80a9c 2603 if(rxBuf.find("[{") != std::string::npos && rxBuf.rfind("}]") != std::string::npos) {
arsenalist 41:2d023bd80a9c 2604 rxBuf.erase(rxBuf.begin(),rxBuf.begin()+rxBuf.find("[{"));
arsenalist 41:2d023bd80a9c 2605 rxBuf.erase(rxBuf.begin()+rxBuf.rfind("}]")+2,rxBuf.end());
arsenalist 41:2d023bd80a9c 2606
arsenalist 41:2d023bd80a9c 2607 //start special handler
arsenalist 41:2d023bd80a9c 2608 while(1){
arsenalist 41:2d023bd80a9c 2609 if(rxBuf.find("}],") != std::string::npos) {
arsenalist 41:2d023bd80a9c 2610 rxBuf.erase(rxBuf.begin()+rxBuf.find("}],")+1,rxBuf.begin()+rxBuf.find("}],")+2);
arsenalist 41:2d023bd80a9c 2611 } else {
arsenalist 41:2d023bd80a9c 2612 break;
arsenalist 41:2d023bd80a9c 2613 }
arsenalist 41:2d023bd80a9c 2614 }
arsenalist 41:2d023bd80a9c 2615 //end special handler
arsenalist 41:2d023bd80a9c 2616
arsenalist 4:76ab12e2f8a3 2617 globalCommand = rxBuf;
arsenalist 4:76ab12e2f8a3 2618 newCommand = true;
arsenalist 4:76ab12e2f8a3 2619 }
arsenalist 4:76ab12e2f8a3 2620 }
arsenalist 4:76ab12e2f8a3 2621
arsenalist 24:5d58515ba510 2622 //check free memory -> reinitialize mqtt connection
arsenalist 27:562a95c120cc 2623 if(rxBuf.rfind("Free memory") != std::string::npos) {
arsenalist 27:562a95c120cc 2624 rxLog = "Free memory-" + rxBuf;
arsenalist 24:5d58515ba510 2625 espFreeMemory = true;
arsenalist 24:5d58515ba510 2626 }
arsenalist 24:5d58515ba510 2627
arsenalist 27:562a95c120cc 2628 //check dhcp client start -> initialize all connection
arsenalist 27:562a95c120cc 2629 if(rxBuf.rfind("dhcp client start") != std::string::npos) {
arsenalist 27:562a95c120cc 2630 rxLogA = "dhcp client start-" + rxBuf;
arsenalist 27:562a95c120cc 2631 espDHCPClientStart = true;
arsenalist 27:562a95c120cc 2632 }
arsenalist 27:562a95c120cc 2633
arsenalist 4:76ab12e2f8a3 2634 //clear rxBuf
arsenalist 4:76ab12e2f8a3 2635 rxBuf.clear();
arsenalist 4:76ab12e2f8a3 2636 }
arsenalist 0:f4e449fa34d7 2637 /*end wifi rest*/
arsenalist 0:f4e449fa34d7 2638
arsenalist 0:f4e449fa34d7 2639 /*start emma settings*/
arsenalist 0:f4e449fa34d7 2640 string getUID(void) {
arsenalist 0:f4e449fa34d7 2641 char s[32];
arsenalist 0:f4e449fa34d7 2642 unsigned long *unique = (unsigned long *)BASE_ADDR;
arsenalist 0:f4e449fa34d7 2643 sprintf(s,"%08x%08x%08x",unique[0], unique[1], unique[2]);
arsenalist 0:f4e449fa34d7 2644 return s;
arsenalist 0:f4e449fa34d7 2645 }
arsenalist 0:f4e449fa34d7 2646
arsenalist 0:f4e449fa34d7 2647 string readSetting(string parameter) {
arsenalist 0:f4e449fa34d7 2648 FILE *fp;
arsenalist 0:f4e449fa34d7 2649 signed char c;
arsenalist 0:f4e449fa34d7 2650 int i=0;
arsenalist 0:f4e449fa34d7 2651 char s[64];
arsenalist 0:f4e449fa34d7 2652 string strS;
arsenalist 0:f4e449fa34d7 2653
arsenalist 0:f4e449fa34d7 2654 sprintf(s,"/sd/settings/%s.txt",parameter.c_str());
arsenalist 0:f4e449fa34d7 2655
arsenalist 0:f4e449fa34d7 2656 fp = fopen(s,"r");
arsenalist 0:f4e449fa34d7 2657 memset(s,0,sizeof(s));
arsenalist 0:f4e449fa34d7 2658 if(fp != NULL) {
arsenalist 0:f4e449fa34d7 2659 while(1) {
arsenalist 0:f4e449fa34d7 2660 c = fgetc(fp);
arsenalist 0:f4e449fa34d7 2661 if(c == EOF){
arsenalist 0:f4e449fa34d7 2662 break;
arsenalist 0:f4e449fa34d7 2663 }
arsenalist 0:f4e449fa34d7 2664 s[i] = c;
arsenalist 0:f4e449fa34d7 2665 i++;
arsenalist 0:f4e449fa34d7 2666 }
arsenalist 0:f4e449fa34d7 2667 strS = s;
arsenalist 0:f4e449fa34d7 2668 if(strS.find("(") != std::string::npos && strS.find(")") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2669 strS.erase(strS.begin(),strS.begin()+strS.find("(")+1);
arsenalist 0:f4e449fa34d7 2670 strS.erase(strS.begin()+strS.find(")"),strS.end());
arsenalist 0:f4e449fa34d7 2671 } else {
arsenalist 0:f4e449fa34d7 2672 strS = "";
arsenalist 0:f4e449fa34d7 2673 }
arsenalist 0:f4e449fa34d7 2674 }
arsenalist 0:f4e449fa34d7 2675 fclose(fp);
arsenalist 30:08d290158fa7 2676 free(fp);
arsenalist 0:f4e449fa34d7 2677 return strS;
arsenalist 0:f4e449fa34d7 2678 }
arsenalist 0:f4e449fa34d7 2679
arsenalist 0:f4e449fa34d7 2680 bool writeSetting(string parameter, string value) {
arsenalist 0:f4e449fa34d7 2681 FILE *fp;
arsenalist 0:f4e449fa34d7 2682 char s[255];
arsenalist 0:f4e449fa34d7 2683
arsenalist 0:f4e449fa34d7 2684 sprintf(s,"/sd/settings/%s.txt",parameter.c_str());
arsenalist 0:f4e449fa34d7 2685 fp = fopen(s,"w");
arsenalist 0:f4e449fa34d7 2686 if(fp != NULL) {
arsenalist 0:f4e449fa34d7 2687 fprintf(fp,value.c_str());
arsenalist 0:f4e449fa34d7 2688 fclose(fp);
arsenalist 30:08d290158fa7 2689 free(fp);
arsenalist 0:f4e449fa34d7 2690 return true;
arsenalist 0:f4e449fa34d7 2691 }
arsenalist 30:08d290158fa7 2692 fclose(fp);
arsenalist 30:08d290158fa7 2693 free(fp);
arsenalist 0:f4e449fa34d7 2694 return false;
arsenalist 0:f4e449fa34d7 2695 }
arsenalist 0:f4e449fa34d7 2696 /*end emma settings*/
arsenalist 0:f4e449fa34d7 2697
arsenalist 0:f4e449fa34d7 2698 /*start emma node*/
arsenalist 0:f4e449fa34d7 2699 string readNodeIP(string macAddr) {
arsenalist 0:f4e449fa34d7 2700 FILE *fp;
arsenalist 0:f4e449fa34d7 2701 signed char c;
arsenalist 0:f4e449fa34d7 2702 int i=0;
arsenalist 0:f4e449fa34d7 2703 char s[64];
arsenalist 0:f4e449fa34d7 2704 string strS;
arsenalist 0:f4e449fa34d7 2705
arsenalist 0:f4e449fa34d7 2706 sprintf(s,"/sd/nodeList/%s/nodeIP.txt",macAddr.c_str());
arsenalist 0:f4e449fa34d7 2707
arsenalist 0:f4e449fa34d7 2708 fp = fopen(s,"r");
arsenalist 0:f4e449fa34d7 2709 memset(s,0,sizeof(s));
arsenalist 0:f4e449fa34d7 2710 if(fp != NULL) {
arsenalist 0:f4e449fa34d7 2711 while(1) {
arsenalist 0:f4e449fa34d7 2712 c = fgetc(fp);
arsenalist 0:f4e449fa34d7 2713 if(c == EOF){
arsenalist 0:f4e449fa34d7 2714 break;
arsenalist 0:f4e449fa34d7 2715 }
arsenalist 0:f4e449fa34d7 2716 s[i] = c;
arsenalist 0:f4e449fa34d7 2717 i++;
arsenalist 0:f4e449fa34d7 2718 }
arsenalist 0:f4e449fa34d7 2719 strS = s;
arsenalist 0:f4e449fa34d7 2720 if(strS.find("(") != std::string::npos && strS.find(")") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2721 strS.erase(strS.begin(),strS.begin()+strS.find("(")+1);
arsenalist 0:f4e449fa34d7 2722 strS.erase(strS.begin()+strS.find(")"),strS.end());
arsenalist 0:f4e449fa34d7 2723 } else {
arsenalist 0:f4e449fa34d7 2724 strS = "";
arsenalist 0:f4e449fa34d7 2725 }
arsenalist 0:f4e449fa34d7 2726 }
arsenalist 0:f4e449fa34d7 2727 fclose(fp);
arsenalist 30:08d290158fa7 2728 free(fp);
arsenalist 0:f4e449fa34d7 2729 return strS;
arsenalist 0:f4e449fa34d7 2730 }
arsenalist 0:f4e449fa34d7 2731
arsenalist 0:f4e449fa34d7 2732 string readNodeCmd(string dType, string cmd) {
arsenalist 0:f4e449fa34d7 2733 FILE *fp;
arsenalist 0:f4e449fa34d7 2734 signed char c;
arsenalist 0:f4e449fa34d7 2735 int i=0;
arsenalist 34:8555d471b880 2736 char s[2048];
arsenalist 0:f4e449fa34d7 2737 string strS;
arsenalist 0:f4e449fa34d7 2738
arsenalist 0:f4e449fa34d7 2739 sprintf(s,"/sd/nodeCode/%s/%s.txt",dType.c_str(),cmd.c_str());
arsenalist 0:f4e449fa34d7 2740
arsenalist 0:f4e449fa34d7 2741 fp = fopen(s,"r");
arsenalist 0:f4e449fa34d7 2742 memset(s,0,sizeof(s));
arsenalist 0:f4e449fa34d7 2743 if(fp != NULL) {
arsenalist 0:f4e449fa34d7 2744 while(1) {
arsenalist 0:f4e449fa34d7 2745 c = fgetc(fp);
arsenalist 0:f4e449fa34d7 2746 if(c == EOF){
arsenalist 0:f4e449fa34d7 2747 break;
arsenalist 0:f4e449fa34d7 2748 }
arsenalist 0:f4e449fa34d7 2749 s[i] = c;
arsenalist 0:f4e449fa34d7 2750 i++;
arsenalist 0:f4e449fa34d7 2751 }
arsenalist 0:f4e449fa34d7 2752 strS = s;
arsenalist 0:f4e449fa34d7 2753 if(strS.find("(") != std::string::npos && strS.find(")") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2754 strS.erase(strS.begin(),strS.begin()+strS.find("(")+1);
arsenalist 0:f4e449fa34d7 2755 strS.erase(strS.begin()+strS.find(")"),strS.end());
arsenalist 0:f4e449fa34d7 2756 } else {
arsenalist 0:f4e449fa34d7 2757 strS = "";
arsenalist 0:f4e449fa34d7 2758 }
arsenalist 0:f4e449fa34d7 2759 }
arsenalist 0:f4e449fa34d7 2760 fclose(fp);
arsenalist 30:08d290158fa7 2761 free(fp);
arsenalist 0:f4e449fa34d7 2762 return strS;
arsenalist 0:f4e449fa34d7 2763 }
arsenalist 0:f4e449fa34d7 2764
arsenalist 0:f4e449fa34d7 2765 string *readNodeList(void) {
arsenalist 0:f4e449fa34d7 2766 static string nd[10]; //max node
arsenalist 0:f4e449fa34d7 2767 DIR *d;
arsenalist 0:f4e449fa34d7 2768 struct dirent *p;
arsenalist 0:f4e449fa34d7 2769 string q;
arsenalist 0:f4e449fa34d7 2770 int i=0;
arsenalist 0:f4e449fa34d7 2771
arsenalist 0:f4e449fa34d7 2772 d = opendir("/sd/nodeList");
arsenalist 0:f4e449fa34d7 2773 if(d != NULL) {
arsenalist 0:f4e449fa34d7 2774 while((p = readdir(d)) != NULL) {
arsenalist 0:f4e449fa34d7 2775 q = p->d_name;
arsenalist 0:f4e449fa34d7 2776 nd[i] = q;
arsenalist 0:f4e449fa34d7 2777 i++;
arsenalist 0:f4e449fa34d7 2778 }
arsenalist 0:f4e449fa34d7 2779 }
arsenalist 0:f4e449fa34d7 2780 closedir(d);
arsenalist 30:08d290158fa7 2781 free(d);
arsenalist 0:f4e449fa34d7 2782 return nd;
arsenalist 0:f4e449fa34d7 2783 }
arsenalist 0:f4e449fa34d7 2784
arsenalist 0:f4e449fa34d7 2785 string wifiGetNodeTemp(string macAddr) {
arsenalist 0:f4e449fa34d7 2786 int trial=0;
arsenalist 0:f4e449fa34d7 2787 string nodeIP = readNodeIP(macAddr);
arsenalist 0:f4e449fa34d7 2788 string str;
arsenalist 0:f4e449fa34d7 2789 string temp = "0";
arsenalist 0:f4e449fa34d7 2790
arsenalist 0:f4e449fa34d7 2791 if(rest.begin(nodeIP.c_str(),REMOTE_TCP_PORT,false)) {
arsenalist 0:f4e449fa34d7 2792 while(1) {
arsenalist 0:f4e449fa34d7 2793 char rcv[256] = {};
arsenalist 0:f4e449fa34d7 2794 rest.get("/","<?xml version=\"1.0\" encoding=\"utf-8\"?><app_cmd cmd=\"2\"/>\r\n");
arsenalist 0:f4e449fa34d7 2795 rest.getResponse(rcv,sizeof(rcv));
arsenalist 0:f4e449fa34d7 2796 str = rcv;
arsenalist 0:f4e449fa34d7 2797 if(str.find("temp=") != std::string::npos) {
arsenalist 0:f4e449fa34d7 2798 str.erase(str.begin(),str.begin()+str.find("temp=")+6);
arsenalist 0:f4e449fa34d7 2799 str.erase(str.begin()+str.find("\""),str.end());
arsenalist 0:f4e449fa34d7 2800 temp = str;
arsenalist 0:f4e449fa34d7 2801 break;
arsenalist 0:f4e449fa34d7 2802 }
arsenalist 0:f4e449fa34d7 2803 if(trial>1) { //three times trial
arsenalist 0:f4e449fa34d7 2804 break;
arsenalist 0:f4e449fa34d7 2805 }
arsenalist 0:f4e449fa34d7 2806 trial++;
arsenalist 0:f4e449fa34d7 2807 wait(2);
arsenalist 0:f4e449fa34d7 2808 }
arsenalist 0:f4e449fa34d7 2809 }
arsenalist 0:f4e449fa34d7 2810 return temp;
arsenalist 0:f4e449fa34d7 2811 }
arsenalist 0:f4e449fa34d7 2812 /*end emma node*/
arsenalist 0:f4e449fa34d7 2813
arsenalist 0:f4e449fa34d7 2814 /*start emma connection function*/
arsenalist 40:77bd44f57ad3 2815 string ethREST(string host, int port, string data) {
arsenalist 0:f4e449fa34d7 2816 char buf[1024];
arsenalist 0:f4e449fa34d7 2817 char s[256];
arsenalist 0:f4e449fa34d7 2818 int ret;
arsenalist 44:c1d11c491237 2819
arsenalist 44:c1d11c491237 2820 //eth.init(); //use DHCP
arsenalist 44:c1d11c491237 2821 eth.connect();
arsenalist 44:c1d11c491237 2822
arsenalist 0:f4e449fa34d7 2823 TCPSocketConnection sock;
arsenalist 0:f4e449fa34d7 2824 Timer t;
arsenalist 0:f4e449fa34d7 2825
arsenalist 40:77bd44f57ad3 2826 sprintf(s,"%s",data.c_str());
arsenalist 0:f4e449fa34d7 2827 sock.connect(host.c_str(),port);
arsenalist 0:f4e449fa34d7 2828 sock.send_all(s,sizeof(s)-1);
arsenalist 0:f4e449fa34d7 2829 wait(2);
arsenalist 0:f4e449fa34d7 2830
arsenalist 0:f4e449fa34d7 2831 //receive return
arsenalist 0:f4e449fa34d7 2832 t.start();
arsenalist 0:f4e449fa34d7 2833 while(1) {
arsenalist 0:f4e449fa34d7 2834 ret = sock.receive(buf, sizeof(buf));
arsenalist 0:f4e449fa34d7 2835 if(ret<=0 || t.read_ms() > 10000) {
arsenalist 0:f4e449fa34d7 2836 t.stop();
arsenalist 0:f4e449fa34d7 2837 break;
arsenalist 0:f4e449fa34d7 2838 }
arsenalist 0:f4e449fa34d7 2839 }
arsenalist 0:f4e449fa34d7 2840 sock.close();
arsenalist 44:c1d11c491237 2841 eth.disconnect();
arsenalist 0:f4e449fa34d7 2842 return buf;
arsenalist 0:f4e449fa34d7 2843 }
arsenalist 0:f4e449fa34d7 2844 /*end emma connection function*/
arsenalist 0:f4e449fa34d7 2845
arsenalist 0:f4e449fa34d7 2846 /*start emma private function*/
arsenalist 8:51a0ca9079ca 2847 void isEthAvailable(void) {
arsenalist 44:c1d11c491237 2848 //if(ipstack.getEth().linkstatus()) {
arsenalist 44:c1d11c491237 2849 if(eth.linkstatus()) {
arsenalist 8:51a0ca9079ca 2850 ethAvailable = true;
arsenalist 8:51a0ca9079ca 2851 } else {
arsenalist 8:51a0ca9079ca 2852 ethAvailable = false;
arsenalist 8:51a0ca9079ca 2853 }
arsenalist 44:c1d11c491237 2854 eth.init(); //init ethernet
arsenalist 8:51a0ca9079ca 2855 }
arsenalist 8:51a0ca9079ca 2856
arsenalist 8:51a0ca9079ca 2857 void isEthConnected(void) {
arsenalist 8:51a0ca9079ca 2858 char s[512];
arsenalist 8:51a0ca9079ca 2859 int connPort;
arsenalist 8:51a0ca9079ca 2860 string connHost;
arsenalist 8:51a0ca9079ca 2861 string str;
arsenalist 8:51a0ca9079ca 2862 Timer t;
arsenalist 8:51a0ca9079ca 2863
arsenalist 8:51a0ca9079ca 2864 if(ethAvailable) {
arsenalist 8:51a0ca9079ca 2865 if(useProxy) {
arsenalist 8:51a0ca9079ca 2866 connHost = proxySERVER;
arsenalist 8:51a0ca9079ca 2867 sscanf(proxyPORT.c_str(),"%d",&connPort);
arsenalist 44:c1d11c491237 2868 //for(int i=0; i<sizeof(s); i++) {
arsenalist 44:c1d11c491237 2869 // s[i]=0; }
arsenalist 43:612547648ed1 2870 sprintf(s,"GET http://%s:%s/%s/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),appNAME.c_str(),restSERVER.c_str());
arsenalist 8:51a0ca9079ca 2871 } else {
arsenalist 38:e44f35f8129d 2872 connHost = restSERVER;
arsenalist 38:e44f35f8129d 2873 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 44:c1d11c491237 2874 //for(int i=0; i<sizeof(s); i++) {
arsenalist 44:c1d11c491237 2875 // s[i]=0; }
arsenalist 43:612547648ed1 2876 sprintf(s,"GET /%s/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",appNAME.c_str(),restSERVER.c_str());
arsenalist 8:51a0ca9079ca 2877 }
arsenalist 8:51a0ca9079ca 2878
arsenalist 8:51a0ca9079ca 2879 t.start();
arsenalist 8:51a0ca9079ca 2880 while(1) {
arsenalist 40:77bd44f57ad3 2881 str = ethREST(connHost,connPort,s);
arsenalist 44:c1d11c491237 2882 if(str.find("\"status\":\"OK\"") != std::string::npos) {
arsenalist 8:51a0ca9079ca 2883 t.stop();
arsenalist 8:51a0ca9079ca 2884 ethConnected = true;
arsenalist 8:51a0ca9079ca 2885 break;
arsenalist 8:51a0ca9079ca 2886 }
arsenalist 8:51a0ca9079ca 2887 if(t.read_ms() > 5000) {
arsenalist 8:51a0ca9079ca 2888 t.stop();
arsenalist 8:51a0ca9079ca 2889 ethConnected = false;
arsenalist 8:51a0ca9079ca 2890 break;
arsenalist 8:51a0ca9079ca 2891 }
arsenalist 8:51a0ca9079ca 2892 }
arsenalist 8:51a0ca9079ca 2893 } else {
arsenalist 8:51a0ca9079ca 2894 ethConnected = false;
arsenalist 8:51a0ca9079ca 2895 }
arsenalist 8:51a0ca9079ca 2896 }
arsenalist 8:51a0ca9079ca 2897
arsenalist 8:51a0ca9079ca 2898 void isWiFiConnected(void) { //WARNING: should be run in emmaModeRegister and emmaModeOperation only - limitation with esp, after MODE=B, cannot go to MODE=S
arsenalist 8:51a0ca9079ca 2899 char s[512];
arsenalist 8:51a0ca9079ca 2900 int connPort;
arsenalist 8:51a0ca9079ca 2901 string connHost;
arsenalist 8:51a0ca9079ca 2902 string str;
arsenalist 8:51a0ca9079ca 2903 Timer t;
arsenalist 8:51a0ca9079ca 2904
arsenalist 29:4d94a03d38e0 2905 /*
arsenalist 27:562a95c120cc 2906 esp.enable();
arsenalist 27:562a95c120cc 2907 wait(1);
arsenalist 27:562a95c120cc 2908 esp.reset();
arsenalist 27:562a95c120cc 2909 wait(1);
arsenalist 27:562a95c120cc 2910 while(!esp.ready());
arsenalist 27:562a95c120cc 2911
arsenalist 27:562a95c120cc 2912 //rest begin
arsenalist 38:e44f35f8129d 2913 if(!rest.begin(restSERVER,restPORT,false)) {
arsenalist 27:562a95c120cc 2914 DBG.printf("EMMA: fail to setup rest\r\n");
arsenalist 27:562a95c120cc 2915 TFT.locate(0,20);
arsenalist 27:562a95c120cc 2916 TFT.printf("EMMA: fail to setup rest");
arsenalist 27:562a95c120cc 2917 while(1);
arsenalist 27:562a95c120cc 2918 }
arsenalist 27:562a95c120cc 2919
arsenalist 27:562a95c120cc 2920 //setup wifi
arsenalist 27:562a95c120cc 2921 DBG.printf("EMMA: setup wifi\r\n");
arsenalist 27:562a95c120cc 2922 TFT.locate(0,20);
arsenalist 27:562a95c120cc 2923 TFT.printf("EMMA: setup wifi");
arsenalist 27:562a95c120cc 2924 wait(1);
arsenalist 27:562a95c120cc 2925 esp.wifiCb.attach(&wifiCb);
arsenalist 28:7561035e3df5 2926 //esp.wifiConnect("Tritronik Mobile","Tri12@11");
arsenalist 28:7561035e3df5 2927 esp.wifiConnect(wifiSSID.c_str(),wifiPASS.c_str());
arsenalist 27:562a95c120cc 2928 DBG.printf("EMMA: system started\r\n");
arsenalist 27:562a95c120cc 2929 TFT.locate(0,20);
arsenalist 27:562a95c120cc 2930 TFT.printf("EMMA: system started");
arsenalist 27:562a95c120cc 2931 t.start();
arsenalist 28:7561035e3df5 2932 while(t.read() < 20);
arsenalist 27:562a95c120cc 2933 t.stop();
arsenalist 27:562a95c120cc 2934 t.reset();
arsenalist 28:7561035e3df5 2935 TFT.locate(0,20);
arsenalist 28:7561035e3df5 2936 TFT.printf(" ");
arsenalist 29:4d94a03d38e0 2937 */
arsenalist 27:562a95c120cc 2938
arsenalist 8:51a0ca9079ca 2939 if(wifiAvailable) {
arsenalist 8:51a0ca9079ca 2940 _ESP.printf("MODE=B");
arsenalist 8:51a0ca9079ca 2941 if(useProxy) {
arsenalist 8:51a0ca9079ca 2942 connHost = proxySERVER;
arsenalist 8:51a0ca9079ca 2943 sscanf(proxyPORT.c_str(),"%d",&connPort);
arsenalist 44:c1d11c491237 2944 //for(int i=0; i<sizeof(s); i++) {
arsenalist 44:c1d11c491237 2945 // s[i]=0; }
arsenalist 43:612547648ed1 2946 sprintf(s,"http://%s:%s/%s/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),appNAME.c_str(),restSERVER.c_str());
arsenalist 8:51a0ca9079ca 2947 } else {
arsenalist 38:e44f35f8129d 2948 connHost = restSERVER;
arsenalist 38:e44f35f8129d 2949 sscanf(restPORT.c_str(),"%d",&connPort);
arsenalist 44:c1d11c491237 2950 //for(int i=0; i<sizeof(s); i++) {
arsenalist 44:c1d11c491237 2951 // s[i]=0; }
arsenalist 43:612547648ed1 2952 sprintf(s,"/%s/api/controller/test",appNAME.c_str());
arsenalist 8:51a0ca9079ca 2953 }
arsenalist 27:562a95c120cc 2954 wait(2);
arsenalist 8:51a0ca9079ca 2955 t.start();
arsenalist 28:7561035e3df5 2956 while(!esp.ready() && t.read() < 20);
arsenalist 8:51a0ca9079ca 2957 t.stop();
arsenalist 27:562a95c120cc 2958 t.reset();
arsenalist 8:51a0ca9079ca 2959 if(rest.begin(connHost.c_str(),connPort,false)) {
arsenalist 44:c1d11c491237 2960 //DBG.printf("rest begin\r\n");
arsenalist 8:51a0ca9079ca 2961 esp.process();
arsenalist 8:51a0ca9079ca 2962 rest.get(s);
arsenalist 44:c1d11c491237 2963 //for(int i=0; i<sizeof(s); i++) {
arsenalist 44:c1d11c491237 2964 // s[i]=0; }
arsenalist 8:51a0ca9079ca 2965 rest.getResponse(s,sizeof(s));
arsenalist 8:51a0ca9079ca 2966 str = s;
arsenalist 27:562a95c120cc 2967 DBG.printf("response:%s\r\n",s);
arsenalist 44:c1d11c491237 2968 if(str.find("\"status\":\"OK\"") != std::string::npos) {
arsenalist 8:51a0ca9079ca 2969 wifiConnected = true;
arsenalist 8:51a0ca9079ca 2970 }
arsenalist 8:51a0ca9079ca 2971 } else {
arsenalist 8:51a0ca9079ca 2972 wifiConnected = false;
arsenalist 8:51a0ca9079ca 2973 }
arsenalist 8:51a0ca9079ca 2974 } else {
arsenalist 8:51a0ca9079ca 2975 wifiConnected = false;
arsenalist 8:51a0ca9079ca 2976 }
arsenalist 8:51a0ca9079ca 2977 }
arsenalist 8:51a0ca9079ca 2978
arsenalist 8:51a0ca9079ca 2979 void isGprsConnected(void) {
arsenalist 8:51a0ca9079ca 2980
arsenalist 8:51a0ca9079ca 2981 }
arsenalist 0:f4e449fa34d7 2982
arsenalist 0:f4e449fa34d7 2983 void addChar(char *s, char c) {
arsenalist 0:f4e449fa34d7 2984 uint16_t k; //customized for EMS
arsenalist 0:f4e449fa34d7 2985 k = strlen(s);
arsenalist 0:f4e449fa34d7 2986 s[k] = c;
arsenalist 0:f4e449fa34d7 2987 s[k + 1] = 0;
arsenalist 0:f4e449fa34d7 2988 }
arsenalist 0:f4e449fa34d7 2989
arsenalist 0:f4e449fa34d7 2990 void rcvReply(char *r, int to) {
arsenalist 0:f4e449fa34d7 2991 Timer t;
arsenalist 0:f4e449fa34d7 2992 bool ended = false;
arsenalist 0:f4e449fa34d7 2993 char c;
arsenalist 0:f4e449fa34d7 2994
arsenalist 0:f4e449fa34d7 2995 strcpy(r,"");
arsenalist 0:f4e449fa34d7 2996 t.start();
arsenalist 0:f4e449fa34d7 2997 while(!ended) {
arsenalist 0:f4e449fa34d7 2998 if(_ESP.readable()) {
arsenalist 0:f4e449fa34d7 2999 c = _ESP.getc();
arsenalist 0:f4e449fa34d7 3000 addChar(r,c);
arsenalist 0:f4e449fa34d7 3001 t.start();
arsenalist 0:f4e449fa34d7 3002 }
arsenalist 0:f4e449fa34d7 3003 if(t.read_ms() > to) {
arsenalist 0:f4e449fa34d7 3004 ended = true;
arsenalist 0:f4e449fa34d7 3005 }
arsenalist 0:f4e449fa34d7 3006 }
arsenalist 0:f4e449fa34d7 3007 addChar(r, 0x00);
arsenalist 0:f4e449fa34d7 3008 }
arsenalist 0:f4e449fa34d7 3009
arsenalist 0:f4e449fa34d7 3010 string calculateMD5(string text) {
arsenalist 0:f4e449fa34d7 3011 char s[64];
arsenalist 0:f4e449fa34d7 3012 memset(s,0,sizeof(s)); //for unknown reason, after reading UID, the 's' will contaion UID data
arsenalist 0:f4e449fa34d7 3013 uint8_t hash[16];
arsenalist 0:f4e449fa34d7 3014 MD5::computeHash(hash, (uint8_t*)text.c_str(), strlen(text.c_str()));
arsenalist 0:f4e449fa34d7 3015 for(int i=0; i<16; ++i) {
arsenalist 0:f4e449fa34d7 3016 sprintf(s,"%s%02x",s,hash[i]);
arsenalist 0:f4e449fa34d7 3017 }
arsenalist 0:f4e449fa34d7 3018 return s;
arsenalist 0:f4e449fa34d7 3019 }
arsenalist 0:f4e449fa34d7 3020
arsenalist 0:f4e449fa34d7 3021 bool writeFirmwareHexToChar(string value) {
arsenalist 0:f4e449fa34d7 3022 FILE *fp;
arsenalist 0:f4e449fa34d7 3023 char s[32];
arsenalist 0:f4e449fa34d7 3024 int number;
arsenalist 0:f4e449fa34d7 3025 string chunk;
arsenalist 0:f4e449fa34d7 3026
arsenalist 0:f4e449fa34d7 3027 sprintf(s,"/sd/newFirmware/firmware.bin");
arsenalist 0:f4e449fa34d7 3028 fp = fopen(s,"a");
arsenalist 0:f4e449fa34d7 3029 if(fp != NULL) {
arsenalist 0:f4e449fa34d7 3030 for(int ch=0; ch<value.size(); ch+=2) {
arsenalist 0:f4e449fa34d7 3031 chunk = value.substr(ch,2);
arsenalist 0:f4e449fa34d7 3032 sscanf(chunk.c_str(),"%x",&number);
arsenalist 0:f4e449fa34d7 3033 fprintf(fp,"%c",number);
arsenalist 0:f4e449fa34d7 3034 }
arsenalist 0:f4e449fa34d7 3035 fclose(fp);
arsenalist 30:08d290158fa7 3036 free(fp);
arsenalist 0:f4e449fa34d7 3037 return true;
arsenalist 0:f4e449fa34d7 3038 }
arsenalist 30:08d290158fa7 3039 fclose(fp);
arsenalist 30:08d290158fa7 3040 free(fp);
arsenalist 0:f4e449fa34d7 3041 return false;
arsenalist 0:f4e449fa34d7 3042 }
arsenalist 0:f4e449fa34d7 3043
arsenalist 0:f4e449fa34d7 3044 bool clearFirmware(void) {
arsenalist 0:f4e449fa34d7 3045 FILE *fp;
arsenalist 0:f4e449fa34d7 3046 char s[32];
arsenalist 0:f4e449fa34d7 3047
arsenalist 0:f4e449fa34d7 3048 sprintf(s,"/sd/newFirmware/firmware.bin");
arsenalist 0:f4e449fa34d7 3049 fp = fopen(s,"w");
arsenalist 0:f4e449fa34d7 3050 if(fp != NULL) {
arsenalist 0:f4e449fa34d7 3051 fprintf(fp,"");
arsenalist 0:f4e449fa34d7 3052 fclose(fp);
arsenalist 30:08d290158fa7 3053 free(fp);
arsenalist 0:f4e449fa34d7 3054 return true;
arsenalist 0:f4e449fa34d7 3055 }
arsenalist 30:08d290158fa7 3056 fclose(fp);
arsenalist 30:08d290158fa7 3057 free(fp);
arsenalist 0:f4e449fa34d7 3058 return false;
arsenalist 0:f4e449fa34d7 3059 }
arsenalist 27:562a95c120cc 3060
arsenalist 27:562a95c120cc 3061 bool writeLog(string logTime, string logData) {
arsenalist 27:562a95c120cc 3062 FILE *fp;
arsenalist 27:562a95c120cc 3063 char s[255];
arsenalist 27:562a95c120cc 3064 string logAll;
arsenalist 27:562a95c120cc 3065 logAll = logTime + "\t" + logData + "\r\n";
arsenalist 27:562a95c120cc 3066
arsenalist 27:562a95c120cc 3067 sprintf(s,"/sd/log.txt");
arsenalist 27:562a95c120cc 3068 fp = fopen(s,"a");
arsenalist 27:562a95c120cc 3069 if(fp != NULL) {
arsenalist 27:562a95c120cc 3070 fprintf(fp,logAll.c_str());
arsenalist 27:562a95c120cc 3071 fclose(fp);
arsenalist 30:08d290158fa7 3072 free(fp);
arsenalist 27:562a95c120cc 3073 return true;
arsenalist 27:562a95c120cc 3074 }
arsenalist 30:08d290158fa7 3075 fclose(fp);
arsenalist 30:08d290158fa7 3076 free(fp);
arsenalist 30:08d290158fa7 3077 return false;
arsenalist 30:08d290158fa7 3078 }
arsenalist 30:08d290158fa7 3079
arsenalist 30:08d290158fa7 3080 bool writeDbg(string dbgTime, string dbgData) {
arsenalist 30:08d290158fa7 3081 FILE *fp;
arsenalist 30:08d290158fa7 3082 char s[255];
arsenalist 30:08d290158fa7 3083 string dbgAll;
arsenalist 30:08d290158fa7 3084 dbgAll = dbgTime + "\t" + dbgData + "\r\n";
arsenalist 30:08d290158fa7 3085
arsenalist 30:08d290158fa7 3086 sprintf(s,"/sd/dbg.txt");
arsenalist 30:08d290158fa7 3087 fp = fopen(s,"a");
arsenalist 30:08d290158fa7 3088 if(fp != NULL) {
arsenalist 30:08d290158fa7 3089 fprintf(fp,dbgAll.c_str());
arsenalist 30:08d290158fa7 3090 fclose(fp);
arsenalist 30:08d290158fa7 3091 free(fp);
arsenalist 30:08d290158fa7 3092 return true;
arsenalist 30:08d290158fa7 3093 }
arsenalist 30:08d290158fa7 3094 fclose(fp);
arsenalist 30:08d290158fa7 3095 free(fp);
arsenalist 27:562a95c120cc 3096 return false;
arsenalist 27:562a95c120cc 3097 }
arsenalist 0:f4e449fa34d7 3098 /*end emma private function*/