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
Diff: emmaCode.cpp
- 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®istrationKey=%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®istrationKey=%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®istrationKey=%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®istrationKey=%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");