//--------------------------------------------------------------------------
Serial.println(F("==== Start parsing payload ======================="));
// This is how the "actual" JSON object looks like:
// {"name":"timestamp","value":"200911140716S"}
// ,{"name":"energy_delivered_tariff1","value":3433.297,"unit":"kWh"}
// ,{"name":"energy_delivered_tariff2","value":4453.041,"unit":"kWh"}
// ,{"name":"energy_returned_tariff1","value":678.953,"unit":"kWh"}
// ,{"name":"power_delivered_l2","value":0.071,"unit":"kW"}
// ,{"name":"power_delivered_l3","value":0,"unit":"kW"}
// ,{"name":"power_returned_l1","value":0,"unit":"kW"}
// ,{"name":"power_returned_l2","value":0,"unit":"kW"}
// ,{"name":"power_returned_l3","value":0.722,"unit":"kW"}
// ,{"name":"gas_delivered","value":2915.08,"unit":"m3"}
//--debug-Serial.print(F("payload: "));
//--debug-Serial.println(payload);
JSONVar dsmrJsonObject = JSON.parse(payload);
// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(dsmrJsonObject) == "undefined")
Serial.println(F("Parsing failed!"));
//--debug-Serial.print("JSON.typeof(dsmrJsonObject) = ");
//--debug-Serial.println(JSON.typeof(dsmrJsonObject));
JSONVar dsmrJsonField = dsmrJsonObject["actual"];
// dsmrJsonField.length() can be used to get the length of the array
//--debug-Serial.print("dsmrJsonField.length() = ");
//--debug-Serial.println(dsmrJsonField.length());
//--debug-Serial.println();
for (int i = 0; i < dsmrJsonField.length(); i++)
//--debug-Serial.print(dsmrJsonField[i]);
String sName = (const char *)dsmrJsonField[i]["name"];
String sValue = (const char *)dsmrJsonField[i]["value"];
if (sValue == "") sValue = String((double)dsmrJsonField[i]["value"]);
String sUnit = (const char *)dsmrJsonField[i]["unit"];
//---- list all fields and values ----
Serial.print(sName); Serial.print(" \t");
Serial.print(sValue); Serial.print(" ");
//--- now catch some fields of interrest for further
//--- you need to declare the fields to be captured global
if (sName == "timestamp") timeStamp = sValue;
if (sName == "voltage_l1") voltageL1 = sValue.toInt();
if (sName == "current_l1") currentL1 = sValue.toInt();
if (sName == "power_delivered") pwrDelivered = sValue.toFloat();
if (sName == "power_returned") pwrReturned = sValue.toFloat();
Serial.println(F("=================================================="));
Serial.print(F("Parsed [")); Serial.print(fieldNr); Serial.println(F("] fields"));