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

Revision:
38:e44f35f8129d
Parent:
37:93f196daf5cf
Child:
39:f51aa948acee
--- a/emmaCode.cpp	Wed Aug 19 08:52:27 2015 +0000
+++ b/emmaCode.cpp	Wed Aug 19 12:20:07 2015 +0000
@@ -34,9 +34,14 @@
 //emma settings
 string emmaUID;
 string hmac;
-string platformDOMAIN;
-string platformKEY;
-string platformSECRET;
+string appNAME;
+string mqttDOMAIN;
+string mqttKEY;
+string mqttSECRET;
+string mqttSERVER;
+string mqttPORT;
+string restSERVER;
+string restPORT;
 string wifiSSID;
 string wifiPASS;
 string gprsAPN;
@@ -208,8 +213,8 @@
     //read emma settings
     emmaReadSettings();
     
-    //platformDOMAIN is not empty -> has been registered
-    if(!platformDOMAIN.empty()) {
+    //mqttDOMAIN is not empty -> has been registered
+    if(!mqttDOMAIN.empty()) {
         TFT.locate(25,170);
         TFT.printf(" auto select enabled");
         t.start();
@@ -233,7 +238,7 @@
         }
         
         //auto select (to emmaModeOperation) after some times
-        if(!platformDOMAIN.empty()) {
+        if(!mqttDOMAIN.empty()) {
             if(t.read()>20) {
                 md = MODE_OPERATION;
                 modeSelected = true;
@@ -273,12 +278,25 @@
     hmac = calculateMD5(s);
     DBG.printf("hmac:%s\r\n",hmac.c_str());
     
-    platformDOMAIN = readSetting("platformDOMAIN");
-    DBG.printf("platformDOMAIN:%s\r\n",platformDOMAIN.c_str());
-    platformKEY = readSetting("platformKEY");
-    DBG.printf("platformKEY:%s\r\n",platformKEY.c_str());
-    platformSECRET = readSetting("platformSECRET");
-    DBG.printf("platformSECRET:%s\r\n",platformSECRET.c_str());
+    appNAME = readSetting("appNAME");
+    DBG.printf("appNAME:%s\r\n",appNAME.c_str());
+    
+    mqttDOMAIN = readSetting("mqttDOMAIN");
+    DBG.printf("mqttDOMAIN:%s\r\n",mqttDOMAIN.c_str());
+    mqttKEY = readSetting("mqttKEY");
+    DBG.printf("mqttKEY:%s\r\n",mqttKEY.c_str());
+    mqttSECRET = readSetting("mqttSECRET");
+    DBG.printf("mqttSECRET:%s\r\n",mqttSECRET.c_str());
+    mqttSERVER = readSetting("mqttSERVER");
+    DBG.printf("mqttSERVER:%s\r\n",mqttSERVER.c_str());
+    mqttPORT = readSetting("mqttPORT");
+    DBG.printf("mqttPORT:%s\r\n",mqttPORT.c_str());
+    
+    restSERVER = readSetting("restSERVER");
+    DBG.printf("restSERVER:%s\r\n",restSERVER.c_str());
+    restPORT = readSetting("restPORT");
+    DBG.printf("restPORT:%s\r\n",restPORT.c_str());
+    
     proxySERVER = readSetting("proxySERVER");
     DBG.printf("proxySERVER:%s\r\n",proxySERVER.c_str());
     proxyPORT = readSetting("proxyPORT");
@@ -651,6 +669,11 @@
     
     if(ethConnected) {
         DBG.printf("emmaModeRegister - eth\r\n");
+        wait(2);
+        TFT.locate(0,0);
+        TFT.printf("                                             ");
+        TFT.locate(0,0);
+        TFT.printf(" emmaModeRegister");
         
         //set connHost, connPort, connData
         if(useProxy) {
@@ -659,25 +682,28 @@
             sscanf(proxyPORT.c_str(),"%d",&connPort);
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
-            sprintf(s,"GET http://%s:%d/emma/api/controller/register?uid=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",REST_SERVER_HOST,REST_SERVER_PORT,emmaUID.c_str(),hmac.c_str(),REST_SERVER_HOST);
+            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());
             connData = s;
         } else {
             DBG.printf("no proxy\r\n");
-            connHost = REST_SERVER_HOST;
-            connPort = REST_SERVER_PORT;
+            connHost = restSERVER;
+            //connPort = restPORT;
+            sscanf(restPORT.c_str(),"%d",&connPort);
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
-            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(),REST_SERVER_HOST);
+            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());
+            //sprintf(s,"POST /emma/api/controller/register HTTP/1.0\nHost: %s\n\n{\"uid\":\"%s\",\"hmac\":\"%s\"}\r\n\r\n",restSERVER.c_str(),emmaUID.c_str(),hmac.c_str());
             connData = s;
         }
         
         //register
         while(!emmaGetRegKey) {
-            str = "";
+            //DBG.printf("post:%s\r\n",s);
+            str.clear();
             str = ethGET(connHost,connPort,connData);
             DBG.printf("rsp reg:%s\r\n",str.c_str());
 
-            //check and save platform setting
+            //check and save mqtt setting
             if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
                 str.erase(str.begin(),str.begin()+str.find("[")+1);
                 str.erase(str.begin()+str.find("]"),str.end());
@@ -685,9 +711,9 @@
                 MbedJSONValue jsonValue;
                 parse(jsonValue,str.c_str());
     
-                char *parameter[4] = {"platformDOMAIN","platformKEY","platformSECRET","registrationKey"};
+                char *parameter[4] = {"mqttDOMAIN","mqttKEY","mqttSECRET","registrationKey"};
     
-                //save platform parameter
+                //save mqtt parameter
                 writeSetting(parameter[0],"()");    //sd card need to be initialized
                 for(int i=0; i<3; i++) {
                     if(jsonValue.hasMember(parameter[i])) {
@@ -709,6 +735,10 @@
                         val.erase(val.begin()+val.find(")"),val.end());
                         regKey = val;
                         DBG.printf("%s: %s\r\n",parameter[3],regKey.c_str());
+                        
+                        TFT.locate(0,20);
+                        TFT.printf(" %s: %s\r\n",parameter[3],regKey.c_str());
+                        
                         emmaGetRegKey = true;
                     }
                 }
@@ -727,13 +757,13 @@
             DBG.printf("use proxy\r\n");
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
-            sprintf(s,"GET http://%s:%d/emma/api/controller/verify?uid=%s&registrationKey=%s&hmac=%s HTTP/1.0\nHost: %s\r\n\r\n",REST_SERVER_HOST,REST_SERVER_PORT,emmaUID.c_str(),regKey.c_str(),hmac.c_str(),REST_SERVER_HOST);
+            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());
             connData = s;
         } else {
             DBG.printf("no proxy\r\n");
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
-            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(),REST_SERVER_HOST);
+            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());
             connData = s;
         }
         
@@ -742,6 +772,11 @@
             str.clear();
             str = ethGET(connHost,connPort,connData);
             DBG.printf("rsp vrf:%s\r\n",str.c_str());
+            
+            TFT.locate(0,40);
+            TFT.printf("                              ");
+            TFT.locate(0,40);
+            TFT.printf(" wait:%d\r\n",loop);
                 
             //check verification
             if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
@@ -753,6 +788,10 @@
                 if(jsonValue.hasMember("user")) {
                     string val = jsonValue["user"].get<std::string>();
                     DBG.printf("%s is registered\r\n",val.c_str());
+                    TFT.locate(0,40);
+                    TFT.printf("                              ");
+                    TFT.locate(0,40);
+                    TFT.printf(" %s is registered\r\n",val.c_str());
                     emmaRegistered = true;
                 }
             }
@@ -763,8 +802,12 @@
         //check whether registration success
         if(emmaRegistered) {
             DBG.printf("registration successful\r\n");
+            TFT.locate(0,60);
+            TFT.printf(" registration successful\r\n");
         } else {
             DBG.printf("registration unsuccessful\r\n");
+            TFT.locate(0,60);
+            TFT.printf(" registration unsuccessful. please restart.\r\n");
         }
         while(1);
         
@@ -780,8 +823,9 @@
             connHost = proxySERVER;
             sscanf(proxyPORT.c_str(),"%d",&connPort);
         } else {
-            connHost = REST_SERVER_HOST;
-            connPort = REST_SERVER_PORT;
+            connHost = restSERVER;
+            //connPort = restPORT;
+            sscanf(restPORT.c_str(),"%d",&connPort);
         }
         TFT.locate(0,0);
         TFT.printf(" emmaModeRegister");
@@ -803,10 +847,10 @@
         if(wifiConnected) {
             //check proxy
             if(useProxy) {
-                sprintf(r,"http://%s:%d/emma/api/controller/register",REST_SERVER_HOST,REST_SERVER_PORT);
-                //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",REST_SERVER_HOST,REST_SERVER_PORT,REST_SERVER_HOST,REST_SERVER_PORT,proxyAUTH.c_str(),76);
-                //sprintf(r,"http://%s:%d/emma/api/controller/register HTTP/1.0\nAccept: */*\nAccept-Encoding: gzip,deflate\nContent-Length: %d\r\n\r\n",REST_SERVER_HOST,REST_SERVER_PORT,76);
-                //sprintf(r,"http://%s:%d/emma/coba",REST_SERVER_HOST,REST_SERVER_POR);
+                sprintf(r,"http://%s:%d/emma/api/controller/register",restSERVER.c_str(),restPORT.c_str());
+                //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);
+                //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);
+                //sprintf(r,"http://%s:%d/emma/coba",restSERVER,REST_SERVER_POR);
             } else {
                 sprintf(r,"/emma/api/controller/register");
             }
@@ -825,7 +869,7 @@
                 rest.getResponse(s,sizeof(s));
                 DBG.printf("rsp reg:%s\r\n",s);
 
-                //check and save platform setting
+                //check and save mqtt setting
                 str = s;
                 if(str.find("[") != std::string::npos && str.find("]") != std::string::npos) {
                     str.erase(str.begin(),str.begin()+str.find("[")+1);
@@ -834,9 +878,9 @@
                     MbedJSONValue jsonValue;
                     parse(jsonValue,str.c_str());
     
-                    char *parameter[4] = {"platformDOMAIN","platformKEY","platformSECRET","registrationKey"};
+                    char *parameter[4] = {"mqttDOMAIN","mqttKEY","mqttSECRET","registrationKey"};
     
-                    //save platform parameter
+                    //save mqtt parameter
                     writeSetting(parameter[0],"()");    //sd card need to be initialized
                     for(int i=0; i<3; i++) {
                         if(jsonValue.hasMember(parameter[i])) {
@@ -878,7 +922,7 @@
             
             //check proxy
             if(useProxy) {
-                sprintf(r,"http://%s:%d/emma/api/controller/verify",REST_SERVER_HOST,REST_SERVER_PORT);
+                sprintf(r,"http://%s:%d/emma/api/controller/verify",restSERVER.c_str(),restPORT.c_str());
             } else {
                 sprintf(r,"/emma/api/controller/verify");
             }
@@ -924,7 +968,7 @@
             } else {
                 DBG.printf("registration unsuccessful\r\n");
                 TFT.locate(0,60);
-                TFT.printf(" egistration unsuccessful. please restart.\r\n");
+                TFT.printf(" registration unsuccessful. please restart.\r\n");
             }
             while(1);
         }
@@ -945,6 +989,7 @@
     char q[32];
     char r[32];
     char s[4096];
+    int connPort;
     int loop=0;
     int trial=0;
     string hmacTime;
@@ -1028,10 +1073,10 @@
         DBG.printf("emma: setup mqtt client\r\n");
         sprintf(mqttClientId,"emma/%s",emmaUID.c_str());
     
-        if(mqtt.begin(mqttClientId, platformKEY.c_str(), platformSECRET.c_str(), 120, 1)) {
+        if(mqtt.begin(mqttClientId, mqttKEY.c_str(), mqttSECRET.c_str(), 120, 1)) {
             mqtt.connectedCb.attach(&mqttConnected);
             mqtt.disconnectedCb.attach(&mqttDisconnected);
-            mqtt.connect(MQTT_HOST,MQTT_PORT,false);
+            mqtt.connect(mqttSERVER,mqttPORT,false);
             DBG.printf("emma: success to setup mqtt\r\n");
             TFT.locate(0,40);
             TFT.printf("emma: success to setup mqtt");    
@@ -1059,7 +1104,8 @@
         ADE.write16bits(CVAG, 0);
         
         //init rest to server
-        if(rest.begin(REST_SERVER_HOST,REST_SERVER_PORT,false)) {
+        sscanf(restPORT.c_str(),"%d",&connPort);
+        if(rest.begin(restSERVER.c_str(),connPort,false)) {
             DBG.printf("rest to server is created\r\n");
             TFT.locate(0,40);
             TFT.printf("                                        ");
@@ -1129,10 +1175,10 @@
         //working
         DBG.printf("emma: setup mqtt client\r\n");
         sprintf(mqttClientId,"emma/%s",emmaUID.c_str());
-        if(mqtt.begin(mqttClientId, platformKEY.c_str(), platformSECRET.c_str(), 120, 1)) {
+        if(mqtt.begin(mqttClientId, mqttKEY.c_str(), mqttSECRET.c_str(), 120, 1)) {
             mqtt.connectedCb.attach(&mqttConnected);
             mqtt.disconnectedCb.attach(&mqttDisconnected);
-            mqtt.connect(MQTT_HOST,MQTT_PORT,false);
+            mqtt.connect(mqttSERVER,mqttPORT,false);
             DBG.printf("emma: success to setup mqtt\r\n");
             TFT.locate(0,40);
             TFT.printf("emma: success to setup mqtt");    
@@ -1622,7 +1668,7 @@
     if(useProxy) {
         for(int i=0; i<sizeof(s); i++) {
             s[i]=0; }
-        //sprintf(s,"http://%s:%d/emma/api/controller/register?uid=%s&hmac=%s",REST_SERVER_HOST,REST_SERVER_PORT,emmaUID.c_str(),hmac.c_str());
+        //sprintf(s,"http://%s:%d/emma/api/controller/register?uid=%s&hmac=%s",restSERVER,restPORT,emmaUID.c_str(),hmac.c_str());
         sprintf(s,"http://192.168.128.69/emmaController/firmware/firmwareParameter");
         connData = s;
     } else {
@@ -1905,7 +1951,7 @@
 void mqttConnected(void* response) {
     DBG.printf("MQTT Connected\r\n");
     char mqttTopic[64];
-    sprintf(mqttTopic,"%s/%s/command",platformDOMAIN.c_str(),emmaUID.c_str());
+    sprintf(mqttTopic,"%s/%s/command",mqttDOMAIN.c_str(),emmaUID.c_str());
     //mqtt.subscribe(mqttTopic);
 }
 void mqttDisconnected(void* response) {
@@ -1973,9 +2019,9 @@
 int publish(MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTEthernet* ipstack)
 {
     MQTT::Message message;
-    char* topic = new char[strlen(platformDOMAIN.c_str())+strlen(emmaUID.c_str())+9];
+    char* topic = new char[strlen(mqttDOMAIN.c_str())+strlen(emmaUID.c_str())+9];
     *topic = '\0';
-    strcat(topic, platformDOMAIN.c_str());
+    strcat(topic, mqttDOMAIN.c_str());
     strcat(topic, "/");
     strcat(topic, emmaUID.c_str());
     strcat(topic, "/dummy");
@@ -2114,7 +2160,10 @@
 }
 
 int ethMQTTConnect(MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTEthernet* ipstack) {
-    int rc = ipstack->connect(MQTT_HOST, MQTT_PORT);
+    char *pMqttServer = &mqttSERVER[0u];
+    int connPort;
+    sscanf(mqttPORT.c_str(),"%d",&connPort);
+    int rc = ipstack->connect(pMqttServer, connPort);
     
     if(rc!=0)
         return rc;
@@ -2136,11 +2185,11 @@
     
     //MQTT Subscribe
     //char s[64];
-    //sprintf(s,"%s/%s/command",platformDOMAIN.c_str(),emmaUID.c_str());
+    //sprintf(s,"%s/%s/command",mqttDOMAIN.c_str(),emmaUID.c_str());
     //string topic = s;
-    char* topic = new char[strlen(platformDOMAIN.c_str())+strlen(emmaUID.c_str())+9];
+    char* topic = new char[strlen(mqttDOMAIN.c_str())+strlen(emmaUID.c_str())+9];
     *topic = '\0';
-    strcat(topic, platformDOMAIN.c_str());
+    strcat(topic, mqttDOMAIN.c_str());
     strcat(topic, "/");
     strcat(topic, emmaUID.c_str());
     strcat(topic, "/command");
@@ -2392,10 +2441,11 @@
             sscanf(proxyPORT.c_str(),"%d",&connPort);
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
-            sprintf(s,"GET http://%s:%d/emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",REST_SERVER_HOST,REST_SERVER_PORT,REST_SERVER_HOST);
+            sprintf(s,"GET http://%s:%s/emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),restSERVER.c_str());
         } else {
-            connHost = REST_SERVER_HOST;
-            connPort = REST_SERVER_PORT;
+            connHost = restSERVER;
+            //connPort = restPORT;
+            sscanf(restPORT.c_str(),"%d",&connPort);
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
             strcpy(s,"GET /emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n");
@@ -2435,7 +2485,7 @@
     while(!esp.ready());
     
     //rest begin
-    if(!rest.begin(REST_SERVER_HOST,REST_SERVER_PORT,false)) {
+    if(!rest.begin(restSERVER,restPORT,false)) {
         DBG.printf("EMMA: fail to setup rest\r\n");
         TFT.locate(0,20);
         TFT.printf("EMMA: fail to setup rest");
@@ -2468,10 +2518,11 @@
             sscanf(proxyPORT.c_str(),"%d",&connPort);
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
-            sprintf(s,"http://%s:%d/emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",REST_SERVER_HOST,REST_SERVER_PORT,REST_SERVER_HOST);
+            sprintf(s,"http://%s:%s/emma/api/controller/test HTTP/1.0\nHost: %s\r\n\r\n",restSERVER.c_str(),restPORT.c_str(),restSERVER.c_str());
         } else {
-            connHost = REST_SERVER_HOST;
-            connPort = REST_SERVER_PORT;
+            connHost = restSERVER;
+            //connPort = restPORT;
+            sscanf(restPORT.c_str(),"%d",&connPort);
             for(int i=0; i<sizeof(s); i++) {
                 s[i]=0; }
             sprintf(s,"/emma/api/controller/test");