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 "pins.h"
#include "Index.h"
#include <ArduinoJson.h>
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 bTxWebData = false;
DynamicJsonBuffer jsonBuffer(512); // create a JSON buffer on the heap
const int led = 13;
void handleRoot() {
@ -60,6 +63,7 @@ void handleNotFound() {
}
void initWebServer(void) {
if (MDNS.begin("BTCHeater")) {
DebugPort.println("MDNS responder started");
@ -72,6 +76,7 @@ void initWebServer(void) {
webSocket.begin();
webSocket.onEvent(webSocketEvent);
DebugPort.println("HTTP server started");
}
unsigned char cVal;
@ -83,14 +88,24 @@ bool doWebServer(void) {
if(numClients) {
if(millis() > lastTx) { // moderate the delivery of new messages - we simply cannot send every pass of the main loop!
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());
webSocket.broadcastTXT(msg);
bTxWebData = true;
sprintf(msg, "PowerState,%i",getHeaterInfo().getRunState());
webSocket.broadcastTXT(msg);
sprintf(msg, "TempDesired,%i",getHeaterInfo().getTemperature_Desired());
webSocket.broadcastTXT(msg);
webSocket.broadcastTXT(msg);*/
}
return true;
}

View file

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