First play with ArduinoJson library and javascript JSON.parse() - too fucking easy!

This commit is contained in:
rljonesau 2018-12-10 06:28:02 +11:00
parent f4a52afd42
commit 43d35493c0
2 changed files with 52 additions and 29 deletions

View file

@ -27,6 +27,7 @@
#include "helpers.h" #include "helpers.h"
#include "pins.h" #include "pins.h"
#include "Index.h" #include "Index.h"
#include <ArduinoJson.h>
extern void Command_Interpret(const char* pLine); // decodes received command lines, implemented in main .ino file! extern void Command_Interpret(const char* pLine); // decodes received command lines, implemented in main .ino file!
@ -35,6 +36,8 @@ WebSocketsServer webSocket = WebSocketsServer(81);
bool bRxWebData = false; bool bRxWebData = false;
bool bTxWebData = false; bool bTxWebData = false;
DynamicJsonBuffer jsonBuffer(512); // create a JSON buffer on the heap
const int led = 13; const int led = 13;
void handleRoot() { void handleRoot() {
@ -60,6 +63,7 @@ void handleNotFound() {
} }
void initWebServer(void) { void initWebServer(void) {
if (MDNS.begin("BTCHeater")) { if (MDNS.begin("BTCHeater")) {
DebugPort.println("MDNS responder started"); DebugPort.println("MDNS responder started");
@ -72,6 +76,7 @@ void initWebServer(void) {
webSocket.begin(); webSocket.begin();
webSocket.onEvent(webSocketEvent); webSocket.onEvent(webSocketEvent);
DebugPort.println("HTTP server started"); DebugPort.println("HTTP server started");
} }
unsigned char cVal; unsigned char cVal;
@ -83,14 +88,24 @@ bool doWebServer(void) {
if(numClients) { if(numClients) {
if(millis() > lastTx) { // moderate the delivery of new messages - we simply cannot send every pass of the main loop! if(millis() > lastTx) { // moderate the delivery of new messages - we simply cannot send every pass of the main loop!
lastTx = millis() + 1000; lastTx = millis() + 1000;
char msg[16];
JsonObject& root = jsonBuffer.createObject();
root["CurrentTemp"] = getActualTemperature();
root["RunState"] = getHeaterInfo().getRunState();
root["DesiredTemp"] = getHeaterInfo().getTemperature_Desired();
String jsonToSend;
root.printTo(jsonToSend);
webSocket.broadcastTXT(jsonToSend);
/* char msg[16];
sprintf(msg, "CurrentTemp,%d",getActualTemperature()); sprintf(msg, "CurrentTemp,%d",getActualTemperature());
webSocket.broadcastTXT(msg); webSocket.broadcastTXT(msg);
bTxWebData = true; bTxWebData = true;
sprintf(msg, "PowerState,%i",getHeaterInfo().getRunState()); sprintf(msg, "PowerState,%i",getHeaterInfo().getRunState());
webSocket.broadcastTXT(msg); webSocket.broadcastTXT(msg);
sprintf(msg, "TempDesired,%i",getHeaterInfo().getTemperature_Desired()); sprintf(msg, "TempDesired,%i",getHeaterInfo().getTemperature_Desired());
webSocket.broadcastTXT(msg); webSocket.broadcastTXT(msg);*/
} }
return true; return true;
} }

View file

@ -11,33 +11,41 @@ const char* MAIN_PAGE PROGMEM = R"=====(
Socket.onmessage = function(event){ Socket.onmessage = function(event){
console.log("msg rec", event.data); console.log("msg rec", event.data);
var msgArray = event.data.split(","); // split message by delimiter into a string array var heater = JSON.parse(event.data);
console.log("msgArray", msgArray[0]); console.log("JSON current temp", heater.CurrentTemp);
console.log("msgArray", msgArray[1]); console.log("JSON run state", heater.RunState);
console.log("msgArray", msgArray[2]); console.log("JSON desired temp", heater.DesiredTemp);
console.log("msgArray", msgArray[3]); document.getElementById("TempCurrent").innerHTML = heater.CurrentTemp;
var indicator = msgArray[1]; // the first element in the message array is the ID of the object to update document.getElementById("RunState").innerHTML = heater.CurrentTemp;
console.log("indicator", indicator); document.getElementById("TempDesired").innerHTML = heater.DesiredTemp;
if (indicator) // if an object by the name of the message exists, update its value or its attributes
{ // var msgArray = event.data.split(","); // split message by delimiter into a string array
switch (msgArray[0]) // console.log("msgArray", msgArray[0]);
{ // console.log("msgArray", msgArray[1]);
case "CurrentTemp": // console.log("msgArray", msgArray[2]);
document.getElementById("TempCurrent").innerHTML = msgArray[1]; // console.log("msgArray", msgArray[3]);
break; // var indicator = msgArray[1]; // the first element in the message array is the ID of the object to update
case "PowerState": // console.log("indicator", indicator);
if (msgArray[1] == 0){ // if (indicator) // if an object by the name of the message exists, update its value or its attributes
document.getElementById("myonoffswitch").checked = false; // {
break; // switch (msgArray[0])
} else { // {
document.getElementById("myonoffswitch").checked = true; // case "CurrentTemp":
break; // document.getElementById("TempCurrent").innerHTML = msgArray[1];
} // break;
case "TempDesired": // case "PowerState":
document.getElementById("slide").value = msgArray[1]; // if (msgArray[1] == 0){
break; // document.getElementById("myonoffswitch").checked = false;
} // break;
} // } else {
// document.getElementById("myonoffswitch").checked = true;
// break;
// }
// case "TempDesired":
// document.getElementById("slide").value = msgArray[1];
// break;
// }
// }
} }
} }