Only this pageAll pages
Powered by GitBook
1 of 33

DSMRloggerAPI

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Slimme Meters

Onderstaande tabel geeft de gegevens weer zoals deze door gebruikers worden gemeld. Om de lijst zo compleet mogelijk te maken verzoek ik iedere maker/gebruiker om deze gegevens met ons te delen!

Merk

Type

Compiler Opties

Externe Voeding

DSMR

Opmerking/ Setting

Werkt

Landys

E350

1, 2, (3)

Compile Options

  1. USE_UPDATE_SERVER

  2. USE_MQTT

  3. USE_MINDERGAS

  4. USE_SYSLOGGER

SHOW_PASSWRDS

  • HAS_NO_SLIMMEMETER

  • Nee

    5.0

    OK!

    Landys

    E350

    JA

    2.2+

    Pré DSMR 40[Yes]

    OK

    Landys

    E350

    ?

    ?

    4.0

    ok

    Landys

    E360

    1,2

    Nee

    5.0

    OK!

    Landys

    ZCF110

    1,2

    JA

    4.2

    OK

    Landys

    ZCM110

    ?

    ?

    4.2

    ok

    Landys

    ZCF120ABd

    1

    Nee

    2.2+

    Pré DSMR 40[Yes]

    SM Has Fase Info[No]

    GUI geeft géén actueel verbruik

    OK

    ISKRA

    AM550

    ?

    Nee

    5.0+

    OK!

    ISKRA

    MT382

    ?

    JA

    2.2+

    Pré DSMR 40[Yes]

    OK

    ISKRA

    ME382

    ?

    ?

    2.2+

    Pré DSMR 40[Yes]

    ok

    KAIFA

    E0026

    ?

    ?

    ?

    ?

    KAIFA

    MA304

    ?

    JA

    ?

    OK!

    KAIFA

    MA105C

    ?

    JA

    ?

    OK!

    KAIFA

    MA340C

    1,2

    JA

    ?

    OK!

    Kamstrup

    162

    1

    JA

    2.2

    Pré DSMR 40[Yes]

    SM Has Fase Info[No]

    OK

    Kamstrup

    382

    ?

    ?

    2.2

    Pré DSMR 40[Yes]

    ?

    Sagemcom

    XS210

    ?

    ?

    5.0

    ESMR5

    ok

    Sagemcom

    T210-D

    Standaard

    Nee

    5.0

    ESMR5

    OK!

    Sagemcom

    S211

    1

    Nee

    ?

    SM Has Fase Info[No]

    OK!

    Seconia

    T211

    1

    Nee

    ?

    SM Has Fase Info[No]

    OK!

    DSMR-logger gerelateerde restAPI's

    informatie over de DSMR-logger

    GET http://dsmr-api.local/api/v1/dev/info

    Deze restAPI geeft informatie terug van de DSMR-logger

    {"devinfo":[
        {"name": "author", "value": "Willem Aandewiel (www.aandewiel.nl)"},
        {"name": "hostname", "value": "DSMR-108"},
        {"name": "fwversion", "value": "v0.2.9 (31-01-2020)"},
        {"name": "compiled", "value": "Jan 31 2020 12:22:10"},
        {"name": "freeheap", "value": 16224, "unit": "bytes"},
        {"name": "maxfreeblock", "value": 15400, "unit": "bytes"},
        {"name": "chipid", "value": "cc6156"},
        {"name": "coreversion", "value": "2_6_3"},
        {"name": "sdkversion", "value": "2.2.1(cfd48f3)"},
        {"name": "cpufreq", "value": 80, "unit": "MHz"},
        {"name": "sketchsize", "value": 521.953, "unit": "kB"},
        {"name": "freesketchSpace", "value": 1524.000, "unit": "kB"},
        {"name": "flashchipid", "value": "00164020"},
        {"name": "flashchipsize", "value": 4.000, "unit": "MB"},
    
    

    Systeem Tijd

    GET http://dsmr-api.local/api/vi/dev/time

    Deze restAPI geeft de systeem tijd van de DSMR-logger

    Instellingen

    GET http://dsmr-api.local/api/v1/dev/settings

    Deze restAPI geeft alle, door de gebruiker muteerbare, settings terug

    Instellingen aanpassen

    POST http://dsmr-api.local/api/v1/settings/{"name":"<settingVeld>","value":"<nieuweWaarde>"}

    Hieronder een opsomming van de settingsVelden:

    hostname

    • type: String

    • maxlen: 29

    • Opmerking:

      • Characters

    ed_tariff1 (Geleverde Energy, tarief 1)

    • type: float

    • min: 0

    • max: 10

    • decimalen: 5

    ed_tariff2 (Geleverde Energy, tarief 2)

    • type: float

    • min: 0

    • max: 10

    • Decimalen: 5

    er_tariff1 (Opgewekte Energy, tarief 1)

    • type: float

    • min: 0

    • max: 10

    • Decimalen: 5

    er_tariff2 (Opgewekte Energy, tarief 2)

    • type: float

    • min: 0

    • max: 10

    • Decimalen: 5

    gd_tariff (Gas Geleverd)

    • type: float

    • min: 0

    • max: 10

    • Decimalen: 5

    electr_netw_costs (Netwerk kosten Electra)

    • type: float

    • min: 0

    • max: 100

    • Decimalen: 2

    gas_netw_costs (Netwerk kosten Gas)

    • type: float

    • min: 0

    • max: 100

    • Decimalen: 2

    tlgrm_interval (telegram Interval)

    • type: Integer

    • min: 1

    • max: 60

    • Opmerking:

    index_page (alternatieve index.html pagina)

    • type: String

    • maxlen: 49

    • Opmerking:

      • Characters

    mqtt_broker (URL of IP-adres)

    • type: String

    • maxlen: 100

    • Opmerking:

      • Characters

    mqtt_broker_port

    • type: Integer

    • min: 0

    • max: 9999

    mqtt_user

    • type: String

    • maxlen: 39

    • Opmerking:

      • Characters

    mqtt_passwd

    • type: String

    • maxlen: 29

    • Opmerking:

      • Characters

    mqtt_toptopic

    • type: String

    • maxlen: 20

    • Opmerking:

      • Characters

    mqtt_interval (interval voor het versturen van MQTT berichten)

    • type: Integer

    • min: 0

    • max: 600

    • Opmerking: Seconden

    mindergastoken

    • type: String

    • maxlen: 20

    • Opmerking:

      • Characters

    Opmerking:

    • Euro's per maand

    Opmerking:

    • Euro's per maand

    Seconden

    Default: DSMRindex.html

    indien '0' worden er géén berichten verstuurd

  • er wordt nooit vaker een bericht verstuurd dan tlgrm_interval

  • indien korter dan 5 char's worden er geen gegevens naar mindergas.nl verstuurd

    {"name": "flashchiprealsize", "value": 4.000, "unit": "MB"},
    {"name": "flashchipspeed", "value": 80.000, "unit": "MHz"},
    {"name": "flashchipmode", "value": "DOUT"},
    {"name": "boardtype", "value": "ESP8266_GENERIC"},
    {"name": "ssid", "value": "YourWiFi"},
    {"name": "ipaddress", "value": "192.168.1.106"},
    {"name": "wifirssi", "value": -52},
    {"name": "hostname", "value": "DSMR-API"},
    {"name": "uptime", "value": "0(d):00(h):10"},
    {"name": "telegramcount", "value": 56},
    {"name": "telegramerrors", "value": 0},
    {"name": "mqttbroker", "value": "mosqitto.org:1883"},
    {"name": "mqttinterval", "value": 120},
    {"name": "mqttbroker_connected", "value": "yes"},
    {"name": "mindergas_response", "value": "countdown for sending"},
    {"name": "mindergas_status", "value": "@31|12:28 -> :0"},
    {"name": "reboots", "value": 6},
    {"name": "lastreset", "value": "Software/System restart"}
    ]}
    {"devtime":[
      {"name": "timestamp", "value": "201027085021S"},
      {"name": "time", "value": "2020-10-27 08:50:21"},
      {"name": "epoch", "value": 1603788623},
      {"name": "uptime", "value": "0(d)-01:22(H:m)"},
      {"name": "uptime_secs", "value": 4955, "unit": "sec"}
    ]}
    {"settings":[
      {"name": "hostname", "value":"DSMR-API", "type": "s", "maxlen": 29},
      {"name": "pre_dsmr40", "value": 0, "type": "i", "min": 0, "max": 1},
      {"name": "ed_tariff1", "value": 0.50000, "type": "f", "min": 0, "max": 10},
      {"name": "ed_tariff2", "value": 0.50000, "type": "f", "min": 0, "max": 10},
      {"name": "er_tariff1", "value": 0.50000, "type": "f", "min": 0, "max": 10},
      {"name": "er_tariff2", "value": 0.50000, "type": "f", "min": 0, "max": 10},
      {"name": "gd_tariff", "value": 0.50000, "type": "f", "min": 0, "max": 10},
      {"name": "electr_netw_costs", "value": 15.14, "type": "f", "min": 0, "max": 100},
      {"name": "gas_netw_costs", "value": 11.10, "type": "f", "min": 0, "max": 100},
      {"name": "mbus1_type", "value": 0, "type": "i", "min": 0, "max": 200},
      {"name": "mbus2_type", "value": 3, "type": "i", "min": 0, "max": 200},
      {"name": "mbus3_type", "value": 5, "type": "i", "min": 0, "max": 200},
      {"name": "mbus4_type", "value": 0, "type": "i", "min": 0, "max": 200},
      {"name": "sm_has_fase_info", "value": 1, "type": "i", "min": 0, "max": 1},
      {"name": "tlgrm_interval", "value": 5, "type": "i", "min": 2, "max": 60},
      {"name": "oled_type", "value": 1, "type": "i", "min": 0, "max": 2},
      {"name": "oled_screen_time", "value": 10, "type": "i", "min": 1, "max": 300},
      {"name": "oled_flip_screen", "value": 0, "type": "i", "min": 0, "max": 1},
      {"name": "index_page", "value":"DSMRindex.html", "type": "s", "maxlen": 49},
      {"name": "mqtt_broker", "value":"192.168.21.244", "type": "s", "maxlen": 100},
      {"name": "mqtt_broker_port", "value": 1883, "type": "i", "min": 1, "max": 9999},
      {"name": "mqtt_user", "value":"", "type": "s", "maxlen": 39},
      {"name": "mqtt_passwd", "value":"", "type": "s", "maxlen": 39},
      {"name": "mqtt_toptopic", "value":"DSMR-API", "type": "s", "maxlen": 20},
      {"name": "mqtt_interval", "value": 60, "type": "i", "min": 0, "max": 600},
      {"name": "mindergastoken", "value":"Ay76AFwQ", "type": "s", "maxlen": 20}
    ]}
    {"name":"<settingVeld>","value":"<nieuweWaarde>"}

    DSMR-editor

    De DSMRloggerAPI heeft de mogelijkheid om meterstanden en instellingen via de browser te veranderen.

    Je start de DSMR-editor door in het hoofdscherm op het icoontje te klikken.

    Betekenis van de knoppen:

    • Terug: Terug naar het hoofdscherm van de DSMR-logger

    • Meterstanden: Hier kunnen, per maand, de meterstanden worden ingevoerd. Er kan gekozen worden tussen de meterstanden van de gebruikte energie, de opgewekte energie en het gas verbruik.

    • Settings: Hier kunnen bepaalde parameters zoals de energie tarieven, interval voor het lezen van telegrammen, gegevens van de MQTT broker en het autorisatie token van Mindergas.nl worden ingesteld.

    • Herstel: ingevoerde veranderingen die nog niet zijn opgeslagen worden teniet gedaan.

    • Opslaan: de ingevoerde gegevens worden opgeslagen

    Meterstanden aanpassen

    Het muteren van de maanden tabel is nog niet helemaal zoals het zou moeten zijn. Het is vrij lastig omdat de software zeker moet zijn dat de jaar/maand gegevens, van boven naar beneden, aflopen en aansluiten en ook de meterstanden moeten een steeds lagere waarde hebben. Wordt niet aan voorgaande inter-validatie voldaan, dan kleurt het vakje waar de fout is ontdekt rood en worden de gegevens niet opgeslagen.

    Klik na iedere verandering op [Opslaan] (of in ieder geval toch zo vaak mogelijk!

    Sommige browser vertalen decimale punten in komma's! Dit is erg verwarrend want de vertaling terug doen ze dan weer niet. Bij het invullen/veranderen van de meterstanden moet een decimale punt (".") gebruikt worden, anders wordt de invoer als ongeldig aangemerkt en niet opgeslagen!

    Settings aanpassen

    Hostname

    De default Hostname is DSMR-API. De documentatie gaat ook uit van deze default hostname. Mocht je de hostname hier veranderen dan moet je bij het lezen van de documentatie overal "DSMR-API" vervangen door de hier ingevoerde hostname (in bovenstaand plaatje is de hostname veranderd in "DSMR-TST3").

    Use Pré DSMR 40 (0=No, 1=Yes)

    Zet deze rubriek op "1" als je een DSMR 2+ of DSMR 3+ Slimme Meter hebt. Deze instelling wordt pas actief nadat de DSMR-logger opnieuw is opgestart.

    MBus-1 (2,3,4) Type Meter

    Voer hier het Type in van de meter die op de betreffende MBus is aangesloten. Het Type van Gas meters is "003". Als in jouw installatie de Gas meter is aangesloten op MBus-ID2 voer je bij de rubriek"MBus-2 Type meter"een "3" in. Bij MBus-ID's waar niets op is aangesloten voer je het beste een "0" in.

    SM Has Fase Info (0=No, 1=Yes)

    Voer een 1 in als de aangesloten Slimme Meter wél fase informatie afgeeft, voer anders een 0 (nul) in. Of jouw Slimme Meter Fase Informatie af geeft kun je zien door naar een telegram te kijken. Geeft jouw Slimme Meter Fase Informatie dan zie je rubrieken met een naam waar _l1, _l2 en _l3 achter staat. Je hebt een Slimme meter die géén fase info afgeeft als de grafieken leeg blijven.

    Telegram Lees Interval

    Default interval is 10. Dit betekent dat er iedere tien seconden een telegram wordt gelezen en verwerkt. De minimum waarde is 2 seconden.

    Te gebruiken index.html pagina

    De standaard index pagina is "DSMRindex.html". Mocht je zelf een GUI schrijven dan kun je hier de naam van de index pagina van jouw GUI invullen (nadat je jouw .html pagina naar het bestand systeem hebt ge-upload). Standaard staat er ook een DSMRindexEDGE.html pagina op het bestand systeem. Deze is gelijk aan de DSMRindex.html pagina maar hij haalt de javascript en css bestanden uit de github repository zodat aanpassingen (uitbreidingen of verbeteringen) automatisch door de DSMR-logger gebruikt worden. Het ADJindex.html bestand is een bootstrap naar de door gemaakte GUI, het HJMindex.html bestand is een bootstrap naar de door Erik ontwikkelde GUI. Je kunt deze GUI's eenvoudig uitproberen door in de FSmanager op deze bestanden te klikken.

    Een nieuw ingevoerde index pagina wordt pas actief na het opnieuw opstarten van de DSMR-logger ([ReBoot] knop in de FSmanager).

    OLED type

    Hier kun je invoeren óf en wat voor OLED schermpje op de DSMR-logger is aangesloten.

    • Voer een 0 (nul) in als er geen OLED scherm is aangesloten

    • Voer een 1 in als het scherm van het type SDD1306 is

    • Voer een 2 in als het scherm van het type SH1106 is

    Flip Oled scherm

    • Voer 0 (nul) in om het scherm standaard te gebruiken

    • Voet 1 in als je het scherm "op zijn kop" gebruikt.

    MQTT Top Topic

    Dit is het topic waarmee de MQTT berichten naar de broker worden verstuurd. Standaard is het Top Topic "DSMR-API". In bovenstaand plaatje is het Top Topic veranderd in "DSMR-TST3".

    Verzend MQTT berichten

    Hier kun je opgeven hoe vaak de DSMR-logger een bericht naar de MQTT broker moet sturen. Voer je hier '0' (nul) in dan worden er géén berichten naar de MQTT broker verstuurd. Een waarde kleiner dan de Telegram Lees Interval zorgt ervoor dat na ieder gelezen telegram een bericht naar de MQTT broker wordt verstuurd.

    Arjen de Jong
    Edit Maanden tabel

    FSmanager

    Met de FSmanager is het mogelijk bestanden op het bestand systeem (Little File System) van de DSMR-logger te plaatsen of ze ervan te verwijderen. Ook kan de inhoud van bestanden die aanwezig zijn op het bestand systeem worden getoond (dit is niet mogelijk met .html bestanden omdat deze direct door de browser geïnterpreteerd -en dus uitgevoerd- worden).

    Daarnaast kent de FSmanager nog de volgende functies:

    • Starten van de Update Server [Update Firmware]

    • Rebooten van de DSMR-logger[Reboot]

    • Formatteren van het LittleFS [Format FileSYS]

    • Soms blijft het scherm leeg. Klik dan op de knop[List File System]

    • Met de knop[Exit FSmanager] keer je terug naar het hoofdscherm.

    Er zijn verschillende manieren om de FSmanager te starten:

    • Vanuit het DSMR-logger hoofdscherm door op het icoon te klikken

    • Door in de browser de volgende URL in te toetsen http://dsmr-api.local/FSmanager of: http://<ipAdresVanDeLogger>/FSmanager

    Het bestand systeem formatteren

    De FSmanager heeft de mogelijkheid om het bestand systeem te formatteren. Deze functie is alleen nodig als het bestand systeem problemen vertoont. Normaal gesproken is deze functie nooit nodig en daarom is de knop ook uitgeschakeld. Om de knop te activeren moet het bestand met de naam !doNotFormat(het eerste teken is een uitroep-teken) ge-delete worden. De inhoud van het bestand is niet belangrijk. Zodra dit bestand afwezig is wordt de [Format FileSYS] knop geactiveerd.

    Pas op! Door het bestand systeem te formatteren raak je álle bestanden die op het bestand systeem staan kwijt! Maak zo nodig eerst kopiëren van belangrijke bestanden.

    Na iedere herstart zal de DSMRloggerAPI firmware controleren of het bestand systeem correct geformatteerd is. In dat geval plaatst het automatisch een bestand met de naam !doNotFormat in de root directory.

    Slimme Meter gerelateerde restAPI's

    Systeem Informatie van de Slimme Meter

    GET http://dsmr-api.local/api/v1/sm/info

    Geeft systeem een JSON string met informatie van de Slimme Meter, zoals ID's en Serie nummers, terug.

    {"info":[
      {"name": "identification", "value": "XMX5LABCDB2410065887"},
      {"name": "p1_version", "value": "50"},
      {"name": "equipment_id", "value": "4530303336303000000000000000000040"},
      {"name": "electricity_tariff", "value": "0001"},
      {"name": "mbus1_device_type", "value": 3},
      {"name": "mbus1_equipment_id_tc", "value": "4730303339303031363532303530323136"},
      {"name": "mbus4_device_type", "value": 5},
      {"name": "mbus4_equipment_id_tc", "value": "4730303339303031344444444444444444"}
    ]}

    Informatie uit het laatst gelezen telegram

    GET http://dsmr-api.local/api/v1/sm/actual

    Geeft de actuele meterstanden van de Slimme Meter terug in een JSON string.

    Informatie uit het laatst gelezen telegram

    GET http://dsmr-api.local/api/v0/sm/actual

    Deze api dient voor backwards compatibility met de DSMRloggerWS firmware. Deze api call geeft de actuele informatie van de Slimme Meter terug in een JSON string.

    Alle velden die de dsmr library terug kan geven

    GET http://dsmr-api.local/api/v1/sm/fields

    Geeft een JSON string met alle velden die door de DSMRloggerAPI firmware kunnen worden terug gegeven. Let op! Niet iedere Slimme Meter geeft ook al deze velden terug. Als de Slimme meter een veld niet terug geeft heeft "value" de waarde "-".

    Informatie van één veld uit het laatst gelezen telegram

    GET http://dsmr-api.local/api/v1/sm/fields/<fieldName>

    Geeft een JSON string met informatie over één veld terug. Bijvoorbeeld: http://dsmr-api.local/api/v1/sm/fields/current_l2

    Onbewerkt telegram uit de Slimme Meter

    GET http://dsmr-api.local/api/v1/sm/telegram

    Geeft een telegram terug precies zo als de Slimme Meter die ook afgeeft, dus inclusief "\r\n" line endings en inclusief de CheckSum!

    DSMRloggerAPI GUI

    Hieronder wat afbeeldingen van de standaard meegeleverde GUI

    {"actual":[
      {"name": "timestamp", "value": "210419050001S"},
      {"name": "energy_delivered_tariff1", "value": 2332.511, "unit": "kWh"},
      {"name": "energy_delivered_tariff2", "value": 8514.767, "unit": "kWh"},
      {"name": "energy_returned_tariff1", "value": 353.841, "unit": "kWh"},
      {"name": "energy_returned_tariff2", "value": 196.645, "unit": "kWh"},
      {"name": "power_delivered", "value": 1.880, "unit": "kW"},
      {"name": "power_returned", "value": 0.000, "unit": "kW"},
      {"name": "voltage_l1", "value": 239.000, "unit": "V"},
      {"name": "voltage_l2", "value": 236.000, "unit": "V"},
      {"name": "voltage_l3", "value": 237.000, "unit": "V"},
      {"name": "current_l1", "value": 3, "unit": "A"},
      {"name": "current_l2", "value": 0, "unit": "A"},
      {"name": "current_l3", "value": 0, "unit": "A"},
      {"name": "power_delivered_l1", "value": 0.500, "unit": "kW"},
      {"name": "power_delivered_l2", "value": 0.899, "unit": "kW"},
      {"name": "power_delivered_l3", "value": 0.480, "unit": "kW"},
      {"name": "power_returned_l1", "value": 0.000, "unit": "kW"},
      {"name": "power_returned_l2", "value": 0.000, "unit": "kW"},
      {"name": "power_returned_l3", "value": 0.000, "unit": "kW"},
      {"name": "gas_delivered", "value": 2963.380, "unit": "m3"}
    ]}
    {
      "timestamp": "170102105001S",
      "energy_delivered_tariff1": 146.380,
      "energy_delivered_tariff2": 70.511,
      "energy_returned_tariff1": 111.164,
      "energy_returned_tariff2": 75.530,
      "power_delivered": 1.750,
      "power_returned": 1.270,
      "voltage_l1": 242.000,
      "voltage_l2": 240.000,
      "voltage_l3": 234.000,
      "current_l1": 0,
      "current_l2": 0,
      "current_l3": 0,
      "power_delivered_l1": 1.046,
      "power_delivered_l2": 0.464,
      "power_delivered_l3": 0.243,
      "power_returned_l1": 0.669,
      "power_returned_l2": 0.521,
      "power_returned_l3": 0.078,
      "gas_delivered": 100.550
    }
    {"fields":[
      {"name": "identification", "value": "XYZ12345678909897654"},
      {"name": "p1_version", "value": "50"},
      {"name": "p1_version_be", "value": "-"},
      {"name": "timestamp", "value": "210610103351S"},
      {"name": "equipment_id", "value": "45303033363030333754321098765"},
      {"name": "energy_delivered_tariff1", "value": 4491.266, "unit": "kWh"},
      {"name": "energy_delivered_tariff2", "value": 6065.275, "unit": "kWh"},
      {"name": "energy_returned_tariff1", "value": 788.990, "unit": "kWh"},
      {"name": "energy_returned_tariff2", "value": 1809.853, "unit": "kWh"},
      {"name": "electricity_tariff", "value": "0002"},
      {"name": "power_delivered", "value": 0.000, "unit": "kW"},
      {"name": "power_returned", "value": 1.023, "unit": "kW"},
      {"name": "electricity_threshold", "value": "-"},
      {"name": "electricity_switch_position", "value": "-"},
      {"name": "electricity_failures", "value": 11},
      {"name": "electricity_long_failures", "value": 1},
      {"name": "electricity_failure_log", "value": "(1)(0-0:96.7.19)(200210104719W)(0000014540*s)"},
      {"name": "electricity_sags_l1", "value": 10},
      {"name": "electricity_sags_l2", "value": 7},
      {"name": "electricity_sags_l3", "value": 9},
      {"name": "electricity_swells_l1", "value": 0},
      {"name": "electricity_swells_l2", "value": 0},
      {"name": "electricity_swells_l3", "value": 0},
      {"name": "message_short", "value": "-"},
      {"name": "message_long", "value": ""},
      {"name": "voltage_l1", "value": 235.000, "unit": "V"},
      {"name": "voltage_l2", "value": 238.000, "unit": "V"},
      {"name": "voltage_l3", "value": 239.000, "unit": "V"},
      {"name": "current_l1", "value": 0.000, "unit": "A"},
      {"name": "current_l2", "value": 0.000, "unit": "A"},
      {"name": "current_l3", "value": 5.000, "unit": "A"},
      {"name": "power_delivered_l1", "value": 0.075, "unit": "kW"},
      {"name": "power_delivered_l2", "value": 0.106, "unit": "kW"},
      {"name": "power_delivered_l3", "value": 0.000, "unit": "kW"},
      {"name": "power_returned_l1", "value": 0.000, "unit": "kW"},
      {"name": "power_returned_l2", "value": 0.000, "unit": "kW"},
      {"name": "power_returned_l3", "value": 1.205, "unit": "kW"},
      {"name": "mbus1_device_type", "value": 3},
      {"name": "mbus1_equipment_id_tc", "value": "47303044449303031363532309876543211"},
      {"name": "mbus1_equipment_id_ntc", "value": "-"},
      {"name": "mbus1_valve_position", "value": "-"},
      {"name": "mbus1_delivered", "value": 3845.379, "unit": "m3"},
      {"name": "mbus1_delivered_ntc", "value": "-"},
      {"name": "mbus1_delivered_dbl", "value": "-"},
      {"name": "mbus2_device_type", "value": "-"},
      {"name": "mbus2_equipment_id_tc", "value": "-"},
      {"name": "mbus2_equipment_id_ntc", "value": "-"},
      {"name": "mbus2_valve_position", "value": "-"},
      {"name": "mbus2_delivered", "value": 0.000, "unit": "GJ"},
      {"name": "mbus2_delivered_ntc", "value": "-"},
      {"name": "mbus2_delivered_dbl", "value": "-"},
      {"name": "mbus3_device_type", "value": "-"},
      {"name": "mbus3_equipment_id_tc", "value": "-"},
      {"name": "mbus3_equipment_id_ntc", "value": "-"},
      {"name": "mbus3_valve_position", "value": "-"},
      {"name": "mbus3_delivered", "value": 0.000, "unit": "m3"},
      {"name": "mbus3_delivered_ntc", "value": "-"},
      {"name": "mbus3_delivered_dbl", "value": "-"},
      {"name": "mbus4_device_type", "value": "-"},
      {"name": "mbus4_equipment_id_tc", "value": "-"},
      {"name": "mbus4_equipment_id_ntc", "value": "-"},
      {"name": "mbus4_valve_position", "value": "-"},
      {"name": "mbus4_delivered", "value": 0.000, "unit": "m3"},
      {"name": "mbus4_delivered_ntc", "value": "-"},
      {"name": "mbus4_delivered_dbl", "value": "-"}
    ]}
    {"fields":[
      {"name": "timestamp", "value": "210315080001S"},
      {"name": "current_l2", "value": 1, "unit": "A"}
    ]}
    /XMX5LABCDE2410065447
    
    1-3:0.2.8(50)
    0-0:1.0.0(210610104031S)
    0-0:96.1.1(4530304446303033373839312345678906)
    1-0:1.8.1(004491.266*kWh)
    1-0:1.8.2(006065.310*kWh)
    1-0:2.8.1(000788.990*kWh)
    1-0:2.8.2(001809.893*kWh)
    0-0:96.14.0(0002)
    1-0:1.7.0(00.037*kW)
    1-0:2.7.0(00.000*kW)
    0-0:96.7.21(00011)
    0-0:96.7.9(00001)
    1-0:99.97.0(1)(0-0:96.7.19)(200210104719W)(0000014540*s)
    1-0:32.32.0(00010)
    1-0:52.32.0(00007)
    1-0:72.32.0(00009)
    1-0:32.36.0(00000)
    1-0:52.36.0(00000)
    1-0:72.36.0(00000)
    0-0:96.13.0()
    1-0:32.7.0(238.0*V)
    1-0:52.7.0(238.0*V)
    1-0:72.7.0(238.0*V)
    1-0:31.7.0(002*A)
    1-0:51.7.0(000*A)
    1-0:71.7.0(003*A)
    1-0:21.7.0(00.598*kW)
    1-0:41.7.0(00.102*kW)
    1-0:61.7.0(00.000*kW)
    1-0:22.7.0(00.000*kW)
    1-0:42.7.0(00.000*kW)
    1-0:62.7.0(00.663*kW)
    0-1:24.1.0(003)
    0-1:96.1.0(4730305559303031363839312345678906)
    0-1:24.2.1(210610104007S)(03845.376*m3)
    !344A
    
    per Maand
    per Maand Grafisch
    Telegram
    Systeem Info

    Historische Gegevens gerelateerde restAPI's

    De restAPI's voor het opvragen van historische gegevens hebben dit formaat:

    of:

    Opvragen gegevens uit de uren tabel

    GET http://dsmr-api.local/api/v1/hist/hours

    Geeft een JSON string met de historische gegevens over de afgelopen 24 uur terug.

    Opvragen gegevens uit de dagen tabel

    GET http://dsmr-api.local/api/v1/hist/days

    Geeft een JSON string met alle gegevens over de afgelopen 14 dagen terug.

    Opvragen gegevens uit de maanden tabel

    GET http://dsmr-api.local/api/v1/hist/months

    Geeft een JSON string met alle gegevens van de afgelopen 24 maanden terug.

    /api/v1/hist/{hours|days|months}
    /api/v1/hist/{hours|days|months}/{asc|desc}
    {"hours":[
      {"recnr": 0, "recid": "21031006", "slot": 17,"edt1": 2328.742, "edt2": 8500.609,"ert1": 353.507, "ert2": 196.479,"gdt": 2958.498},
      {"recnr": 1, "recid": "21031005", "slot": 16,"edt1": 2328.739, "edt2": 8500.598,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.495},
      {"recnr": 2, "recid": "21031004", "slot": 15,"edt1": 2328.735, "edt2": 8500.588,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.488},
      {"recnr": 3, "recid": "21031003", "slot": 14,"edt1": 2328.729, "edt2": 8500.563,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.481},
      {"recnr": 4, "recid": "21031002", "slot": 13,"edt1": 2328.725, "edt2": 8500.551,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.478},
      {"recnr": 5, "recid": "21031001", "slot": 12,"edt1": 2328.721, "edt2": 8500.539,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.474},
         .
         .
         .
      {"recnr": 43, "recid": "21030811", "slot": 23,"edt1": 2328.563, "edt2": 8499.973,"ert1": 353.492, "ert2": 196.472,"gdt": 2958.277},
      {"recnr": 44, "recid": "21030810", "slot": 22,"edt1": 2328.558, "edt2": 8499.949,"ert1": 353.491, "ert2": 196.471,"gdt": 2958.272},
      {"recnr": 45, "recid": "21030809", "slot": 21,"edt1": 2328.555, "edt2": 8499.940,"ert1": 353.490, "ert2": 196.471,"gdt": 2958.270},
      {"recnr": 46, "recid": "21030808", "slot": 20,"edt1": 2328.550, "edt2": 8499.921,"ert1": 353.489, "ert2": 196.471,"gdt": 2958.260},
      {"recnr": 47, "recid": "21030807", "slot": 19,"edt1": 2328.546, "edt2": 8499.904,"ert1": 353.488, "ert2": 196.470,"gdt": 2958.255},
      {"recnr": 48, "recid": "21030806", "slot": 18,"edt1": 2328.543, "edt2": 8499.895,"ert1": 353.488, "ert2": 196.470,"gdt": 2958.250}
    ]}
    {"days":[
      {"recnr": 0, "recid": "21031104", "slot": 7,"edt1": 2328.828, "edt2": 8500.923,"ert1": 353.516, "ert2": 196.483,"gdt": 2958.626},
      {"recnr": 1, "recid": "21031023", "slot": 6,"edt1": 2328.810, "edt2": 8500.861,"ert1": 353.516, "ert2": 196.483,"gdt": 2958.598},
      {"recnr": 2, "recid": "21030923", "slot": 5,"edt1": 2328.712, "edt2": 8500.511,"ert1": 353.506, "ert2": 196.479,"gdt": 2958.463},
      {"recnr": 3, "recid": "21030823", "slot": 4,"edt1": 2328.616, "edt2": 8500.146,"ert1": 353.497, "ert2": 196.475,"gdt": 2958.338},
      {"recnr": 4, "recid": "21030723", "slot": 3,"edt1": 2328.513, "edt2": 8499.809,"ert1": 353.488, "ert2": 196.470,"gdt": 2958.209},
       .
       .
       .
      {"recnr": 9, "recid": "21030223", "slot": 13,"edt1": 2328.028, "edt2": 8498.042,"ert1": 353.444, "ert2": 196.446,"gdt": 2957.589},
      {"recnr": 10, "recid": "21030123", "slot": 12,"edt1": 2327.934, "edt2": 8497.677,"ert1": 353.435, "ert2": 196.441,"gdt": 2957.457},
      {"recnr": 11, "recid": "21022823", "slot": 11,"edt1": 2327.651, "edt2": 8496.564,"ert1": 353.407, "ert2": 196.428,"gdt": 2957.076},
      {"recnr": 12, "recid": "21022723", "slot": 10,"edt1": 2327.560, "edt2": 8496.223,"ert1": 353.400, "ert2": 196.424,"gdt": 2956.947},
      {"recnr": 13, "recid": "21022623", "slot": 9,"edt1": 2327.472, "edt2": 8495.822,"ert1": 353.391, "ert2": 196.419,"gdt": 2956.831},
      {"recnr": 14, "recid": "21022523", "slot": 8,"edt1": 2327.383, "edt2": 8495.460,"ert1": 353.383, "ert2": 196.415,"gdt": 2956.704}
    ]}
    {"months":[
      {"recnr": 0, "recid": "21031106", "slot": 18,"edt1": 2328.836, "edt2": 8500.952,"ert1": 353.517, "ert2": 196.484,"gdt": 2958.637},
      {"recnr": 1, "recid": "21022823", "slot": 17,"edt1": 2327.651, "edt2": 8496.564,"ert1": 353.407, "ert2": 196.428,"gdt": 2957.076},
      {"recnr": 2, "recid": "21013023", "slot": 16,"edt1": 2324.980, "edt2": 8486.277,"ert1": 353.170, "ert2": 196.306,"gdt": 2953.531},
      {"recnr": 3, "recid": "20123023", "slot": 15,"edt1": 2322.095, "edt2": 8475.463,"ert1": 352.912, "ert2": 196.175,"gdt": 2949.813},
      {"recnr": 4, "recid": "20113023", "slot": 14,"edt1": 2319.278, "edt2": 8464.555,"ert1": 352.654, "ert2": 196.047,"gdt": 2946.054},
      {"recnr": 5, "recid": "20103023", "slot": 13,"edt1": 2316.394, "edt2": 8453.577,"ert1": 352.392, "ert2": 195.919,"gdt": 2942.263},
       .
       .
       .
      {"recnr": 19, "recid": "19083023", "slot": 24,"edt1": 2276.118, "edt2": 8300.609,"ert1": 348.744, "ert2": 194.109,"gdt": 2889.412},
      {"recnr": 20, "recid": "19073023", "slot": 23,"edt1": 2273.252, "edt2": 8289.574,"ert1": 348.484, "ert2": 193.979,"gdt": 2885.693},
      {"recnr": 21, "recid": "19063023", "slot": 22,"edt1": 2270.319, "edt2": 8278.475,"ert1": 348.228, "ert2": 193.847,"gdt": 2881.936},
      {"recnr": 22, "recid": "19053023", "slot": 21,"edt1": 2267.456, "edt2": 8267.560,"ert1": 347.971, "ert2": 193.718,"gdt": 2878.164},
      {"recnr": 23, "recid": "19042918", "slot": 20,"edt1": 2264.495, "edt2": 8256.316,"ert1": 347.702, "ert2": 193.585,"gdt": 2874.242},
      {"recnr": 24, "recid": "19033023", "slot": 19,"edt1": 2261.732, "edt2": 8245.799,"ert1": 347.443, "ert2": 193.461,"gdt": 2870.651}
    ]}

    Nieuwe DSMRloggerAPI firmware flashen

    Nieuwe DSMRloggerAPI firmware kan via de web-interface van de DSMR-logger "Over the Air" geflashed worden maar mocht dat, om de één of andere reden niet lukken dan kunnen de pré compiled binaries ook bedraad geflashed worden.

    1. OTA met de Update Server flashen

    2. Bedraad met het Espressif flash Tool

    Hoe je de firmware moet upgraden van DSMRloggerWS naar DSMRloggerAPI staat beschreven!

    Pre compiled Binaries

    Op staan van de major releases binaries van zowel de firmware als van het LittleFS bestand systeem.

    Klik op "" en download het meest recente of door jou gewenste DSMRloggerAPI.ino.bin bestand (deze staan onder iedere release beschrijving bij "Assets").

    Bij een gewone firmware update is het meestal niet nodig ook het bestand system opnieuw te downloaden en te flashen.

    Onder iedere release beschrijving staan de bijbehorende "Assets".

    Vanaf versie 3 van de firmware zijn er geen compiler opties meer die de firmware voor een bepaald type Slimme Meter geschikt maken. Alleen in het zeer specifieke geval waarbij je wilt testen of debuggen kan het nodig zijn om zelf de binaries te compileren.

    OTA flashen met de Update Server

    Ga nu op de DSMR-logger naar de FSmanager (door op het icoon te klikken) en klik vervolgens op de knop [Update Firmware].

    Klik nu op de bovenste [Choose File] knop

    Selecteer in het popup-window het zojuist gedownloade DSMRloggerAPI.ino.bin file:

    Klik op [Open] of [Select] en klik vervolgens op de knop [Flash Firmware]. Na enige tijd verschijnt het volgende scherm:

    .. waarna, zodra de teller op nul staat, het hoofdscherm van de DSMR-logger weer verschijnt.

    Alleen als in de beschrijving van een release staat dat ook het bestand system opnieuw geflased moet worden moet u dit doen. In veel gevallen zal volstaan om eventueel een bepaald bestand naar de DSMR-logger te uploaden. Ook dit zal dan expliciet in de release beschrijving staan.

    Bedraad flashen met het Espressif Flash Download tool

    Espressif heeft voor zijn ESP-boards een (helaas alleen Windows) tool ontwikkeld dat het bedraad flashen erg eenvoudig maakt.

    Het tool kun je downloaden.

    Pak het .zip file uit (unzip) en start het door op het mapje te klikken:

    Klik nu op "flash_download_tools.exe" en selecteer [esp8266 DownloadTool] in het volgende scherm:

    Selecteer de twee bin bestanden. Het DSMRloggerAPI.ino.bin bestand moet op adres 0x0 starten, het DSMRloggerAPI.mklittlefs.bin op adres 0x200000. Selecteer de COM poort waar de DSMR-logger op is aangesloten, zet de DSMR-logger in flash mode en klik op [START]. Na enige tijd krijg je de melding dat alles goed is gegaan.

    hier
    github
    releases
    hier

    Integratie met Home Assistant

    Om in Home Assistant de gegevens uit de DSMR-logger (met de DSMRloggerAPI firmware) te gebruiken heb ik het configuration.yaml bestand als volgt aangepast:

    Optioneel: Gas gebruik toevoegen (let op: is totaal gebruik):

      - platform: mqtt
        name: "Gas gebruik"
        state_topic: "DSMR-API/gas_delivered"
        unit_of_measurement: 'm3'
        value_template: "{{ (value_json.gas_delivered[0].value | float * 1000.0) | round(1) }}"

    in deze voorbeelden worden de power_delivered en gas_delivered velden via MQTT uitgelezen en de power_returned via de restAPI's. Uiteraard kun je voor alle velden de manier van uitlezen gebruiken die voor jou het prettigste werkt.

    Dit is het resultaat:

    Merk op dat ik voor de resource bij de restAPI's het IP adres van de DSMR-logger gebruik. Ik krijg het in mijn opzet niet voor elkaar hier de hostname (dsmr-api.local) te gebruiken. Controleer ook of het MQTT topic juist is.

    Update Server

    Met de Update Server is het mogelijk om firmware en het bestand systeem naar een DSMR-logger te flashen.

    Je kunt de Update Server op twee manieren opstarten:

    • Door op de knop [Update Firmware] in de FSmanager te klikken

    • Door in de browser de volgende URL in te toetsen: http://dsmr-api.local/update of: http://<hetIPadresVanDeDSMRlogger>/update

    #################################
    # uitbreiding configuratie.yaml #
    #################################
    # koppeling met de DSMR-logger  #
    #################################
    
    sensor:
      - platform: mqtt
        name: "Gebruik"
        state_topic: "DSMR-API/power_delivered" 
        unit_of_measurement: "kWh"
        value_template: '{{ value_json.power_delivered[0].value | round(3) }}'
    
      - platform: mqtt
        name: "Laatste Update mqtt"
        state_topic: "DSMR-API/timestamp" 
    #   value_template: '{{ value_json.timestamp[0].value }}'
        value_template: >
          {{      value_json.timestamp[0].value[4:6] + "-" + 
                  value_json.timestamp[0].value[2:4] + "-" + 
             "20"+value_json.timestamp[0].value[0:2] + "   " + 
                  value_json.timestamp[0].value[6:8] + ":" + 
                  value_json.timestamp[0].value[8:10] + ":" + 
                  value_json.timestamp[0].value[10:13] }}
    
      - platform: mqtt
        name: "Gebruik l1"
        state_topic: "DSMR-API/power_delivered_l1"
        unit_of_measurement: 'Watt'
        value_template: "{{ (value_json.power_delivered_l1[0].value | float * 1000.0) | round(1) }}"
    
      - platform: mqtt
        name: "Gebruik l2"
        state_topic: "DSMR-API/power_delivered_l2"
        unit_of_measurement: 'Watt'
        value_template: "{{ (value_json.power_delivered_l2[0].value | float * 1000.0) | round(1) }}"
    
      - platform: mqtt
        name: "Gebruik l3"
        state_topic: "DSMR-API/power_delivered_l3"
        unit_of_measurement: 'Watt'
        value_template: "{{ (value_json.power_delivered_l3[0].value | float * 1000.0) | round(1) }}"
    
    
      - platform: rest
        name: "Levering"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned
        unit_of_measurement: "kWh"
        value_template: '{{ value_json.fields[1].value | round(3) }}'
    
      - platform: rest
        name: "Laatste Update restAPI"
        resource: http://192.168.2.106/api/v1/sm/fields/timestamp
    #   value_template: '{{ value_json.fields[0].value }}'
        value_template: >
          {{      value_json.fields[0].value[4:6] + "-" + 
                  value_json.fields[0].value[2:4] + "-" + 
             "20"+value_json.fields[0].value[0:2] + "   " + 
                  value_json.fields[0].value[6:8] + ":" + 
                  value_json.fields[0].value[8:10] + ":" + 
                  value_json.fields[0].value[10:13] }}
    
      - platform: rest
        name: "Levering l1"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l1
        unit_of_measurement: "Watt"
        value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'
    
      - platform: rest
        name: "Levering l2"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l2
        unit_of_measurement: 'Watt'
        value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'
    
      - platform: rest
        name: "Levering l3"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l3
        unit_of_measurement: 'Watt'
        value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'

    Flash Firmware

    Om (nieuwe) firmware te flashen moet je op de knop [Choose file] onder de kop "Selecteer een .ino.bin bestand" klikken.

    Er verschijnt nu een drop-down window waar je de gewenste firmware kunt selecteren.

    Klik vervolgens op [Flash Firmware]

    Flash File Systeem

    Om een nieuw bestands systeem op de DSMR-logger te flashen klik je op de knop [Choose file] onder de kop "Selecteer een .mklittlefs.bin bestand".

    Er verschijnt nu een drop-down window waar je het gewenste .mklittlefs.bin bestand systeem kunt selecteren.

    Klik vervolgens op de knop [Flash FileSYS]

    Flashen is geslaagd

    Upgrade DSMRloggerAPI v2 to v3

    Het upgraden vanaf de DSMRloggerAPI v2 firmware naar de DSMRloggerAPI firmware v3 is nodig omdat het SPIFFS bestand systeem binnenkort niet meer ondersteund wordt door de esp8266 core. Versie 3 van de DSMRloggerAPI firmware maakt daarom gebruik van het zgn. LittleFS (little file system) en daarom is het noodzakelijk de volgende stappen uit te voeren:

    • Gebruik de FSexplorer om de RINGhours.csv, RINGdays.csv enRINGmonths.csv naar je computer te downloaden (dit hoef je alleen te doen als je de opgebouwde historie na de upgrade terug wilt zien in de GUI van de DSMR-logger met de nieuwe firmware).

    • Download de laatste (nieuwste) versie DSMRloggerAPI.ino.bin en DSMRloggerAPI.mklittlefs.bin files van naar je computer.

    • Klik op de knop [Update Firmware], selecteer met [Choose File] het goede firmware bestand (DSMRloggerAPI.ino.bin) en flash eerst deze nieuwe firmware door op de knop [Flash Firmware]

    • Wacht na de boodschap dat de update goed is gegaan tot de teller op 10 staat en klik dan in de browser op [Back] , tik in de URL-balk het IP-Adres van de DSMR-logger in met daarachter "/update" of wacht tot de DSMR-logger opnieuw is opgestart. Je komt nu weer in het scherm waar je nieuwe firmware kunt flashen.

    • Klik nu op de knop [Update Firmware], selecteer door op [Choose File] onder de tekst "Selecteer een .mklittlefs.bin bestand" te klikken. Selecteer nu het zojuist gedownloade

    Als het flashen goed is gegaan verschijnt na enige tijd het start scherm van de DSMR-logger.

    Gebruik vervolgens de FSmanager om de, in stap 1 naar de PC gekopieerde, RINGbestanden terug naar de DSMR-logger te zetten.

    License

    MIT License

    Copyright © 2018 - 2021 Willem Aandewiel

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    te klikken.
    DSMRloggerAPI
    .
    mklittlefs.bin
    bestand en klik op de knop
    [Flash FileSystem]
    .
    github

    ESP8266 LittleFS Data Upload Tool

    Installatie LittleFS Data Upload Tool

    Eén van de mooie eigenschappen van de ESP8266 is dat er flash geheugen in zit. Flash geheugen is geheugen dat zijn inhoud ook zonder spanning behoud. Vergelijk het met een SD-kaart. Het flash geheugen is, afhankelijk van het bordje, 512kB tot 16MB(!) groot. Een deel van dit flash geheugen wordt gebruikt om jouw programma in op te slaan. Wat er over blijft kan als bestand systeem worden ingericht (het zgn. LittleFS).

    Je kunt in je programma dit bestand systeem niet alleen gebruiken om (bijvoorbeeld meet-) gegevens maar ook om de inhoud van een web-pagina (index.html) of een configuratie-bestand in op te slaan.

    Om het LittleFS voor dit soort bestanden te kunnen gebruiken moet je een plug-in in je Arduino Projecten map installeren.

    De plug-in haal je vandaan. Ga naar deze pagina en download het meest recente .zip bestand ..

    Download vervolgens het ESP8266LittleFS-x.y.z.zip bestand door er op te klikken.

    En bewaar het bestand op een plek die voor jou handig is.

    Ga nu naar je Sketchbook Location map en maak daarin een nieuwe map tools aan (als deze nog niet bestaat). Pak het zojuist ge-download-de zip bestand uit in deze tools map. Er wordt nu een aantal nieuwe mappen aangemaakt waar de plug-in wordt neergezet. Het pad ziet er ongeveer zo uit:

    <sketchbook location>/tools/ESP8266FS/tool/esp8266fs.jar

    Start de Arduino IDE opnieuw op.

    Op de menu-balk zie je nu onder[Tools]een nieuwe optie: ESP8266 LittleFS Data Upload.

    Als er onder de map van je Sketch óók een map data staat, dan kun je de bestanden die in deze data-map staan met het ESP8266 LittleFS Data Upload tool naar het bestand systeem van de ESP8266 flashen.

    De bestands-tree van de DSMRloggerAPI firmware data-map ziet er zo uit:

    Het ESP8266 LittleFS Data Upload tool zal alle bestanden die in de data-map zitten naar het bestand systeem van de aangesloten ESP8266 uploaden.

    Ga naar: [tools] -> [ESP8266 LittleFS Data Upload]

    Randvoorwaarde is natuurlijk dat het bestand systeem groot genoeg is! In de selectie van je board moet je, behalve het juiste type board ook aangeven hoeveel ruimte van je Flash geheugen je wilt gebruiken voor het bestand-systeem (vóórdat je je programma naar de ESP8266 upload!).

    Normaliter zou je dit zo groot mogelijk willen maken, maar als je “Over The Air” programma’s op je ESP8266 wilt zetten (dus zonder fysieke verbinding maar via WiFi) dan moet je er rekening mee houden dat je twee maal de grootte van je programma nodig hebt om dit te kunnen doen. Wat er overblijft kun je als bestand-systeem gebruiken.

    Data map Flashen

    In de data-map van de DSMRloggerAPI firmware staan bestanden die nodig zijn voor het functioneren van de firmware.

    Deze bestanden moeten dan ook overgezet worden naar de DSMR-logger. Dat 'overzetten' kan op twee manieren: 'Bedraad' en 'Over The Air'

    Bedraad

    Beschrijving restAPI's

    Alle beschikbare gegevens kunnen via restAPI call's bij de DSMR-logger worden opgevraagd. De restAPI's zijn verdeelt in drie groepen. Informatie die met de hardware en firmware te maken heeft (/dev), informatie die met de Slimme Meter te maken heeft (/sm) en historische gegevens die, aan de hand van de door de Slimme Meter afgegeven gegevens, door de DSMR-logger in bestanden worden opgeslagen (/hist).

    Arduino IDE

    Installatie ArduinoIDE

    Download en installeer de meest actuele versie van de Arduino Integrated Development Environment (IDE) voor het Operating Systeem (OS) waar jouw Desktop of Laptop computer (er zijn versies voor Windows, Linux en Mac) mee werkt. Je kunt de Software downloaden.

    USE_MINDERGAS

    Met deze optie wordt de functionaliteit om gasverbruik naar te sturen geactiveerd.

    Via FSmanager -> DSMR Editor -> Settings kun je het jouw toegekende authorisatie token invoeren.

    Documentatie DSMRloggerAPI firmware

    In dit gitbook vind je alle informatie over de restAPI firmware voor de DSMR-logger

    Mijn !

    Introductie

    Je vindt hier de documentatie over de DSMRloggerAPI firmware voor versie 4 van de DSMR-logger.

    SHOW_PASSWRDS

    Met deze #define geef je aan of je wilt dat de PSK Key van je WiFi netwerk, het wachtwoord van de gebruikte MQTT Broker en het Authenticatie Token van Mindergas.nl zichtbaar worden.

    Via telnet het opvragen van de Board Info:

    en de Settings:

    DSMRloggerAPI Firmware

    Clonen Firmware

    De DSMRloggerAPI firmware staat hier . Er zijn twee manieren om de firmware te clonen.

    1. download de repository als een .zip file

    ESP8266 Core

    Installatie ESP8266 core

    In de Arduino IDE moet bij “Instellingen” de volgende URL worden ingevoerd achter “Additional Boards Manager URL’s:” (zie rood omlijnde kader)

    https://arduino.esp8266.com/stable/package_esp8266com_index.json

    Lees vooral de uitleg in het bestand en de uitgebreide op hun website!

    Arduino IDE geschikt maken voor het compileren van de DSMRloggerAPI firmware

    In de volgende vier hoofdstukken wordt beschreven wat je moet doen om zélf de DSMRloggerAPI firmware te compileren en naar de DSMR-logger te flashen.

    DSMRloggerAPI firmware

    Om de firmware op de DSMR-logger te krijgen moeten een aantal stappen worden ondernomen. Hieronder staat welke stappen dat zijn.

    USE_MQTT

    Met deze optie wordt de functionaliteit om data naar een MQTT Broker te sturen geactiveerd.

    Via FSexplorer -> Edit instellingen -> Settings kun je gegevens over de te gebruiken MQTT Broker invullen:

    Installatie Bibliotheken

    Nu je een ArduinoIDE hebt waarmee je ESP8266’s kunt programmeren (flashen) zul je ontdekken dat er door briljante mensen software is ontwikkeld die je kunt gebruiken om complexe projecten te realiseren, zonder dat je zelf het wiel hoeft uit te vinden.

    Deze software wordt veelal in de vorm van een bibliotheek aangeboden en je hoeft zo’n bibliotheek alleen maar te installeren om er gebruik van te kunnen maken.

    vind je de officiële instructies voor het installeren van bibliotheken met de ArduinoIDE.

    Stel je wilt je ESP8266 benaderen met een telnet client zodat je vanaf je Desktop of Laptop op de ESP8266 kunt inloggen. Je hebt op de ESP8266 dan een telnet server nodig. Met wat Googelen naar "ESP8266 telnet" blijken hier een aantal bibliotheken voor te bestaan.

    Als voorbeeld nemen we TelnetStream van Juraj Andrassy. Zijn telnet implementatie kun je vanaf deze pagina als bibliotheek downloaden.

    USE_UPDATE_SERVER

    Met deze optie wordt het mogelijk om nieuwe Firmware naar de DSMR-logger te flashen door in de FSmanager op de knop [Update Firmware] te klikken.

    en vervolgens in de Flash Utility ..

    .. op [Choose file] te klikken en daarna op [Flash Firmware]

    Installeren benodigde bibliotheken

    Voor de DSMRloggerAPI firmware zijn de volgende bibliotheken nodig:

    dsmr2Lib

    Deze library is een uitbreiding op de arduino-dsmr van Matthijs Kooijman. Je kunt de dsmr2Lib library vinden.

    ESP8266 LittleFS Data Upload Tool

    Arduino IDE
    ESP8266 Core
    Installatie Bibliotheken

    Data map Flashen

    Benodigde Bibliotheken
    DSMRloggerAPI Firmware
    Firmware Flashen
    TimeLib

    Deze is door Paul Stoffregen ontwikkeld. Je kunt hem hier downloaden.

    WiFiManager

    Je kunt de, door Tzapu ontwikkelde, bibliotheek hier downloaden. De DSMR-logger firmware is getest met version 0.14.0 van deze bibliotheek maar nieuwere versies zullen waarschijnlijk ook werken.

    TelnetStream

    Deze bibliotheek is door Juraj Andrassy ontwikkeld. Je kunt deze bibliotheek hier downloaden. De firmware is getest met version 0.0.2 maar nieuwere versies zullen waarschijnlijk ook werken.

    Let op: De installatie van deze bibliotheek gaat net als de andere bibliotheken. Een update kan echter pas geïnstalleerd worden als éérst de map TelnetStream-master uit de map Libraries wordt verwijderd!

    SSD1306Ascii

    William Greiman heeft deze bibliotheek ontwikkeld met in het achterhoofd minimaal gebruik van resources (dus: een bibliotheek die weinig geheugen gebruikt). Je kunt de bibliotheek hier downloaden. De DSMR-logger Firmware is getest met Version 1.2.x - Commit 97a05cd on 24 Mar 2019 maar nieuwere versies zullen waarschijnlijk ook werken.

    PubSubClient

    Nick O'Leary (knolleary) heeft deze bibliotheek ontwikkeld. Je kunt de bibliotheek hier downloaden.

    ModUpdateServer

    Deze bibliotheek maakt het mogelijk om firmware en SPIFFS Over The Air te flashen naar de DSMR-logger. Deze bibliotheek is nodig vanaf versie 2.6.2 van de Arduino/ESP8266 core. Je kunt de bibliotheek hier downloaden.

    ESP_SysLogger

    Deze bibliotheek is alleen nodig als je USE_SYSLOGGER defined. Je kunt de bibliotheek hier downloaden (vanaf v1.6.3 commit 43eb15681125442addaf8b697f2b8557d4afa300). Pas op! (nog) Niet geschikt voor het LittleFS!

    Overige libraries

    Onderstaande libraries zijn onderdeel van de ESP8266 Core en moeten dus niet handmatig geïnstalleerd worden!

    • LittleFS

    • ESP8266WiFi

    • ESP8266WebServer

    • WiFiUdp

    • ESP8266mDNS

    • FS

    hier
     B - Board Info
             .
             .
             .
    
    ==================================================================
                   Board type [ESP8266_GENERIC]
                         SSID [A@nd@W@F@]
                      PSK key [**********]
                   IP Address [192.168.1.108]
                     Hostname [DSMR-API]
           Last reset reason: [Exception]
                       upTime [32(d):02:01]
    ==================================================================
    
     S - list Settings
             .
             .
             .
    
    ==== MQTT settings ==============================================
              MQTT broker URL/IP : hassio.local
                       MQTT user : hassUser1
                   MQTT password : *************
              MQTT send Interval : 120
                  MQTT top Topic : DSMR-API
    

    Define

    Functie

    SHOW_PASSWRDS

    In de System Info tab wordt, als deze #define actief is, de PSK Key van het WiFi netwerk getoond. Bij de B - Board Info uitvoer wordt met deze deze #define de PSK Key zichtbaar en bij S - list Settings het wachtwoord van de MQTT Broker en de Authenticatie Token van Mindergas.nl.

    Pas op! Koppel de DSMR-logger los van de Slimme Meter vóórdat je de DSMR-logger op de programmer aansluit!!

    1. Sluit de programmer aan op de DSMR-logger v4.

    2. Druk op de FLASH knop en houdt deze ingedrukt.

    3. Druk vervolgens de RESET knop in en laat deze weer los.

    4. Laat nu ook de FLASH knop los.

    De DSMR-logger v4 staat nu in "Flash-mode" en wacht (geduldig) tot de inhoud van de data map wordt opgestuurd.

    • Ga in de Arduino IDE naar Tools -> ESP8266 LittleFS Data Upload

    Let op! Het uploaden van de data map mislukt als de Serial Monitor open staat!

    Het LittleFS (bestand systeem) wordt nu leeg gemaakt en alle bestanden in de data map worden als een LittleFS overgezet.

    Hierna zal de DSMR-logger normaal opstarten, maar met de nieuw LittleFS inhoud.

    Let op! Hou er rekening mee dat eventuele data-bestanden die al op het LittleFS stonden nu weg zijn! Als je ze niet kwijt wil moet je er eerst een kopie van maken op je computer en deze, na het flashen van het LittleFS weer terug zetten (dat kan met de DSMR-logger FSmanager )!

    Over The Air

    Bij het Over The Air uploaden van de bestanden uit de data-map kan de DSMRlogger v4 gewoon aan de Slimme Meter gekoppeld blijven.

    Alle Board gegevens blijven gelijk alleen selecteer je een Serial Port die nergens op is aangesloten!

    Start vervolgens het ESP8266 LittleFS Data Upload-tool

    Omdat je een Serial Port hebt geselecteerd waar niets op is aangesloten zal deze opdracht met een foutmelding eindigen. Ondertussen is er wél een .mklittlefs.bin bestand in het build-path neergezet.

    Let op! Hou er rekening mee dat eventuele data-bestanden die al op het bestand systeem stonden nu weg zijn! Als je ze niet kwijt wil moet je er eerst een kopie van maken op je computer en deze, na het flashen van het LittleFS weer terug zetten (dat kan met de DSMR-logger FSmanager )!

    Klik nu op de DSMR-logger pagina op het icoontje.

    In de FSmanager klik je op de knop [Update Firmware]

    Er verschijnt nu een scherm waarin je een mklittlefs bestand (de naam eindigt op .mklittlefs.bin) kunt kiezen door op de onderste knop [Choose File] te klikken.

    Selecteer uit het popUp scherm dat nu verschijnt het binary file dat je wilt uploaden ..

    .. klik op [Open] en daarna op de knop [Flash FileSystem]

    Na enige tijd krijg je de melding dat de upload is geslaagd en dat de DSMR-logger opnieuw opstart.

    Let op! Het komt soms voor dat het scherm niet automatisch ge-refreshed wordt (dit lijkt te maken te hebben met de omvang van de firmware die je upload). Klik in dat geval, na ongeveer 3 minuten, op de tekst "hier" Als het lijkt of er niets gebeurd, wacht dan ongeveer drie minuten en klik daarna hier. Als de verbinding met de server vóór die tijd verbroken wordt klik dan op de [back] knop van de browser waarna de tekst alsnog (weer) verschijnt. Klik nu op hier om de DSMRloggerAPI hoofd pagina opnieuw te laden.

  • Historie gerelateerde restAPI's

  • Aanroepen restAPI vanuit verschillende systemen

    Een restAPI kan op verschillende manieren worden aangeroepen.

    • Javascript

    • Unix command

    • Home Assistant

    • Arduino Mega met Ethernet Shield

    Javascript

    Unix command

    Geeft dit als output:

    Home Assistant

    configuration.yaml:

    geeft dit resultaat:

    Met hassOS lukt het mij niet om bij resource de hostname (DSMR-API.local) te gebruiken. Met het IP adres lukt het wel.

    Arduino Mega met Ethernet shield

    Ik ben niet erg handig met JSON libraries (liefst parse ik de data helemaal zelf zodat ik ook alles zelf "in de hand" heb). Het zou mij daarom ook niet verbazen als onderstaande code simpeler en beter kan.

    Getest door Bert Diepeveen (met dank!).

    Verder moet je de Algemene functies onderaan deze pagina in je sketch opnemen.

    ESP8266 (WiFi)

    Ik ben niet erg handig met JSON libraries (liefst parse ik de data helemaal zelf zodat ik ook alles zelf "in de hand" heb). Het zou mij daarom ook niet verbazen als onderstaande code simpeler en beter kan.

    Verder moet je de Algemene functies onderaan deze pagina in je sketch opnemen.

    ESP32 (WiFi)

    With some help from Random Nerd Tutorials.

    Ik ben niet erg handig met JSON libraries (liefst parse ik de data helemaal zelf zodat ik ook alles zelf "in de hand" heb). Het zou mij daarom ook niet verbazen als onderstaande code simpeler en beter kan.

    Verder moet je de Algemene functies onderaan deze pagina in je sketch opnemen.

    Algemene functies

    In de main loop() function moet deze code komen:

    De source van deze code kun je op github vinden.

    Andere systemen

    Veel andere systemen hebben hun eigen manier om restAPI's op te vragen. Lees hiervoor de betreffende documentatie.

    DSMR-logger gerelateerde restAPI's
    Slimme Meter gerelateerde restAPI's
    De DSMRloggerAPI firmware is getest met de ArduinoIDE v1.8.13

    Let op! De Arduino IDE v1.9.x (Beta) is NIET geschikt om deze firmware mee te compileren. Tot v1.9.x zorgt de IDE ervoor dat alle tab-bladen (.ino files) achter elkaar worden geplakt tot één source file waarna van alle functies in dit gecombineerde file zgn. prototypes worden gemaakt voordat deze aan de compiler (als één file dus) wordt aangeboden. De Arduino IDE is eigenlijk de enige IDE (voor zover ik weet) die dit doet en is als zodanig dus een beetje vreemd. v1.9.x (Beta) doet dit voor AVR processoren wel maar helaas (nog) niet voor de ESP8266 processor familie.

    Na het downloaden moet je het ontvangen bestand uitpakken (unzip of untar) en installeren. Dat installeren is per OS anders maar staat duidelijk op de website van Arduino aangegeven. Eenmaal geïnstalleerd kun je direct met de Arduino IDE aan de slag.

    Om de IDE met de ESP8266 microprocessor te kunnen gebruiken moeten we nog wat stappen uitvoeren.

    hier

    Lees ook dit.

    #define

    Functie

    USE_MINDERGAS

    Deze define zorgt ervoor dat de Firmware één maal per dag het gasverbruik uit de Slimme Meter naar mindergas.nl zal sturen (default).

    Rubriek

    Functie

    Mindergas Authenticatie Token

    mindergas.nl
    img

    Bij aanmelding bij mindergas.nl kun je een zgn. Authenticatie Token opvragen. Dit token heb je nodig om data naar mindergas.nl te kunnen uploaden. Voer dit token hier in.

    De DSMR-logger v4.5 die je via opencircuit.nl kunt kopen (na juni 2021) is voorzien van de hier beschreven firmware. Deze DSMR-logger is "Plug-And-Play" en alleen in bijzondere gevallen moet er iets aan de instellingen aangepast worden (bijvoorbeeld als je een hele oude Slimme Meter hebt of als je een zgn. "Enkel Fase" Slimme meter hebt).

    Deze documentatie is voor de gebruikers en makers die meer willen dan alleen de DSMR-logger aansluiten op hun Slimme meter. De meeste gebruikers zullen voldoende hebben aan alleen dit hoofdstuk.

    Let op! Deze documentatie is "work in progress"! Controleer daarom regelmatig op updates.

    De DSMR-logger is een hardware en software systeem waarmee de Slimme Meter kan worden uitgelezen. De uitgelezen data (zgn. telegrammen) worden in de DSMR-logger opgeslagen en kunnen met behulp van gestandaardiseerde restAPI call's worden opgevraagd.

    Vanaf versie 3 kan de DSMRloggerAPI firmware overweg met vrijwel alle, mij bekende, Slimme Meters (DSMR 2+, DSMR3+, DSMR4+, DSMR5+ en de Belgische varianten hiervan). Het probleem van sommige installaties met de voor geprogrammeerde aansluiting van de Gas Meter op MBus-1 is vanaf versie 3 via settingen aan te passen.

    Meer informatie

    • Deze post beschrijft het eerste idee achter de Slimme Meter uitlezer.

    • In deze post kun je de ontwikkeling van de hardware en firmware vinden.

    • Hier staat een introductie van de DSMRloggerAPI firmware

    • Veel informatie over de hardware en het gebruik wordt beschreven.

    • De DSMRloggerAPI firmware kun je op vinden

    • Voor de meeste mensen is het gebruik van de twee binaries het eenvoudigste. je kunt deze binaries vinden.

    Begrippen

    In dit document worden de volgende begrippen gebruikt:

    Begrip
    Omschrijving

    DSMR

    De is een afgeleide van de NTA 8130-normering. De DSMR-logger (versie 4) is ontworpen voor de DSMR 4.0 of hoger. DSMR 4.0 geeft aan dat de Slimme Meter op de P1-poort 5 volt bij 100mA moet kunnen leveren (zie pagina 8 en 9 van de specificatie). Vanaf DSMR 5.0+ moet de Slimme Meter 250mA op de P1 poort kunnen leveren. De DSMR-logger gebruikt tijdens het opstarten ~250mA. Heb je een Slimme Meter die volgens een DSMR standaard < 5.0 werkt, dan zul je bijna altijd een externe voeding nodig hebben!

    DSMR-logger

    de Hardware (Let op! Streepje tussen DSMR en logger)

    DSMR-logger v4 (of Versie 4)

    Versie 4 van de Hardware. Deze hardware is de basis voor dit project.

    DSMR-logger v4.5 (of Versie 4.5)

    van de Hardware Deze hardware is een verbetering van de v4 hardware. Standaard heeft deze hardware een 5Volt DC Jack-Plug voor gebruik van een externe voeding en een jumper om de voeding te selecteren vanuit de Slimme Meter of de Jack-Plug. Bij gebruik van de Jack-Plug wordt de 5Volt van de Slimme Meter ontkoppelt. De draadbruggen voor de selectie van de signalen naar een OLED display zijn nu standaard [GND,3v3,SCL,SDA] doorverbonden maar deze kunnen, door de verbindingen aan de achterkant van de PCB door te snijden, ook aangepast worden.

    DSMRloggerAPI

    De firmware voor de DSMR-logger v4 Deze firmware maakt intensief gebruik van restAPI's. Let op! De firmware heeft geen streepje (-) tussen "DSMR" en "logger"

    Een volledige beschrijving van dit project kun je hier vinden.

    gebruik git

    Als je niet handig bent met git raad ik je aan de repository als een .zip file te downloaden.

    Download .zip file

    Klik op de groene knop [Clone or Download] ..

    .. en selecteer [Download ZIP]

    Er volgt een scherm als dit:

    1. Bewaar het .zip bestand op een plek op je computer waar je hem terug kunt vinden.

    2. Unzip het DSMRloggerAPI-master.zip bestand in de ArduinoIDE Sketchbook Location.

    3. Rename de map DSMRloggerAPI-master naar DSMRloggerAPI (dus zonder -master)

    Ga verder naar DSMRloggerAPI Sketch openen

    git clone

    Om de repository met git te kunnen clonen moet je er éérst voor zorgen dat je git op je systeem hebt staan. Hoe je dat moet doen valt buiten de scope van deze documentatie maar hier kun je alles vinden over hoe je dit, voor jouw systeem, moet doen.

    Voor nu ga ik ervan uit dat je git op je systeem hebt staan en dat je weet hoe je ermee moet werken.

    Ga naar de Arduino Sketchbook location (de map waar al je Sketches in staan, kijk hier) en toets het volgende commando in:

    That's it!

    In Sketchbook location staat hierna een nieuwe map met de naam DSMRloggerAPI.

    DSMRloggerAPI Sketch openen

    Start de ArduinoIDE opnieuw op en klik op het open icoon.

    Selecteer in het drop-down menu ..

    .. de sketch DSMRloggerAPI(In jouw situatie staat deze firmware waarschijnlijk niet onder een submap "SlimmeMeter"!) Er verschijnt een nieuw editor window met de firmware van de DSMRlogger!

    https://github.com/mrWheel/DSMRloggerAPI
    Er kunnen meer additional board manager URL’s worden ingevuld. Je moet ze dan achter elkaar zetten en scheiden door een komma (,).

    Eventueel kun je ook het pad waar je projecten staan (de Sketchbook Location) aanpassen. Standaard verwijst deze naar je Documenten map:

    C:\Users\<YourLoginName>\Documents\arduino\

    .. en dat is een prima plek!

    De andere instellingen kun je naar behoefte aanpassen. Hierboven staan de instellingen die ik prettig vind.

    Na het maken van aanpassingen klik je op [OK].

    Ga nu via de ArduinoIDE menu-balk naar [tools]-> [Board] -> [Boards Manager].

    Voer bij filter “esp8266” in.

    Selecteer de versie die je wilt gaan gebruiken en klik op [Install].

    Let op! De DSMRloggerAPI firmware is getest met versie 2.7.4 van de Arduino/ESP8266 core. Nieuwere versies zullen zeer waarschijnlijk ook werken, maar bij problemen is het het beste om deze versie te gebruiken.

    README.md
    documentatie

    MQTT Poort

    Het default poortnummer is 1883.

    Hou er wel rekening mee dat de ESP8266 geen encryptie aan kan!

    MQTT Username

    Vul hier de naam in van de gebruiker van de MQTT broker.

    MQTT Password

    Als de MQTT broker gebruiker een wachtwoord nodig heeft vul die dan hier in.

    MQTT Interval (sec.)

    De Interval geeft aan om de hoeveel seconden de DSMR-logger gegevens naar de MQTT broker moet sturen. De DSMRloggerAPI firmware zal nooit vaker een MQTT bericht versturen dan de interval waarmee telegrammen worden gelezen. Voer je een interval in die kleiner is dan de telegram interval dan zal er, na het lezen van een telegram direct een MQTT bericht worden verzonden.

    Voer je hier 0 (nul) in dan worden er géén MQTT berichten verzonden.

    MQTT TopTopic

    Dit is het topic waaronder alle andere gegevens worden gepubliceerd. Standaard is dit "DSMR-API".

    De DSMR-logger zal iedere MQTT Interval seconden de volgende berichten naar de MQTT Broker sturen:

    Voor de Mosquitto client kun je de berichten volgen met het volgende commando:

    mosquitto_sub -h test.mosquitto.org -v -t 'DSMR-API/#'

    of, als je een username/password hebt ingesteld met dit commando:

    mosquitto_sub -h test.mosquitto.org -u <username> -P <password> -v -t 'DSMR-API/#'

    #define

    Functie

    USE_MQTT

    Deze define zorgt ervoor dat de Firmware data uit de Slimme Meter naar een MQTT Broker stuurt (default).

    Rubriek

    Functie

    MQTT broker URL/IP

    Vul hier de URL of het IP adres van de MQTT broker in. Voorbeeld: "test.mosquitto.org"

    Om de bibliotheek te installeren klik je op de groene [Clone or download] knop en selecteer je [Download ZIP].

    Onthou waar je het zip-file bewaard!

    Ga nu naar de Arduino IDE en selecteer:

    [Sketch]=>[Include Library] =>[Add .ZIP Library]

    Er verschijnt een selectie window waar je het zojuist ge-download-de bestand selecteert.

    Klik op [Choose].

    De bibliotheek is nu geïnstalleerd en klaar om gebruikt te worden. De meeste bibliotheken komen met een aantal voorbeeld programma’s waarmee je kunt leren hoe je de bibliotheek kunt gebruiken.

    Juraj Andrassy is erg summier met zijn uitleg maar gelukkig is er een map met voorbeelden (nou ja, één voorbeeld).

    (sorry, het plaatje is een beetje verknipt)

    Klik je nu op[TelnetStreamTest]dan wordt dit voorbeeld programma in de Arduino IDE geladen.

    Installeer op dezelfde manier de andere bibliotheken die voor de DSMRloggerAPIfirmware nodig zijn (zie het volgende hoofdstuk).

    Hier
    github
    Let op! Deze functionaliteit werkt alleen als je 4MB flash geheugen hebt. Standaard heeft iedere ESP-12 dat en dus ook de DSMR-logger v4 of v4.5. Je kunt een ESP-01 eventueel upgraden naar 4MB door de aanwezige flash chip te vervangen door een W25Q32FVSIG 32Mbit flash chip.

    #define

    Functie

    USE_UPDATE_SERVER

    Om gebruik te kunnen maken van zgn. "Over The Air" (OTA) updates van de firmware en het bestand systeem moet je deze optie activeren (default). Dit kan alleen met een ESP-12 of een, met 4MB chip ge-upgrade ESP-01 bordjes! 'Normale' (1MB) ESP-01 bordjes hebben hier niet genoeg flash-geheugen voor.

    hier
    github
    Tools_Tree.png
        fetch("http://dsmr-api.local/api/v1/dev/time")
          .then(response => response.json())
          .then(json => {
            console.log("parsed .., data is ["+ JSON.stringify(json)+"]");
            for( let i in json.devtime ){
                if (json.devtime[i].name == "time")
                {
                  console.log("Got new time ["+json.devtime[i].value+"]");
                  document.getElementById('theTime').innerHTML = json.devtime[i].value;
                }
              }
          })
          .catch(function(error) {
            var p = document.createElement('p');
            p.appendChild(
              document.createTextNode('Error: ' + error.message)
            );
          });     
    
    curl http://dsmr-api.local/api/v1/dev/time
    {"devtime":[
       {"name": "time", "value": "2020-03-23 11:45:40"},
       {"name": "epoch", "value": 1584963941}
    ]}
    ### configuration.yaml
    ### DSMRloggerAPI 
      - platform: rest
        name: "Levering"
        resource: http://<ip-dsmr-logger>/api/v1/sm/fields/power_returned
        unit_of_measurement: "kWh"
        value_template: '{{ value_json.fields[1].value | round(3) }}'
    
      - platform: rest
        name: "Laatste Update restAPI"
        resource: http://192.168.2.106/api/v1/sm/fields/timestamp
    #   value_template: '{{ value_json.fields[0].value }}'
        value_template: >
          {{      value_json.fields[0].value[4:6] + "-" + 
                  value_json.fields[0].value[2:4] + "-" + 
             "20"+value_json.fields[0].value[0:2] + "   " + 
                  value_json.fields[0].value[6:8] + ":" + 
                  value_json.fields[0].value[8:10] + ":" + 
                  value_json.fields[0].value[10:13] }}
    
      - platform: rest
        name: "Levering l1"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l1
        unit_of_measurement: "Watt"
        value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'
    
      - platform: rest
        name: "Levering l2"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l2
        unit_of_measurement: 'Watt'
        value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'
    
      - platform: rest
        name: "Levering l3"
        resource: http://192.168.2.106/api/v1/sm/fields/power_returned_l3
        unit_of_measurement: 'Watt'
        value_template: '{{ (value_json.fields[1].value | float * 1000.0) | round(1) }}'
    
    // in the main program:
    #include <Ethernet.h>
    #include <SPI.h>
    #include <Arduino_JSON.h>  // let op! dit is een andere library dan "ArduinoJson"
    //
    #define _IS_ARDUINO_MEGA
    #define _DSMR_IP_ADDRESS    "IP_ADDRESS_OF_YOUR_DSMR_LOGGER"
    #define _READINTERVAL       60000
    //
    const char *DSMRprotocol  = "http://";
    const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
    const char *DSMRrestAPI   = "/api/v1/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;
    int     voltageL1, currentL1;
    float   pwrDelivered, pwrReturned;
    
    
    //--------------------------------------------------------------------------
    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();
      Serial.print(F("http Response Code: "));
      Serial.println(httpResponseCode);
    
      if (httpResponseCode <= 0)
      {
        return false;
      }
    
      payload    = DSMRclient.responseBody();
      //--debug-Serial.print(F("payload: "));
      //--debug-Serial.println(payload);
      
      // Free resources
      DSMRclient.stop();
    
      return true;
      
    } // dsmrGETrequest()
    
    
    //--------------------------------------------------------------------------
    void setup()
    {
      // setup Serial ..
      .
      .
      // 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;
      
    }  // setup()
    
    
    // Include in the main program:
    #include <WiFi.h>
    #include <Arduino_JSON.h>  // let op! Niet ArduinoJson!
    //
    #define _IS_ESP8266
    #define _DSMR_IP_ADDRESS    "IP_ADDRESS_OF_YOUR_DSMR_LOGGER"
    #define _WIFI_SSID          "YOUR_WIFI_SSID"
    #define _WIFI_PASSWRD       "YOUR_WIF_PASSWORD"
    #define _READINTERVAL       60000
    //
    const char *ssid          = _WIFI_SSID;
    const char *password      = _WIFI_PASSWRD;
    //
    const char *DSMRprotocol  = "http://";
    const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
    const char *DSMRrestAPI   = "/api/v1/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;
    int     voltageL1, currentL1;
    float   pwrDelivered, pwrReturned;
    
    //--------------------------------------------------------------------------
    bool dsmrGETrequest() 
    {
      WiFiClient  DSMRclient;
    
      payload = ""; 
    
      Serial.print("DSMRclient.connect("); Serial.print(DSMRserverIP);
      Serial.println(", 80)");
      if (!DSMRclient.connect(DSMRserverIP, 80))
      {
        Serial.println(F("error connecting to DSMRlogger "));
        payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\":\"error connecting\"}]}";
        return false;
      }
    
      //-- normal operation 
      DSMRclient.print(F("GET "));
      DSMRclient.print(DSMRrestAPI);
      DSMRclient.println(" HTTP/1.1");
      DSMRclient.print(F("Host: "));
      DSMRclient.println(DSMRserverIP);
      DSMRclient.println(F("Connection: close"));
      DSMRclient.println();
    
      DSMRclient.setTimeout(1000);
    
      //--debug-Serial.println("find(HTTP/1.1)..");
      DSMRclient.find("HTTP/1.1");  // skip everything up-until "HTTP/1.1"
      //--debug-Serial.print("DSMRclient.parseInt() ==> ");
      httpResponseCode = DSMRclient.parseInt(); // parse status code
      
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      
      if (httpResponseCode <= 0) 
      {
        payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\": "+String(httpResponseCode)+"}]}";
        return false;
      }
    
      // Skip HTTP headers
      if (!DSMRclient.find("\r\n\r\n")) 
      {
        Serial.println(F("Invalid response"));
        payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\": "+String(httpResponseCode)+"}]}";
        return false;
      }
    
      while(DSMRclient.connected()) 
      {
        if (DSMRclient.available())
        {
          // read an incoming lines from the server:
          String line = DSMRclient.readStringUntil('\r');
          line.replace("\n", "");
          if (   (line[0] == '{') || (line[0] == ',') 
              || (line[0] == '[') || (line[0] == ']') )
          {
            //--debug-Serial.print(line);
            payload += line;
          }
        }
      }
      //--debug-Serial.println();
      
      // Free resources
      DSMRclient.stop();
    
      return true;
        
    } // dsmrGETrequest()
    
    
    //--------------------------------------------------------------------------
    void setup() 
    {
      // setup serial ..
      .
      .
      // setup WiFi ..
      WiFi.begin(ssid, password);
      Serial.println("Connecting");
      while(WiFi.status() != WL_CONNECTED) 
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.print("Connected to WiFi network with IP Address: ");
      Serial.println(WiFi.localIP());
      
      lastRead = millis() + _READINTERVAL;
      .
      .
        
    } // setup()
    
    // Include in the main program:
    #include <WiFi.h>
    #include <HTTPClient.h>
    #include <Arduino_JSON.h>  // let op! Niet ArduinoJson!
    //
    #define _IS_ESP32
    #define _DSMR_IP_ADDRESS    "IP_ADDRESS_OF_YOUR_DSMR_LOGGER"
    #define _WIFI_SSID          "YOUR_WIFI_SSID"
    #define _WIFI_PASSWRD       "YOUR_WIF_PASSWORD"
    #define _READINTERVAL       60000
    //
    const char *ssid          = _WIFI_SSID;
    const char *password      = _WIFI_PASSWRD;
    //
    const char *DSMRprotocol  = "http://";
    const char *DSMRserverIP  = _DSMR_IP_ADDRESS;
    const char *DSMRrestAPI   = "/api/v1/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;
    int     voltageL1, currentL1;
    float   pwrDelivered, pwrReturned;
    
    //--------------------------------------------------------------------------
    bool dsmrGETrequest() 
    {
      HTTPClient DSMRclient;
        
      // Your IP address with path or Domain name with URL path 
      DSMRclient.begin(String(DSMRprotocol) + String(DSMRserverIP)+String(DSMRrestAPI));
      
      // Send HTTP GET request
      httpResponseCode = DSMRclient.GET();
    
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      
      payload = ""; 
      
      if (httpResponseCode > 0) 
      {
        payload = DSMRclient.getString();
      }
      else 
      {
        payload = "{\"actual\":[{\"name\":\"httpresponse\", \"value\": "+String(httpResponseCode)+"}]}";
        // Free resources
        DSMRclient.end();
        return false;
      }
    
      // Free resources
      DSMRclient.end();
      
      return true;
    
    } // dsmrGETrequest()
    
    
    //--------------------------------------------------------------------------
    void setup() 
    {
      // setup Serial ..
      .
      .
      // setup WiFi ..
      WiFi.begin(ssid, password);
      Serial.println("Connecting");
      while(WiFi.status() != WL_CONNECTED) 
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.print("Connected to WiFi network with IP Address: ");
      Serial.println(WiFi.localIP());
      
      lastRead = millis() + _READINTERVAL;
      .
      .
        
    } // setup()
    
    //--------------------------------------------------------------------------
    void readDsmrLogger()
    {
      int fieldNr = 0;
    
      dsmrGETrequest();
    
      Serial.println();
      Serial.println(F("==== Start parsing payload ======================="));
        
      // This is how the "actual" JSON object looks like:
      //   {"actual":[
      //       {"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!"));
        return;
      }
      //--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++)
      {
        fieldNr++;
        //--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(" ");
        Serial.print(sUnit);
        Serial.println();
        //--- now catch some fields of interrest for further 
        //--- processing
        //--- 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"));
          
    } // readDsmrLogger()
    
    
    //--------------------------------------------------------------------------
    void loop()
    {
      if ((millis() - lastRead) > _READINTERVAL)
      {
        lastRead = millis();
        Serial.println("\r\nread API from DSMR-logger...");
        readDsmrLogger();
        Serial.println(F("\r\nCaptured fields .."));
        Serial.print(F("timestamp    : \t")); Serial.println(timeStamp);
        Serial.print(F("voltage L1   : \t")); Serial.println(voltageL1);
        Serial.print(F("current L1   : \t")); Serial.println(currentL1);
        Serial.print(F("pwrDelivered : \t")); Serial.println(pwrDelivered);
        Serial.print(F("pwrReturned  : \t")); Serial.println(pwrReturned);
      }
      .
      .
    }  // loop()
    git clone https://github.com/mrWheel/DSMRloggerAPI.git
    
    DSMR-API/identification {"identification":"XMX5LGBBLB2410065887"}
    DSMR-API/p1_version {"p1_version":"50"}
    DSMR-API/timestamp {"timestamp":"140223173001S"}
    DSMR-API/equipment_id {"equipment_id":"4530303336303000000000000000000040"}
    DSMR-API/energy_delivered_tariff1 {"energy_delivered_tariff1":170.899,"unit":"kWh"}
    DSMR-API/energy_delivered_tariff2 {"energy_delivered_tariff2":163.798,"unit":"kWh"}
    DSMR-API/energy_returned_tariff1 {"energy_returned_tariff1":113.378,"unit":"kWh"}
    DSMR-API/energy_returned_tariff2 {"energy_returned_tariff2":76.650,"unit":"kWh"}
    DSMR-API/electricity_tariff {"electricity_tariff":"0001"}
    DSMR-API/power_delivered {"power_delivered":1.230,"unit":"kW"}
    DSMR-API/power_returned {"power_returned":1.770,"unit":"kW"}
    DSMR-API/voltage_l1 {"voltage_l1":237.0,"unit":"volt"}
    DSMR-API/voltage_l2 {"voltage_l2":238.0,"unit":"volt"}
    DSMR-API/voltage_l3 {"voltage_l3":235.0,"unit":"volt"}
    DSMR-API/current_l1 {"current_l1":2,"unit":"ampere"}
    DSMR-API/current_l2 {"current_l2":2,"unit":"ampere"}
    DSMR-API/current_l3 {"current_l3":0,"unit":"ampere"}
    DSMR-API/power_delivered_l1 {"power_delivered_l1":874,"unit":"Watt"}
    DSMR-API/power_delivered_l2 {"power_delivered_l2":336,"unit":"Watt"}
    DSMR-API/power_delivered_l3 {"power_delivered_l3":17,"unit":"Watt"}
    DSMR-API/power_returned_l1 {"power_returned_l1":1066,"unit":"Watt"}
    DSMR-API/power_returned_l2 {"power_returned_l2":274,"unit":"Watt"}
    DSMR-API/power_returned_l3 {"power_returned_l3":427,"unit":"Watt"}
    DSMR-API/gas_device_type {"gas_device_type":"3"}
    DSMR-API/gas_equipment_id {"gas_equipment_id":"4730303339303031363532303530323136"}
    DSMR-API/gas_delivered {"gas_delivered":119.69,"unit":"m3"}
    

    ESP-12

    Een bordje met een ESP8266 processor en 4MB Flash Geheugen Dit bordje wordt gebruikt in de DSMR-logger v4

    hier
    github
    hier
    Dutch Smart Meter Requirements
    DSMR-specificatie
    Versie 4.5
    ESP8266
    ESP32

    Upgrade DSMRloggerWS naar DSMRloggerAPI

    Deze video laat zien hoe je de DSMRloggerWS firmware eenvoudig kunt upgraden naar de nieuwe DSMRloggerAPI firmware.

    Je kunt deze upgrade maar één maal uitvoeren! Nadat de upgrade is uitgevoerd (en als het is gelukt) kun je nieuwe versies van de DSMRloggerAPI firmware via de normale weg updaten!

    Het upgraden vanaf de DSMRloggerWS firmware naar de DSMRloggerAPI firmware bestaat uit de volgende stappen:

    • Gebruik de FSexplorer om de PRDhours.csv, PRDdays.csv en PRDmonths.csv naar je computer te downloaden (dit hoef je alleen te doen als je de opgebouwde historie na de upgrade terug wilt zien in de GUI van de DSMR-logger met de nieuwe firmware).

    • Verwijder het bestand DSMRsettings.ini van de DSMR-logger (gebruik weer de FSexplorer). Pas op! Sla deze stap niet over!!

    Voer nu de stappen uit zoals in beschreven.

    Als de voorgaande stap goed is gegaan verschijnt na enige tijd het start scherm van de DSMR-logger.

    De DSMRloggerAPI firmware heeft een mogelijkheid om bestanden van de DSMRloggerWS (zgn. PRD-bestanden) automatisch te converteren naar het door de DSMRloggerAPI gebruikt (RING) formaat.

    Nadat je de DSMRloggerAPI hebt geïnstalleerd en deze 'werkt' kun je met de FSmanager de drie bewaarde PRD-bestanden naar het bestand systeem uploaden.

    Upload vervolgens een bestand met de exacte naam !PRDconvert (het eerste teken is een uitroep-teken) naar het File Systeem (de inhoud van dit bestand is niet belangrijk). Start de DSMR-logger nu opnieuw op (klik op de knop [ReBoot]) en de RING bestanden zullen automatisch gevuld worden met de inhoud van de PRD bestanden.

    Let op! Je moet ervoor zorgen dat de PRD bestanden zo actueel mogelijk, maar in ieder geval binnen dezelfde dag en bij voorkeur in hetzelfde uur waarop je de conversie uitvoert, nog ge-update zijn! Missen er uren of dagen dan geeft dit vreemde resultaten (maar dat komt na verloop van tijd vanzelf goed)!

    Nieuwe DSMRloggerAPI firmware flashen

    Oude Hardware (met ESP-01 bordje)

    De omvang van de DSMTloggerAPI firmware is te groot geworden voor een ESP-01 bordje. Het is wél mogelijk om de 1MB flash chip van de ESP-01 te vervangen door een 4MB flash chip, waarna er wél voldoende ruimte is voor deze firmware!

    Het gebruik van de DSMR-logger v2 en v3 wordt niet meer ondersteunt.

    Firmware Flashen

    Versie 4 van de DSMR-logger hardware maakt gebruik van een ESP-12 processor. Deze processor zit op de printplaat van de DSMR-logger gesoldeerd en moet dus, op de printplaat, geflashed worden.

    Om de firmware naar de DSMR-logger Versie 4 te kunnen flashen moet deze eerst voor deze versie van de DSMR-logger geschikt worden gemaakt.

    Dit doe je door in de ArduinoIDE de #define's in het eerste tab-blad aan te passen.

    Vervolgens moeten de Boards settings als volgt worden ingevuld:

    Instelling

    Let op! Als je de Flash Mode veranderd t.o.v. wat je gebruikt hebt voor de firmware die nu in de DSMR-logger zit en je doet een OTA update van de firmware, dan zal de Flash Mode pas veranderen na een power cycle!

    Firmware Bedraad Flashen

    Pas op! Koppel de DSMR-logger los van de Slimme Meter vóórdat je de DSMR-logger op de programmer aansluit!!

    Sluit de aan op de Program-header van de DSMR-logger v4

    1. Druk de FLASH knop in en houd deze ingedrukt

    2. Druk op de RESET knop

    3. Laat de RESET knop los

    De DSMR-logger v4 staat nu in Flash-mode en blijft in die mode tot er gegevens vanaf de programmer naar de DSMR-logger zijn overgebracht óf tot je nog een keer op de RESET knop drukt.

    Vergeet niet in de Arduino IDE de Port te selecteren waarop je de USB->ESP12 programmer hebt aangesloten en druk op het Compile and Upload icoon.

    Firmware Over The Air Flashen

    Bij het Over The Air flashen van de firmware of data-map kan (moet) de DSMR-logger v4 gewoon op de Slimme Meter aangesloten blijven.

    Alle instellingen voor de DSMRloggerAPI firmware blijven gelijk aan de bedrade methode van flashen.

    Vervolgens moet je niet op het Compile & Upload-Icoon

    klikken maar in het[Sketch]drop-down menu de keuze Upload Compiled Binary selecteren.

    De firmware wordt nu gecompileerd en in de Arduino Sketch map waar de DSMRloggerAPI firmware ook staat neergezet. Het bestand heeft de extensie .bin.

    Als de firmware gecompileerd is klik je op de DSMR-logger pagina op het icoontje.

    In de FSmanager klik je op de knop [Update Firmware]

    Er verschijnt nu een scherm waarin je een firmware bestand (de naam eindigt op .bin met ergens in de naam ook .ino.) kunt kiezen door op de bovenste knop [Choose File] te klikken.

    Selecteer uit het popUp scherm dat nu verschijnt het binary file dat je wilt uploaden ..

    .. klik op [Choose] (of [Open]) en daarna op de knop [Flash Firmware]

    Let op! De firmware heeft áltijd ".ino." in de naam en eindigt áltijd op ".bin"!

    Na enige tijd krijg je de melding dat de upload is geslaagd en dat de DSMR-logger opnieuw opstart.

    Let op! Het komt soms voor dat het scherm niet automatisch ge-refreshed wordt. Klik in dat geval, na ongeveer 3 minuten, op de tekst "hier" Als het lijkt of er niets gebeurd, wacht dan ongeveer drie minuten en klik daarna hier. Als de verbinding met de server vóór die tijd verbroken wordt klik dan op de [back] knop van de browser waarna de tekst alsnog (weer) verschijnt. Klik nu op hier om de DSMRloggerAPI hoofd pagina opnieuw te laden.

    HAS_NO_METER

    Om te testen of de verwerking van de gegevens, die normaal gesproken uit de Slimme Meter komen, goed gaat kun je met deze #define de firmware zó maken dat hij zélf voor (test) data zorgt. Om de tijd te versnellen zal de testdata eerst de maanden versneld laten voorbij gaan, daarna de dagen en tenslotte de uren.

    Let op! Alleen om te testen!

    #define

    Functie

    HAS_NO_METER

    USE_SYSLOGGER

    Deze functionaliteit is in versie 3 nog niet getest. Deze nieuwe versie maakt geen gebruik meer van SPIFFS maar gebruikt het LittleFS. De SysLogger is hier nog niet voor aangepast!

    Als deze optie actief is zal de DSMRloggerAPI firmware debug informatie naar een logfile schrijven. Dit logfile kan mbv.het commando 'Q' in het telnet menu bekeken worden.

    Er is ook een restAPI waarmee de log regels uit de DSMR-logger opgehaald kunnen worden.

    Ophalen debug informatie

    GET http://dsmr-api.local/api/v1/dev/debug

    Met deze api kun je de gegevens uit het sysLog bestand opvragen

    Selecteren compiler opties

    Overzicht te selecteren functies

    Tijdens het compileren van de firmware kun je bepaalde functionaliteit in- en uit-schakelen door de #defines wél of níet door twee slashes ("//") vooraf te laten gaan.

    In onderstaande tabel kun je zien of een bepaalde functionaliteit beschikbaar is voor de DSMR-logger.

    /******************** compiler options  ********************************************/
    #define USE_UPDATE_SERVER         // define if there is enough memory and updateServer to be used
    //  #define HAS_NO_SLIMMEMETER        // define for testing only!
    #define USE_MQTT                  // define if you want to use MQTT
    #define USE_MINDERGAS             // define if you want to update mindergas (also add token down below)
    //  #define USE_SYSLOGGER             // define if you want to use the sysLog library for debugging
    //  #define SHOW_PASSWRDS             // well .. show the PSK key and MQTT password, what else?
    /******************** don't change anything below this comment **********************/
    

    De DSMRloggerAPI firmware zorgt zelf voor test-data. Als deze functionaliteit actief is moet de DSMR-logger niet op een Slimme Meter worden aangesloten!

    #define

    Functie

    USE_SYSLOGGER

    De ESP_SysLogger is een library waarmee log regels in een RING bestand van 500 regels kunnen worden geschreven. Na 500 regels wordt steeds de oudste regel overschreven door de nieuwste regel.

    **
    ***************************************************************************************************
    ***************************************************************************************************
    ***************************************************************************************************
    [15:23:35][  12624][openSysLog  ] Last Reset Reason [Software/System restart]
    [15:23:35][  13968][openSysLog  ] actTimestamp[200316152328W], nrReboots[0], Errors[0]
     
    [15:24:05][  12640][forceMinderg] Force Write Data to [/Mindergas.post]
    [15:24:05][  12640][processMinde] Mindergas State: MG_WRITE_TO_FILE
    [15:24:05][  12640][writePostToF] Writing to [/Mindergas.post] ..
    [15:24:05][  12640][writePostToF] Mindergas.post aangemaakt
    [15:24:05][  12640][writePostToF] MinderGas update in [118] minute(s)
    [15:25:05][  12496][processMinde] Mindergas State: MG_DO_COUNTDOWN (118 minuten te gaan)
    [15:26:05][  12480][processMinde] Mindergas State: MG_DO_COUNTDOWN (117 minuten te gaan)
    [15:26:50][  12216][processSlimm] Processed [25] telegrams ([0] errors)
    [15:27:05][  12672][processMinde] Mindergas State: MG_DO_COUNTDOWN (116 minuten te gaan)
    [15:28:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (115 minuten te gaan)
        .
        .
        .
    [15:39:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (104 minuten te gaan)
    [15:40:05][  12672][processMinde] Mindergas State: MG_DO_COUNTDOWN (103 minuten te gaan)
    [15:40:10][  10632][processSlimm] Processed [125] telegrams ([0] errors)
    [15:41:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (102 minuten te gaan)
    [15:42:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (101 minuten te gaan)
    [15:43:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (100 minuten te gaan)
    [15:43:30][  12000][processSlimm] Processed [150] telegrams ([0] errors)
    [15:44:05][  12688][processMinde] Mindergas State: MG_DO_COUNTDOWN (99 minuten te gaan)
    [15:45:05][  14264][processMinde] Mindergas State: MG_DO_COUNTDOWN (98 minuten te gaan)
    [15:46:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (97 minuten te gaan)
    [15:46:50][  12920][processSlimm] Processed [175] telegrams ([0] errors)
    [15:47:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (96 minuten te gaan)
    [15:48:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (95 minuten te gaan)
    [15:49:05][  14280][processMinde] Mindergas State: MG_DO_COUNTDOWN (94 minuten te gaan)
    [15:50:05][  14032][processMinde] Mindergas State: MG_DO_COUNTDOWN (93 minuten te gaan)
    [15:50:10][  12920][processSlimm] Processed [200] telegrams ([0] errors)
        .
        .
        .
    [15:57:05][  14264][processMinde] Mindergas State: MG_DO_COUNTDOWN (2 minuten te gaan)
    [15:58:34][  13744][forceMinderg] found [/Mindergas.post] at day#[16]
    [15:58:34][  12400][processMinde] Mindergas State: MG_DO_COUNTDOWN (1 minuten te gaan)
    [15:59:34][  12184][processMinde] Mindergas State: MG_SEND_MINDERGAS
    [15:59:34][  11672][sendMinderga] Send to Mindergas.nl...
    POST /api/gas_meter_readings HTTP/1.1**AUTH-TOKEN:<token>**Host: mindergas.nl**User-Ag
    [15:59:35][  12360][sendMinderga] Mindergas response: [422]
    Unprocessed entity, goto website mindergas for more information
    [15:59:35][  11208][sendMinderga] Disconnected from mindergas.nl
    [15:59:35][  12184][processMinde] Deleted Mindergas.post !
    [16:00:03][  11000][processTeleg] Update RING-files
    [16:00:11][  10368][processSlimm] Processed [275] telegrams ([0] errors)
    [16:03:31][  11160][processSlimm] Processed [300] telegrams ([0] errors)

    Laat de FLASH knop los

    Waarde

    Board

    "Generic ESP8266 Module"

    Upload Speed

    "115200"

    CPU Frequency

    "80MHz" (of 160MHz)

    Flash Frequency

    "40MHz"

    Flash Mode

    "DIO" of "DOUT (compatible)"

    Flash Size

    "4MB (FS: 2MB OAT:~1019KB)" <<== let op! 2MB

    Crystal Frequency

    "26MHz"

    Reset Method

    "None"

    Debug Port

    "Disabled"

    Debug Level

    "None"

    IwIP Variant

    "v2 Lower Memory"

    VTables

    "Flash"

    Exeptions

    "Disabled"

    Builtin Led

    "2"

    Erase Flash

    "Only Sketch" (First Time: "All Flash Contents")

    Port

    Bedraad: "Serial Port"

    USB->ESP12 programmer

    Met de Update Server kun je vanuit de FSexplorer updates van de firmware installeren

    JA

    Deze optie zorgt ervoor dat de functionaliteit voor het versturen van gegevens naar een MQTT broker wordt ingebouwd

    JA

    Deze optie zorgt voor de functionaliteit voor het versturen van gegevens naar waar je het huidige gasverbruik kunt vergelijken met anderen.

    JA

    Met de System logger is het mogelijk om debug informatie over de werking van de DSMR-logger op te slaan in een bestand van 500 regels.

    NEE

    alleen gebruiken om te debuggen.

    Of je de gebruikte passwords in het Systeem Info scherm en via telnet wilt tonen

    NEE

    Als je geen Slimme Meter op de DSMR-logger hebt aangesloten maar toch (dummy) data wilt zien.

    NEE

    alleen om te testen

    #define

    Functie

    Default

    
    /******************** compiler options  ********************************************/
    #define USE_UPDATE_SERVER         // define if there is enough memory and updateServer to be used
    //  #define HAS_NO_SLIMMEMETER        // define for testing only!
    #define USE_MQTT                  // define if you want to use MQTT
    #define USE_MINDERGAS             // define if you want to update mindergas (also add token down below)
    //  #define USE_SYSLOGGER             // define if you want to use the sysLog library for debugging
    //  #define SHOW_PASSWRDS             // well .. show the PSK key and MQTT password, what else?
    /******************** don't change anything below this comment **********************/
    
    USE_UPDATE_SERVER
    USE_MQTT
    USE_MINDERGAS
    mindergas.nl
    USE_SYSLOGGER
    SHOW_PASSWORDS
    HAS_NO_METER
    gitbook boekenplank