DSMRlogger32
  • DSMRlogger32
    • De Hardware
    • Graphical User Interface
      • GUI - Actual
      • GUI - Uren
      • GUI - Dagen
      • GUI - Maanden
      • GUI - Telegram
      • GUI - All Fields
      • GUI - Systeem Info
      • GUI - restAPI's
      • FSmanager
      • Settings Editor
      • Systeem Log
    • Telnet User Interface
    • Betekenis NeoPixels
  • Beschrijving restAPI's (v2)
    • Slimme Meter gerelateerde restAPI's
    • DSMR-logger gerelateerde restAPI's
    • Historische Gegevens gerelateerde restAPI's
    • Arduino MEGA met Ethernet shield
    • ESP8266 (WiFi)
    • ESP32 (WiFi)
  • Integratie met Home-Assistant
  • updateServer
  • firmware
    • Benodigde Bibliotheken
    • DSMRrlogger32 firmware clonen
    • Firmware Compileren en Uploaden
    • Pré Compiled Binaries Uploaden
  • Voorbereiding
    • Arduino IDE
    • ESP32 core
    • ESP32 Data Upload tool
    • Installatie Bibliotheken
  • De eerste keer opstarten
  • Vragen (en antwoorden)
    • Werkt de DSMR-logger32 met mijn Slimme Meter?
  • Onderdelen Lijst
  • License
Powered by GitBook
On this page
Export as PDF
  1. Beschrijving restAPI's (v2)

Arduino MEGA met Ethernet shield

Arduino Mega met Ethernet shield

Met onderstaande code kun je, met een Arduino MEGA met Ethernet shield, gegevens uit de DSMR-logger32 ophalen en verder verwerken.


//==== edit "myCredentials_org.h" ========
//==== and save it as "myCredentials.h" ==
#include "myCredentials.h"
​
#include <ArduinoHttpClient.h>    // tested with version 0.4.0
#include <Ethernet.h>
#include <SPI.h>
​
//------ [ArduinoJson@6.19.3]
#include <ArduinoJson.h>
//-- if you need more fields make this JsonDocument bigger
StaticJsonDocument<350> dsmrDoc;
//-- if you need more fields make this JsonDocument bigger
StaticJsonDocument<150> filter;
​
#define _READINTERVAL     30000
​
const char *DSMRprotocol  = "http://";
const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
const char *DSMRrestAPI   = "/api/v2/sm/actual";
String      payload;
int         httpResponseCode;
uint32_t    lastRead = 0;
​
//--- catch specific fields for further processing -------
//--- these are just an example! see readDsmrLogger() ----
String  timeStamp;
float   energyDelivered, pwrDelivered; 
float   energyReturned,  pwrReturned;
float   gasDelivered;
bool    firstCall = true;
​
//--------------------------------------------------------------------------
bool dsmrGETrequest() 
{
  EthernetClient ETHclient;
  HttpClient DSMRclient = HttpClient(ETHclient, DSMRserverIP, 80);
​
  payload = ""; 
   
  Serial.println(F("making GET request"));
  DSMRclient.get(DSMRrestAPI);
​
  // read the response code and body of the response
  httpResponseCode = DSMRclient.responseStatusCode();
​
  if (httpResponseCode <= 0)
  {
    Serial.print(F("http Response Code: "));
    Serial.println(httpResponseCode);
    return false;
  }
​
  payload    = DSMRclient.responseBody();
​
  deserializeJson(dsmrDoc, payload, DeserializationOption::Filter(filter));
​
  // Free resources
  DSMRclient.stop();
​
  if (firstCall)
  {
    Serial.print("dsmrDoc::");
    serializeJsonPretty(dsmrDoc, Serial);
    Serial.println();
  }
  firstCall = false;
​
  return true;
  
} // dsmrGETrequest()
​
//--------------------------------------------------------------------------
void readDsmrLogger()
{
  int fieldNr = 0;
​
  dsmrGETrequest();
​
  //-- store the fields you are interested in ----------
  timeStamp         = dsmrDoc["actual"]["timestamp"].as<const char*>();
  energyDelivered   = dsmrDoc["actual"]["energy_delivered_tariff1"].as<float>()
                    + dsmrDoc["actual"]["energy_delivered_tariff2"].as<float>();
  pwrDelivered      = dsmrDoc["actual"]["power_delivered"].as<float>();
  energyReturned    = dsmrDoc["actual"]["energy_returned_tariff1"].as<float>()
                    + dsmrDoc["actual"]["energy_returned_tariff2"].as<float>();
  pwrReturned       = dsmrDoc["actual"]["power_returned"].as<float>();
  gasDelivered      = dsmrDoc["actual"]["gas_delivered"].as<float>();
​
  if (firstCall)
  {
    Serial.println();
    Serial.println(F("==== Start parsing payload ======================="));
​
    for (JsonPair p : dsmrDoc["actual"].as<JsonObject>())
    {
      Serial.print(p.key().c_str()); Serial.print("\t: ");
      if (p.value().is<int>())              Serial.println(p.value().as<int>());
      else if (p.value().is<float>())       Serial.println(p.value().as<float>());
      else if (p.value().is<const char*>()) Serial.println(p.value().as<const char*>());
      else Serial.println("unknown type");
    }
    Serial.println(F("=================================================="));
  }
      
} // readDsmrLogger()
​
​
//--------------------------------------------------------------------------
void setup() 
{
  Serial.begin(115200);
  while(!Serial) { /* wait a bit */ }
​
  Serial.println("");
  Serial.println(F("\r\n***************************************"));
  Serial.println(F("And then it all begins ..."));
  Serial.println(F("***************************************\r\n"));
​
  //-- The filter: it contains "true" for each value we want to capture
  filter["actual"]["timestamp"] = true;
  filter["actual"]["power_delivered"] = true;
  filter["actual"]["power_returned"] = true;
  filter["actual"]["gas_delivered"] = true;
  filter["actual"]["energy_delivered_tariff1"] = true;
  filter["actual"]["energy_delivered_tariff2"] = true;
  filter["actual"]["energy_returned_tariff1"] = true;
  filter["actual"]["energy_returned_tariff2"] = true;
  Serial.print("filterDoc::");
  serializeJsonPretty(filter, Serial);
  Serial.println();
​
  // Initialize Ethernet library
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
​
  if (!Ethernet.begin(mac)) 
  {
    Serial.println(F("Failed to configure Ethernet"));
    return;
  }
  delay(1000);
​
  lastRead = millis() + _READINTERVAL;
​
  Serial.println(F("\r\nStart reading ..."));
​
} // setup()
​
​
//--------------------------------------------------------------------------
void loop() 
{
  if ((millis() - lastRead) > _READINTERVAL)
  {
    lastRead = millis();
    Serial.print(F("\r\nread API/v2 from DSMR-logger @"));
    Serial.println(_DSMR_IP_ADDRESS);
    readDsmrLogger();
    Serial.println(F("\r\nCaptured fields ==============================="));
    Serial.print(F("timestamp       : ")); Serial.println(timeStamp);
    Serial.print(F("energyDelivered : ")); Serial.println(energyDelivered);
    Serial.print(F("pwrDelivered    : ")); Serial.println(pwrDelivered);
    Serial.print(F("energyReturned  : ")); Serial.println(energyReturned);
    Serial.print(F("pwrReturned     : ")); Serial.println(pwrReturned);
    Serial.print(F("gasDelivered    : ")); Serial.println(gasDelivered);
    Serial.println(F("\r\n"));
  }
  
} // loop()
PreviousHistorische Gegevens gerelateerde restAPI'sNextESP8266 (WiFi)

Last updated 2 years ago