From e99e0d1b7ef3b22e52ded8beea370742b7e2396f Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 9 Sep 2025 02:43:56 +0200 Subject: [PATCH 01/25] * Remove dependency on Arduino framework: replace Arduino String with std::string * Remove GCC-specific extensions to make the code portable and compatible with the MSVC compiler. * Add unit tests * Move the license information from source files to a separate LICENSE file * Bug fix: use unsigned char in the tolower method * Remove reader.h: this file is dependent on Arduino and is not needed for the parser. * Remove examples * Remove the crc16.h file because only one function is needed from it. Place the needed function inside the parser.h * Make ParseResult movable --- .editorconfig | 9 + .github/workflows/main.yaml | 13 + .gitignore | 4 + CMakeLists.txt | 12 + LICENSE | 21 + README.md | 269 +------- build-linux.sh | 22 + build-win.ps1 | 63 ++ examples/minimal_parse/minimal_parse.ino | 51 -- examples/parse/parse.ino | 162 ----- examples/read/read.ino | 164 ----- library.json | 12 - ...Swedish HAN H1 port v2.0 specification.pdf | Bin 0 -> 329151 bytes ... HAN Interface description Aidon v1.7A.pdf | Bin 0 -> 518565 bytes src/dsmr.h | 43 -- src/dsmr/crc16.h | 107 ---- src/dsmr/fields.cpp | 488 --------------- src/dsmr/fields.h | 142 ++--- src/dsmr/parser.h | 224 +++---- src/dsmr/reader.h | 262 -------- src/dsmr/util.h | 89 +-- src/test/main.cpp | 2 + src/test/parser_include_test.cpp | 15 + src/test/parser_test.cpp | 573 ++++++++++++++++++ 24 files changed, 928 insertions(+), 1819 deletions(-) create mode 100644 .editorconfig create mode 100644 .github/workflows/main.yaml create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100755 build-linux.sh create mode 100644 build-win.ps1 delete mode 100644 examples/minimal_parse/minimal_parse.ino delete mode 100644 examples/parse/parse.ino delete mode 100644 examples/read/read.ino delete mode 100644 library.json create mode 100644 specs/Swedish HAN H1 port v2.0 specification.pdf create mode 100644 specs/Swedish HAN Interface description Aidon v1.7A.pdf delete mode 100644 src/dsmr.h delete mode 100644 src/dsmr/crc16.h delete mode 100644 src/dsmr/fields.cpp delete mode 100644 src/dsmr/reader.h create mode 100644 src/test/main.cpp create mode 100644 src/test/parser_include_test.cpp create mode 100644 src/test/parser_test.cpp diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3c8f90a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 2 diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml new file mode 100644 index 0000000..aa84576 --- /dev/null +++ b/.github/workflows/main.yaml @@ -0,0 +1,13 @@ +on: push + +jobs: + build-windows: + runs-on: windows-2022 + steps: + - uses: actions/checkout@v4 + - run: ./build-win.ps1 + build_linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: ./build-linux.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b587149 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/build/ +/out/ +.idea/ +.vs/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..33c1e71 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required (VERSION 3.20) +project(arduino-dsmr-test LANGUAGES CXX) + +file(DOWNLOAD + https://github.com/doctest/doctest/releases/download/v2.4.12/doctest.h + ${CMAKE_BINARY_DIR}/doctest/doctest.h + EXPECTED_MD5 0671bbca9fb00cb19a168cffa89ac184) + +file(GLOB_RECURSE arduino_dsmr_test_src_files CONFIGURE_DEPENDS "src/*.h" "src/*.cpp") +add_executable(arduino_dsmr_test ${arduino_dsmr_test_src_files}) +target_include_directories(arduino_dsmr_test PRIVATE ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/doctest) +target_compile_features(arduino_dsmr_test PUBLIC cxx_std_17) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9027736 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2015 Matthijs Kooijman + +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 NONINFRINGEMENT. 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. diff --git a/README.md b/README.md index df7278b..a66c470 100644 --- a/README.md +++ b/README.md @@ -1,246 +1,23 @@ -# Arduino Dutch Smart meter (DSMR) parser - -This is an Arduino library for interfacing with Dutch smart meters, through -their P1 port. This library can take care of controlling the "request" pin, -reading messages and parsing them. - -This code was written for Arduino, but most of the parsing code it is pretty -generic C++ (except for the Arduino- and AVR-based string handling), so it -should be possible to adapt for use outside of the Arduino environment. - -When using Arduino, version 1.6.6 or above is required because this -library needs C++11 support which was enabled in that version. - -## Protocol - -Every smart meter in the Netherlands has to comply with the Dutch Smart -Meter Requirements (DSMR). At the time of writing, DSMR 4.x is the -current version. The DSMR 5.0 P1 specification is available and expected to -be used in smart meters starting in 2016. This code should support both -the 4.x and 5.0 specifications. 3.x meters might also work, but this has -not been verified or tested (feedback welcome). - -The DSMR specifications can be found on [the site of Netbeheer -Nederland][netbeheer], in particular on [this -page][dossier-slimme-meter]. Of particular interest is the "P1 companion -standard" that specifies the P1 port and protocol (though not very -clearly). Specifications can also be found in the `specs` subdirectory -of this repository (including some older versions that are no longer -online, which is why I started collecting them here). - -[netbeheer]: http://www.netbeheernederland.nl -[dossier-slimme-meter]: https://www.netbeheernederland.nl/dossiers/slimme-meter-15/documenten - -According to DSMR, every smart electricity meter needs to have a P1 -port. This is a [6p6c socket][6p6c] (commonly, but incorrectly referred -to as RJ11 or RJ12). Telephone plugs will fit, provided that you have -some that actually have 6 pins wired, or you have just 4 and do not need -power from the P1 port. - -[6p6c]: http://en.wikipedia.org/wiki/Modular_connector#6P6C - -Pinouts and electrical specs can best be looked up in the spec (The 5.0 -version is the most clear in this regard, though not everything may -apply to 4.x meters). - -Note that the message format for the P1 port is based on the IEC 62056-21 -"mode D" format. That spec is not available for free, though there seem -to be [a version available on the net][iec62056-21]. DLMS also seems a -related standard, but that apparently defines a binary format. It does -seem all of these use "OBIS identifiers" and "COSEM data objects" -(DLMS has [some lists of objects][objlists], of which 1001-7 seems to -somewhat match th DSMR specs), to describe the various properties, -though it's not entirely clear how all of these fit together. However, -the DSMR spec has a complete, though sometimes confusing list of fields -used. - -[iec62056-21]: https://www.ungelesen.net/protagWork/media/downloads/solar-steuerung/iec62056-21%7Bed1.0%7Den_.pdf -[objlists]: http://www.dlms.com/documentation/listofstandardobiscodesandmaintenanceproces/index.html - -A typical P1 message looks something like this: - - /KFM5KAIFA-METER - - 1-0:1.8.1(000671.578*kWh) - 1-0:1.7.0(00.318*kW) - !1E1D - -This includes an identification header at the top, a checksum at the -bottom, and one or more lines of data in the middle. This example is -really stripped down, real messages will have more data in them. - -The first part of the line (e.g. `1-0:1.8.1`) is the (OBIS) id of the -field, which defines the meaning and format of the rest of the line. - -## Parsing a message - -Unlike other solutions floating around (which typically do some pattern -matching to extract the data they need), this code properly parses -messages, verifying the checksum and really parses each line according -to the specifications. This should make for more reliable parsing, and -allows for useful parser error messages: - - 1-0:1.8.1(000671.578*XWh) - ^ - Error: Invalid unit - - 1-0:1.8.1(0006#71.578*kWh) - ^ - Error: Invalid number - - !6F4A - ^ - Checksum mismatch - -This library uses C++ templates extensively. This allows defining a -custom datatype by listing the fields you are interested in, and then -all necessary parsing will happen automatically. The code generated -parses each line in the message in turn and for each line loops over the -fields in the datatype to find one whose ID matches. If found, the value -is parsed and stored into the corresponding field. - -As an example, consider we want to parse the identification and current -power fields in the example message above. We define a datatype: - - using MyData = ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered - >; - -The syntax is a bit weird because of the template magic used, but the -above essentially defines a struct with members for each field to be -parsed. For each field, there is also an associated `xxx_present` -member, which can be used to check whether the field was present in the -parsed data (if it is false, the associated field contains uninitialized -data). There is some extra stuff in the background, but the `MyData` -can be used just like the below struct. It also takes up the same amount -of space. - - struct MyData { - bool identification_present; - String identification; - bool power_delivered_present; - FixedValue power_delivered; - }; - -After this, call the parser. By passing our custom datatype defined -above, the parser knows what fields to look for. - - MyData data; - ParseResult res = P1Parser::parse(&data, msg, lengthof(msg)); - -Finally, we can check if the parsing was succesful and access the parsed -values as members of `data`: - - if (!res.err && res.all_present()) { - // Succesfully parsed, print results: - Serial.println(data.identification); - Serial.print(data.power_delivered.int_val()); - Serial.println("W"); - } - -In this case, we check whether parsing was successful, but also check -that all defined fields were present in the parsed message (using the -`all_present()` method), to prevent printing undefined values. If you -want to support optional fields, you can use the `xxx_present` members -for each field individually instead. - -Additionally, this template approach allows looping over all available -fields in a generic way, for example to print the parse results with -just a few lines of code. See the parse and read examples for how this -works. - -Note that these examples contain the full list of supported fields, -which causes parsing and printing code to be generated for all those -fields, even if they are not present in the output you want to parse. It -is recommended to limit the list of fields to just the ones that you -need, to make the parsing and printing code smaller and faster. - -## Parsed value types - -Some values are parsed to an Arduino `String` value or C++ integer type, -those should be fairly straightforward. There are three special types -that need some explanation: `FixedValue` and `TimestampedFixedValue`. - -When looking at the DSMR P1 format, it defines a floating point format. -It is described as `Fn(x,y)`, where `n` is the total number of (decimal) -digits, of which at least `x` and at most `y` are behind the decimal -separator (e.g. fractional digits). - -However, this floating point format is a lot more limited than the C -`float` format. For one, it is decimal-based, not binary. Furthermore, -the decimal separator doesn't float very far, the biggest value for `y` -used is 3. Even more, it seems that for any given field, there is no -actual floating involved, fields have `x` equal to `y`, so the number of -fractional digits is fixed. - -Because of this, parsing into a `float` value isn't really useful (and -on the Arduino, which doesn't have an FPU, very inefficient too). For -this reason, we use the `FixedValue` type, which stores the value as an -integer, in thousands of the original unit. This means that a value of -1.234kWh is stored as 1234 (effectively the value has been translated to -Wh). - -If you access the field directly, it will automatically be converted to -`float`, keeping the original value. Alternatively, if an integer -version is sufficient, you can call the `int_val()` method to get the -integer version returned. - - // Print as float, in kW - Serial.print(data.power_delivered); - // Print as integer, in W - Serial.print(data.power_delivered.int_val()); - -Additionally there is a `TimestampedFixedValue` method, which works -identically, but additionally has a `timestamp()` method which returns -the timestamp sent along with the value. - -These timestamps are returned as a string, exactly as present in the P1 -message (YYMMDDhhmmssX, where X is S or W for summer- or wintertime). -Parsing these into something like a UNIX timestamp is tricky (think -leap years and seconds) and of limited use, so this just keeps the -original format. - -## Connecting the P1 port - -The P1 port essentially consists of three parts: - -- A 5V power supply (this was not present in 3.x). -- A serial TX pin. This sends meter data using 0/5V signalling, using - idle low. Note that this is the voltage level commonly referred to as - "TTL serial", but the polarity is reversed (more like RS232). This - port uses 115200 bps 8N1 (3.x and before used 9600 bps). -- A request pin - 5V needs to be applied to this pin to start - generating output on the TX pin. - -To connect to an Arduino that has an unused hardware serial port (like -an Arduino Mega, Leonardo or Micro), the signal has to inverted. This -can be done using a dedicated inverter IC, or just a transistor and some -resistors. - -It's also possible to do all of the serial reception, including the -inverting, in software using Arduino's SoftwareSerial library. However, -it seems there are still occasional reception errors when using -SoftwareSerial. - -## Sub meters - -In addition to a smart electricity meter, there can be additional -sub meters attached (e.g., gas, water, thermal and sub electricity -meter). These can talk to the main meter using the (wired or wireless) -MBUS protocol to regularly (hourly for 4.x, every 5 minutes for 5.0) -send over their meter readings. Based on the configuration / connection, -each of these subs gets an MBUS identifier (1-4). - -In the P1 message, this identifier is used as the second number in the -OBIS identifiers for the fields for the sub. Currently, the code has -the assignment from MBUS identifier to device type hardcoded in -`fields.h`. For the most common configuration of an electricity meter with -a single gas meter as sub, this works straight away. Other -configurations might need changes to `fields.h` to work. - -## License - -All of the code and documentation in this library is licensed under the -MIT license, with the exception of the examples, which are licensed -under an even more liberal license. +This is a fork of [matthijskooijman/arduino-dsmr](https://github.com/matthijskooijman/arduino-dsmr). +The main goal is to make the parser not depend on Arduino framework and be usable in ESPHome DSMR component with ESP-IDF framework. + +# Current progress +* Code combines all fixes from [matthijskooijman/arduino-dsmr](https://github.com/matthijskooijman/arduino-dsmr) and [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) +* Added extensive unit tests suite +* Small refactoring and code optimizations +* Code is compatible with MSVC and GCC compilers +* Header only library, no dependencies +* Code can be used on any platform, not only embedded. + +# Details +For more details about the parser and DSMR please refer to original [README.md](https://github.com/matthijskooijman/arduino-dsmr/blob/master/README.md) from matthijskooijman + +# History behind this fork +[matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. +Later, [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) fork was created to make the code work with more DSMR devices. +[glmnet](https://github.com/glmnet) also used his fork to create an [ESPHome DSMR](https://esphome.io/components/sensor/dsmr/) component. +After that, the work on the `arduino-dsmr` parser was abandoned. Currently, it was discovered that dependency on the Arduino framework causes issues for some ESP32 devices (the FW size is too big, and the Arduino framework makes you use an outdated version of ESP-IDF). Thus, I decided to create a new fork and make the parser work on any platform without Arduino. + +# How to work with the code +* You can open the repository and work with the code using any IDE that supports Cmake. +* Note: if you want to run `build-windows.ps1` script you need `Visual Studio 2022` to be installed. diff --git a/build-linux.sh b/build-linux.sh new file mode 100755 index 0000000..0fd92e4 --- /dev/null +++ b/build-linux.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -o xtrace -o errexit -o nounset -o pipefail + +readonly currentScriptDir=`dirname "$(realpath -s "${BASH_SOURCE[0]}")"` +readonly buildDir="${currentScriptDir}/build" + +echo "Build and test debug configuration" +cmake -S "${currentScriptDir}" \ + -B "${buildDir}/linux-debug" \ + -D CMAKE_BUILD_TYPE=Debug +cmake --build "${buildDir}/linux-debug" +"${buildDir}/linux-debug/arduino_dsmr_test" + +echo "Build and test release configuration" +cmake -S "${currentScriptDir}" \ + -B "${buildDir}/linux-release" \ + -D CMAKE_BUILD_TYPE=Release +cmake --build "${buildDir}/linux-release" +"${buildDir}/linux-release/arduino_dsmr_test" + +echo "Success" diff --git a/build-win.ps1 b/build-win.ps1 new file mode 100644 index 0000000..21aef77 --- /dev/null +++ b/build-win.ps1 @@ -0,0 +1,63 @@ +Function Info($msg) { + Write-Host -ForegroundColor DarkGreen "`nINFO: $msg`n" +} + +Function Error($msg) { + Write-Host `n`n + Write-Error $msg + exit 1 +} + +Function CheckReturnCodeOfPreviousCommand($msg) { + if(-Not $?) { + Error "${msg}. Error code: $LastExitCode" + } +} + +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" +$ProgressPreference = "SilentlyContinue" + +$root = Resolve-Path $PSScriptRoot +$buildDir = "$root/build" + +Info "Find Visual Studio installation path" +$vswhereCommand = Get-Command -Name "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" +$installationPath = & $vswhereCommand -prerelease -latest -property installationPath + +Info "Open Visual Studio 2022 Developer PowerShell" +& "$installationPath\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 + +Info "Build and test debug version" +Info "Cmake generate cache" +cmake ` + -S $root ` + -B $buildDir/win-debug ` + -G Ninja ` + -D CMAKE_BUILD_TYPE=Debug +CheckReturnCodeOfPreviousCommand "cmake cache failed" + +Info "Cmake build" +cmake --build $buildDir/win-debug +CheckReturnCodeOfPreviousCommand "cmake build failed" + +Info "Run tests" +& "$buildDir/win-debug/arduino_dsmr_test.exe" +CheckReturnCodeOfPreviousCommand "tests failed" + +Info "Build and test release version" +Info "Cmake generate cache" +cmake ` + -S $root ` + -B $buildDir/win-release ` + -G Ninja ` + -D CMAKE_BUILD_TYPE=Release +CheckReturnCodeOfPreviousCommand "cmake cache failed" + +Info "Cmake build" +cmake --build $buildDir/win-release +CheckReturnCodeOfPreviousCommand "cmake build failed" + +Info "Run tests" +& "$buildDir/win-release/arduino_dsmr_test.exe" +CheckReturnCodeOfPreviousCommand "tests failed" diff --git a/examples/minimal_parse/minimal_parse.ino b/examples/minimal_parse/minimal_parse.ino deleted file mode 100644 index c4b2655..0000000 --- a/examples/minimal_parse/minimal_parse.ino +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Permission is hereby granted, free of charge, to anyone - * obtaining a copy of this document and accompanying files, - * to do whatever they want with them without any restriction, - * including, but not limited to, copying, modification and redistribution. - * NO WARRANTY OF ANY KIND IS PROVIDED. - * - * Example that shows how to parse a P1 message and automatically print - * the result. -*/ - -#include "dsmr.h" - -// Data to parse -const char msg[] = - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "1-0:1.7.0(00.318*kW)\r\n" - "!1E1D\r\n"; - -/** - * Define the data we're interested in, as well as the datastructure to - * hold the parsed data. - * Each template argument below results in a field of the same name. - */ -using MyData = ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered ->; - -void setup() { - Serial.begin(115200); - - MyData data; - ParseResult res = P1Parser::parse(&data, msg, lengthof(msg)); - if (res.err) { - // Parsing error, show it - Serial.println(res.fullError(msg, msg + lengthof(msg))); - } else if (!data.all_present()) { - Serial.println("Some fields are missing"); - } else { - // Succesfully parsed, print results: - Serial.println(data.identification); - Serial.print(data.power_delivered.int_val()); - Serial.println("W"); - } -} - -void loop () { -} diff --git a/examples/parse/parse.ino b/examples/parse/parse.ino deleted file mode 100644 index 6ad117d..0000000 --- a/examples/parse/parse.ino +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Permission is hereby granted, free of charge, to anyone - * obtaining a copy of this document and accompanying files, - * to do whatever they want with them without any restriction, - * including, but not limited to, copying, modification and redistribution. - * NO WARRANTY OF ANY KIND IS PROVIDED. - * - * Example that shows how to parse a P1 message and automatically print - * the result. -*/ - -#include "dsmr.h" - -// Data to parse -const char raw[] = - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-3:0.2.8(40)\r\n" - "0-0:1.0.0(150117185916W)\r\n" - "0-0:96.1.1(0000000000000000000000000000000000)\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "1-0:1.8.2(000842.472*kWh)\r\n" - "1-0:2.8.1(000000.000*kWh)\r\n" - "1-0:2.8.2(000000.000*kWh)\r\n" - "0-0:96.14.0(0001)\r\n" - "1-0:1.7.0(00.333*kW)\r\n" - "1-0:2.7.0(00.000*kW)\r\n" - "0-0:17.0.0(999.9*kW)\r\n" - "0-0:96.3.10(1)\r\n" - "0-0:96.7.21(00008)\r\n" - "0-0:96.7.9(00007)\r\n" - "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" - "1-0:32.32.0(00000)\r\n" - "1-0:32.36.0(00000)\r\n" - "0-0:96.13.1()\r\n" - "0-0:96.13.0()\r\n" - "1-0:31.7.0(001*A)\r\n" - "1-0:21.7.0(00.332*kW)\r\n" - "1-0:22.7.0(00.000*kW)\r\n" - "0-1:24.1.0(003)\r\n" - "0-1:96.1.0(0000000000000000000000000000000000)\r\n" - "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" - "0-1:24.4.0(1)\r\n" - "!6F4A\r\n"; - -/** - * Define the data we're interested in, as well as the datastructure to - * hold the parsed data. This list shows all supported fields, remove - * any fields you are not using from the below list to make the parsing - * and printing code smaller. - * Each template argument below results in a field of the same name. - */ -using MyData = ParsedData< - /* String */ identification, - /* String */ p1_version, - /* String */ timestamp, - /* String */ equipment_id, - /* FixedValue */ energy_delivered_tariff1, - /* FixedValue */ energy_delivered_tariff2, - /* FixedValue */ energy_returned_tariff1, - /* FixedValue */ energy_returned_tariff2, - /* String */ electricity_tariff, - /* FixedValue */ power_delivered, - /* FixedValue */ power_returned, - /* FixedValue */ electricity_threshold, - /* uint8_t */ electricity_switch_position, - /* uint32_t */ electricity_failures, - /* uint32_t */ electricity_long_failures, - /* String */ electricity_failure_log, - /* uint32_t */ electricity_sags_l1, - /* uint32_t */ electricity_sags_l2, - /* uint32_t */ electricity_sags_l3, - /* uint32_t */ electricity_swells_l1, - /* uint32_t */ electricity_swells_l2, - /* uint32_t */ electricity_swells_l3, - /* String */ message_short, - /* String */ message_long, - /* FixedValue */ voltage_l1, - /* FixedValue */ voltage_l2, - /* FixedValue */ voltage_l3, - /* FixedValue */ current_l1, - /* FixedValue */ current_l2, - /* FixedValue */ current_l3, - /* FixedValue */ power_delivered_l1, - /* FixedValue */ power_delivered_l2, - /* FixedValue */ power_delivered_l3, - /* FixedValue */ power_returned_l1, - /* FixedValue */ power_returned_l2, - /* FixedValue */ power_returned_l3, - /* uint16_t */ gas_device_type, - /* String */ gas_equipment_id, - /* uint8_t */ gas_valve_position, - /* TimestampedFixedValue */ gas_delivered, - /* uint16_t */ thermal_device_type, - /* String */ thermal_equipment_id, - /* uint8_t */ thermal_valve_position, - /* TimestampedFixedValue */ thermal_delivered, - /* uint16_t */ water_device_type, - /* String */ water_equipment_id, - /* uint8_t */ water_valve_position, - /* TimestampedFixedValue */ water_delivered, - /* uint16_t */ sub_device_type, - /* String */ sub_equipment_id, - /* uint8_t */ sub_valve_position, - /* TimestampedFixedValue */ sub_delivered>; - -/** - * This illustrates looping over all parsed fields using the - * ParsedData::applyEach method. - * - * When passed an instance of this Printer object, applyEach will loop - * over each field and call Printer::apply, passing a reference to each - * field in turn. This passes the actual field object, not the field - * value, so each call to Printer::apply will have a differently typed - * parameter. - * - * For this reason, Printer::apply is a template, resulting in one - * distinct apply method for each field used. This allows looking up - * things like Item::name, which is different for every field type, - * without having to resort to virtual method calls (which result in - * extra storage usage). The tradeoff is here that there is more code - * generated (but due to compiler inlining, it's pretty much the same as - * if you just manually printed all field names and values (with no - * cost at all if you don't use the Printer). - */ -struct Printer -{ - template - void apply(Item &i) - { - if (i.present()) - { - Serial.print(Item::name); - Serial.print(F(": ")); - Serial.print(i.val()); - Serial.print(Item::unit()); - Serial.println(); - } - } -}; - -void setup() -{ - Serial.begin(115200); - - MyData data; - ParseResult res = P1Parser::parse(&data, raw, lengthof(raw), true); - if (res.err) - { - // Parsing error, show it - Serial.println(res.fullError(raw, raw + lengthof(raw))); - } - else - { - // Parsed succesfully, print all values - data.applyEach(Printer()); - } -} - -void loop() -{ -} diff --git a/examples/read/read.ino b/examples/read/read.ino deleted file mode 100644 index 9b3e8d4..0000000 --- a/examples/read/read.ino +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Permission is hereby granted, free of charge, to anyone - * obtaining a copy of this document and accompanying files, - * to do whatever they want with them without any restriction, - * including, but not limited to, copying, modification and redistribution. - * NO WARRANTY OF ANY KIND IS PROVIDED. - * - * Example that shows how to periodically read a P1 message from a - * serial port and automatically print the result. -*/ - -#include "dsmr.h" - -/** - * Define the data we're interested in, as well as the datastructure to - * hold the parsed data. This list shows all supported fields, remove - * any fields you are not using from the below list to make the parsing - * and printing code smaller. - * Each template argument below results in a field of the same name. - */ -using MyData = ParsedData< - /* String */ identification, - /* String */ p1_version, - /* String */ timestamp, - /* String */ equipment_id, - /* FixedValue */ energy_delivered_tariff1, - /* FixedValue */ energy_delivered_tariff2, - /* FixedValue */ energy_returned_tariff1, - /* FixedValue */ energy_returned_tariff2, - /* String */ electricity_tariff, - /* FixedValue */ power_delivered, - /* FixedValue */ power_returned, - /* FixedValue */ electricity_threshold, - /* uint8_t */ electricity_switch_position, - /* uint32_t */ electricity_failures, - /* uint32_t */ electricity_long_failures, - /* String */ electricity_failure_log, - /* uint32_t */ electricity_sags_l1, - /* uint32_t */ electricity_sags_l2, - /* uint32_t */ electricity_sags_l3, - /* uint32_t */ electricity_swells_l1, - /* uint32_t */ electricity_swells_l2, - /* uint32_t */ electricity_swells_l3, - /* String */ message_short, - /* String */ message_long, - /* FixedValue */ voltage_l1, - /* FixedValue */ voltage_l2, - /* FixedValue */ voltage_l3, - /* FixedValue */ current_l1, - /* FixedValue */ current_l2, - /* FixedValue */ current_l3, - /* FixedValue */ power_delivered_l1, - /* FixedValue */ power_delivered_l2, - /* FixedValue */ power_delivered_l3, - /* FixedValue */ power_returned_l1, - /* FixedValue */ power_returned_l2, - /* FixedValue */ power_returned_l3, - /* uint16_t */ gas_device_type, - /* String */ gas_equipment_id, - /* uint8_t */ gas_valve_position, - /* TimestampedFixedValue */ gas_delivered, - /* uint16_t */ thermal_device_type, - /* String */ thermal_equipment_id, - /* uint8_t */ thermal_valve_position, - /* TimestampedFixedValue */ thermal_delivered, - /* uint16_t */ water_device_type, - /* String */ water_equipment_id, - /* uint8_t */ water_valve_position, - /* TimestampedFixedValue */ water_delivered, - /* uint16_t */ sub_device_type, - /* String */ sub_equipment_id, - /* uint8_t */ sub_valve_position, - /* TimestampedFixedValue */ sub_delivered>; - -/** - * This illustrates looping over all parsed fields using the - * ParsedData::applyEach method. - * - * When passed an instance of this Printer object, applyEach will loop - * over each field and call Printer::apply, passing a reference to each - * field in turn. This passes the actual field object, not the field - * value, so each call to Printer::apply will have a differently typed - * parameter. - * - * For this reason, Printer::apply is a template, resulting in one - * distinct apply method for each field used. This allows looking up - * things like Item::name, which is different for every field type, - * without having to resort to virtual method calls (which result in - * extra storage usage). The tradeoff is here that there is more code - * generated (but due to compiler inlining, it's pretty much the same as - * if you just manually printed all field names and values (with no - * cost at all if you don't use the Printer). - */ -struct Printer -{ - template - void apply(Item &i) - { - if (i.present()) - { - Serial.print(Item::name); - Serial.print(F(": ")); - Serial.print(i.val()); - Serial.print(Item::unit()); - Serial.println(); - } - } -}; - -// Set up to read from the second serial port, and use D2 as the request -// pin. On boards with only one (USB) serial port, you can also use -// SoftwareSerial. -#ifdef ARDUINO_ARCH_ESP32 -// Create Serial1 connected to UART 1 -HardwareSerial Serial1(1); -#endif -P1Reader reader(&Serial1, 2); - -unsigned long last; - -void setup() -{ - Serial.begin(115200); - Serial1.begin(115200); -#ifdef VCC_ENABLE - // This is needed on Pinoccio Scout boards to enable the 3V3 pin. - pinMode(VCC_ENABLE, OUTPUT); - digitalWrite(VCC_ENABLE, HIGH); -#endif - - // start a read right away - reader.enable(true); - last = millis(); -} - -void loop() -{ - // Allow the reader to check the serial buffer regularly - reader.loop(); - - // Every minute, fire off a one-off reading - unsigned long now = millis(); - if (now - last > 60000) - { - reader.enable(true); - last = now; - } - - if (reader.available()) - { - MyData data; - String err; - if (reader.parse(&data, &err)) - { - // Parse succesful, print result - data.applyEach(Printer()); - } - else - { - // Parser error, print error - Serial.println(err); - } - } -} diff --git a/library.json b/library.json deleted file mode 100644 index 35ceb6e..0000000 --- a/library.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Dsmr", - "version": "0.9", - "description": "Parser and utilities for Dutch Smart Meters (Implementing DSMR)", - "keywords": "dsmr", - "repository": { - "type": "git", - "url": "https://github.com/glmnet/arduino-dsmr.git" - }, - "license": "MIT", - "exclude": ["specs/"] -} diff --git a/specs/Swedish HAN H1 port v2.0 specification.pdf b/specs/Swedish HAN H1 port v2.0 specification.pdf new file mode 100644 index 0000000000000000000000000000000000000000..307e0b3eafb0b4677d2a935989a2642dae04fbe5 GIT binary patch literal 329151 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 cdm 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 OD)O^uRdiLU$o~)fA_A)b literal 0 HcmV?d00001 diff --git a/specs/Swedish HAN Interface description Aidon v1.7A.pdf b/specs/Swedish HAN Interface description Aidon v1.7A.pdf new file mode 100644 index 0000000000000000000000000000000000000000..306629e9fb7504834813e016937d839d9860d53a GIT binary patch literal 518565 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%0AY7>@vp+(8;jG3(dw%hFfVrCK^fFvZER zPP|&ORD85wa??=k{0Zk9?HM5Jg4os`u@7J524%<8Q2%}|j#Oj_YrtLDX1=o@-?bdoi)|gB_ zKhv`{=JqzwtMd&E0xb(Meh4EJ2PqR)lJJfEZmzv=dSANb*Cv^2>>`$3(i8W)0cGoD zXI5Q1L^srT$PDPIPwArk4nZ3+>nBT|vfpn2H`wE6F94r$eAGT;titbss|D;5M@L)Z z>49B+VNe?_QfNvey1XlZwX}`4Ftoc>AIqXP(=QLK@)HxQhK+Z>{M;Y)Pj#!{(8#iL|I!*Jt)#GwZ%vIC0`s42m^PM^(##p!X z?g(U(1-%yWqP@@`)ox;dU(+J0L3lj_V({Qf3wA)4G~yk^$-Fv90odN@JR?B4|3FQP z+{d3;fxF*8zX$IkV$)nf@H+>CoePw>QDmw-ZNT_67vSR-OA^X$fMj&H5W;*U23I*N z%hvCKFXZBF+2#%GFb+Fy^OXPDvV#;B<$*A>oI_S_x`=>yigAPPHYPz@fY&qzRaM@~ zN~L*fD7u1&@EH6>zd63CB{y+(J&xNUx<}x7mWz4#Oj^+N`EGQ1uTnSCqUZ@rpt4G3 zyGXmTY6X)Cf>=WH+mf?~K8MCa!boKTC%;1`xyTNKm$3Ud0KU?R4^+qK0P}7~ui< z`whN(RaQn9X7~ioerWYx%JimLZu~q3gTe49PS&|xT&;T6eyKxB-e7*$NJFU4cW+5w zxOVPv{X!<|%bENHzEr9>#%8;-y^RNT{Bjbdfiy0v5VC&$l z>S$~V1ZA_hTbTk?Bt-xsR<15eKxa`0J4XlmzX>kf0BL*BxuA{?f6oOaF*mk#0RmLz zja_U=c)0&&pZtH$4drBG<7WTgHz3b*ys{BBUp{Jtbvx%NOwJ_4Jc=&tu44Jgjpv&A z$D|@kE==LgpS9W0eIQBADA1DPF-1r4bmyQWafTLno7ZkBsm!~+Kb;8xeyLZUGWlIy zTy7ruz8`CDSE{O)De(XD%JopsQAG+*P2Cs#_&r-y*UNkLRTT8CMfYhY<&Qj*mHsm^-M%fp$+)la`{4H67O!X9?&v#0MLZ*^ba&YwDR{ z@_*X?c>f>Vy@gj*VfQX-0Rkc=-7QiAn{L>Yq#%uSY&xY81!)iv>E5)20@9&KNC|F0 z1!?J$5D7s!lka!W7-!t`-GAUZ#u|>jmBm``JL8$peCAprtxidQ|12_`A4mN@fMGjECod#^6OEFg8ySm}}8+XlJ5A;Xr1hJf9&jDEJD61s`f<;d}V| z%54pV930FV2r>Cg)LZ!K?G^Z7#0cNR-x?hisgu|&4MZMbYfaDx~qLaOlgz2YfhG z;CM2MBz-oDWEn*!vlK-uslma;2p_QEdsaAP9niS)4rpQrbU*PZvXBi9G9vhJ1->VN zBOh+D0D*x!Ub+sq4qxpl*$-!*420|G>N<42e0i(hX09VxIf1_2d!1zP;dY{h$Hq7( zUdZ3y-`<_=$JW13;WDss6LFh;TiqUXQcJtm8&6ZaRGRnLQ%~U;>92)KLDq}aIFF8y z3i|a)WT)elxBcS>67_LNbPbuMY#37t+FSQR5{(USs_+j&8dziDi5VcC}H)cUgqB*tm-_Li3RYg2&r;08K zJo<^aDHpOaUS4I=*vp<5w6FT5t;!+&+F-oj_7_mNsMf5#i15NSk{u<^o6%*f3; zg2e9JiDBLTH6qja^RAd!Mt5A$iyL=^g}>gTl}C(79nl&w_h;epI;;Hw2Y$dz%pf8z&uxh*``1CoQgs|&$`Y&b)EEnE~Ey$YJ@BU>bUomm^ zeUY1+`|{=Z8%qTXK}pGM@8E?G;k6r)438}oM)&Xdd~fzDy%o5c<6A`ey~aAyW7Yie z30sAVDc$hA>vT5$r#rXbH@Sn?Neh|uE)ima4lv5H2+?0-S~3}j882R-t+I(UYOH#e zFwtDN7)r69t9c>40!9sY zWIl}WIAnLevqV515%Om&kDSN&C3vck)7L)FQQ=Xy+E3YP2yiGtPG0+Vs~)_~CETK~ z*=hj+EnWC%xyYMzXgLS~$_=l{@i606Cf|ZJo}tKjP5YR@Yu`QE)UO{xiK8w}zscq? zX~>odnVqn@CyxlnBMZ%`iYV&sGmOU0vSIp+upPLyc=IyBy;0vdeEXqvxqdda)G{`C zM0#V@<-zwMCg{!>h!+aV5<$mr+;|rMKk~=RtmfgB;harBS%jsfrFro0FA(WQvc=S(-X3EHDL zKXX%kmUy2Xr%wRAK>Y}saFvDx0Rab5*jYwxe*D@j3X%8HcZ-O7H>Xr2F3Gh6ijs|TEG{{Uuf5Iw;Sk0*WUFZ0a^g}VJvR{T3e z5)x9!_o-kh~Xyc0<}~(x+R3KC`X9Zi}0;O6caG6M?4jN+ZGNBn%8%{07LeHdFffR?n*Lh( zH29J;jLwtU-4tA!Y@pm8kzMj7(ZYuX^Vy0rsQ(39EE$)QlkdiO|DWGf8$(|@Kj_tg zo97Wo_-vJ#iFrvfQdd8(x{S|;i_vxwPxF48m`L<5Ptw13`x+*L;#D_D33 z>tm}a24?G%bsXXSlp1cQ64~okR#wbT$;ruSl0=xq%1W!AnBKInamX-iLi+5FoR=>f z0NU!symc6hc$K+AUYC-GRA@2zrnzwymSy42(HbU^u&-ggd0?w;zrz{66jV@7-&$OO(-lV ze0omXXz<$XOiS787x9Sti~oul69(3XE}j27diODoO2KuyNR@Oe} zDlbV=OwiGc?*m45cBTD8S`7pdp5EWBx)I6LgJe|SQ|K%@r z4P7$*co7~yWi{R}R4Qp67clvMfn+&(#8S*$$ob!=S8>2fQ+t?H0k!rP2BmM_D8+OH z2Qu~?@J>R2F%k_pSfe9!g5BTB>#Lsa;s=`%q}&MpchOq7GLX38-G@$ zclvwtBUZrq-=lNisEE3sQ;mG~@lVBq*r?-zCTnfAgTB1d^H~3?(1%LXvG6x4x+?3B&mVLE#+4I&9$_cuwQ}R~%@OOCW=j%N|D`_S8}wrYE9x&cFpD=C zq$`yaPx$^1%ul4z8H!b5@Y?m^Bgn58aS`=dmf$jD2SreRVqzkIK_z8n2(!u8Q9;DU z-hiEBk}R5DUpkYwA|fW1(@*6y?>Ia8MR8l3k(bvM&h=C3ojwF!SdgrCF)1l2fET9t z5@~ElJ9BPhB^oHyT7NQ!Mj)e9RCF}w!D#f8 z6}`>3;+<-22UC^fPr0pklFw>~+G1|7STv$L`qx@i$3 zo7VU`j;%aBYqv?o^WfRUKHJ9e)Iw`0_|;yJ5tfrsYZwG3SxdV73T;81!&r%Xo<|=c z9hHykWG$N$r-JGa3&@!=XS)hxam>#YaXY)sldm>=F5?xnsV1}gr9=LuIA9Hx_(&)2 zUB+Lz7(^}XENVYYyVV&We*B(*MtHo!AYr52Zw9Rx3wSK+-Ur*QH&7zZij@2xl~h#3 z?jAq|BZFYraZwSgZ01bgxnKjcw~zmwtVWl@7W08C0ZLffoMqqnv)wqSLutOcvgY?> zV!}|E&!k~%knf$O*UAu-9t|#2}QB$D>r(&#g-HLjH*r+UMN&*Fvyb{E#)R=lFD+)8i{C!3UOQ&&S9A zh*_we(}nH5baZ(y;|l6S!E$rdp^bNy%Z?MN5TjOSNPz3+MvHI#hn_(AQr+NeUv+#% z6LV5hlI_6D0_EM2cp4G)FQjOufeGrn6F=PlN>Mv1=8jBuYIF!`DlO-t$_Q&xe98=K znCI_0eXRtaBPA`knJ^$Ayg6@3X@~Vn+v2)JG_|9+Pi=(V#)J8XK>yb)p>-@CIH`KoD0 z3v9{U?9>p-*+U;=(29f%(%gBX-e10FQ{ZY<=vV!mX zz=rzlebWeXiVY49Y zsMm^Eia@z*0FEdv<>26`7@>(S^8w66hOvMlWisX``w9F{7j7|1)Tq~+Mn$}*rl5!n zrk3fjW~J7(?fA37g*O(a?xuSkBdfEd=*aY~+OjKx)^<2stoH*x1#h?UT8i>>T7KTS zTHDwm4`uOJigdH%>KsaXdfBa_iuK-tg;oUUWoD z^Q#6DEJ^7>A5p&BJvP$6z+)G?kJm>O$mgOWe1?~4Ni*j-hp@M7RUrgi52==xRl@&l zds}HiWG-l|32&;;J~1;F)8r1(xmV-TH4p0h_wSe7Tnh_g$%I;RV120$b@3L~h>G)7 zne%4(aJ=kWIZ>=~^yB-<=YZ*$A_nG&S(M%+*6|v?VVt2#;BlqZLP@w{+S{0@*R>mT zG<($sy+z%k{gM|g-EMV7tVg8t-(Cn7ImkmH_iOB?D`T|jqp|ruEi-!63Ar66|0ex* z#>Z8N42w^>qcFCB@_hCXsenJ>3yOi_pzJAH*#TQ}GT8kmf$6N4R z6SMY>;N@Tz>N^eozwC_rGnJ!7mtn_9k6g^trvVpDH+#(m?nu4BnJ(O;p;fBcuC*QP zOSa|UXN?*Hn)nVGRwn)!pYg}v)wMj;=+^fl2nN_=nNqza$)sfEd$xbBeTt3 zIG#oLZGR7^zFHN{8S?2@4L^ul0fz~nnF#q-{V=8L#w}=8^5J;iVzH9V)O+=yGtb2Q zu9s+?@*M>V{b=PCVgfzek=JeeF^|YHm{h|Z$X25`57#gX@^RO0Qn&g4TH!LNez5Zo zBjC5Qwua(lv`YS3Wl}et6$3SwfMJ5`+N(>L)FtxQYtpZ~RMw2-J2$w2>H!m1oe3&S z?~*|mgh!i0u4kJok+E`snxM!E%Jl5t3zgqrL54C#>L@RIL_cXIup*S7?hWsyeG=g~ z*U>)Y*>7$<(Ku$XABpOHPS-lc>|vX|*z#y|O&{t4$c|yMMxh@?J$_usi{J_`ENuw^TO%a&5n(Mdry4Ta?xDLB1Zp%Ov!_WIuDBP&YTzhtq%NT?jH zv0?H7_|=i0rse&Nj)+V9i5um?n4nRRf&~;yuHO$_gU6$R=!MT79vc zsr&EHcoJHTd~d<^wMwJ9+d%puPs*cu7lNeK4sfoqVhCoZQaNup2@3}niSQDM4ioB|;oe!D)XI{rllSkNt7~ZXAiL=?hKs1$rO;p7d zGZF&!Xa14To(*M-C6lgW3L{hOJLr7mI=a+rHAI3Idt>AsnBBjcp<57-!XbW2V(-`@?1Za-C&>@zu}6+x>U^ zgfKR_LBQtk0D+>i6oWF1+H{(%E&iC+8&3D0+yLu(tIawD-ej9z6~q!NI1<}PlK8O# zV)NVUcfLFH!)HL2u@bUAB_<~BJ?L!78uao5xG$4wqf%IlOxc$50q%J}cwOg&7R z>chWV)ZzLQUa1y^c4p0dcec!D+6`!~B_MAVE_9agy1<=zWLSxM#s}lEDm8~^kT6BF zc~rX-Vq?7?rHx8q+)Fev5xDsHh01Sm{0d~BUJ2z%maS_G8xdhOYo*y$4b5u%J|XtccBC=+3vefVkx+<9P;1U ziH<0-<1y*iIzra@?wHX!2L%O@t9KMF$JZvIN;I-kC460*RVT`IIj#_0x2~k*PrFiL z`RX6^K2}u!pFT(*8OC|GEdyB$p!8>Cpai|-DWkck-jkwG8zD|kRRJ9qOg8Kgi7KP}_H)UMA_F*dp9%Vg7@XCAGZU0n!^1{1wey)a?OsF*`sK%YT>6!X za;o&N(`aldFhtC%6J_VHY{8-}fv^NX=Tl5j(hnVDvoxbRf=-rnomi)UVrJ))0#bRK zewvhkLO%E5z{rTqd3NvR{=fbQJA@ZZR@q#aajQ>Nmp?ul>=P=mM?wPMZkJ`({m-zxJ!L{U@c z<+gHA-=GhzHfgNhE;=$c;+ueqyFBOno zi-J6)gigZ9F7?tMsmkl1k+}X`D?=HA*H{?LcKUhI1r3ij#ur{;R-|cX+6BT;OJsEW zK`ADlp-Uu&`HnsrOJiTUgpQDc!GFAmE-K0WUqEmHOeohb2vvUbh$SQ{;->@k2UYzY zcj@L!jpbP)zo;?Dt_T8a6aT;%X|-4(x7loZ<&Q@Tacvyblmp`!Ub8low=%>`)E6ki ze)Pl+60Kk0)L3>#Z}v8!$GDRNJK96ikFybcesv`8$cvW1slO9g1Dx25QC5G6VZDgx#vSN5 z(Y)fjY%2_rh&hvtOMh2aBN>{y47_YfQTt#Tk2b$8V9idJ}WsYH+H z!{BS3G{6r8>*l zjO#YbjuSy%y)3oYP3rRfZIbHLu?a8`H{KtM+QD{&YEntzCtp!Stgo-XXP>U>=w8T0 zt)&Zu55nF4zCCY|=!R6d&S-W+5OuJIA;D{B%}ioZ9%YMn6Fu0TqF61Q4FIHiCzm$C zW$U-aO`-#*u&CqNcN~?`?7yHv^Pm1FMAltJo1SZ;Q=D;e;$Sg`hLlF}F5-7EGFrKk zj`D(Bm^0vKi{_esT+|!q8JB?!S1{`&KB=%1_7PQfoFAeQaFn{+r$NhbD88=&9 zbP4nb`^oFw=5kT!D7(EMJX zZ&Xy&P`W**U{r*rTomwqt<)r;mvyCic{Q=Td5ha3Y$Wz-Y0zQ;2e-dfBcn-r51weg z92BEz9%0!Ow5BC+@Otpz7Trgm#|B3qNG_oXrH^Gh<`=tcTxUrMf?X!MjGNpG_Sg&o zMTB}N#xW=-W|V>TyiUE8)to(7C+w=Sal9E>Je|)49lR!9+QDODn@9=}g|zzcJn1iR zS$`qg6H|w{w;=q_CXeFb>dM2nv#+dVdsfAZMv1r|9l`b zpBm&}WU>F<37-y1u!Hh=scVU*Vdq(5yz@-UmxZOIq9RtwiSB4p4c1UCvleg8`y}S2 z)0HVGT1^X1XvTPZdqdrKmbV#qgUXX>H5&-oJA^X`)aNJR5O(hthc^XGbJpKeSAQ_+ zb~mmt$&I^X_XGayx2J!++GQzg>4>5~Cl88IRf_CjL2%Y??CVqc8X!o^Qivyt>3i$f zD|rq%`Xy)fWf z|4lV>*Qpod{u1a*%l6H$Rk~uc7vU&2FTH!EM(kpu}=r>dpJ5t_KzO!YqWH4q-yJ=LboKkVnc6%gLf;E(ArA2#%+ z)k0Y+J)kuR2wqMcik_D*0N*j$0O(QAL`0Vj7-=hnZowTuFYRVDWvP5E8?}#`boNyF zlc0o%JBmo;yg~V^9~9G%(sh9wC<@^I*zYC&gz#T8lr$V#xeo$~&<+4(gf3f{OtFg1 zBkKU0m=3=dJ{A6y*5$uh3BI#6_URIH@fI`n6#`+UG9ir>A|kA8RGAI5OrIbX|4dLC z{e8))tHVI9q=E-Uf!-KL09|!7_TWd?$(YAB-)U^R?^ovCKh()U1PcBx7!h{*I`n0; z+(ynDQOjuHCPOdbqn@p<#Hag}h~P_C^yG@4D8VxSngsV#%lHobF6kp#Xfq74q6-2h zD6<|^8s4WLelZEW?X=A!Af7A8xIYXpZzOIdMg7q9SZT_!&-KT?@?qSA@osAtE>HcH zYG)?ulV_dBdyD3Qh7hECuxI^O=^_PJNZ8*L0~s_W5Zm@L3k#`0`YA(@qceP5qUAyQ zU!Y}@je*8*hOl`i=sGRBS*OyH?m?LS2+F@S-iMCC=SzQ&=F$XujpiRzk#ifqe+5O( z)bkqvR12Leq(?c>{tt6vNxm@`R$T>^!L8Yyf;$F>@8@vwgc*RY#n49PzsjGMx>n0?nW^j-t*ZK#=- zkZ3eIiV+gH(|8#Mssdq`?>0l%uBX|^L1SIWaXjCRq;D-tD)7*>JwT|lFA^JU>*lKA zB@f$txg7CF#&1z_RZ&^ooJO@vkVL;YxB?`ryky^JJemcy8#8y0`y0rHLMt^5$VI=q z-;IBM{iB80pD{t-6?=cUJ!Q-ECBLArqMTAgnXUW|F00t3c!ztX;i%p7uh%Xq)ME8N zAtf+k&Q@I9nXLPmB{dae_I{x)Ly5aJDk4_#qYWX@iZ|zv?jbL;Wn-Oo?kTcq+Pz_Hrz9)&+(fi!+d_>jlO&p+pyvpfyL@E|6EDkAS=2v4det8<{d#$ z0Tu_xRjjeFk^#WDDh28Vnjfc7erP}D^a)iQG_eiub$ z(YSR@a6YQxG)dWQmPi9|zcay;63u(}K8Tg!C=``!(_c@xcT=^`u)&#X*J@kY#&+BE zx}iSb+CE{*($>b;szEB^gzI|1)s!e73nrlTl~R5qy?$@#Wt*t0$35zhFpb18yttLZ zW1{a$Y5XuipG4#Q-(TFh>_@h-ODlw50ynD~uS*@50qs#q=c{pGUjeB!tAkLHy5Hf2 z15!e<=FOYC_r6vdjUAMGWKikR4`%*>{!D<44QqvSX?>}*b7-MOBNC@j#OA|>p@8M zD@VX)wDB)KAtLB~qG44w5h28=Ltq$|f0fZ9ThyK^Du!pFxZhbLPcbpW^0tEIlhA59 z5)x+4KhU7ln4=4mzALP*$<45l_5ryKc2;g>YHmf;TC89cNZYCQ=L$vIPpzKY*h2Fn znIdk(9+OOD`qp1?Z5BT!tjZqLvTI~&$9;H^BJdK?A+X&(O&Z@twf7BL=v5{nQ4zvR zHvQ#&Bp!0T*xi&J=l=q$uLzaidl?rSOT%wQM>_G#~y>npoJhvwJoi>K)-^&VEQchd<)b0f${3v(p04p@H zY#I;Kh3<-O=T-p*=eB{O+xr}sl>Ol6OjeVUdDt?)*z)q-K+X7rk<=a=zaD(PHj7tb zTxkFG;xxm5Jrw4KzKSg4uRsayRUjB3{#>1f`daCeljDU50vZybH;Dab8G`md@S@g_ zZ_`p>B1>4XJ_HWsNF0GUgv}UGaQ5x@oXW+W(t0=YGxiF`+RQ; zFU?BgY26WWu|xLjbuTuDrv=mRc=A*H2OtKkUAXC-F;bavj8P|1#gJ|VfVZkjU-fcw z<~V_RqJv_8P4uu8>siln{~G8uznF<+ZLNA7T+Dj^`4lH1fh`sex10Qorf7squgCR1=XRKmZq+@Q_|vT9RGCEt-1?=MfLb>I&9ga^CTGJ$`mCL z|HJBXo0$hM-rZW{qlo?bi!%3$JObn>gUe^^0#9q<2TEE)l#WadC0KlQm?$nf5@D*=T*X zj>NAd_oB?xnR{es1Z)S0;@&8D1WeFla8$aNM+@6e+;j7gSH+F47ON+7A$4249pod* zFX8mWd0bCtE;WLBS!C8P?55(Jjab&ZquIcs0bE>MkU5Popzmv@3wJxr+w7t%1w1DK zk*v3|?lznj{1aGzx*iq>q_u{QsHCLn%rlXgI!3O;lP;eOWyFIxVWul2`NhpkeAtui zfxg*fSZ_>*$mZCR6leLC8HAZQIt5SNl^{g`Qmk0d74wSllXEXHH`%G_GtjOv6xzl< zoUE}{J|rh44Z{osR)t~%6I|@O#E8ZW_}G$QKJU2O7W4c$UQ7VZOpX22(dE0=;>6E2 z+tZ(VnbkXzO%mfz(#{#admQ|4V2tR`KcN2GL*{=HV&-+E0X9xuxi$b0=stsFdbz;a zOEauO#TBjewI(dm`xt znv$OnD~7!986H&gn-1WhJAEx#p&9Yx$BR&7{Og$c5mlKo4mtOwzNBM?YQ-dGMRxUc ziyM~m2)?%6E8$}1Bs&!5K^JuE+pCAxf7Y7)wm@c7>Fo%GxvABqXT6Z!>sxd{2E*lK z-gsR&ZLl3WlZnrqfP0vD*y@ucv_0LNtgRy4b91tJEB?cH%xyxu+FdA({hYN?Kf0q$ zHHP~Z;k9N&1goJ{B>aGPwac`b_N5k$nKD5rQCw6+nWpQn9rZkclUm|6QG5U+^9zx? zVw{@f2l|8IDD~c6y%lOpY{zIKf=9Z1(neT}pW_g(x6{p=@3VjTIaW$2^fsrH?6gMO zc2~)aBtBJS;0DmrJJ^e<{5)|~GTI=kDJv_x5LwnlJ1lUl`+EMm?DYy5L}zDbC^l{@ z`16&bVQ`Ys*C~Gsiex`tBumXm5hTqFte1vQIEpBPtKd5Q)U=<-e&tzM$R zXfM3P`H)2?^EkUViHWJ?MLwRb>5O>S)eF^xv+F&5r#41T}xRdmyFUV@({hLIPL;To{-m>6+8kVaP!Yal1z;cw{o^BjOy92i| z^HOi5MkNhK#wVCG^IP$g0tsn^ymt=|D!KWZzg zb0eQ8M%0<9PZ~7CunC<13Q8O8%PxDmM6ZDSt6N(Dv3M1WiF!J=&7d-O!S(yw=sc)~ zHZPb_R1*SxmG%ILWFV>-C(6YZss=#Z^7&Y*n)_#L-5Y6dax~MPFx~ZY^WuAC^1>w* zR>edFrw`aX(vjrpX?>bbl;&@00-XKb5`(QQ?ie;vyIS0`75DwgeTJ%4s^&~n%790~ zi&*aN?z+qNz9qF{Al9JQXh}LpUJXtj@9FN=*7L7dAb3F0%uI~|LJpUoPQvGb$eeSu zQg<^2uW9<>%Vud>-lzyOh0Xh1_1!e+&KoLIYbifT$uuLs>nMs2X26wT>siGmwtBe0fDC_w3ml@E%W4%>pw(#>Gwj zF3Mj39YB!~krRke1g$tajzmKk@025+iKoqL^|{+sCc$VFN_PJ(^t_wDE96NB$2D?K zOBV76^J+vzcn1LYU}M`AN$4xOqgm$y$_*5b37RR9jL)nMK-0N5-Z-XI5%c zeFzDeX61!qRIh0^c-T zsN4tSkc;omvZ?aD*GGv7)n-=$mQxH=GW1`YZ95Wz?i2llI^2bgnmOqP9;Kw;o4wv} zX6g;uf8^BE0npCB(5bQU8r41vZ$JuK_ug=hq$+IKKcfO*k`Dk z@k*Yq(|L3W07l2hOtr0`)V7rAT^RWZuN109eR`Lm089=wb z04(QbdqMw?n=g=s5-{mhxX_IMpYsUx#Ze`o(X6LWmGoiaVb${bWgHvSW!yf?f>fXu zw(5>rTC(xst?PX2HaB~qC#{G$JKy`rpo^nZ4nd@D8`yB?Xi!K>K;sG2D~{@Hku3M! zCf*cmTg(Cr;Gdx{)p$=uWge;i+PayEIx_j*rE5Ayma-y91yriT_7`Il^i$PeAazVn zFLPab<$*X0?qc4z_x~r)%Tss?q(d9H7;xI(*{?n$5pc{Hzsb0~W!fINeh=_;*!k*STn(QYNG=Je&nK-@Z$!$u4DSV&A=Z@7cI*6cQJm}ppak>-Y75K zFhr&$*{$+%e{J%x79tCaL-wY|>EaFM=W6DNhd+C!!av{@T2oU48j$^Xr~f`%@G@Z2 z8K_QQhSVZUPZne8LhB0XPv4jQ)OH7HO(It3@XF+47g8aUf|OL@gOU~d&P(pug-3v*T+gnpvep6THx`nWv2Mqd7bYZ#^p=o+{c2reQVl$XBDGJ;zQ1&(zu35 z9qIvbm;5+gMkei1VICf)XA#=+lFKgsBNH`?WK+=;xqESRJAOSZ(R4dfY+C-DBddEy zatV)X7t@i4DN7@p3AD-`sqbD?7wt?L9L>_WwXK(Ay?KFp>=^w~T;Uuk-oHlQo6E77dB~hu} zS4pB(?o9K)8wQjia&k|PcYY}T0&lmn{ItG}#H_vdeI&hFcrrc-(k>D4gyB+RkQi&` zN>Y)NN0c6dfQwsmGlEQERS@mRXl!C~-`($Le&|lyFU|Y1gDxhD?k0~9Z6Yxiv!V!`Iw$q_KbsbB<|JdXPv#W8 zR!(sj2t=kCg_pSv5g@2vR`mKf(ySRPddL!B`7i4wt72H_dyU6{4}=(My5gv

#a0 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≥p+}XzXae9e1U#J&U=^ow=>-xy8mD@ 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 z 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

?y(Nsm*4%?2Jv7!Gm^pM8j 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 F{{gI_?t=gT literal 0 HcmV?d00001 diff --git a/src/dsmr.h b/src/dsmr.h deleted file mode 100644 index ced73ec..0000000 --- a/src/dsmr.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Arduino DSMR parser. - * - * This software is licensed under the MIT License. - * - * Copyright (c) 2015 Matthijs Kooijman - * - * 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 - * NONINFRINGEMENT. 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. - * - * Main included file. If you include this, you'll get everything, - * imported into global scope - */ - -#ifndef DSMR_INCLUDE_DSMR_H -#define DSMR_INCLUDE_DSMR_H - -#include "dsmr/parser.h" -#include "dsmr/reader.h" -#include "dsmr/fields.h" - -// Allow using everything without the namespace prefixes -using namespace dsmr; -using namespace dsmr::fields; - -#endif // DSMR_INCLUDE_DSMR_H diff --git a/src/dsmr/crc16.h b/src/dsmr/crc16.h deleted file mode 100644 index 276dc9e..0000000 --- a/src/dsmr/crc16.h +++ /dev/null @@ -1,107 +0,0 @@ -/* CRC compatibility, adapted from the Teensy 3 core at: - https://github.com/PaulStoffregen/cores/tree/master/teensy3 - which was in turn adapted by Paul Stoffregen from the C-only comments here: - http://svn.savannah.nongnu.org/viewvc/trunk/avr-libc/include/util/crc16.h?revision=933&root=avr-libc&view=markup */ - -/* Copyright (c) 2002, 2003, 2004 Marek Michalkiewicz - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of the copyright holders nor the names of - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. */ - -#pragma once - -#include - -static inline uint16_t _crc16_update(uint16_t crc, uint8_t data) __attribute__((always_inline, unused)); -static inline uint16_t _crc16_update(uint16_t crc, uint8_t data) -{ - unsigned int i; - - crc ^= data; - for (i = 0; i < 8; ++i) - { - if (crc & 1) - { - crc = (crc >> 1) ^ 0xA001; - } - else - { - crc = (crc >> 1); - } - } - return crc; -} - -static inline uint16_t _crc_xmodem_update(uint16_t crc, uint8_t data) __attribute__((always_inline, unused)); -static inline uint16_t _crc_xmodem_update(uint16_t crc, uint8_t data) -{ - unsigned int i; - - crc = crc ^ ((uint16_t)data << 8); - for (i = 0; i < 8; i++) - { - if (crc & 0x8000) - { - crc = (crc << 1) ^ 0x1021; - } - else - { - crc <<= 1; - } - } - return crc; -} - -static inline uint16_t _crc_ccitt_update(uint16_t crc, uint8_t data) __attribute__((always_inline, unused)); -static inline uint16_t _crc_ccitt_update(uint16_t crc, uint8_t data) -{ - data ^= (crc & 255); - data ^= data << 4; - - return ((((uint16_t)data << 8) | (crc >> 8)) ^ (uint8_t)(data >> 4) ^ ((uint16_t)data << 3)); -} - -static inline uint8_t _crc_ibutton_update(uint8_t crc, uint8_t data) __attribute__((always_inline, unused)); -static inline uint8_t _crc_ibutton_update(uint8_t crc, uint8_t data) -{ - unsigned int i; - - crc = crc ^ data; - for (i = 0; i < 8; i++) - { - if (crc & 0x01) - { - crc = (crc >> 1) ^ 0x8C; - } - else - { - crc >>= 1; - } - } - return crc; -} diff --git a/src/dsmr/fields.cpp b/src/dsmr/fields.cpp deleted file mode 100644 index 77c544c..0000000 --- a/src/dsmr/fields.cpp +++ /dev/null @@ -1,488 +0,0 @@ -/** - * Arduino DSMR parser. - * - * This software is licensed under the MIT License. - * - * Copyright (c) 2015 Matthijs Kooijman - * - * 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 - * NONINFRINGEMENT. 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. - * - * Field parsing functions - */ - -#include "fields.h" - -using namespace dsmr; -using namespace dsmr::fields; - -// Since C++11 it is possible to define the initial values for static -// const members in the class declaration, but if their address is -// taken, they still need a normal definition somewhere (to allocate -// storage). -constexpr char units::none[]; -constexpr char units::kWh[]; -constexpr char units::Wh[]; -constexpr char units::kW[]; -constexpr char units::W[]; -constexpr char units::kV[]; -constexpr char units::V[]; -constexpr char units::mV[]; -constexpr char units::kA[]; -constexpr char units::A[]; -constexpr char units::mA[]; -constexpr char units::m3[]; -constexpr char units::dm3[]; -constexpr char units::GJ[]; -constexpr char units::MJ[]; -constexpr char units::kvar[]; -constexpr char units::kvarh[]; -constexpr char units::kVA[]; -constexpr char units::VA[]; -constexpr char units::s[]; -constexpr char units::Hz[]; -constexpr char units::kHz[]; - -constexpr ObisId identification::id; -constexpr char identification::name[]; - -constexpr ObisId p1_version::id; -constexpr char p1_version::name[]; - -/* extra field for Belgium */ -constexpr ObisId p1_version_be::id; -constexpr char p1_version_be::name[]; - -/* extra field for Switzerland */ -constexpr ObisId p1_version_ch::id; -constexpr char p1_version_ch::name[]; - -constexpr ObisId timestamp::id; -constexpr char timestamp::name[]; - -constexpr ObisId equipment_id::id; -constexpr char equipment_id::name[]; - -/* extra for Lux */ -constexpr ObisId energy_delivered_lux::id; -constexpr char energy_delivered_lux::name[]; - -constexpr ObisId energy_delivered_tariff1::id; -constexpr char energy_delivered_tariff1::name[]; - -constexpr ObisId energy_delivered_tariff2::id; -constexpr char energy_delivered_tariff2::name[]; - -constexpr ObisId energy_delivered_tariff3::id; -constexpr char energy_delivered_tariff3::name[]; - -constexpr ObisId energy_delivered_tariff4::id; -constexpr char energy_delivered_tariff4::name[]; - -constexpr ObisId reactive_energy_delivered_tariff1::id; -constexpr char reactive_energy_delivered_tariff1::name[]; - -constexpr ObisId reactive_energy_delivered_tariff2::id; -constexpr char reactive_energy_delivered_tariff2::name[]; - -constexpr ObisId reactive_energy_delivered_tariff3::id; -constexpr char reactive_energy_delivered_tariff3::name[]; - -constexpr ObisId reactive_energy_delivered_tariff4::id; -constexpr char reactive_energy_delivered_tariff4::name[]; - -/* specific for Switzerland */ -constexpr ObisId energy_delivered_tariff1_ch::id; -constexpr char energy_delivered_tariff1_ch::name[]; - -/* specific for Switzerland */ -constexpr ObisId energy_delivered_tariff2_ch::id; -constexpr char energy_delivered_tariff2_ch::name[]; - -/* extra for Lux */ -constexpr ObisId energy_returned_lux::id; -constexpr char energy_returned_lux::name[]; - -constexpr ObisId energy_returned_tariff1::id; -constexpr char energy_returned_tariff1::name[]; - -constexpr ObisId energy_returned_tariff2::id; -constexpr char energy_returned_tariff2::name[]; - -constexpr ObisId energy_returned_tariff3::id; -constexpr char energy_returned_tariff3::name[]; - -constexpr ObisId energy_returned_tariff4::id; -constexpr char energy_returned_tariff4::name[]; - -constexpr ObisId reactive_energy_returned_tariff1::id; -constexpr char reactive_energy_returned_tariff1::name[]; - -constexpr ObisId reactive_energy_returned_tariff2::id; -constexpr char reactive_energy_returned_tariff2::name[]; - -constexpr ObisId reactive_energy_returned_tariff3::id; -constexpr char reactive_energy_returned_tariff3::name[]; - -constexpr ObisId reactive_energy_returned_tariff4::id; -constexpr char reactive_energy_returned_tariff4::name[]; - -/* specific for Switzerland */ -constexpr ObisId energy_returned_tariff1_ch::id; -constexpr char energy_returned_tariff1_ch::name[]; - -/* specific for Switzerland */ -constexpr ObisId energy_returned_tariff2_ch::id; -constexpr char energy_returned_tariff2_ch::name[]; - -/* extra for Lux */ -constexpr ObisId total_imported_energy::id; -constexpr char total_imported_energy::name[]; - -/* extra for Lux */ -constexpr ObisId total_exported_energy::id; -constexpr char total_exported_energy::name[]; - -/* extra for Lux */ -constexpr ObisId reactive_power_delivered::id; -constexpr char reactive_power_delivered::name[]; - -/* extra for Lux */ -constexpr ObisId reactive_power_returned::id; -constexpr char reactive_power_returned::name[]; - -constexpr ObisId electricity_tariff::id; -constexpr char electricity_tariff::name[]; - -constexpr ObisId power_delivered::id; -constexpr char power_delivered::name[]; - -constexpr ObisId power_returned::id; -constexpr char power_returned::name[]; - -/* specific for Switzerland */ -constexpr ObisId power_delivered_ch::id; -constexpr char power_delivered_ch::name[]; - -/* specific for Switzerland */ -constexpr ObisId power_returned_ch::id; -constexpr char power_returned_ch::name[]; - -constexpr ObisId electricity_threshold::id; -constexpr char electricity_threshold::name[]; - -constexpr ObisId electricity_switch_position::id; -constexpr char electricity_switch_position::name[]; - -constexpr ObisId electricity_failures::id; -constexpr char electricity_failures::name[]; - -constexpr ObisId electricity_long_failures::id; -constexpr char electricity_long_failures::name[]; - -constexpr ObisId electricity_failure_log::id; -constexpr char electricity_failure_log::name[]; - -constexpr ObisId electricity_sags_l1::id; -constexpr char electricity_sags_l1::name[]; - -constexpr ObisId electricity_sags_l2::id; -constexpr char electricity_sags_l2::name[]; - -constexpr ObisId electricity_sags_l3::id; -constexpr char electricity_sags_l3::name[]; - -constexpr ObisId voltage_sag_time_l1::id; -constexpr char voltage_sag_time_l1::name[]; - -constexpr ObisId voltage_sag_time_l2::id; -constexpr char voltage_sag_time_l2::name[]; - -constexpr ObisId voltage_sag_time_l3::id; -constexpr char voltage_sag_time_l3::name[]; - -constexpr ObisId voltage_sag_l1::id; -constexpr char voltage_sag_l1::name[]; - -constexpr ObisId voltage_sag_l2::id; -constexpr char voltage_sag_l2::name[]; - -constexpr ObisId voltage_sag_l3::id; -constexpr char voltage_sag_l3::name[]; - -constexpr ObisId electricity_swells_l1::id; -constexpr char electricity_swells_l1::name[]; - -constexpr ObisId electricity_swells_l2::id; -constexpr char electricity_swells_l2::name[]; - -constexpr ObisId electricity_swells_l3::id; -constexpr char electricity_swells_l3::name[]; - -constexpr ObisId voltage_swell_time_l1::id; -constexpr char voltage_swell_time_l1::name[]; - -constexpr ObisId voltage_swell_time_l2::id; -constexpr char voltage_swell_time_l2::name[]; - -constexpr ObisId voltage_swell_time_l3::id; -constexpr char voltage_swell_time_l3::name[]; - -constexpr ObisId voltage_swell_l1::id; -constexpr char voltage_swell_l1::name[]; - -constexpr ObisId voltage_swell_l2::id; -constexpr char voltage_swell_l2::name[]; - -constexpr ObisId voltage_swell_l3::id; -constexpr char voltage_swell_l3::name[]; - -constexpr ObisId message_short::id; -constexpr char message_short::name[]; - -constexpr ObisId message_long::id; -constexpr char message_long::name[]; - -constexpr ObisId voltage::id; -constexpr char voltage::name[]; - -constexpr ObisId voltage_l1::id; -constexpr char voltage_l1::name[]; - -constexpr ObisId voltage_l2::id; -constexpr char voltage_l2::name[]; - -constexpr ObisId voltage_l3::id; -constexpr char voltage_l3::name[]; - -constexpr ObisId voltage_avg_l1::id; -constexpr char voltage_avg_l1::name[]; - -constexpr ObisId voltage_avg_l2::id; -constexpr char voltage_avg_l2::name[]; - -constexpr ObisId voltage_avg_l3::id; -constexpr char voltage_avg_l3::name[]; - -constexpr ObisId current_l1::id; -constexpr char current_l1::name[]; - -constexpr ObisId current_l2::id; -constexpr char current_l2::name[]; - -constexpr ObisId current_l3::id; -constexpr char current_l3::name[]; - -constexpr ObisId current_fuse_l1::id; -constexpr char current_fuse_l1::name[]; - -constexpr ObisId current_fuse_l2::id; -constexpr char current_fuse_l2::name[]; - -constexpr ObisId current_fuse_l3::id; -constexpr char current_fuse_l3::name[]; - -constexpr ObisId current::id; -constexpr char current::name[]; - -constexpr ObisId current_n::id; -constexpr char current_n::name[]; - -constexpr ObisId current_sum::id; -constexpr char current_sum::name[]; - -constexpr ObisId power_delivered_l1::id; -constexpr char power_delivered_l1::name[]; - -constexpr ObisId power_delivered_l2::id; -constexpr char power_delivered_l2::name[]; - -constexpr ObisId power_delivered_l3::id; -constexpr char power_delivered_l3::name[]; - -constexpr ObisId power_returned_l1::id; -constexpr char power_returned_l1::name[]; - -constexpr ObisId power_returned_l2::id; -constexpr char power_returned_l2::name[]; - -constexpr ObisId power_returned_l3::id; -constexpr char power_returned_l3::name[]; - -constexpr ObisId apparent_delivery_power::id; -constexpr char apparent_delivery_power::name[]; - -constexpr ObisId apparent_delivery_power_l1::id; -constexpr char apparent_delivery_power_l1::name[]; - -constexpr ObisId apparent_delivery_power_l2::id; -constexpr char apparent_delivery_power_l2::name[]; - -constexpr ObisId apparent_delivery_power_l3::id; -constexpr char apparent_delivery_power_l3::name[]; - -constexpr ObisId apparent_return_power::id; -constexpr char apparent_return_power::name[]; - -constexpr ObisId apparent_return_power_l1::id; -constexpr char apparent_return_power_l1::name[]; - -constexpr ObisId apparent_return_power_l2::id; -constexpr char apparent_return_power_l2::name[]; - -constexpr ObisId apparent_return_power_l3::id; -constexpr char apparent_return_power_l3::name[]; - -constexpr ObisId active_demand_power::id; -constexpr char active_demand_power::name[]; - -//constexpr ObisId active_demand_net::id; -//constexpr char active_demand_net::name[]; - -constexpr ObisId active_demand_abs::id; -constexpr char active_demand_abs::name[]; - -/* LUX */ -constexpr ObisId reactive_power_delivered_l1::id; -constexpr char reactive_power_delivered_l1::name[]; - -/* LUX */ -constexpr ObisId reactive_power_delivered_l2::id; -constexpr char reactive_power_delivered_l2::name[]; - -/* LUX */ -constexpr ObisId reactive_power_delivered_l3::id; -constexpr char reactive_power_delivered_l3::name[]; - -/* LUX */ -constexpr ObisId reactive_power_returned_l1::id; -constexpr char reactive_power_returned_l1::name[]; - -/* LUX */ -constexpr ObisId reactive_power_returned_l2::id; -constexpr char reactive_power_returned_l2::name[]; - -/* LUX */ -constexpr ObisId reactive_power_returned_l3::id; -constexpr char reactive_power_returned_l3::name[]; - -constexpr ObisId gas_device_type::id; -constexpr char gas_device_type::name[]; - -constexpr ObisId gas_equipment_id::id; -constexpr char gas_equipment_id::name[]; - -constexpr ObisId gas_valve_position::id; -constexpr char gas_valve_position::name[]; - -/* _NL */ -constexpr ObisId gas_delivered::id; -constexpr char gas_delivered::name[]; - -/* _BE */ -constexpr ObisId gas_delivered_be::id; -constexpr char gas_delivered_be::name[]; - -constexpr ObisId gas_delivered_text::id; -constexpr char gas_delivered_text::name[]; - -constexpr ObisId thermal_device_type::id; -constexpr char thermal_device_type::name[]; - -constexpr ObisId thermal_equipment_id::id; -constexpr char thermal_equipment_id::name[]; - -constexpr ObisId thermal_valve_position::id; -constexpr char thermal_valve_position::name[]; - -constexpr ObisId thermal_delivered::id; -constexpr char thermal_delivered::name[]; - -constexpr ObisId water_device_type::id; -constexpr char water_device_type::name[]; - -constexpr ObisId water_equipment_id::id; -constexpr char water_equipment_id::name[]; - -constexpr ObisId water_valve_position::id; -constexpr char water_valve_position::name[]; - -constexpr ObisId water_delivered::id; -constexpr char water_delivered::name[]; - -constexpr ObisId sub_device_type::id; -constexpr char sub_device_type::name[]; - -constexpr ObisId sub_equipment_id::id; -constexpr char sub_equipment_id::name[]; - -constexpr ObisId sub_valve_position::id; -constexpr char sub_valve_position::name[]; - -constexpr ObisId sub_delivered::id; -constexpr char sub_delivered::name[]; - -constexpr ObisId active_energy_import_current_average_demand::id; -constexpr char active_energy_import_current_average_demand::name[]; - -constexpr ObisId active_energy_export_current_average_demand::id; -constexpr char active_energy_export_current_average_demand::name[]; - -constexpr ObisId apparent_energy_import_current_average_demand::id; -constexpr char apparent_energy_import_current_average_demand::name[]; - -constexpr ObisId apparent_energy_export_current_average_demand::id; -constexpr char apparent_energy_export_current_average_demand::name[]; - -constexpr ObisId active_energy_import_last_completed_demand::id; -constexpr char active_energy_import_last_completed_demand::name[]; - -constexpr ObisId active_energy_export_last_completed_demand::id; -constexpr char active_energy_export_last_completed_demand::name[]; - -constexpr ObisId reactive_energy_import_last_completed_demand::id; -constexpr char reactive_energy_import_last_completed_demand::name[]; - -constexpr ObisId reactive_energy_export_last_completed_demand::id; -constexpr char reactive_energy_export_last_completed_demand::name[]; - -constexpr ObisId apparent_energy_import_last_completed_demand::id; -constexpr char apparent_energy_import_last_completed_demand::name[]; - -constexpr ObisId apparent_energy_export_last_completed_demand::id; -constexpr char apparent_energy_export_last_completed_demand::name[]; - -constexpr ObisId active_energy_import_maximum_demand_running_month::id; -constexpr char active_energy_import_maximum_demand_running_month::name[]; - -constexpr ObisId active_energy_import_maximum_demand_last_13_months::id; -constexpr char active_energy_import_maximum_demand_last_13_months::name[]; - -constexpr ObisId fw_core_version::id; -constexpr char fw_core_version::name[]; - -constexpr ObisId fw_core_checksum::id; -constexpr char fw_core_checksum::name[]; - -constexpr ObisId fw_module_version::id; -constexpr char fw_module_version::name[]; - -constexpr ObisId fw_module_checksum::id; -constexpr char fw_module_checksum::name[]; \ No newline at end of file diff --git a/src/dsmr/fields.h b/src/dsmr/fields.h index 6db7282..88a1c60 100644 --- a/src/dsmr/fields.h +++ b/src/dsmr/fields.h @@ -1,33 +1,3 @@ -/** - * Arduino DSMR parser. - * - * This software is licensed under the MIT License. - * - * Copyright (c) 2015 Matthijs Kooijman - * - * 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 - * NONINFRINGEMENT. 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. - * - * Field parsing functions - */ - #pragma once #include "util.h" @@ -66,7 +36,7 @@ namespace dsmr { ParseResult parse(const char *str, const char *end) { - ParseResult res = StringParser::parse_string(minlen, maxlen, str, end); + ParseResult res = StringParser::parse_string(minlen, maxlen, str, end); if (!res.err) static_cast(this)->val() = res.result; return res; @@ -91,9 +61,9 @@ namespace dsmr // FixedField return the corresponding units for these values. struct FixedValue { - operator float() { return val(); } - float val() { return _value / 1000.0; } - uint32_t int_val() { return _value; } + operator float() const { return val(); } + float val() const { return _value / 1000.0; } + uint32_t int_val() const { return _value; } uint32_t _value; }; @@ -135,7 +105,7 @@ namespace dsmr struct TimestampedFixedValue : public FixedValue { - String timestamp; + std::string timestamp; }; // Some numerical values are prefixed with a timestamp. This is simply @@ -146,7 +116,7 @@ namespace dsmr ParseResult parse(const char *str, const char *end) { // First, parse timestamp - ParseResult res = StringParser::parse_string(13, 13, str, end); + ParseResult res = StringParser::parse_string(13, 13, str, end); if (res.err) return res; @@ -167,7 +137,7 @@ namespace dsmr // we parse last entry 2 times const char *last = end; - ParseResult res; + ParseResult res; res.next = str; while (res.next != end) @@ -206,45 +176,37 @@ namespace dsmr ParseResult parse(const char *str, const char *end) { // Just copy the string verbatim value without any parsing - concat_hack(static_cast(this)->val(), str, end - str); + static_cast(this)->val().append(str, end - str); return ParseResult().until(end); } }; namespace fields { - struct units { - // These variables are inside a struct, since that allows us to make - // them constexpr and define their values here, but define the storage - // in a cpp file. Global const(expr) variables have implicitly - // internal linkage, meaning each cpp file that includes us will have - // its own copy of the variable. Since we take the address of these - // variables (passing it as a template argument), this would cause a - // compiler warning. By putting these in a struct, this is prevented. - static constexpr char none[] = ""; - static constexpr char kWh[] = "kWh"; - static constexpr char Wh[] = "Wh"; - static constexpr char kW[] = "kW"; - static constexpr char W[] = "W"; - static constexpr char kV[] = "kV"; - static constexpr char V[] = "V"; - static constexpr char mV[] = "mV"; - static constexpr char kA[] = "kA"; - static constexpr char A[] = "A"; - static constexpr char mA[] = "mA"; - static constexpr char m3[] = "m3"; - static constexpr char dm3[] = "dm3"; - static constexpr char GJ[] = "GJ"; - static constexpr char MJ[] = "MJ"; - static constexpr char kvar[] = "kvar"; - static constexpr char kvarh[] = "kvarh"; - static constexpr char kVA[] = "kVA"; - static constexpr char VA[] = "VA"; - static constexpr char s[] = "s"; - static constexpr char Hz[] ="Hz"; - static constexpr char kHz[] ="kHz"; + static inline constexpr char none[] = ""; + static inline constexpr char kWh[] = "kWh"; + static inline constexpr char Wh[] = "Wh"; + static inline constexpr char kW[] = "kW"; + static inline constexpr char W[] = "W"; + static inline constexpr char kV[] = "kV"; + static inline constexpr char V[] = "V"; + static inline constexpr char mV[] = "mV"; + static inline constexpr char kA[] = "kA"; + static inline constexpr char A[] = "A"; + static inline constexpr char mA[] = "mA"; + static inline constexpr char m3[] = "m3"; + static inline constexpr char dm3[] = "dm3"; + static inline constexpr char GJ[] = "GJ"; + static inline constexpr char MJ[] = "MJ"; + static inline constexpr char kvar[] = "kvar"; + static inline constexpr char kvarh[] = "kvarh"; + static inline constexpr char kVA[] = "kVA"; + static inline constexpr char VA[] = "VA"; + static inline constexpr char s[] = "s"; + static inline constexpr char Hz[] ="Hz"; + static inline constexpr char kHz[] ="kHz"; }; const uint8_t GAS_MBUS_ID = DSMR_GAS_MBUS_ID; @@ -252,31 +214,31 @@ namespace dsmr const uint8_t THERMAL_MBUS_ID = DSMR_THERMAL_MBUS_ID; const uint8_t SUB_MBUS_ID = DSMR_SUB_MBUS_ID; -#define DEFINE_FIELD(fieldname, value_t, obis, field_t, field_args...) \ - struct fieldname : field_t \ +#define DEFINE_FIELD(fieldname, value_t, obis, field_t, ...) \ + struct fieldname : field_t \ { \ value_t fieldname; \ bool fieldname##_present = false; \ - static constexpr ObisId id = obis; \ - static constexpr char name[] = #fieldname; \ + static inline constexpr ObisId id = obis; \ + static inline constexpr char name[] = #fieldname; \ value_t &val() { return fieldname; } \ bool &present() { return fieldname##_present; } \ } /* Meter identification. This is not a normal field, but a * specially-formatted first line of the message */ - DEFINE_FIELD(identification, String, ObisId(255, 255, 255, 255, 255, 255), RawField); + DEFINE_FIELD(identification, std::string, ObisId(255, 255, 255, 255, 255, 255), RawField); /* Version information for P1 output */ - DEFINE_FIELD(p1_version, String, ObisId(1, 3, 0, 2, 8), StringField, 2, 2); - DEFINE_FIELD(p1_version_be, String, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); - DEFINE_FIELD(p1_version_ch, String, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); + DEFINE_FIELD(p1_version, std::string, ObisId(1, 3, 0, 2, 8), StringField, 2, 2); + DEFINE_FIELD(p1_version_be, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); + DEFINE_FIELD(p1_version_ch, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); /* Date-time stamp of the P1 message */ - DEFINE_FIELD(timestamp, String, ObisId(0, 0, 1, 0, 0), TimestampField); + DEFINE_FIELD(timestamp, std::string, ObisId(0, 0, 1, 0, 0), TimestampField); /* Equipment identifier */ - DEFINE_FIELD(equipment_id, String, ObisId(0, 0, 96, 1, 1), StringField, 0, 96); + DEFINE_FIELD(equipment_id, std::string, ObisId(0, 0, 96, 1, 1), StringField, 0, 96); /* Meter Reading electricity delivered to client (Special for Lux) in 0,001 kWh */ /* TODO: by OBIS 1-0:1.8.0.255 IEC 62056 it should be Positive active energy (A+) total [kWh], should we rename it? */ @@ -338,7 +300,7 @@ namespace dsmr /* Tariff indicator electricity. The tariff indicator can also be used * to switch tariff dependent loads e.g boilers. This is the * responsibility of the P1 user */ - DEFINE_FIELD(electricity_tariff, String, ObisId(0, 0, 96, 14, 0), StringField, 4, 4); + DEFINE_FIELD(electricity_tariff, std::string, ObisId(0, 0, 96, 14, 0), StringField, 4, 4); /* Actual electricity power delivered (+P) in 1 Watt resolution */ DEFINE_FIELD(power_delivered, FixedValue, ObisId(1, 0, 1, 7, 0), FixedField, units::kW, units::W); @@ -371,7 +333,7 @@ namespace dsmr DEFINE_FIELD(electricity_long_failures, uint32_t, ObisId(0, 0, 96, 7, 9), IntField, units::none); /* Power Failure Event Log (long power failures) */ - DEFINE_FIELD(electricity_failure_log, String, ObisId(1, 0, 99, 97, 0), RawField); + DEFINE_FIELD(electricity_failure_log, std::string, ObisId(1, 0, 99, 97, 0), RawField); /* Number of voltage sags in phase L1 */ DEFINE_FIELD(electricity_sags_l1, uint32_t, ObisId(1, 0, 32, 32, 0), IntField, units::none); @@ -405,10 +367,10 @@ namespace dsmr /* Text message codes: numeric 8 digits (Note: Missing from 5.0 spec) * */ - DEFINE_FIELD(message_short, String, ObisId(0, 0, 96, 13, 1), StringField, 0, 16); + DEFINE_FIELD(message_short, std::string, ObisId(0, 0, 96, 13, 1), StringField, 0, 16); /* Text message max 2048 characters (Note: Spec says 1024 in comment and * 2048 in format spec, so we stick to 2048). */ - DEFINE_FIELD(message_long, String, ObisId(0, 0, 96, 13, 0), StringField, 0, 2048); + DEFINE_FIELD(message_long, std::string, ObisId(0, 0, 96, 13, 0), StringField, 0, 2048); /* Instantaneous voltage L1 in 0.1V resolution (Note: Spec says V * resolution in comment, but 0.1V resolution in format spec. Added in @@ -516,9 +478,9 @@ namespace dsmr DEFINE_FIELD(gas_device_type, uint16_t, ObisId(0, GAS_MBUS_ID, 24, 1, 0), IntField, units::none); /* Equipment identifier (Gas) */ - DEFINE_FIELD(gas_equipment_id, String, ObisId(0, GAS_MBUS_ID, 96, 1, 0), StringField, 0, 96); + DEFINE_FIELD(gas_equipment_id, std::string, ObisId(0, GAS_MBUS_ID, 96, 1, 0), StringField, 0, 96); /* Equipment identifier (Gas) BE */ - DEFINE_FIELD(gas_equipment_id_be, String, ObisId(0, GAS_MBUS_ID, 96, 1, 1), StringField, 0, 96); + DEFINE_FIELD(gas_equipment_id_be, std::string, ObisId(0, GAS_MBUS_ID, 96, 1, 1), StringField, 0, 96); /* Valve position Gas (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ DEFINE_FIELD(gas_valve_position, uint8_t, ObisId(0, GAS_MBUS_ID, 24, 4, 0), IntField, units::none); @@ -531,13 +493,13 @@ namespace dsmr /* _BE */ DEFINE_FIELD(gas_delivered_be, TimestampedFixedValue, ObisId(0, GAS_MBUS_ID, 24, 2, 3), TimestampedFixedField, units::m3, units::dm3); - DEFINE_FIELD(gas_delivered_text, String, ObisId(0, GAS_MBUS_ID, 24, 3, 0), RawField); + DEFINE_FIELD(gas_delivered_text, std::string, ObisId(0, GAS_MBUS_ID, 24, 3, 0), RawField); /* Device-Type */ DEFINE_FIELD(thermal_device_type, uint16_t, ObisId(0, THERMAL_MBUS_ID, 24, 1, 0), IntField, units::none); /* Equipment identifier (Thermal: heat or cold) */ - DEFINE_FIELD(thermal_equipment_id, String, ObisId(0, THERMAL_MBUS_ID, 96, 1, 0), StringField, 0, 96); + DEFINE_FIELD(thermal_equipment_id, std::string, ObisId(0, THERMAL_MBUS_ID, 96, 1, 0), StringField, 0, 96); /* Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ DEFINE_FIELD(thermal_valve_position, uint8_t, ObisId(0, THERMAL_MBUS_ID, 24, 4, 0), IntField, units::none); @@ -551,7 +513,7 @@ namespace dsmr DEFINE_FIELD(water_device_type, uint16_t, ObisId(0, WATER_MBUS_ID, 24, 1, 0), IntField, units::none); /* Equipment identifier (Thermal: heat or cold) */ - DEFINE_FIELD(water_equipment_id, String, ObisId(0, WATER_MBUS_ID, 96, 1, 0), StringField, 0, 96); + DEFINE_FIELD(water_equipment_id, std::string, ObisId(0, WATER_MBUS_ID, 96, 1, 0), StringField, 0, 96); /* Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ DEFINE_FIELD(water_valve_position, uint8_t, ObisId(0, WATER_MBUS_ID, 24, 4, 0), IntField, units::none); @@ -565,7 +527,7 @@ namespace dsmr DEFINE_FIELD(sub_device_type, uint16_t, ObisId(0, SUB_MBUS_ID, 24, 1, 0), IntField, units::none); /* Equipment identifier (Thermal: heat or cold) */ - DEFINE_FIELD(sub_equipment_id, String, ObisId(0, SUB_MBUS_ID, 96, 1, 0), StringField, 0, 96); + DEFINE_FIELD(sub_equipment_id, std::string, ObisId(0, SUB_MBUS_ID, 96, 1, 0), StringField, 0, 96); /* Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ DEFINE_FIELD(sub_valve_position, uint8_t, ObisId(0, SUB_MBUS_ID, 24, 4, 0), IntField, units::none); @@ -597,10 +559,10 @@ namespace dsmr /* Image Core Version and checksum */ DEFINE_FIELD(fw_core_version, FixedValue, ObisId(1, 0, 0, 2, 0), FixedField, units::none, units::none); - DEFINE_FIELD(fw_core_checksum, String, ObisId(1, 0, 0, 2, 8), StringField, 0, 8); + DEFINE_FIELD(fw_core_checksum, std::string, ObisId(1, 0, 0, 2, 8), StringField, 0, 8); /* Image Module Version and checksum */ DEFINE_FIELD(fw_module_version, FixedValue, ObisId(1, 1, 0, 2, 0), FixedField, units::none, units::none); - DEFINE_FIELD(fw_module_checksum, String, ObisId(1, 1, 0, 2, 8), StringField, 0, 8); + DEFINE_FIELD(fw_module_checksum, std::string, ObisId(1, 1, 0, 2, 8), StringField, 0, 8); } // namespace fields diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index 2f92f29..acff89c 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -1,40 +1,28 @@ -/** - * Arduino DSMR parser. - * - * This software is licensed under the MIT License. - * - * Copyright (c) 2015 Matthijs Kooijman - * - * 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 - * NONINFRINGEMENT. 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. - * - * Message parsing core - */ - #pragma once -#include "crc16.h" #include "util.h" namespace dsmr { + // uses polynomial x^16+x^15+x^2+1 + static uint16_t crc16_update(uint16_t crc, uint8_t data) + { + unsigned int i; + + crc ^= data; + for (i = 0; i < 8; ++i) + { + if (crc & 1) + { + crc = (crc >> 1) ^ 0xA001; + } + else + { + crc = (crc >> 1); + } + } + return crc; + } /** * ParsedData is a template for the result of parsing a Dsmr P1 message. @@ -69,8 +57,7 @@ namespace dsmr template <> struct ParsedData<> { - ParseResult __attribute__((__always_inline__)) - parse_line_inlined(const ObisId & /* id */, const char *str, const char * /* end */) + ParseResult parse_line(const ObisId & /* id */, const char *str, const char * /* end */) { // Parsing succeeded, but found no matching handler (so return // set the next pointer to show nothing was parsed). @@ -78,12 +65,12 @@ namespace dsmr } template - void __attribute__((__always_inline__)) applyEach_inlined(F && /* f */) + void applyEach(F && /* f */) { // Nothing to do } - bool all_present_inlined() { return true; } + bool all_present() { return true; } }; /** @@ -99,17 +86,6 @@ namespace dsmr * parses the value and stores it in the field. */ ParseResult parse_line(const ObisId &id, const char *str, const char *end) - { - return parse_line_inlined(id, str, end); - } - - /** - * always_inline version of parse_line. This is a separate method, to - * allow recursively inlining all calls, but still have a non-inlined - * top-level parse_line method. - */ - ParseResult __attribute__((__always_inline__)) - parse_line_inlined(const ObisId &id, const char *str, const char *end) { if (id == T::id) { @@ -118,32 +94,27 @@ namespace dsmr T::present() = true; return T::parse(str, end); } - return ParsedData::parse_line_inlined(id, str, end); + return ParsedData::parse_line(id, str, end); } template - void applyEach(F &&f) { applyEach_inlined(f); } - - template - void __attribute__((__always_inline__)) applyEach_inlined(F &&f) + void applyEach(F &&f) { T::apply(f); - return ParsedData::applyEach_inlined(f); + return ParsedData::applyEach(f); } /** * Returns true when all defined fields are present. */ - bool all_present() { return all_present_inlined(); } - - bool all_present_inlined() { return T::present() && ParsedData::all_present_inlined(); } + bool all_present() { return T::present() && ParsedData::all_present(); } }; struct StringParser { - static ParseResult parse_string(size_t min, size_t max, const char *str, const char *end) + static ParseResult parse_string(size_t min, size_t max, const char *str, const char *end) { - ParseResult res; + ParseResult res; if (str >= end || *str != '(') return res.fail("Missing (", str); @@ -160,15 +131,12 @@ namespace dsmr if (len < min || len > max) return res.fail("Invalid string length", str_start); - concat_hack(res.result, str_start, len); + res.result.append(str_start, len); return res.until(str_end + 1); // Skip ) } }; - // Do not use F() for multiply-used strings (including strings used from - // multiple template instantiations), that would result in multiple - // instances of the string in the binary static constexpr char INVALID_NUMBER[] = "Invalid number"; static constexpr char INVALID_UNIT[] = "Invalid unit"; @@ -200,8 +168,9 @@ namespace dsmr { ++num_end; - while (num_end < end && !strchr("*)", *num_end) && max_decimals--) + while (num_end < end && !strchr("*)", *num_end) && max_decimals) { + max_decimals--; if (*num_end < '0' || *num_end > '9') return res.fail(INVALID_NUMBER, num_end); value *= 10; @@ -214,6 +183,8 @@ namespace dsmr while (max_decimals--) value *= 10; + // If a unit was passed, check that the unit in the messages + // messages the unit passed. if (unit && *unit) { if (num_end >= end || *num_end != '*') @@ -221,9 +192,11 @@ namespace dsmr const char *unit_start = ++num_end; // skip * while (num_end < end && *num_end != ')' && *unit) { - if (tolower(*num_end++) != tolower(*unit++)) + // Next character in units do not match? + if (std::tolower(static_cast(*num_end++)) != std::tolower(static_cast(*unit++))) return res.fail(INVALID_UNIT, unit_start); } + // At the end of the message unit, but not the passed unit? if (*unit) return res.fail(INVALID_UNIT, unit_start); } @@ -288,32 +261,39 @@ namespace dsmr struct CrcParser { + private: static const size_t CRC_LEN = 4; + static bool hex_nibble(char c, uint8_t& out) + { + if (c >= '0' && c <= '9') { out = static_cast(c - '0'); return true; } + if (c >= 'A' && c <= 'F') { out = static_cast(c - 'A' + 10); return true; } + if (c >= 'a' && c <= 'f') { out = static_cast(c - 'a' + 10); return true; } + return false; + } + + public: + // Parse a crc value. str must point to the first of the four hex // bytes in the CRC. - static ParseResult parse(const char *str, const char *end) + static ParseResult parse(const char* str, const char* end) { ParseResult res; - // This should never happen with the code in this library, but - // check anyway + if (str + CRC_LEN > end) return res.fail("No checksum found", str); - // A bit of a messy way to parse the checksum, but all - // integer-parse functions assume nul-termination - char buf[CRC_LEN + 1]; - memcpy(buf, str, CRC_LEN); - buf[CRC_LEN] = '\0'; - char *endp; - uint16_t check = strtoul(buf, &endp, 16); - - // See if all four bytes formed a valid number - if (endp != buf + CRC_LEN) - return res.fail("Incomplete or malformed checksum", str); + uint16_t value = 0; + for (size_t i = 0; i < CRC_LEN; ++i) + { + uint8_t nibble; + if (!hex_nibble(str[i], nibble)) + return res.fail("Incomplete or malformed checksum", str + i); + value = static_cast((value << 4) | nibble); + } res.next = str + CRC_LEN; - return res.succeed(check); + return res.succeed(value); } }; @@ -326,54 +306,51 @@ namespace dsmr * pointer in the result will indicate the next unprocessed byte. */ template - static ParseResult parse(ParsedData *data, const char *str, size_t n, bool unknown_error = false, - bool check_crc = true) + static ParseResult parse(ParsedData *data, const char *str, size_t n, bool unknown_error = false, bool check_crc = true) { ParseResult res; - if (!n || str[0] != '/') - return res.fail("Data should start with /", str); - // Skip / - const char *data_start = str + 1; + const char* const buf_begin = str; + const char* const buf_end = str + n; - // Look for ! that terminates the data - const char *data_end = data_start; - if (check_crc) - { - uint16_t crc = _crc16_update(0, *str); // Include the / in CRC - while (data_end < str + n && *data_end != '!') - { - crc = _crc16_update(crc, *data_end); - ++data_end; - } - if (data_end >= str + n) - return res.fail("No checksum found", data_end); + if (!n || *buf_begin != '/') + return res.fail("Data should start with /", buf_begin); - crc = _crc16_update(crc, *data_end); // Include the ! in CRC + // The payload starts after '/', and runs up to (but not including) '!' + const char* const data_begin = buf_begin + 1; - ParseResult check_res = CrcParser::parse(data_end + 1, str + n); - if (check_res.err) - return check_res; + // Find the terminating '!' (or the end of buffer if not present) + const char* term = std::find(data_begin, buf_end, '!'); + if(term == buf_end) + return res.fail("Data should end with !"); - // Check CRC - if (check_res.result != crc) - { - return res.fail("Checksum mismatch", data_end + 1); - } - res = parse_data(data, data_start, data_end, unknown_error); - res.next = check_res.next; - } - else + if (check_crc) { - while (data_end < str + n && *data_end != '!') - { - ++data_end; - } - - res = parse_data(data, data_start, data_end, unknown_error); - res.next = data_end; + // With CRC enabled, '!' must exist and be followed by 4 hex chars. + if (term >= buf_end) + return res.fail("No checksum found", term); + + // Compute CRC over '/' .. '!' (inclusive). + uint16_t crc = 0; + for (const char* p = buf_begin; p <= term; ++p) + crc = crc16_update(crc, static_cast(*p)); + + // Parse and verify the 4-hex checksum after '!' + ParseResult check = CrcParser::parse(term + 1, buf_end); + if (check.err) + return check; + if (check.result != crc) + return res.fail("Checksum mismatch", term + 1); + + // Parse payload (between '/' and '!') + res = parse_data(data, data_begin, term, unknown_error); + res.next = check.next; // Advance past checksum + return res; } + // No CRC checking: parse up to '!' if present, otherwise up to buf_end. + res = parse_data(data, data_begin, term, unknown_error); + res.next = (term < buf_end) ? term : buf_end; return res; } @@ -386,7 +363,6 @@ namespace dsmr static ParseResult parse_data(ParsedData *data, const char *str, const char *end, bool unknown_error = false) { - ParseResult res; // Split into lines and parse those const char *line_end = str, *line_start = str; @@ -398,15 +374,17 @@ namespace dsmr // The first identification line looks like: // XXX5 // The DSMR spec is vague on details, but in 62056-21, the X's - // are a three-leter (registerd) manufacturer ID, the id + // are a three-letter (registerd) manufacturer ID, the id // string is up to 16 chars of arbitrary characters and the // '5' is a baud rate indication. 5 apparently means 9600, // which DSMR 3.x and below used. It seems that DSMR 2.x // passed '3' here (which is mandatory for "mode D" // communication according to 62956-21), so we also allow - // that. - if (line_start + 3 >= line_end || (line_start[3] != '5' && line_start[3] != '3')) - return res.fail("Invalid identification string", line_start); + // that. Apparently swedish meters use '9' for 115200. This code + // used to check the format of the line somewhat, but for + // flexibility (and since we do not actually parse the contents + // of the line anyway), just allow anything now. + // // Offer it for processing using the all-ones Obis ID, which // is not otherwise valid. ParseResult tmp = data->parse_line(ObisId(255, 255, 255, 255, 255, 255), line_start, line_end); @@ -432,9 +410,9 @@ namespace dsmr } if (line_end != line_start) - return res.fail("Last dataline not CRLF terminated", line_end); + return ParseResult().fail("Last dataline not CRLF terminated", line_end); - return res; + return ParseResult(); } template diff --git a/src/dsmr/reader.h b/src/dsmr/reader.h deleted file mode 100644 index ddcfa6e..0000000 --- a/src/dsmr/reader.h +++ /dev/null @@ -1,262 +0,0 @@ -/** - * Arduino DSMR parser. - * - * This software is licensed under the MIT License. - * - * Copyright (c) 2015 Matthijs Kooijman - * - * 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 - * NONINFRINGEMENT. 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. - * - * P1 reader, that takes care of toggling a request pin, reading data - * from a serial port and parsing it. - */ - -#ifndef DSMR_INCLUDE_READER_H -#define DSMR_INCLUDE_READER_H - -#include -#include "crc16.h" - -#include "parser.h" - -namespace dsmr -{ - - /** - * Controls the request pin on the P1 port to enable (periodic) - * transmission of messages and reads those messages. - * - * To enable the request pin, call enable(). This lets the Smart Meter - * start periodically sending messages. While the request pin is - * enabled, loop() should be regularly called to read pending bytes. - * - * Once a full and correct message is received, loop() (and available()) - * start returning true, until the message is cleared. You can then - * either read the raw message using raw(), or parse it using parse(). - * - * The message is cleared when: - * - clear() is called - * - parse() is called - * - loop() is called and the start of a new message is available - * - * When disable is called, the request pin is disabled again and any - * partial message is discarded. Any bytes received while disabled are - * dropped. - */ - class P1Reader - { - public: - /** - * Create a new P1Reader. The stream passed should be the serial - * port to which the P1 TX pin is connected. The req_pin is the - * pin connected to the request pin. The pin is configured as an - * output, the Stream is assumed to be already set up (e.g. baud - * rate configured). - */ - P1Reader(Stream *stream, uint8_t req_pin) - : stream(stream), req_pin(req_pin), once(false), state(State::DISABLED_STATE) - { - pinMode(req_pin, OUTPUT); - digitalWrite(req_pin, LOW); - } - - /** - * Enable the request pin, to request data on the P1 port. - * @param once When true, the request pin is automatically - * disabled once a complete and correct message was - * receivedc. When false, the request pin stays - * enabled, so messages will continue to be sent - * periodically. - */ - void enable(bool once) - { - digitalWrite(this->req_pin, HIGH); - this->state = State::WAITING_STATE; - this->once = once; - } - - /* Disable the request pin again, to stop data from being sent on - * the P1 port. This will also clear any incomplete data that was - * previously received, but a complete message will be kept until - * clear() is called. - */ - void disable() - { - digitalWrite(this->req_pin, LOW); - this->state = State::DISABLED_STATE; - if (!this->_available) - this->buffer = ""; - // Clear any pending bytes - while (this->stream->read() >= 0) /* nothing */ - ; - } - - /** - * Returns true when a complete and correct message was received, - * until it is cleared. - */ - bool available() - { - return this->_available; - } - - /** - * Check for new data to read. Should be called regularly, such as - * once every loop. Returns true if a complete message is available - * (just like available). - */ - bool loop() - { - while (true) - { - if (state == State::CHECKSUM_STATE) - { - // Let the Stream buffer the CRC bytes. Convert to size_t to - // prevent unsigned vs signed comparison - if ((size_t)this->stream->available() < CrcParser::CRC_LEN) - return false; - - char buf[CrcParser::CRC_LEN]; - for (uint8_t i = 0; i < CrcParser::CRC_LEN; ++i) - buf[i] = this->stream->read(); - - ParseResult crc = CrcParser::parse(buf, buf + lengthof(buf)); - - // Prepare for next message - state = State::WAITING_STATE; - - if (!crc.err && crc.result == this->crc) - { - // Message complete, checksum correct - this->_available = true; - - if (once) - this->disable(); - - return true; - } - } - else - { - // For other states, read bytes one by one - int c = this->stream->read(); - if (c < 0) - return false; - - switch (this->state) - { - case State::DISABLED_STATE: - // Where did this byte come from? Just toss it - break; - case State::WAITING_STATE: - if (c == '/') - { - this->state = State::READING_STATE; - // Include the / in the CRC - this->crc = _crc16_update(0, c); - this->clear(); - } - break; - case State::READING_STATE: - // Include the ! in the CRC - this->crc = _crc16_update(this->crc, c); - if (c == '!') - this->state = State::CHECKSUM_STATE; - else - buffer.concat((char)c); - - break; - case State::CHECKSUM_STATE: - // This cannot happen (given the surrounding if), but the - // compiler is not smart enough to see this, so list this - // case to prevent a warning. - abort(); - break; - } - } - } - return false; - } - - /** - * Returns the data read so far. - */ - const String &raw() - { - return buffer; - } - - /** - * If a complete message has been received, parse it and store the - * result into the ParsedData object passed. - * - * After parsing, the message is cleared. - * - * If parsing fails, false is returned. If err is passed, the error - * message is appended to that string. - */ - template - bool parse(ParsedData *data, String *err) - { - const char *str = buffer.c_str(), *end = buffer.c_str() + buffer.length(); - ParseResult res = P1Parser::parse_data(data, str, end); - - if (res.err && err) - *err = res.fullError(str, end); - - // Clear the message - this->clear(); - - return res.err == NULL; - } - - /** - * Clear any complete message from the buffer. - */ - void clear() - { - if (_available) - { - buffer = ""; - _available = false; - } - } - - protected: - Stream *stream; - uint8_t req_pin; - enum class State : uint8_t - { - DISABLED_STATE, - WAITING_STATE, - READING_STATE, - CHECKSUM_STATE, - }; - bool _available; - bool once; - State state; - String buffer; - uint16_t crc; - }; - -} // namespace dsmr - -#endif // DSMR_INCLUDE_READER_H diff --git a/src/dsmr/util.h b/src/dsmr/util.h index ca0c1c9..1d594a8 100644 --- a/src/dsmr/util.h +++ b/src/dsmr/util.h @@ -1,59 +1,13 @@ -/** - * Arduino DSMR parser. - * - * This software is licensed under the MIT License. - * - * Copyright (c) 2015 Matthijs Kooijman - * - * 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 - * NONINFRINGEMENT. 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. - * - * Various utility functions - */ - #pragma once -#include +#include +#include +#include +#include +#include namespace dsmr { - - /** - * Small utility to get the length of an array at compiletime. - */ - template - inline unsigned int lengthof(const T (&)[sz]) { return sz; } - - // Hack until https://github.com/arduino/Arduino/pull/1936 is merged. - // This appends the given number of bytes from the given C string to the - // given Arduino string, without requiring a trailing NUL. - // Requires that there _is_ room for nul-termination - static void concat_hack(String &s, const char *append, size_t n) - { - // Add null termination. Inefficient, but it works... - char buf[n + 1]; - memcpy(buf, append, n); - buf[n] = 0; - s.concat(buf); - } - /** * The ParseResult class wraps the result of a parse function. The type * of the result is passed as a template parameter and can be void to @@ -91,33 +45,26 @@ namespace dsmr { T result; - P &succeed(T &result) - { - this->result = result; - return *static_cast

(this); - } - P &succeed(T &&result) - { - this->result = result; - return *static_cast

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 z

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 %Df; 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 literal 0 HcmV?d00001 From 37f7edbd0724ecd7f4243871948bac42b5411eaf Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Fri, 12 Sep 2025 04:42:03 +0200 Subject: [PATCH 06/25] add clang build to Github Actions --- .github/workflows/main.yaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index aa84576..e3df7ba 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -1,13 +1,22 @@ on: push jobs: - build-windows: + build-windows-msvc: runs-on: windows-2022 steps: - uses: actions/checkout@v4 - run: ./build-win.ps1 - build_linux: + build-linux-gcc: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: ./build-linux.sh + build-linux-clang: + runs-on: ubuntu-latest + env: + CC: clang + CXX: clang++ + steps: + - uses: actions/checkout@v4 + - run: sudo apt-get install -y clang + - run: ./build-linux.sh From 1108809f83280ba025c4e55c2cbe1dd459e2399f Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:32:59 +0200 Subject: [PATCH 07/25] Configure compiler warnings and enable sanitizers --- .github/workflows/main.yaml | 10 +-- CMakeLists.txt | 21 ++++++ README.md | 2 +- build-linux.sh | 35 +++++---- src/dsmr/fields.h | 16 ++-- src/dsmr/parser.h | 16 ++-- src/dsmr/util.h | 14 ++-- src/test/parser_include_test.cpp | 2 +- src/test/parser_test.cpp | 122 +++++++++++++++---------------- 9 files changed, 132 insertions(+), 106 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index e3df7ba..ad89d06 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -6,16 +6,8 @@ jobs: steps: - uses: actions/checkout@v4 - run: ./build-win.ps1 - build-linux-gcc: + build-linux: runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: ./build-linux.sh - build-linux-clang: - runs-on: ubuntu-latest - env: - CC: clang - CXX: clang++ steps: - uses: actions/checkout@v4 - run: sudo apt-get install -y clang diff --git a/CMakeLists.txt b/CMakeLists.txt index 33c1e71..cbca00f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,33 @@ cmake_minimum_required (VERSION 3.20) project(arduino-dsmr-test LANGUAGES CXX) +include(FetchContent) file(DOWNLOAD https://github.com/doctest/doctest/releases/download/v2.4.12/doctest.h ${CMAKE_BINARY_DIR}/doctest/doctest.h EXPECTED_MD5 0671bbca9fb00cb19a168cffa89ac184) +FetchContent_Populate( + cmake_template + URL https://github.com/cpp-best-practices/cmake_template/archive/refs/heads/main.zip + URL_HASH MD5=c391b4c21eeabac1d5142bcf404c740c) +include(${cmake_template_SOURCE_DIR}/cmake/CompilerWarnings.cmake) +include(${cmake_template_SOURCE_DIR}/cmake/Sanitizers.cmake) + file(GLOB_RECURSE arduino_dsmr_test_src_files CONFIGURE_DEPENDS "src/*.h" "src/*.cpp") add_executable(arduino_dsmr_test ${arduino_dsmr_test_src_files}) target_include_directories(arduino_dsmr_test PRIVATE ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/doctest) target_compile_features(arduino_dsmr_test PUBLIC cxx_std_17) + +# enable warnings +add_library(arduino_dsmr_test_warnings INTERFACE) +myproject_set_project_warnings(arduino_dsmr_test_warnings ON "" "" "" "") +if(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + target_compile_options(arduino_dsmr_test_warnings INTERFACE -Wno-gnu-zero-variadic-macro-arguments) +endif() +target_link_libraries(arduino_dsmr_test PRIVATE arduino_dsmr_test_warnings) + +# enable sanitizers: address, leak, undefined behaviour +add_library(arduino_dsmr_test_sanitizers INTERFACE) +myproject_enable_sanitizers(arduino_dsmr_test_sanitizers ON ON ON OFF OFF) +target_link_libraries(arduino_dsmr_test PRIVATE arduino_dsmr_test_sanitizers) diff --git a/README.md b/README.md index a66c470..1fbbd31 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The main goal is to make the parser not depend on Arduino framework and be usabl * Code combines all fixes from [matthijskooijman/arduino-dsmr](https://github.com/matthijskooijman/arduino-dsmr) and [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) * Added extensive unit tests suite * Small refactoring and code optimizations -* Code is compatible with MSVC and GCC compilers +* Supported compilers: MSVC, GCC, Clang * Header only library, no dependencies * Code can be used on any platform, not only embedded. diff --git a/build-linux.sh b/build-linux.sh index 0fd92e4..403763c 100755 --- a/build-linux.sh +++ b/build-linux.sh @@ -1,22 +1,31 @@ #!/usr/bin/env bash +# This script requires clang to be installed: +# sudo apt-get update && sudo apt-get install -y clang set -o xtrace -o errexit -o nounset -o pipefail - readonly currentScriptDir=`dirname "$(realpath -s "${BASH_SOURCE[0]}")"` readonly buildDir="${currentScriptDir}/build" -echo "Build and test debug configuration" -cmake -S "${currentScriptDir}" \ - -B "${buildDir}/linux-debug" \ - -D CMAKE_BUILD_TYPE=Debug -cmake --build "${buildDir}/linux-debug" -"${buildDir}/linux-debug/arduino_dsmr_test" +build_and_test() { + local build_type="$1" # Debug or Release + local target="$2" # linux-gcc or linux-clang + + echo -e "\n\nBuild and test ${target}-$build_type" + + cmake -S "$currentScriptDir" \ + -B "$buildDir/${target}-$build_type" \ + -G "Ninja" \ + -D CMAKE_BUILD_TYPE="$build_type" + cmake --build "$buildDir/${target}-$build_type" + "$buildDir/${target}-$build_type/arduino_dsmr_test" +} + +build_and_test Debug linux-gcc +build_and_test Release linux-gcc -echo "Build and test release configuration" -cmake -S "${currentScriptDir}" \ - -B "${buildDir}/linux-release" \ - -D CMAKE_BUILD_TYPE=Release -cmake --build "${buildDir}/linux-release" -"${buildDir}/linux-release/arduino_dsmr_test" +export CC=clang +export CXX=clang++ +build_and_test Debug linux-clang +build_and_test Release linux-clang echo "Success" diff --git a/src/dsmr/fields.h b/src/dsmr/fields.h index fb2bf1b..7c5a856 100644 --- a/src/dsmr/fields.h +++ b/src/dsmr/fields.h @@ -55,7 +55,7 @@ struct TimestampField : StringField {}; // FixedField return the corresponding units for these values. struct FixedValue { operator float() const { return val(); } - float val() const { return _value / 1000.0; } + float val() const { return static_cast(_value) / 1000.0f; } uint32_t int_val() const { return _value; } uint32_t _value; @@ -143,21 +143,25 @@ template struct IntField : ParsedField { ParseResult parse(const char* str, const char* end) { ParseResult res = NumParser::parse(0, _unit, str, end); - if (!res.err) - static_cast(this)->val() = res.result; + if (!res.err) { + auto& dst = static_cast(this)->val(); + using Dst = std::remove_reference_t; + + // Narrow conversion. It is possible to loose data here + dst = static_cast(res.result); + } return res; } static const char* unit() { return _unit; } }; -// A RawField is not parsed, the entire value (including any -// parenthesis around it) is returned as a string. +// A RawField is not parsed, the entire value (including any parenthesis around it) is returned as a string. template struct RawField : ParsedField { ParseResult parse(const char* str, const char* end) { // Just copy the string verbatim value without any parsing - static_cast(this)->val().append(str, end - str); + static_cast(this)->val().append(str, static_cast(end - str)); return ParseResult().until(end); } }; diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index 4c43983..eabbff6 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -67,14 +67,14 @@ struct ParsedData : public T, ParsedData { // OBIS id of the line is passed, and this method recursively finds a // field with a matching id. If any, it calls it's parse method, which // parses the value and stores it in the field. - ParseResult parse_line(const ObisId& id, const char* str, const char* end) { - if (id == T::id) { + ParseResult parse_line(const ObisId& obisId, const char* str, const char* end) { + if (obisId == T::id) { if (T::present()) return ParseResult().fail("Duplicate field", str); T::present() = true; return T::parse(str, end); } - return ParsedData::parse_line(id, str, end); + return ParsedData::parse_line(obisId, str, end); } template @@ -102,7 +102,7 @@ struct StringParser { if (str_end == end) return res.fail("Missing )", str_end); - size_t len = str_end - str_start; + const auto& len = static_cast(str_end - str_start); if (len < min || len > max) return res.fail("Invalid string length", str_start); @@ -131,7 +131,7 @@ struct NumParser { if (*num_end < '0' || *num_end > '9') return res.fail(INVALID_NUMBER, num_end); value *= 10; - value += *num_end - '0'; + value += static_cast(*num_end - '0'); ++num_end; } @@ -144,7 +144,7 @@ struct NumParser { if (*num_end < '0' || *num_end > '9') return res.fail(INVALID_NUMBER, num_end); value *= 10; - value += *num_end - '0'; + value += static_cast(*num_end - '0'); ++num_end; } } @@ -189,10 +189,10 @@ struct ObisIdParser { char c = *res.next; if (c >= '0' && c <= '9') { - uint8_t digit = c - '0'; + const auto& digit = c - '0'; if (id.v[part] > 25 || (id.v[part] == 25 && digit > 5)) return res.fail("Obis ID has number over 255", res.next); - id.v[part] = id.v[part] * 10 + digit; + id.v[part] = static_cast(id.v[part] * 10 + digit); } else if (part == 0 && c == '-') { part++; } else if (part == 1 && c == ':') { diff --git a/src/dsmr/util.h b/src/dsmr/util.h index 35684f7..d09d6f5 100644 --- a/src/dsmr/util.h +++ b/src/dsmr/util.h @@ -60,13 +60,13 @@ struct ParseResult : public _ParseResult, T> { const char* err = nullptr; const char* ctx = nullptr; - ParseResult& fail(const char* err, const char* ctx = nullptr) { - this->err = err; - this->ctx = ctx; + ParseResult& fail(const char* error, const char* context = nullptr) { + this->err = error; + this->ctx = context; return *this; } - ParseResult& until(const char* next) { - this->next = next; + ParseResult& until(const char* nextToken) { + this->next = nextToken; return *this; } ParseResult() = default; @@ -91,10 +91,10 @@ struct ParseResult : public _ParseResult, T> { // We can now predict the context string length, so let String allocate // memory in advance - res.reserve((line_end - line_start) + 2 + (this->ctx - line_start) + 1 + 2); + res.reserve(static_cast((line_end - line_start) + 2 + (this->ctx - line_start) + 1 + 2)); // Write the line - res.append(line_start, line_end - line_start); + res.append(line_start, static_cast(line_end - line_start)); res += "\r\n"; diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp index 37bfaca..8afe8fd 100644 --- a/src/test/parser_include_test.cpp +++ b/src/test/parser_include_test.cpp @@ -10,5 +10,5 @@ using namespace fields; void SomeFunction() { const auto& msg = ""; ParsedData data; - const auto& res = P1Parser::parse(&data, msg, std::size(msg), true); + P1Parser::parse(&data, msg, std::size(msg), true); } diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index 215fa5e..be7ad81 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -16,35 +16,35 @@ struct Printer { }; TEST_CASE("Should parse all fields in the DSMR message correctly") { - const auto& dsmr_message = "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-3:0.2.8(40)\r\n" - "0-0:1.0.0(150117185916W)\r\n" - "0-0:96.1.1(0000000000000000000000000000000000)\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "1-0:1.8.2(000842.472*kWh)\r\n" - "1-0:2.8.1(000000.000*kWh)\r\n" - "1-0:2.8.2(000000.000*kWh)\r\n" - "0-0:96.14.0(0001)\r\n" - "1-0:1.7.0(00.333*kW)\r\n" - "1-0:2.7.0(00.000*kW)\r\n" - "0-0:17.0.0(999.9*kW)\r\n" - "0-0:96.3.10(1)\r\n" - "0-0:96.7.21(00008)\r\n" - "0-0:96.7.9(00007)\r\n" - "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" - "1-0:32.32.0(00000)\r\n" - "1-0:32.36.0(00000)\r\n" - "0-0:96.13.1()\r\n" - "0-0:96.13.0()\r\n" - "1-0:31.7.0(001*A)\r\n" - "1-0:21.7.0(00.332*kW)\r\n" - "1-0:22.7.0(00.000*kW)\r\n" - "0-1:24.1.0(003)\r\n" - "0-1:96.1.0(0000000000000000000000000000000000)\r\n" - "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" - "0-1:24.4.0(1)\r\n" - "!6f4A\r\n"; + const auto& msg = "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "1-0:1.8.2(000842.472*kWh)\r\n" + "1-0:2.8.1(000000.000*kWh)\r\n" + "1-0:2.8.2(000000.000*kWh)\r\n" + "0-0:96.14.0(0001)\r\n" + "1-0:1.7.0(00.333*kW)\r\n" + "1-0:2.7.0(00.000*kW)\r\n" + "0-0:17.0.0(999.9*kW)\r\n" + "0-0:96.3.10(1)\r\n" + "0-0:96.7.21(00008)\r\n" + "0-0:96.7.9(00007)\r\n" + "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" + "1-0:32.32.0(00000)\r\n" + "1-0:32.36.0(00000)\r\n" + "0-0:96.13.1()\r\n" + "0-0:96.13.0()\r\n" + "1-0:31.7.0(001*A)\r\n" + "1-0:21.7.0(00.332*kW)\r\n" + "1-0:22.7.0(00.000*kW)\r\n" + "0-1:24.1.0(003)\r\n" + "0-1:96.1.0(0000000000000000000000000000000000)\r\n" + "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" + "0-1:24.4.0(1)\r\n" + "!6f4A\r\n"; ParsedData< /* String */ identification, @@ -97,7 +97,7 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { /* TimestampedFixedValue */ water_delivered> data; - auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); + auto res = P1Parser::parse(&data, msg, std::size(msg), true); REQUIRE(res.err == nullptr); // Print all values @@ -110,11 +110,11 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { REQUIRE(data.equipment_id == "0000000000000000000000000000000000"); REQUIRE(data.energy_delivered_tariff1 == 671.578f); REQUIRE(data.energy_delivered_tariff2 == 842.472f); - REQUIRE(data.energy_returned_tariff1 == 0); - REQUIRE(data.energy_returned_tariff2 == 0); + REQUIRE(data.energy_returned_tariff1 == 0.0f); + REQUIRE(data.energy_returned_tariff2 == 0.0f); REQUIRE(data.electricity_tariff == "0001"); REQUIRE(data.power_delivered == 0.333f); - REQUIRE(data.power_returned == 0); + REQUIRE(data.power_returned == 0.0f); REQUIRE(data.electricity_threshold == 999.9f); REQUIRE(data.electricity_switch_position == 1); REQUIRE(data.electricity_failures == 8); @@ -124,9 +124,9 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { REQUIRE(data.electricity_swells_l1 == 0); REQUIRE(data.message_short.empty()); REQUIRE(data.message_long.empty()); - REQUIRE(data.current_l1 == 1); + REQUIRE(data.current_l1 == 1.0f); REQUIRE(data.power_delivered_l1 == 0.332f); - REQUIRE(data.power_returned_l1 == 0); + REQUIRE(data.power_returned_l1 == 0.0f); REQUIRE(data.gas_device_type == 3); REQUIRE(data.gas_equipment_id == "0000000000000000000000000000000000"); REQUIRE(data.gas_valve_position == 1); @@ -180,7 +180,7 @@ TEST_CASE("Should parse Wh-based integers for FixedField (fallback int_unit path /* FixedValue */ energy_delivered_lux> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); REQUIRE(data.energy_delivered_lux == 441.879f); // 441,879 Wh => 441.879 kWh REQUIRE(fields::energy_delivered_lux::unit() == std::string("kWh")); @@ -198,7 +198,7 @@ TEST_CASE("Should parse TimestampedFixedField for gas_delivered_be and expose ti /* TimestampedFixedValue */ gas_delivered_be> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); REQUIRE(data.gas_delivered_be == 12.345f); REQUIRE(data.gas_delivered_be.timestamp == "230101120000W"); @@ -215,7 +215,7 @@ TEST_CASE("Should take the last value with LastFixedField (capacity rate history /* FixedValue */ active_energy_import_maximum_demand_last_13_months> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.active_energy_import_maximum_demand_last_13_months == 4.329f); } @@ -231,7 +231,7 @@ TEST_CASE("Should detect duplicate fields") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Duplicate field"); } @@ -245,7 +245,7 @@ TEST_CASE("Should error on unknown field when unknown_error is true") { /* String */ identification> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/true, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/true, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Unknown field"); } @@ -260,7 +260,7 @@ TEST_CASE("Should report OBIS ID numbers over 255") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Obis ID has number over 255"); } @@ -275,7 +275,7 @@ TEST_CASE("Should validate string length bounds (p1_version too short)") { /* String */ p1_version> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Invalid string length"); } @@ -290,7 +290,7 @@ TEST_CASE("Should validate units for numeric fields") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Invalid unit"); } @@ -305,7 +305,7 @@ TEST_CASE("Should report missing closing parenthesis for StringField") { /* String */ p1_version> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Missing )"); } @@ -320,7 +320,7 @@ TEST_CASE("Should compute FixedField with decimals and millivolt int_unit correc /* FixedValue */ voltage_l1> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.voltage_l1 == 230.1f); } @@ -336,7 +336,7 @@ TEST_CASE("all_present() should reflect presence of all requested fields") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.all_present()); } @@ -350,7 +350,7 @@ TEST_CASE("all_present() should reflect presence of all requested fields") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE_FALSE(data.all_present()); } } @@ -366,7 +366,7 @@ TEST_CASE("Should report last dataline not CRLF terminated") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Last dataline not CRLF terminated"); } @@ -381,7 +381,7 @@ TEST_CASE("Should report an error if checksum is not found") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "No checksum found"); } @@ -438,7 +438,7 @@ TEST_CASE("Doesn't crash for a partial checksum") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "No checksum found"); } @@ -452,7 +452,7 @@ TEST_CASE("Doesn't crash for a packet that doesn't end with '!' symbol") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "Data should end with !"); } @@ -461,7 +461,7 @@ TEST_CASE("Trailing characters on data line") { "1-0:1.7.0(00.123*kW) trailing\r\n" "!\r\n"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), false, false); REQUIRE(std::string(res.err) == "Trailing characters on data line"); } @@ -479,7 +479,7 @@ TEST_CASE("Missing unit when required") { "1-0:1.7.0(00.123)\r\n" "!\r\n"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), false, false); REQUIRE(std::string(res.err) == "Missing unit"); } @@ -488,7 +488,7 @@ TEST_CASE("Unit present when not expected") { "0-0:96.7.21(00008*s)\r\n" "!\r\n"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), false, false); REQUIRE(std::string(res.err) == "Extra data"); } @@ -503,7 +503,7 @@ TEST_CASE("Malformed packet that starts with ')'") { /* String */ p1_version> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Missing ("); } @@ -518,7 +518,7 @@ TEST_CASE("Non-digit in numeric part") { /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Invalid number"); } @@ -529,7 +529,7 @@ TEST_CASE("OBIS id empty line") { "!\r\n"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "OBIS id Empty"); } @@ -540,7 +540,7 @@ TEST_CASE("Accepts LF-only line endings") { "!\n"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.power_delivered == 0.123f); } @@ -551,7 +551,7 @@ TEST_CASE("Unit matching is case-insensitive") { "!\r\n"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.energy_delivered_tariff1 == 1.000f); } @@ -562,7 +562,7 @@ TEST_CASE("Numeric without decimals is accepted (auto-padded)") { "!"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); REQUIRE(data.power_delivered == 1.0f); } @@ -574,6 +574,6 @@ TEST_CASE("Can parse a dataline if it has a break in the middle") { "!"; ParsedData data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.gas_delivered_text == "(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)\r\n(00124.477)"); } From 1185bfcfe7cb2efb71d6542fecf169fceede8f6f Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Fri, 12 Sep 2025 22:11:23 +0200 Subject: [PATCH 08/25] improve handling of the CRLF in the middle of the data line --- src/dsmr/parser.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index eabbff6..6243545 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -352,7 +352,7 @@ struct P1Parser { // Workaround for https://github.com/matthijskooijman/arduino-dsmr/issues/22 // DSMR v3 allows CRLF in the middle of a data line - const auto& isBreakInTheMiddleOfTheDataLine = *(line_end + 1) == '(' || *(line_end + 2) == '('; + const auto& isBreakInTheMiddleOfTheDataLine = (end - line_end > 2) && (line_end[1] == '(' || line_end[2] == '('); if (!isBreakInTheMiddleOfTheDataLine) { ParseResult tmp = parse_line(data, line_start, line_end, unknown_error); if (tmp.err) From 192afbfad44e28429bfd9c88911092ea6e60206e Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 15 Sep 2025 02:56:19 +0200 Subject: [PATCH 09/25] * Add PacketAccumulator class. * Add usage example. * Improve Readme. --- CMakeLists.txt | 2 +- README.md | 84 +++++++++ src/dsmr/packet_accumulator.h | 181 +++++++++++++++++++ src/dsmr/util.h | 14 ++ src/test/example_test.cpp | 65 +++++++ src/test/packet_accumulator_include_test.cpp | 8 + src/test/packet_accumulator_test.cpp | 121 +++++++++++++ src/test/parser_include_test.cpp | 2 +- src/test/parser_test.cpp | 1 - 9 files changed, 475 insertions(+), 3 deletions(-) create mode 100644 src/dsmr/packet_accumulator.h create mode 100644 src/test/example_test.cpp create mode 100644 src/test/packet_accumulator_include_test.cpp create mode 100644 src/test/packet_accumulator_test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index cbca00f..4b64d04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ include(${cmake_template_SOURCE_DIR}/cmake/Sanitizers.cmake) file(GLOB_RECURSE arduino_dsmr_test_src_files CONFIGURE_DEPENDS "src/*.h" "src/*.cpp") add_executable(arduino_dsmr_test ${arduino_dsmr_test_src_files}) target_include_directories(arduino_dsmr_test PRIVATE ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/doctest) -target_compile_features(arduino_dsmr_test PUBLIC cxx_std_17) +target_compile_features(arduino_dsmr_test PUBLIC cxx_std_20) # enable warnings add_library(arduino_dsmr_test_warnings INTERFACE) diff --git a/README.md b/README.md index 1fbbd31..3c329c3 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,90 @@ The main goal is to make the parser not depend on Arduino framework and be usabl # Details For more details about the parser and DSMR please refer to original [README.md](https://github.com/matthijskooijman/arduino-dsmr/blob/master/README.md) from matthijskooijman +# How to use +## General usage +The library is header only. Add the `src/dsmr` folder to your project. + +## Usage from PlatformIO +You can add the library to `platformio.ini`: +``` +lib_deps = + ArduinoDSMR=https://github.com/PolarGoose/arduino-dsmr-make-work-on-Windows-and-Linux.git# +``` + +# Examples +## Examples how to use the parser +[minimal_parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/minimal_parse/minimal_parse.ino) +[parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/parse/parse.ino) + +## Complete example +``` +#include "dsmr/fields.h" +#include "dsmr/packet_accumulator.h" +#include "dsmr/parser.h" +#include + +using namespace dsmr; +using namespace fields; + +void main() { + const auto& data_from_p1_port = "garbage before" + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "!60e5" + "garbage after"; + + // Specify the fields you want to parse. + // Full list of available fields is in fields.h + ParsedData< + /* String */ identification, + /* String */ p1_version, + /* String */ timestamp, + /* String */ equipment_id, + /* FixedValue */ energy_delivered_tariff1> + data; + + // This class is used to receive the message from the P1 port. + // It retrieves bytes from the UART and finds a DSMR message and optionally checks the CRC. + PacketAccumulator accumulator(/* bufferSize */ 4000, /* check_crc */ true); + + // First step is to get the full message from the P1 port. + // In this example, we go through the bytes from the message above. + // In a real application, you need to read the bytes from the UART one byte at a time. + for (const auto& byte : data_from_p1_port) { + // feed the byte to the accumulator + auto res = accumulator.process_byte(byte); + + // During receiving, errors may occur, such as CRC mismatches. + // You can optionally log these errors, or ignore them. + if (res.error()) { + printf("Error during receiving a packet: %s", to_string(*res.error())); + } + + // When a full packet is received, the packet() method will return it. + // The packet starts with '/' and ends with the '!'. + // The CRC is not included. + if (res.packet()) { + // Parse the received packet. + const auto packet = *res.packet(); + // Specify `check_crc` as false, since the accumulator already checked the CRC and didn't include it in the packet + P1Parser::parse(&data, packet.data(), packet.size(), /* unknown_error */ false, /* check_crc */ false); + + // Now you can use the parsed data. + printf("Identification: %s\n", data.identification.c_str()); + printf("P1 version: %s\n", data.p1_version.c_str()); + printf("Timestamp: %s\n", data.timestamp.c_str()); + printf("Equipment ID: %s\n", data.equipment_id.c_str()); + printf("Energy delivered tariff 1: %.3f\n", static_cast(data.energy_delivered_tariff1.val())); + } + } +} +``` + # History behind this fork [matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. Later, [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) fork was created to make the code work with more DSMR devices. diff --git a/src/dsmr/packet_accumulator.h b/src/dsmr/packet_accumulator.h new file mode 100644 index 0000000..f5f9e67 --- /dev/null +++ b/src/dsmr/packet_accumulator.h @@ -0,0 +1,181 @@ +#pragma once +#include "util.h" +#include +#include +#include +#include + +namespace dsmr { + +class DsmrPacketBuffer : NonCopyable { + friend class PacketAccumulator; + + std::vector buffer; + std::size_t packetSize = 0; + + explicit DsmrPacketBuffer(std::size_t bufferSize) : buffer(bufferSize) {} + + std::string_view packet() const { return std::string_view(buffer.data(), packetSize); } + + void add(char byte) { + buffer[packetSize] = byte; + packetSize++; + } + + bool has_space() const { return packetSize < buffer.size(); } + + void reset() { packetSize = 0; } + + uint16_t calculate_crc16() const { + uint16_t crc = 0; + for (std::size_t i = 0; i < packetSize; ++i) { + crc ^= static_cast(buffer[i]); + for (std::size_t bit = 0; bit < 8; bit++) { + if (crc & 1) + crc = (crc >> 1) ^ 0xa001; + else + crc = (crc >> 1); + } + } + return crc; + } +}; + +class CrcAccumulator { + friend class PacketAccumulator; + + uint16_t crc = 0; + size_t amount_of_crc_nibbles = 0; + + bool add_to_crc(char byte) { + if (byte >= '0' && byte <= '9') { + byte = byte - '0'; + } else if (byte >= 'A' && byte <= 'F') { + byte = static_cast(byte - 'A' + 10); + } else if (byte >= 'a' && byte <= 'f') { + byte = static_cast(byte - 'a' + 10); + } else { + return false; + } + + crc = static_cast((crc << 4) | (byte & 0xF)); + amount_of_crc_nibbles++; + return true; + } + + bool has_full_crc() const { return amount_of_crc_nibbles == 4; } +}; + +enum class PacketAccumulatorError { + BufferOverflow, + PacketStartSymbolInPacket, + IncorrectCrcCharacter, + CrcMismatch, +}; + +inline const char* to_string(const PacketAccumulatorError error) { + switch (error) { + case PacketAccumulatorError::BufferOverflow: + return "BufferOverflow"; + case PacketAccumulatorError::PacketStartSymbolInPacket: + return "PacketStartSymbolInPacket"; + case PacketAccumulatorError::IncorrectCrcCharacter: + return "IncorrectCrcCharacter"; + case PacketAccumulatorError::CrcMismatch: + return "CrcMismatch"; + } + + return "Unknown error"; +} + +class PacketAccumulatorResult { + friend class PacketAccumulator; + + std::optional _packet; + std::optional _error; + + PacketAccumulatorResult() = default; + PacketAccumulatorResult(std::string_view packet) : _packet(packet) {} + PacketAccumulatorResult(PacketAccumulatorError error) : _error(error) {} + +public: + auto packet() const { return _packet; } + auto error() const { return _error; } +}; + +class PacketAccumulator : NonCopyable { + enum class State { WaitingForPacketStartSymbol, WaitingForPacketEndSymbol, WaitingForCrc }; + State _state = State::WaitingForPacketStartSymbol; + DsmrPacketBuffer _buf; + CrcAccumulator _crc_accumulator; + bool _check_crc; + +public: + PacketAccumulator(size_t bufferSize, bool check_crc) : _buf(bufferSize), _check_crc(check_crc) {} + + PacketAccumulatorResult process_byte(const char byte) { + if (!_buf.has_space()) { + _buf.reset(); + _state = State::WaitingForPacketStartSymbol; + if (byte != '/') { + return PacketAccumulatorError::BufferOverflow; + } + } + + if (byte == '/') { + _buf.reset(); + _buf.add(byte); + const auto prev_state = _state; + _state = State::WaitingForPacketEndSymbol; + + if (prev_state == State::WaitingForPacketEndSymbol || prev_state == State::WaitingForCrc) { + return PacketAccumulatorError::PacketStartSymbolInPacket; + } + return {}; + } + + switch (_state) { + case State::WaitingForPacketStartSymbol: + return {}; + + case State::WaitingForPacketEndSymbol: + _buf.add(byte); + + if (byte != '!') { + return {}; + } + + if (!_check_crc) { + _state = State::WaitingForPacketStartSymbol; + return PacketAccumulatorResult(_buf.packet()); + } + + _state = State::WaitingForCrc; + _crc_accumulator = CrcAccumulator(); + return {}; + + case State::WaitingForCrc: + if (!_crc_accumulator.add_to_crc(byte)) { + _state = State::WaitingForPacketStartSymbol; + return PacketAccumulatorError::IncorrectCrcCharacter; + } + + if (!_crc_accumulator.has_full_crc()) { + return {}; + } + + _state = State::WaitingForPacketStartSymbol; + + if (_crc_accumulator.crc == _buf.calculate_crc16()) { + return _buf.packet(); + } + + return PacketAccumulatorError::CrcMismatch; + } + + // unreachable + return {}; + } +}; + +} diff --git a/src/dsmr/util.h b/src/dsmr/util.h index d09d6f5..000bf27 100644 --- a/src/dsmr/util.h +++ b/src/dsmr/util.h @@ -8,6 +8,20 @@ namespace dsmr { +class NonCopyable { +protected: + NonCopyable() = default; + ~NonCopyable() = default; + +public: + NonCopyable(NonCopyable&&) = default; + NonCopyable& operator=(NonCopyable&&) = default; + + NonCopyable(const NonCopyable&) = delete; + NonCopyable& operator=(const NonCopyable&) = delete; +}; + + // The ParseResult class wraps the result of a parse function. The type // of the result is passed as a template parameter and can be void to // not return any result. diff --git a/src/test/example_test.cpp b/src/test/example_test.cpp new file mode 100644 index 0000000..df20744 --- /dev/null +++ b/src/test/example_test.cpp @@ -0,0 +1,65 @@ +#include "dsmr/fields.h" +#include "dsmr/packet_accumulator.h" +#include "dsmr/parser.h" +#include +#include + +using namespace dsmr; +using namespace fields; + +TEST_CASE("Complete example") { + const auto& data_from_p1_port = "garbage before" + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "!60e5" + "garbage after"; + + // Specify the fields you want to parse. + // Full list of available fields is in fields.h + ParsedData< + /* String */ identification, + /* String */ p1_version, + /* String */ timestamp, + /* String */ equipment_id, + /* FixedValue */ energy_delivered_tariff1> + data; + + // This class is used to receive the message from the P1 port. + // It retrieves bytes from the UART and finds a DSMR message and optionally checks the CRC. + PacketAccumulator accumulator(/* bufferSize */ 4000, /* check_crc */ true); + + // First step is to get the full message from the P1 port. + // In this example, we go through the bytes from the message above. + // In a real application, you need to read the bytes from the UART one byte at a time. + for (const auto& byte : data_from_p1_port) { + // feed the byte to the accumulator + auto res = accumulator.process_byte(byte); + + // During receiving, errors may occur, such as CRC mismatches. + // You can optionally log these errors, or ignore them. + if (res.error()) { + printf("Error during receiving a packet: %s", to_string(*res.error())); + } + + // When a full packet is received, the packet() method will return it. + // The packet starts with '/' and ends with the '!'. + // The CRC is not included. + if (res.packet()) { + // Parse the received packet. + const auto packet = *res.packet(); + // Specify `check_crc` as false, since the accumulator already checked the CRC and didn't include it in the packet + P1Parser::parse(&data, packet.data(), packet.size(), /* unknown_error */ false, /* check_crc */ false); + + // Now you can use the parsed data. + printf("Identification: %s\n", data.identification.c_str()); + printf("P1 version: %s\n", data.p1_version.c_str()); + printf("Timestamp: %s\n", data.timestamp.c_str()); + printf("Equipment ID: %s\n", data.equipment_id.c_str()); + printf("Energy delivered tariff 1: %.3f\n", static_cast(data.energy_delivered_tariff1.val())); + } + } +} diff --git a/src/test/packet_accumulator_include_test.cpp b/src/test/packet_accumulator_include_test.cpp new file mode 100644 index 0000000..e6c2d27 --- /dev/null +++ b/src/test/packet_accumulator_include_test.cpp @@ -0,0 +1,8 @@ +// This code tests that the packet_accumulator header has all necessary dependencies included in its headers. +// We check that the code compiles. + +#include "dsmr/packet_accumulator.h" + +void PacketAccumulator_some_function() { + dsmr::PacketAccumulator({}, true); +} diff --git a/src/test/packet_accumulator_test.cpp b/src/test/packet_accumulator_test.cpp new file mode 100644 index 0000000..b49d3c7 --- /dev/null +++ b/src/test/packet_accumulator_test.cpp @@ -0,0 +1,121 @@ +#include +#include +#include + +TEST_CASE("Packet with correct CRC lower case") { + const auto& msg = "/some !a3D4"; + + auto accumulator = dsmr::PacketAccumulator(1000, true); + for (const auto& byte : msg) { + auto res = accumulator.process_byte(byte); + REQUIRE(res.error().has_value() == false); + + if (res.packet()) { + REQUIRE(std::string(*res.packet()) == std::string(msg, std::size(msg) - 5)); + return; + } + } + + REQUIRE(false); +} + +TEST_CASE("Packet with incorrect CRC") { + const auto& msg = "/some data!0000"; + + dsmr::PacketAccumulator accumulator(1000, true); + for (const auto& byte : msg) { + auto packet = accumulator.process_byte(byte); + if (packet.error()) { + REQUIRE(*packet.error() == dsmr::PacketAccumulatorError::CrcMismatch); + return; + } + } + + REQUIRE(false); +} + +TEST_CASE("Packet with incorrect CRC symbol") { + const auto& msg = "/some data!G000"; + + dsmr::PacketAccumulator accumulator(1000, true); + for (const auto& byte : msg) { + auto packet = accumulator.process_byte(byte); + if (packet.error()) { + REQUIRE(*packet.error() == dsmr::PacketAccumulatorError::IncorrectCrcCharacter); + return; + } + } + + REQUIRE(false); +} + +TEST_CASE("Packet without CRC") { + const auto& msg = "/some data!"; + + dsmr::PacketAccumulator accumulator(1000, false); + for (const auto& byte : msg) { + auto res = accumulator.process_byte(byte); + REQUIRE(res.error().has_value() == false); + + if (res.packet()) { + REQUIRE(std::string(*res.packet()) == std::string(msg, std::size(msg) - 1)); + return; + } + } +} + +TEST_CASE("Parse data with different packets. CRC check") { + const auto& msg = "garbage /some !a3D4" // correct package + "garbage /some !a3D3" // CRC mismatch + "garbage /so/some !a3D4" // Packet start symbol '/' in the middle of the packet + "garbage /some !a3G4" // Incorrect CRC character + "/some !a3D4" // correct package + "/garbage garbage garbage" // buffer overflow + "/some !a3D4"; // correct package + + std::vector received_packets; + std::vector occurred_errors; + + dsmr::PacketAccumulator accumulator(15, true); + for (const auto& byte : msg) { + auto res = accumulator.process_byte(byte); + if (res.error()) { + occurred_errors.push_back(*res.error()); + } + + if (res.packet()) { + received_packets.push_back(std::string(*res.packet())); + } + } + + using enum dsmr::PacketAccumulatorError; + REQUIRE(occurred_errors == std::vector{CrcMismatch, PacketStartSymbolInPacket, IncorrectCrcCharacter, BufferOverflow}); + REQUIRE(received_packets == std::vector(4, "/some !")); +} + +TEST_CASE("Parse data with different packets. No CRC check") { + const auto& msg = "garbage /some !" // correct package + "garbage /so/some !" // Packet start symbol '/' in the middle of the packet + "/some !" // correct package + "/garbage garbage garbage" // buffer overflow + "/some !"; // correct package + + std::vector received_packets; + std::vector occurred_errors; + + dsmr::PacketAccumulator accumulator(15, false); + for (const auto& byte : msg) { + auto res = accumulator.process_byte(byte); + if (res.error()) { + occurred_errors.push_back(*res.error()); + } + + if (res.packet()) { + received_packets.push_back(std::string(*res.packet())); + } + } + + using enum dsmr::PacketAccumulatorError; + REQUIRE(occurred_errors == std::vector{PacketStartSymbolInPacket, BufferOverflow}); + REQUIRE(received_packets == std::vector(4, "/some !")); +} diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp index 8afe8fd..2daa4b4 100644 --- a/src/test/parser_include_test.cpp +++ b/src/test/parser_include_test.cpp @@ -7,7 +7,7 @@ using namespace dsmr; using namespace fields; -void SomeFunction() { +void P1Parser_some_function() { const auto& msg = ""; ParsedData data; P1Parser::parse(&data, msg, std::size(msg), true); diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index be7ad81..e42aed7 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -155,7 +155,6 @@ TEST_CASE("Should report an error if the crc of a package is incorrect") { "1-0:.8.1(000671.578*kWh)\r\n" "1-0:1.7.0(00.318*kW)\r\n" "!1E1D\r\n"; - ParsedData< /* String */ identification, /* FixedValue */ power_delivered> From 6a678e6728c8520940c6d199665d546c371ebe0b Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:55:50 +0200 Subject: [PATCH 10/25] * Allow parser to parse multi-line strings: 0-0:96.13.0(303132333435 30313233343) * Workaround for https://github.com/matthijskooijman/arduino-dsmr/issues/50 Allow missing units if the value is 0: 0-1:24.2.1(632525252525S)(00000.000) --- README.md | 10 +++- src/dsmr/packet_accumulator.h | 2 +- src/dsmr/parser.h | 46 ++++++++++++++--- src/dsmr/util.h | 1 - src/test/example_test.cpp | 10 +++- src/test/packet_accumulator_include_test.cpp | 4 +- src/test/parser_test.cpp | 54 +++++++++++++++++++- 7 files changed, 110 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 3c329c3..90daaac 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,14 @@ void main() { "0-0:96.1.1(0000000000000000000000000000000000)\r\n" "1-0:1.8.1(000671.578*kWh)\r\n" "!60e5" - "garbage after"; + "garbage after" + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "!60e5"; // Specify the fields you want to parse. // Full list of available fields is in fields.h @@ -61,6 +68,7 @@ void main() { // This class is used to receive the message from the P1 port. // It retrieves bytes from the UART and finds a DSMR message and optionally checks the CRC. + // You only need to create this class once. PacketAccumulator accumulator(/* bufferSize */ 4000, /* check_crc */ true); // First step is to get the full message from the P1 port. diff --git a/src/dsmr/packet_accumulator.h b/src/dsmr/packet_accumulator.h index f5f9e67..02cd645 100644 --- a/src/dsmr/packet_accumulator.h +++ b/src/dsmr/packet_accumulator.h @@ -84,7 +84,7 @@ inline const char* to_string(const PacketAccumulatorError error) { case PacketAccumulatorError::CrcMismatch: return "CrcMismatch"; } - + return "Unknown error"; } diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index 6243545..fb418e2 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -153,9 +153,15 @@ struct NumParser { while (max_decimals--) value *= 10; + // Workaround for https://github.com/matthijskooijman/arduino-dsmr/issues/50 + // If value is 0, then we allow missing unit. + if (unit && *unit && (num_end >= end || (*num_end != '*' && *num_end != '.')) && value == 0) { + num_end = std::find(num_end, end, ')'); + } + // If a unit was passed, check that the unit in the messages // messages the unit passed. - if (unit && *unit) { + else if (unit && *unit) { if (num_end >= end || *num_end != '*') return res.fail("Missing unit", num_end); const char* unit_start = ++num_end; // skip * @@ -316,7 +322,8 @@ struct P1Parser { template static ParseResult parse_data(ParsedData* data, const char* str, const char* end, bool unknown_error = false) { // Split into lines and parse those - const char *line_end = str, *line_start = str; + const char* line_end = str; + const char* line_start = str; // Parse ID line while (line_end < end) { @@ -347,20 +354,43 @@ struct P1Parser { } // Parse data lines + // We need to track brackets to handle cases like: + // 0-0:96.13.0(303132333435 + // 30313233343) + bool open_bracket_found = false; while (line_end < end) { - if (*line_end == '\r' || *line_end == '\n') { + char c = *line_end; + + if (c == '(') { + if (open_bracket_found) { + return ParseResult().fail("Unexpected '(' symbol", line_end); + } + open_bracket_found = true; + } else if (c == ')') { + if (!open_bracket_found) { + return ParseResult().fail("Unexpected ')' symbol", line_end); + } + open_bracket_found = false; + } else if (c == '\r' || c == '\n') { - // Workaround for https://github.com/matthijskooijman/arduino-dsmr/issues/22 - // DSMR v3 allows CRLF in the middle of a data line - const auto& isBreakInTheMiddleOfTheDataLine = (end - line_end > 2) && (line_end[1] == '(' || line_end[2] == '('); - if (!isBreakInTheMiddleOfTheDataLine) { + // handles case like: + // 0-1:24.3.0(120517020000)(08)(60)(1)(0-1:24.2.1)(m3) + // (00124.477) + const auto& next_part_of_the_data_line_on_next_line = (end - line_end > 2) && (line_end[1] == '(' || line_end[2] == '('); + + const auto& break_in_the_middle_of_the_data_line = open_bracket_found || next_part_of_the_data_line_on_next_line; + + if (!break_in_the_middle_of_the_data_line) { + // End of logical line -> parse it ParseResult tmp = parse_line(data, line_start, line_end, unknown_error); if (tmp.err) return tmp; + line_start = line_end + 1; } } - line_end++; + + ++line_end; } if (line_end != line_start) diff --git a/src/dsmr/util.h b/src/dsmr/util.h index 000bf27..dd7b619 100644 --- a/src/dsmr/util.h +++ b/src/dsmr/util.h @@ -21,7 +21,6 @@ class NonCopyable { NonCopyable& operator=(const NonCopyable&) = delete; }; - // The ParseResult class wraps the result of a parse function. The type // of the result is passed as a template parameter and can be void to // not return any result. diff --git a/src/test/example_test.cpp b/src/test/example_test.cpp index df20744..8da5904 100644 --- a/src/test/example_test.cpp +++ b/src/test/example_test.cpp @@ -16,7 +16,14 @@ TEST_CASE("Complete example") { "0-0:96.1.1(0000000000000000000000000000000000)\r\n" "1-0:1.8.1(000671.578*kWh)\r\n" "!60e5" - "garbage after"; + "garbage after" + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "!60e5"; // Specify the fields you want to parse. // Full list of available fields is in fields.h @@ -30,6 +37,7 @@ TEST_CASE("Complete example") { // This class is used to receive the message from the P1 port. // It retrieves bytes from the UART and finds a DSMR message and optionally checks the CRC. + // You only need to create this class once. PacketAccumulator accumulator(/* bufferSize */ 4000, /* check_crc */ true); // First step is to get the full message from the P1 port. diff --git a/src/test/packet_accumulator_include_test.cpp b/src/test/packet_accumulator_include_test.cpp index e6c2d27..ab8e78d 100644 --- a/src/test/packet_accumulator_include_test.cpp +++ b/src/test/packet_accumulator_include_test.cpp @@ -3,6 +3,4 @@ #include "dsmr/packet_accumulator.h" -void PacketAccumulator_some_function() { - dsmr::PacketAccumulator({}, true); -} +void PacketAccumulator_some_function() { dsmr::PacketAccumulator({}, true); } diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index e42aed7..ac98daf 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -278,6 +278,21 @@ TEST_CASE("Should validate string length bounds (p1_version too short)") { REQUIRE(std::string(res.err) == "Invalid string length"); } +TEST_CASE("Should validate string length bounds (p1_version too long)") { + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8(123)\r\n" // p1_version expects 2 chars + "!\r\n"; + + ParsedData< + /* String */ identification, + /* String */ p1_version> + data; + + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Invalid string length"); +} + TEST_CASE("Should validate units for numeric fields") { const auto& msg = "/AAA5MTR\r\n" "\r\n" @@ -305,7 +320,7 @@ TEST_CASE("Should report missing closing parenthesis for StringField") { data; const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); - REQUIRE(std::string(res.err) == "Missing )"); + REQUIRE(std::string(res.err) == "Last dataline not CRLF terminated"); } TEST_CASE("Should compute FixedField with decimals and millivolt int_unit correctly") { @@ -503,7 +518,7 @@ TEST_CASE("Malformed packet that starts with ')'") { data; const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); - REQUIRE(std::string(res.err) == "Missing ("); + REQUIRE(std::string(res.err) == "Unexpected ')' symbol"); } TEST_CASE("Non-digit in numeric part") { @@ -570,9 +585,44 @@ TEST_CASE("Can parse a dataline if it has a break in the middle") { const auto& msg = "/KMP5 ZABF000000000000\r\n" "0-1:24.3.0(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)\r\n" "(00124.477)\r\n" + "0-0:96.13.0(303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n" + "303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n" + "303132333435363738393A3B3C3D3E3F)\r\n" "!"; ParsedData data; P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.gas_delivered_text == "(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)\r\n(00124.477)"); + REQUIRE(data.message_long == + "303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n303132333435363738393A3B3C3D3E3F"); +} + +TEST_CASE("Can parse a 0 value without a unit") { + const auto& msg = "/KMP5 ZABF000000000000\r\n" + "0-1:24.2.1(000101000000W)(00000000.0000)\r\n" + "!"; + ParsedData data; + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(res.err == nullptr); + REQUIRE(data.gas_delivered == 0.0f); +} + +TEST_CASE("Whitespace after OBIS ID") { + const auto& msg = "/KMP5 ZABF000000000000\r\n" + "0-1:24.2.1 (000101000000W)(00000000.0000)\r\n" + "!"; + ParsedData data; + const auto& res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Missing ("); +} + +TEST_CASE("Use integer fallback unit") { + const auto& msg = "/KMP5 ZABF000000000000\r\n" + "0-1:24.2.1(230101120000W)(00012*dm3)\r\n" + "1-0:14.7.0(50*Hz)\r\n" + "!"; + ParsedData data; + P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.gas_delivered == 0.012f); + REQUIRE(data.frequency == 0.05f); } From feab2f0927bdd4a253ca02c64e398fde07aa1f41 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:14:11 +0200 Subject: [PATCH 11/25] Improve library.json --- library.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/library.json b/library.json index a59f240..6da62aa 100644 --- a/library.json +++ b/library.json @@ -1,9 +1,12 @@ { - "name": "Arduino DSMR", + "name": "arduino-dsmr-2", "version": "1.0", - "description": "Parser and utilities for Dutch Smart Meters (Implementing DSMR)", + "description": "Fork of arduino-dsmr. The library doesn't depend on Arduino framework and has several bug fixes and code quality improvements.", "keywords": "dsmr", - "repository": { "type": "git", "url": "https://github.com/PolarGoose/arduino-dsmr-make-work-on-Windows-and-Linux" }, + "repository": { + "type": "git", + "url": "https://github.com/PolarGoose/arduino-dsmr-2" + }, "license": "MIT", "export": { "include": [ "src/dsmr/*.h" ] } } From 6e5be5fb73f82b5b5225554240f79edc5a0c6a72 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 16 Sep 2025 01:14:33 +0200 Subject: [PATCH 12/25] Merge pull request https://github.com/glmnet/arduino-dsmr/pull/25 Add missing "kvar" units. --- src/dsmr/fields.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/dsmr/fields.h b/src/dsmr/fields.h index 7c5a856..4322733 100644 --- a/src/dsmr/fields.h +++ b/src/dsmr/fields.h @@ -184,7 +184,9 @@ struct units { static inline constexpr char GJ[] = "GJ"; static inline constexpr char MJ[] = "MJ"; static inline constexpr char kvar[] = "kvar"; + static inline constexpr char var[] = "var"; static inline constexpr char kvarh[] = "kvarh"; + static inline constexpr char varh[] = "varh"; static inline constexpr char kVA[] = "kVA"; static inline constexpr char VA[] = "VA"; static inline constexpr char s[] = "s"; @@ -398,23 +400,19 @@ DEFINE_FIELD(current_sum, FixedValue, ObisId(1, 0, 90, 7, 0), FixedField, units: // LUX and Lithuania -// TODO: by IEC 62056 unit's shoudl be kvar, safe to change? +// IEC 62056 define the unit of reactive power as kvar. Some meters e.g. L+G E360 uses mixed case kVar // Instantaneous reactive power L1 (+Q) in W resolution -DEFINE_FIELD(reactive_power_delivered_l1, FixedValue, ObisId(1, 0, 23, 7, 0), FixedField, units::none, units::none); +DEFINE_FIELD(reactive_power_delivered_l1, FixedValue, ObisId(1, 0, 23, 7, 0), FixedField, units::kvar, units::var); // Instantaneous reactive power L2 (+Q) in W resolution -DEFINE_FIELD(reactive_power_delivered_l2, FixedValue, ObisId(1, 0, 43, 7, 0), FixedField, units::none, units::none); +DEFINE_FIELD(reactive_power_delivered_l2, FixedValue, ObisId(1, 0, 43, 7, 0), FixedField, units::kvar, units::var); // Instantaneous reactive power L3 (+Q) in W resolution -DEFINE_FIELD(reactive_power_delivered_l3, FixedValue, ObisId(1, 0, 63, 7, 0), FixedField, units::none, units::none); - -// LUX and Lithuania - -// TODO: by IEC 62056 unit's shoudl be kvar, safe to change? +DEFINE_FIELD(reactive_power_delivered_l3, FixedValue, ObisId(1, 0, 63, 7, 0), FixedField, units::kvar, units::var); // Instantaneous reactive power L1 (-Q) in W resolution -DEFINE_FIELD(reactive_power_returned_l1, FixedValue, ObisId(1, 0, 24, 7, 0), FixedField, units::none, units::none); +DEFINE_FIELD(reactive_power_returned_l1, FixedValue, ObisId(1, 0, 24, 7, 0), FixedField, units::kvar, units::var); // Instantaneous reactive power L2 (-Q) in W resolution -DEFINE_FIELD(reactive_power_returned_l2, FixedValue, ObisId(1, 0, 44, 7, 0), FixedField, units::none, units::none); +DEFINE_FIELD(reactive_power_returned_l2, FixedValue, ObisId(1, 0, 44, 7, 0), FixedField, units::kvar, units::var); // Instantaneous reactive power L3 (-Q) in W resolution -DEFINE_FIELD(reactive_power_returned_l3, FixedValue, ObisId(1, 0, 64, 7, 0), FixedField, units::none, units::none); +DEFINE_FIELD(reactive_power_returned_l3, FixedValue, ObisId(1, 0, 64, 7, 0), FixedField, units::kvar, units::var); // Apparent instantaneous power (+S) in kVA resolution DEFINE_FIELD(apparent_delivery_power, FixedValue, ObisId(1, 0, 9, 7, 0), FixedField, units::kVA, units::VA); From 8811c32dc6e156c695a6fadc56e8c0f27ad4bc42 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 16 Sep 2025 01:20:55 +0200 Subject: [PATCH 13/25] Merge pull request https://github.com/glmnet/arduino-dsmr/pull/21 Fix use varh int units for kvarh float values. --- src/dsmr/fields.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/dsmr/fields.h b/src/dsmr/fields.h index 4322733..f12404e 100644 --- a/src/dsmr/fields.h +++ b/src/dsmr/fields.h @@ -247,25 +247,25 @@ DEFINE_FIELD(energy_returned_tariff3, FixedValue, ObisId(1, 0, 2, 8, 3), FixedFi DEFINE_FIELD(energy_returned_tariff4, FixedValue, ObisId(1, 0, 2, 8, 4), FixedField, units::kWh, units::Wh); // Extra fields used for Luxembourg and Lithuania -DEFINE_FIELD(total_imported_energy, FixedValue, ObisId(1, 0, 3, 8, 0), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(total_imported_energy, FixedValue, ObisId(1, 0, 3, 8, 0), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered to client (Tariff 1) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_delivered_tariff1, FixedValue, ObisId(1, 0, 3, 8, 1), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_delivered_tariff1, FixedValue, ObisId(1, 0, 3, 8, 1), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered to client (Tariff 2) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_delivered_tariff2, FixedValue, ObisId(1, 0, 3, 8, 2), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_delivered_tariff2, FixedValue, ObisId(1, 0, 3, 8, 2), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered to client (Tariff 3) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_delivered_tariff3, FixedValue, ObisId(1, 0, 3, 8, 3), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_delivered_tariff3, FixedValue, ObisId(1, 0, 3, 8, 3), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered to client (Tariff 4) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_delivered_tariff4, FixedValue, ObisId(1, 0, 3, 8, 4), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_delivered_tariff4, FixedValue, ObisId(1, 0, 3, 8, 4), FixedField, units::kvarh, units::varh); -DEFINE_FIELD(total_exported_energy, FixedValue, ObisId(1, 0, 4, 8, 0), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(total_exported_energy, FixedValue, ObisId(1, 0, 4, 8, 0), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered by client (Tariff 1) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_returned_tariff1, FixedValue, ObisId(1, 0, 4, 8, 1), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_returned_tariff1, FixedValue, ObisId(1, 0, 4, 8, 1), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered by client (Tariff 2) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_returned_tariff2, FixedValue, ObisId(1, 0, 4, 8, 2), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_returned_tariff2, FixedValue, ObisId(1, 0, 4, 8, 2), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered by client (Tariff 3) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_returned_tariff3, FixedValue, ObisId(1, 0, 4, 8, 3), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_returned_tariff3, FixedValue, ObisId(1, 0, 4, 8, 3), FixedField, units::kvarh, units::varh); // Meter Reading Reactive energy delivered by client (Tariff 4) in 0,001 kvarh -DEFINE_FIELD(reactive_energy_returned_tariff4, FixedValue, ObisId(1, 0, 4, 8, 4), FixedField, units::kvarh, units::kvarh); +DEFINE_FIELD(reactive_energy_returned_tariff4, FixedValue, ObisId(1, 0, 4, 8, 4), FixedField, units::kvarh, units::varh); // Specific fields used for Switzerland // Meter Reading electricity delivered to client (Tariff 1) in 0,001 kWh @@ -288,8 +288,8 @@ DEFINE_FIELD(power_delivered, FixedValue, ObisId(1, 0, 1, 7, 0), FixedField, uni DEFINE_FIELD(power_returned, FixedValue, ObisId(1, 0, 2, 7, 0), FixedField, units::kW, units::W); // Extra fields used for Luxembourg and Lithuania -DEFINE_FIELD(reactive_power_delivered, FixedValue, ObisId(1, 0, 3, 7, 0), FixedField, units::kvar, units::kvar); -DEFINE_FIELD(reactive_power_returned, FixedValue, ObisId(1, 0, 4, 7, 0), FixedField, units::kvar, units::kvar); +DEFINE_FIELD(reactive_power_delivered, FixedValue, ObisId(1, 0, 3, 7, 0), FixedField, units::kvar, units::var); +DEFINE_FIELD(reactive_power_returned, FixedValue, ObisId(1, 0, 4, 7, 0), FixedField, units::kvar, units::var); // Specific fields used for Switzerland // Actual electricity power delivered (+P) in 1 Watt resolution From 551d6b9aea1f92538ecfdeb52bc1b1a668e31cab Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 16 Sep 2025 02:01:33 +0200 Subject: [PATCH 14/25] Improve Readme. Increase the version inside library.json. --- README.md | 45 ++++++++++++++++++++++++--------------------- library.json | 4 ++-- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 90daaac..8d352c1 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,30 @@ This is a fork of [matthijskooijman/arduino-dsmr](https://github.com/matthijskooijman/arduino-dsmr). -The main goal is to make the parser not depend on Arduino framework and be usable in ESPHome DSMR component with ESP-IDF framework. +The primary goal is to make the parser independent of the Arduino framework and usable on ESP32 with the ESP-IDF framework or any other platform. -# Current progress -* Code combines all fixes from [matthijskooijman/arduino-dsmr](https://github.com/matthijskooijman/arduino-dsmr) and [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) -* Added extensive unit tests suite +# Features +* Combines all fixes from [matthijskooijman/arduino-dsmr](https://github.com/matthijskooijman/arduino-dsmr) and [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) including unmerged pull requests. +* Added an extensive unit test suite * Small refactoring and code optimizations * Supported compilers: MSVC, GCC, Clang -* Header only library, no dependencies +* Header-only library, no dependencies * Code can be used on any platform, not only embedded. -# Details -For more details about the parser and DSMR please refer to original [README.md](https://github.com/matthijskooijman/arduino-dsmr/blob/master/README.md) from matthijskooijman +# Differences from the original arduino-dsmr +* Requires a C++20 compatible compiler. +* [P1Reader](https://github.com/matthijskooijman/arduino-dsmr/blob/master/src/dsmr/reader.h) class is replaced with the [PacketAccumulator](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/dsmr/packet_accumulator.h) class with a different interface to allow usage on any platform. # How to use ## General usage -The library is header only. Add the `src/dsmr` folder to your project. +The library is header-only. Add the `src/dsmr` folder to your project. ## Usage from PlatformIO -You can add the library to `platformio.ini`: -``` -lib_deps = - ArduinoDSMR=https://github.com/PolarGoose/arduino-dsmr-make-work-on-Windows-and-Linux.git# -``` +The library is available on the PlatformIO registry:
+[PlatformIO arduino-dsmr-2](https://registry.platformio.org/libraries/polargoose/arduino-dsmr-2/installation) # Examples -## Examples how to use the parser -[minimal_parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/minimal_parse/minimal_parse.ino) -[parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/parse/parse.ino) +## Examples of how to use the parser +* [minimal_parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/minimal_parse/minimal_parse.ino) +* [parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/parse/parse.ino) ## Complete example ``` @@ -106,10 +104,15 @@ void main() { # History behind this fork [matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. -Later, [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr) fork was created to make the code work with more DSMR devices. -[glmnet](https://github.com/glmnet) also used his fork to create an [ESPHome DSMR](https://esphome.io/components/sensor/dsmr/) component. -After that, the work on the `arduino-dsmr` parser was abandoned. Currently, it was discovered that dependency on the Arduino framework causes issues for some ESP32 devices (the FW size is too big, and the Arduino framework makes you use an outdated version of ESP-IDF). Thus, I decided to create a new fork and make the parser work on any platform without Arduino. +[glmnet](https://github.com/glmnet) continued work on this parser in his fork [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr). He also used his fork to create [ESPHome DSMR](https://esphome.io/components/sensor/dsmr/) component. +After that, the work on the `arduino-dsmr` parser was mostly stopped. + +## The reasons to create `arduino-dsmr-2` fork +Dependency on the Arduino framework limits the applicability of this parser. For example, it is not possible to use it on Linux. +The Arduino framework on ESP32 inflates the FW size and doesn't allow usage of the latest version of ESP-IDF. +Many pull requests and bug fixes needed to be integrated into the parser. # How to work with the code -* You can open the repository and work with the code using any IDE that supports Cmake. -* Note: if you want to run `build-windows.ps1` script you need `Visual Studio 2022` to be installed. +* You can open the code using any IDE that supports CMake. +* Note: `build-windows.ps1` script needs `Visual Studio 2022` to be installed. +* Note: `build-linux.sh` script needs clang to be installed. diff --git a/library.json b/library.json index 6da62aa..494b0d8 100644 --- a/library.json +++ b/library.json @@ -1,7 +1,7 @@ { "name": "arduino-dsmr-2", - "version": "1.0", - "description": "Fork of arduino-dsmr. The library doesn't depend on Arduino framework and has several bug fixes and code quality improvements.", + "version": "2.0", + "description": "Fork of arduino-dsmr. Doesn't depend on Arduino framework and has many bug fixes and code quality improvements.", "keywords": "dsmr", "repository": { "type": "git", From b0b5144c8b039dff016221c8842e29a72ffec788 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 16 Sep 2025 19:46:59 +0200 Subject: [PATCH 15/25] * Add EncryptedPacketAccumulator * Rename dsmr namespace to arduino_dsmr_2 --- CMakeLists.txt | 12 +- README.md | 71 ++++- library.json | 4 +- src/.clang-format | 2 +- src/dsmr/encrypted_packet_accumulator.h | 244 ++++++++++++++++++ src/dsmr/fields.h | 2 +- src/dsmr/packet_accumulator.h | 183 ++++++------- src/dsmr/parser.h | 4 +- src/dsmr/util.h | 12 +- ...rypted_packet_accumulator_example_test.cpp | 36 +++ ...rypted_packet_accumulator_include_test.cpp | 6 + .../encrypted_packet_accumulator_test.cpp | 161 ++++++++++++ ...pp => packet_accumulator_example_test.cpp} | 4 +- src/test/packet_accumulator_include_test.cpp | 2 +- src/test/packet_accumulator_test.cpp | 26 +- src/test/parser_include_test.cpp | 2 +- src/test/parser_test.cpp | 6 +- src/test/test_data/encrypted_packet.bin | Bin 0 -> 511 bytes .../test_data/generate_encrypted_packet.py | 61 +++++ 19 files changed, 709 insertions(+), 129 deletions(-) create mode 100644 src/dsmr/encrypted_packet_accumulator.h create mode 100644 src/test/encrypted_packet_accumulator_example_test.cpp create mode 100644 src/test/encrypted_packet_accumulator_include_test.cpp create mode 100644 src/test/encrypted_packet_accumulator_test.cpp rename src/test/{example_test.cpp => packet_accumulator_example_test.cpp} (97%) create mode 100644 src/test/test_data/encrypted_packet.bin create mode 100644 src/test/test_data/generate_encrypted_packet.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b64d04..f25005f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,14 @@ file(DOWNLOAD ${CMAKE_BINARY_DIR}/doctest/doctest.h EXPECTED_MD5 0671bbca9fb00cb19a168cffa89ac184) +FetchContent_Populate( + mded_tls + URL https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-3.6.4/mbedtls-3.6.4.tar.bz2 + URL_HASH MD5=eb965a5bb8044bc43a49adb435fa72ee) +set(ENABLE_PROGRAMS OFF CACHE INTERNAL "") +set(ENABLE_TESTING OFF CACHE INTERNAL "") +add_subdirectory(${mded_tls_SOURCE_DIR}) + FetchContent_Populate( cmake_template URL https://github.com/cpp-best-practices/cmake_template/archive/refs/heads/main.zip @@ -17,7 +25,9 @@ include(${cmake_template_SOURCE_DIR}/cmake/Sanitizers.cmake) file(GLOB_RECURSE arduino_dsmr_test_src_files CONFIGURE_DEPENDS "src/*.h" "src/*.cpp") add_executable(arduino_dsmr_test ${arduino_dsmr_test_src_files}) target_include_directories(arduino_dsmr_test PRIVATE ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/doctest) -target_compile_features(arduino_dsmr_test PUBLIC cxx_std_20) +target_include_directories(arduino_dsmr_test SYSTEM PRIVATE $) +target_compile_features(arduino_dsmr_test PRIVATE cxx_std_20) +target_link_libraries(arduino_dsmr_test PRIVATE mbedtls) # enable warnings add_library(arduino_dsmr_test_warnings INTERFACE) diff --git a/README.md b/README.md index 8d352c1..4e61980 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,12 @@ The primary goal is to make the parser independent of the Arduino framework and # Differences from the original arduino-dsmr * Requires a C++20 compatible compiler. * [P1Reader](https://github.com/matthijskooijman/arduino-dsmr/blob/master/src/dsmr/reader.h) class is replaced with the [PacketAccumulator](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/dsmr/packet_accumulator.h) class with a different interface to allow usage on any platform. +* Added `EncryptedPacketAccumulator` class to receive encrypted DSMR messages (like from "Luxembourg Smarty"). # How to use ## General usage -The library is header-only. Add the `src/dsmr` folder to your project. +The library is header-only. Add the `src/dsmr` folder to your project.
+Note: `encrypted_packet_accumulator.h` header depends on [Mbed TLS](https://www.trustedfirmware.org/projects/mbed-tls/) library. It is already included in the `ESP-IDF` framework and can be easily added to any other platforms. ## Usage from PlatformIO The library is available on the PlatformIO registry:
@@ -33,7 +35,7 @@ The library is available on the PlatformIO registry:
#include "dsmr/parser.h" #include -using namespace dsmr; +using namespace arduino_dsmr_2; using namespace fields; void main() { @@ -52,7 +54,8 @@ void main() { "0-0:1.0.0(150117185916W)\r\n" "0-0:96.1.1(0000000000000000000000000000000000)\r\n" "1-0:1.8.1(000671.578*kWh)\r\n" - "!60e5"; + "!60e5 + "another packet"; // Specify the fields you want to parse. // Full list of available fields is in fields.h @@ -102,17 +105,63 @@ void main() { } ``` +## EncryptedPacketAccumulator example +``` +#include "dsmr/fields.h" +#include "dsmr/encrypted_packet_accumulator.h" +#include "dsmr/parser.h" +#include +#include + +using namespace arduino_dsmr_2; +using namespace fields; + +void main() { + std::vector encrypted_data_from_p1_port; + + // This class is similar to the PacketAccumulator, but it handles encrypted packets. + // Use this class only if you have a smart meter that uses encryption. + EncryptedPacketAccumulator accumulator(4000); + + // Set the encryption key. This key is unique for each smart meter and should be provided by your energy supplier. + const auto error = accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + if (error) { + printf("Failed to set encryption key: %s", to_string(*error)); + return; + } + + for (const auto& byte : encrypted_data_from_p1_port) { + // feed the byte to the accumulator + auto res = accumulator.process_byte(byte); + if (res.error()) { + printf("Error during receiving a packet: %s", to_string(*res.error())); + } + + // When a full packet is received, the packet() method returns unencrypted packet. + if (res.packet()) { + // Parse the received packet the same way as with PacketAccumulator example + } + } +} +``` + # History behind this fork [matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. -[glmnet](https://github.com/glmnet) continued work on this parser in his fork [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr). He also used his fork to create [ESPHome DSMR](https://esphome.io/components/sensor/dsmr/) component. -After that, the work on the `arduino-dsmr` parser was mostly stopped. - -## The reasons to create `arduino-dsmr-2` fork -Dependency on the Arduino framework limits the applicability of this parser. For example, it is not possible to use it on Linux. -The Arduino framework on ESP32 inflates the FW size and doesn't allow usage of the latest version of ESP-IDF. +[glmnet](https://github.com/glmnet) and [zuidwijk](https://github.com/zuidwijk) continued work on this parser in the fork [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr). They used the parser to create [ESPHome DSMR](https://esphome.io/components/sensor/dsmr/) component. +After that, the work on the `arduino-dsmr` parser stopped. +Since then, some issues and unmerged pull requests have accumulated. Additionally, the dependency on the Arduino framework can cause issues for some ESP32 boards. +This fork was created to address the existing issues and make the parser usable on any platform. + +## The reasons `arduino-dsmr-2` fork was created +* Dependency on the Arduino framework limits the applicability of this parser. For example, it is not possible to use it on Linux. +* The Arduino framework on ESP32 inflates the FW size and doesn't allow usage of the latest version of ESP-IDF, and limits the applicability of the parser. Many pull requests and bug fixes needed to be integrated into the parser. +* Lack of support for encrypted DSMR messages. # How to work with the code * You can open the code using any IDE that supports CMake. -* Note: `build-windows.ps1` script needs `Visual Studio 2022` to be installed. -* Note: `build-linux.sh` script needs clang to be installed. + * `build-windows.ps1` script needs `Visual Studio 2022` to be installed. + * `build-linux.sh` script needs `clang` to be installed. + +# References +* [DSMR parser in Python](https://github.com/ndokter/dsmr_parser/tree/master) diff --git a/library.json b/library.json index 494b0d8..1901ffd 100644 --- a/library.json +++ b/library.json @@ -1,7 +1,7 @@ { "name": "arduino-dsmr-2", - "version": "2.0", - "description": "Fork of arduino-dsmr. Doesn't depend on Arduino framework and has many bug fixes and code quality improvements.", + "version": "3.0", + "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { "type": "git", diff --git a/src/.clang-format b/src/.clang-format index 4c29cb3..4762084 100644 --- a/src/.clang-format +++ b/src/.clang-format @@ -5,4 +5,4 @@ AlwaysBreakTemplateDeclarations: Yes FixNamespaceComments: false PointerAlignment: Left AlignEscapedNewlines: Left -ColumnLimit: 200 +ColumnLimit: 160 diff --git a/src/dsmr/encrypted_packet_accumulator.h b/src/dsmr/encrypted_packet_accumulator.h new file mode 100644 index 0000000..3383c23 --- /dev/null +++ b/src/dsmr/encrypted_packet_accumulator.h @@ -0,0 +1,244 @@ +#pragma once +#include "util.h" +#include +#include +#include +#include +#include + +namespace arduino_dsmr_2 { + +// Some smart meters sent DSMR packets encrypted with AES-128-GCM. +// The encryption is described in the "specs/Luxembourg Smarty P1 specification v1.1.3.pdf" chapter "3.2.5 P1 software – Channel security". +// The packet has the following structure: +// Header (18 bytes) | Telegram | GCM Tag (12 bytes) +class EncryptedPacketAccumulator : NonCopyableAndNonMovable { + class HeaderAccumulator { +#pragma pack(push, 1) + union Header { + struct Fields { + uint8_t tag; // always = 0xDB + uint8_t system_title_length; // always = 0x08 + uint8_t system_title[8]; + uint8_t long_form_length_indicator; // always = 0x82 + uint8_t total_length_big_endian[2]; // SecurityControlFieldLength + InvocationCounterLength + CiphertextLength + GcmTagLength + uint8_t security_control_field; // always = 0x30 + uint8_t invocation_counter_big_endian[4]; // also called "frame counter" + } fields; + std::array bytes; + }; +#pragma pack(pop) + static_assert(sizeof(Header) == 18, "PacketHeader struct must be 18 bytes"); + + Header header; + std::size_t number_of_accumulated_bytes = 0; + + public: + bool received_whole_header() const { return number_of_accumulated_bytes == sizeof(Header); } + + void add(const std::uint8_t byte) { + header.bytes[number_of_accumulated_bytes] = byte; + number_of_accumulated_bytes++; + } + + int telegram_with_gcm_tag_length() const { + // Convert from big-endian to the host's little-endian + const auto total_length = (header.fields.total_length_big_endian[0] << 8) | (header.fields.total_length_big_endian[1]); + return total_length - 5; // 5 = SecurityControlFieldLength + InvocationCounterLength + } + + // Also called "IV" + auto nonce() const { + // SystemTitle (8 bytes) + InvocationCounter (4 bytes) + std::array nonce; + const auto& system_title = header.fields.system_title; + const auto& invocation_counter = header.fields.invocation_counter_big_endian; + std::copy(system_title, system_title + 8, nonce.begin()); + std::copy(invocation_counter, invocation_counter + 4, nonce.begin() + 8); + return nonce; + } + }; + + class TelegramAccumulator : NonCopyableAndNonMovable { + std::vector buffer; + std::size_t packetSize = 0; + + public: + explicit TelegramAccumulator(std::size_t bufferSize) : buffer(bufferSize) {} + + void add(const uint8_t byte) { + buffer[packetSize] = byte; + packetSize++; + } + + size_t number_of_accumulated_bytes() const { return packetSize; } + size_t capacity() const { return buffer.size(); } + + // The tag is always last 12 bytes + std::span telegram() const { return {buffer.data(), packetSize - 12}; } + std::span tag() const { return {buffer.data() + packetSize - 12, 12}; } + + void reset() { packetSize = 0; } + }; + + class MbedTlsAes128GcmDecryptor : NonCopyableAndNonMovable { + mbedtls_gcm_context gcm; + + public: + MbedTlsAes128GcmDecryptor() { mbedtls_gcm_init(&gcm); } + + bool set_encryption_key(const std::span key) { return mbedtls_gcm_setkey(&gcm, MBEDTLS_CIPHER_ID_AES, key.data(), 128) == 0; } + + bool decrypt(std::span iv, std::span ciphertext, std::span tag, std::vector& decrypted_output) { + // AdditionalAuthenticatedData = SecurityControlField + AuthenticationKey. + // SecurityControlField is always 0x30. + // AuthenticationKey = "00112233445566778899AABBCCDDEEFF". It is hardcoded and is the same for all DSMR devices. + constexpr uint8_t aad[] = {0x30, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; + + const auto& res = mbedtls_gcm_auth_decrypt(&gcm, ciphertext.size(), iv.data(), iv.size(), aad, std::size(aad), tag.data(), tag.size(), ciphertext.data(), + reinterpret_cast(decrypted_output.data())); + return res == 0; + } + + ~MbedTlsAes128GcmDecryptor() { mbedtls_gcm_free(&gcm); } + }; + + enum class State { WaitingForPacketStartSymbol, AccumulatingPacketHeader, AccumulatingTelegramWithGcmTag }; + State _state = State::WaitingForPacketStartSymbol; + HeaderAccumulator _header_accumulator; + TelegramAccumulator _encrypted_telegram_accumulator; + std::vector _decrypted_telegram_buf; + std::array _encryption_key{}; + +public: + enum class Error { BufferOverflow, TelegramSizeTooSmall, FailedToSetEncryptionKey, DecryptionFailed }; + enum class SetEncryptionKeyError { EncryptionKeyLengthIsNot32Bytes, EncryptionKeyContainsNonHexSymbols }; + + class Result { + friend EncryptedPacketAccumulator; + + std::optional _packet; + std::optional _error; + + Result() = default; + Result(std::string_view packet) : _packet(packet) {} + Result(Error error) : _error(error) {} + + public: + auto packet() const { return _packet; } + auto error() const { return _error; } + }; + + explicit EncryptedPacketAccumulator(size_t bufferSize) : _encrypted_telegram_accumulator(bufferSize), _decrypted_telegram_buf(bufferSize) {} + + // key_hex is a string like "00112233445566778899AABBCCDDEEFF" + std::optional set_encryption_key(std::string_view key_hex) { + if (key_hex.size() != 32) { + return SetEncryptionKeyError::EncryptionKeyLengthIsNot32Bytes; + } + + for (size_t i = 0; i < 16; ++i) { + const auto hi = to_hex_value(key_hex[2 * i]); + const auto lo = to_hex_value(key_hex[2 * i + 1]); + if (!hi || !lo) { + return SetEncryptionKeyError::EncryptionKeyContainsNonHexSymbols; + } + _encryption_key[i] = static_cast((*hi << 4) | *lo); + } + + return {}; + } + + Result process_byte(const uint8_t byte) { + switch (_state) { + case State::WaitingForPacketStartSymbol: + if (byte == 0xDB) { + _header_accumulator = HeaderAccumulator(); + _header_accumulator.add(byte); + _encrypted_telegram_accumulator.reset(); + _state = State::AccumulatingPacketHeader; + } + return {}; + case State::AccumulatingPacketHeader: + _header_accumulator.add(byte); + if (!_header_accumulator.received_whole_header()) { + return {}; + } + + if (_header_accumulator.telegram_with_gcm_tag_length() > static_cast(_encrypted_telegram_accumulator.capacity())) { + _state = State::WaitingForPacketStartSymbol; + return Error::BufferOverflow; + } + + // Sanity check. The length must be at least 20 bytes + if (_header_accumulator.telegram_with_gcm_tag_length() < 20) { + _state = State::WaitingForPacketStartSymbol; + return Error::TelegramSizeTooSmall; + } + + _state = State::AccumulatingTelegramWithGcmTag; + return {}; + case State::AccumulatingTelegramWithGcmTag: + _encrypted_telegram_accumulator.add(byte); + + if (static_cast(_encrypted_telegram_accumulator.number_of_accumulated_bytes()) != _header_accumulator.telegram_with_gcm_tag_length()) { + return {}; + } + + _state = State::WaitingForPacketStartSymbol; + + MbedTlsAes128GcmDecryptor decryptor; + + if (!decryptor.set_encryption_key(_encryption_key)) { + return Error::FailedToSetEncryptionKey; + } + + if (!decryptor.decrypt(_header_accumulator.nonce(), _encrypted_telegram_accumulator.telegram(), _encrypted_telegram_accumulator.tag(), + _decrypted_telegram_buf)) { + return Error::DecryptionFailed; + } + + return std::string_view(_decrypted_telegram_buf.data(), _encrypted_telegram_accumulator.telegram().size()); + } + + // Unreachable + return {}; + } + +private: + static std::optional to_hex_value(const char c) { + if (c >= '0' && c <= '9') + return static_cast(c - '0'); + if (c >= 'a' && c <= 'f') + return static_cast(c - 'a' + 10); + if (c >= 'A' && c <= 'F') + return static_cast(c - 'A' + 10); + return {}; + } +}; + +inline const char* to_string(const EncryptedPacketAccumulator::Error error) { + switch (error) { + case EncryptedPacketAccumulator::Error::BufferOverflow: + return "BufferOverflow"; + case EncryptedPacketAccumulator::Error::TelegramSizeTooSmall: + return "TelegramSizeTooSmall"; + case EncryptedPacketAccumulator::Error::FailedToSetEncryptionKey: + return "FailedToSetEncryptionKey"; + case EncryptedPacketAccumulator::Error::DecryptionFailed: + return "DecryptionFailed"; + } + return "Unknown error"; +} + +inline const char* to_string(const EncryptedPacketAccumulator::SetEncryptionKeyError error) { + switch (error) { + case EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyLengthIsNot32Bytes: + return "EncryptionKeyLengthIsNot32Bytes"; + case EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyContainsNonHexSymbols: + return "EncryptionKeyContainsNonHexSymbols"; + } + return "Unknown error"; +} + +} diff --git a/src/dsmr/fields.h b/src/dsmr/fields.h index f12404e..d7d53ca 100644 --- a/src/dsmr/fields.h +++ b/src/dsmr/fields.h @@ -16,7 +16,7 @@ #define DSMR_SUB_MBUS_ID 4 #endif -namespace dsmr { +namespace arduino_dsmr_2 { // Superclass for data items in a P1 message. template diff --git a/src/dsmr/packet_accumulator.h b/src/dsmr/packet_accumulator.h index 02cd645..3a76842 100644 --- a/src/dsmr/packet_accumulator.h +++ b/src/dsmr/packet_accumulator.h @@ -5,105 +5,69 @@ #include #include -namespace dsmr { +namespace arduino_dsmr_2 { -class DsmrPacketBuffer : NonCopyable { - friend class PacketAccumulator; +// Receives unencrypted DSMR packets. +class PacketAccumulator : NonCopyableAndNonMovable { + class DsmrPacketBuffer : NonCopyableAndNonMovable { + std::vector buffer; + std::size_t packetSize = 0; - std::vector buffer; - std::size_t packetSize = 0; + public: + explicit DsmrPacketBuffer(std::size_t bufferSize) : buffer(bufferSize) {} - explicit DsmrPacketBuffer(std::size_t bufferSize) : buffer(bufferSize) {} + std::string_view packet() const { return std::string_view(buffer.data(), packetSize); } - std::string_view packet() const { return std::string_view(buffer.data(), packetSize); } + void add(char byte) { + buffer[packetSize] = byte; + packetSize++; + } - void add(char byte) { - buffer[packetSize] = byte; - packetSize++; - } + bool has_space() const { return packetSize < buffer.size(); } - bool has_space() const { return packetSize < buffer.size(); } + void reset() { packetSize = 0; } - void reset() { packetSize = 0; } + uint16_t calculate_crc16() const { + uint16_t crc = 0; + for (std::size_t i = 0; i < packetSize; ++i) { + crc ^= static_cast(buffer[i]); + for (std::size_t bit = 0; bit < 8; bit++) { + if (crc & 1) + crc = (crc >> 1) ^ 0xa001; + else + crc = (crc >> 1); + } + } + return crc; + } + }; - uint16_t calculate_crc16() const { + class CrcAccumulator { uint16_t crc = 0; - for (std::size_t i = 0; i < packetSize; ++i) { - crc ^= static_cast(buffer[i]); - for (std::size_t bit = 0; bit < 8; bit++) { - if (crc & 1) - crc = (crc >> 1) ^ 0xa001; - else - crc = (crc >> 1); + size_t amount_of_crc_nibbles = 0; + + public: + bool add_to_crc(char byte) { + if (byte >= '0' && byte <= '9') { + byte = byte - '0'; + } else if (byte >= 'A' && byte <= 'F') { + byte = static_cast(byte - 'A' + 10); + } else if (byte >= 'a' && byte <= 'f') { + byte = static_cast(byte - 'a' + 10); + } else { + return false; } - } - return crc; - } -}; -class CrcAccumulator { - friend class PacketAccumulator; - - uint16_t crc = 0; - size_t amount_of_crc_nibbles = 0; - - bool add_to_crc(char byte) { - if (byte >= '0' && byte <= '9') { - byte = byte - '0'; - } else if (byte >= 'A' && byte <= 'F') { - byte = static_cast(byte - 'A' + 10); - } else if (byte >= 'a' && byte <= 'f') { - byte = static_cast(byte - 'a' + 10); - } else { - return false; + crc = static_cast((crc << 4) | (byte & 0xF)); + amount_of_crc_nibbles++; + return true; } - crc = static_cast((crc << 4) | (byte & 0xF)); - amount_of_crc_nibbles++; - return true; - } - - bool has_full_crc() const { return amount_of_crc_nibbles == 4; } -}; - -enum class PacketAccumulatorError { - BufferOverflow, - PacketStartSymbolInPacket, - IncorrectCrcCharacter, - CrcMismatch, -}; - -inline const char* to_string(const PacketAccumulatorError error) { - switch (error) { - case PacketAccumulatorError::BufferOverflow: - return "BufferOverflow"; - case PacketAccumulatorError::PacketStartSymbolInPacket: - return "PacketStartSymbolInPacket"; - case PacketAccumulatorError::IncorrectCrcCharacter: - return "IncorrectCrcCharacter"; - case PacketAccumulatorError::CrcMismatch: - return "CrcMismatch"; - } - - return "Unknown error"; -} - -class PacketAccumulatorResult { - friend class PacketAccumulator; - - std::optional _packet; - std::optional _error; + bool has_full_crc() const { return amount_of_crc_nibbles == 4; } - PacketAccumulatorResult() = default; - PacketAccumulatorResult(std::string_view packet) : _packet(packet) {} - PacketAccumulatorResult(PacketAccumulatorError error) : _error(error) {} - -public: - auto packet() const { return _packet; } - auto error() const { return _error; } -}; + uint16_t crc_value() const { return crc; } + }; -class PacketAccumulator : NonCopyable { enum class State { WaitingForPacketStartSymbol, WaitingForPacketEndSymbol, WaitingForCrc }; State _state = State::WaitingForPacketStartSymbol; DsmrPacketBuffer _buf; @@ -111,14 +75,36 @@ class PacketAccumulator : NonCopyable { bool _check_crc; public: + enum class Error { + BufferOverflow, + PacketStartSymbolInPacket, + IncorrectCrcCharacter, + CrcMismatch, + }; + + class Result { + friend class PacketAccumulator; + + std::optional _packet; + std::optional _error; + + Result() = default; + Result(std::string_view packet) : _packet(packet) {} + Result(Error error) : _error(error) {} + + public: + auto packet() const { return _packet; } + auto error() const { return _error; } + }; + PacketAccumulator(size_t bufferSize, bool check_crc) : _buf(bufferSize), _check_crc(check_crc) {} - PacketAccumulatorResult process_byte(const char byte) { + Result process_byte(const char byte) { if (!_buf.has_space()) { _buf.reset(); _state = State::WaitingForPacketStartSymbol; if (byte != '/') { - return PacketAccumulatorError::BufferOverflow; + return Error::BufferOverflow; } } @@ -129,7 +115,7 @@ class PacketAccumulator : NonCopyable { _state = State::WaitingForPacketEndSymbol; if (prev_state == State::WaitingForPacketEndSymbol || prev_state == State::WaitingForCrc) { - return PacketAccumulatorError::PacketStartSymbolInPacket; + return Error::PacketStartSymbolInPacket; } return {}; } @@ -147,7 +133,7 @@ class PacketAccumulator : NonCopyable { if (!_check_crc) { _state = State::WaitingForPacketStartSymbol; - return PacketAccumulatorResult(_buf.packet()); + return Result(_buf.packet()); } _state = State::WaitingForCrc; @@ -157,7 +143,7 @@ class PacketAccumulator : NonCopyable { case State::WaitingForCrc: if (!_crc_accumulator.add_to_crc(byte)) { _state = State::WaitingForPacketStartSymbol; - return PacketAccumulatorError::IncorrectCrcCharacter; + return Error::IncorrectCrcCharacter; } if (!_crc_accumulator.has_full_crc()) { @@ -166,11 +152,11 @@ class PacketAccumulator : NonCopyable { _state = State::WaitingForPacketStartSymbol; - if (_crc_accumulator.crc == _buf.calculate_crc16()) { + if (_crc_accumulator.crc_value() == _buf.calculate_crc16()) { return _buf.packet(); } - return PacketAccumulatorError::CrcMismatch; + return Error::CrcMismatch; } // unreachable @@ -178,4 +164,19 @@ class PacketAccumulator : NonCopyable { } }; +inline const char* to_string(const PacketAccumulator::Error error) { + switch (error) { + case PacketAccumulator::Error::BufferOverflow: + return "BufferOverflow"; + case PacketAccumulator::Error::PacketStartSymbolInPacket: + return "PacketStartSymbolInPacket"; + case PacketAccumulator::Error::IncorrectCrcCharacter: + return "IncorrectCrcCharacter"; + case PacketAccumulator::Error::CrcMismatch: + return "CrcMismatch"; + } + + return "Unknown error"; +} + } diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index fb418e2..a4b4186 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -2,10 +2,10 @@ #include "util.h" -namespace dsmr { +namespace arduino_dsmr_2 { // uses polynomial x^16+x^15+x^2+1 -static uint16_t crc16_update(uint16_t crc, uint8_t data) { +inline uint16_t crc16_update(uint16_t crc, uint8_t data) { crc ^= data; for (size_t i = 0; i < 8; ++i) { if (crc & 1) { diff --git a/src/dsmr/util.h b/src/dsmr/util.h index dd7b619..51f1631 100644 --- a/src/dsmr/util.h +++ b/src/dsmr/util.h @@ -6,7 +6,7 @@ #include #include -namespace dsmr { +namespace arduino_dsmr_2 { class NonCopyable { protected: @@ -21,6 +21,16 @@ class NonCopyable { NonCopyable& operator=(const NonCopyable&) = delete; }; +class NonCopyableAndNonMovable : NonCopyable { +protected: + NonCopyableAndNonMovable() = default; + ~NonCopyableAndNonMovable() = default; + +public: + NonCopyableAndNonMovable(NonCopyableAndNonMovable&&) = delete; + NonCopyableAndNonMovable& operator=(NonCopyableAndNonMovable&&) = delete; +}; + // The ParseResult class wraps the result of a parse function. The type // of the result is passed as a template parameter and can be void to // not return any result. diff --git a/src/test/encrypted_packet_accumulator_example_test.cpp b/src/test/encrypted_packet_accumulator_example_test.cpp new file mode 100644 index 0000000..391b3a3 --- /dev/null +++ b/src/test/encrypted_packet_accumulator_example_test.cpp @@ -0,0 +1,36 @@ +#include "dsmr/encrypted_packet_accumulator.h" +#include "dsmr/fields.h" +#include "dsmr/parser.h" +#include +#include + +using namespace arduino_dsmr_2; +using namespace fields; + +TEST_CASE("Complete example encrypted packet accumulator") { + std::vector encrypted_data_from_p1_port; + + // This class is similar to the PacketAccumulator, but it handles encrypted packets. + // Use this class only if you have a smart meter that uses encryption. + EncryptedPacketAccumulator accumulator(4000); + + // Set the encryption key. This key is unique for each smart meter and should be provided by your energy supplier. + const auto error = accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + if (error) { + printf("Failed to set encryption key: %s", to_string(*error)); + return; + } + + for (const auto& byte : encrypted_data_from_p1_port) { + // feed the byte to the accumulator + auto res = accumulator.process_byte(byte); + if (res.error()) { + printf("Error during receiving a packet: %s", to_string(*res.error())); + } + + // When a full packet is received, the packet() method returns unencrypted packet. + if (res.packet()) { + // Parse the received packet the same way as with PacketAccumulator example + } + } +} diff --git a/src/test/encrypted_packet_accumulator_include_test.cpp b/src/test/encrypted_packet_accumulator_include_test.cpp new file mode 100644 index 0000000..a26ce3e --- /dev/null +++ b/src/test/encrypted_packet_accumulator_include_test.cpp @@ -0,0 +1,6 @@ +// This code tests that the encrypted_packet_accumulator header has all necessary dependencies included in its headers. +// We check that the code compiles. + +#include "dsmr/encrypted_packet_accumulator.h" + +void EncryptedPacketAccumulator_some_function() { arduino_dsmr_2::EncryptedPacketAccumulator(1000); } diff --git a/src/test/encrypted_packet_accumulator_test.cpp b/src/test/encrypted_packet_accumulator_test.cpp new file mode 100644 index 0000000..5919ff8 --- /dev/null +++ b/src/test/encrypted_packet_accumulator_test.cpp @@ -0,0 +1,161 @@ +#include +#include +#include +#include +#include + +inline std::vector read_binary_file(const std::filesystem::path path) { + std::ifstream file(path, std::ios::binary); + return {std::istreambuf_iterator(file), std::istreambuf_iterator()}; +} + +const auto& encrypted_packet = + read_binary_file(std::filesystem::path(std::source_location::current().file_name()).parent_path() / "test_data" / "encrypted_packet.bin"); + +static std::vector make_header(const std::uint16_t total_len) { + std::vector header(18); + const std::array system_title = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}; + const std::array invocation_counter = {0x00, 0x11, 0x22, 0x33}; + + header[0] = 0xDB; // tag + header[1] = 0x08; // system_title_length + std::copy(system_title.begin(), system_title.end(), header.begin() + 2); + header[10] = 0x82; // long form length indicator + header[11] = static_cast((total_len >> 8) & 0xFF); + header[12] = static_cast(total_len & 0xFF); + header[13] = 0x30; // security_control_field + std::copy(invocation_counter.begin(), invocation_counter.end(), header.begin() + 14); + + return header; +} + +TEST_CASE("Can receive correct packet") { + auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); + + for (const auto& byte : encrypted_packet) { + const auto& res = accumulator.process_byte(byte); + REQUIRE(res.error().has_value() == false); + + if (res.packet()) { + REQUIRE(std::string(*res.packet()).ends_with("1-0:4.7.0(000000166*var)\r\n!7EF9\r\n")); + REQUIRE(std::string(*res.packet()).starts_with("/EST5\\253710000_A\r\n")); + return; + } + } + + REQUIRE(false); +} + +TEST_CASE("Error on corrupted packet") { + auto corrupted_packet = encrypted_packet; + corrupted_packet[50] ^= 0xFF; + + auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); + + for (const auto& byte : corrupted_packet) { + const auto& res = accumulator.process_byte(byte); + if (res.error()) { + REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::DecryptionFailed); + return; + } + } + + REQUIRE(false); +} + +TEST_CASE("Receive many packets") { + auto garbage1 = std::vector(100, 0x55); + auto packet1 = encrypted_packet; + auto garbage2 = std::vector(100, 0x55); + auto packet2_corrupted = encrypted_packet; + packet2_corrupted[50] ^= 0xFF; + auto packet3 = encrypted_packet; + auto packet4 = encrypted_packet; + + std::vector total_packet; + total_packet.insert(total_packet.end(), garbage1.begin(), garbage1.end()); + total_packet.insert(total_packet.end(), packet1.begin(), packet1.end()); + total_packet.insert(total_packet.end(), garbage2.begin(), garbage2.end()); + total_packet.insert(total_packet.end(), packet2_corrupted.begin(), packet2_corrupted.end()); + total_packet.insert(total_packet.end(), packet3.begin(), packet3.end()); + total_packet.insert(total_packet.end(), packet4.begin(), packet4.end()); + + size_t received_packets = 0; + auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); + + for (const auto byte : total_packet) { + auto res = accumulator.process_byte(byte); + + if (res.packet()) { + received_packets++; + } + } + + REQUIRE(received_packets == 3); +} + +TEST_CASE("Encryption key validation") { + auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); + REQUIRE(!accumulator.set_encryption_key("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").has_value()); + REQUIRE(*accumulator.set_encryption_key("AAAAAAAAAAA") == arduino_dsmr_2::EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyLengthIsNot32Bytes); + REQUIRE(*accumulator.set_encryption_key("GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") == + arduino_dsmr_2::EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyContainsNonHexSymbols); +} + +TEST_CASE("BufferOverflow when telegram length exceeds capacity") { + arduino_dsmr_2::EncryptedPacketAccumulator acc(10); + const auto& header = make_header(16); + for (const auto byte : header) { + const auto& res = acc.process_byte(byte); + if (res.error()) { + REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::BufferOverflow); + return; + } + } + REQUIRE(false); +} + +TEST_CASE("Telegram is too small") { + arduino_dsmr_2::EncryptedPacketAccumulator acc(1000); + const auto& header = make_header(16); + for (const auto byte : header) { + const auto& res = acc.process_byte(byte); + if (res.error()) { + REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::TelegramSizeTooSmall); + return; + } + } + REQUIRE(false); +} + +TEST_CASE("Can receive packet after buffer overflow") { + arduino_dsmr_2::EncryptedPacketAccumulator accumulator(1000); + REQUIRE_FALSE(accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); + + auto too_long_header = make_header(2000); + bool overflow_error_occurred = false; + for (const auto byte : too_long_header) { + const auto& res = accumulator.process_byte(byte); + if (res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::BufferOverflow) { + overflow_error_occurred = true; + } + } + REQUIRE(overflow_error_occurred); + + for (const auto& byte : encrypted_packet) { + auto res = accumulator.process_byte(byte); + REQUIRE(res.error().has_value() == false); + + if (res.packet()) { + REQUIRE(std::string(*res.packet()).ends_with("1-0:4.7.0(000000166*var)\r\n!7EF9\r\n")); + REQUIRE(std::string(*res.packet()).starts_with("/EST5\\253710000_A\r\n")); + return; + } + } + + REQUIRE(false); +} diff --git a/src/test/example_test.cpp b/src/test/packet_accumulator_example_test.cpp similarity index 97% rename from src/test/example_test.cpp rename to src/test/packet_accumulator_example_test.cpp index 8da5904..a47248d 100644 --- a/src/test/example_test.cpp +++ b/src/test/packet_accumulator_example_test.cpp @@ -4,10 +4,10 @@ #include #include -using namespace dsmr; +using namespace arduino_dsmr_2; using namespace fields; -TEST_CASE("Complete example") { +TEST_CASE("Complete example packet accumulator") { const auto& data_from_p1_port = "garbage before" "/KFM5KAIFA-METER\r\n" "\r\n" diff --git a/src/test/packet_accumulator_include_test.cpp b/src/test/packet_accumulator_include_test.cpp index ab8e78d..11720af 100644 --- a/src/test/packet_accumulator_include_test.cpp +++ b/src/test/packet_accumulator_include_test.cpp @@ -3,4 +3,4 @@ #include "dsmr/packet_accumulator.h" -void PacketAccumulator_some_function() { dsmr::PacketAccumulator({}, true); } +void PacketAccumulator_some_function() { arduino_dsmr_2::PacketAccumulator({}, true); } diff --git a/src/test/packet_accumulator_test.cpp b/src/test/packet_accumulator_test.cpp index b49d3c7..e11d517 100644 --- a/src/test/packet_accumulator_test.cpp +++ b/src/test/packet_accumulator_test.cpp @@ -2,10 +2,12 @@ #include #include +using namespace arduino_dsmr_2; + TEST_CASE("Packet with correct CRC lower case") { const auto& msg = "/some !a3D4"; - auto accumulator = dsmr::PacketAccumulator(1000, true); + auto accumulator = PacketAccumulator(1000, true); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); REQUIRE(res.error().has_value() == false); @@ -22,11 +24,11 @@ TEST_CASE("Packet with correct CRC lower case") { TEST_CASE("Packet with incorrect CRC") { const auto& msg = "/some data!0000"; - dsmr::PacketAccumulator accumulator(1000, true); + PacketAccumulator accumulator(1000, true); for (const auto& byte : msg) { auto packet = accumulator.process_byte(byte); if (packet.error()) { - REQUIRE(*packet.error() == dsmr::PacketAccumulatorError::CrcMismatch); + REQUIRE(*packet.error() == PacketAccumulator::Error::CrcMismatch); return; } } @@ -37,11 +39,11 @@ TEST_CASE("Packet with incorrect CRC") { TEST_CASE("Packet with incorrect CRC symbol") { const auto& msg = "/some data!G000"; - dsmr::PacketAccumulator accumulator(1000, true); + PacketAccumulator accumulator(1000, true); for (const auto& byte : msg) { auto packet = accumulator.process_byte(byte); if (packet.error()) { - REQUIRE(*packet.error() == dsmr::PacketAccumulatorError::IncorrectCrcCharacter); + REQUIRE(*packet.error() == PacketAccumulator::Error::IncorrectCrcCharacter); return; } } @@ -52,7 +54,7 @@ TEST_CASE("Packet with incorrect CRC symbol") { TEST_CASE("Packet without CRC") { const auto& msg = "/some data!"; - dsmr::PacketAccumulator accumulator(1000, false); + PacketAccumulator accumulator(1000, false); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); REQUIRE(res.error().has_value() == false); @@ -74,9 +76,9 @@ TEST_CASE("Parse data with different packets. CRC check") { "/some !a3D4"; // correct package std::vector received_packets; - std::vector occurred_errors; + std::vector occurred_errors; - dsmr::PacketAccumulator accumulator(15, true); + PacketAccumulator accumulator(15, true); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); if (res.error()) { @@ -88,7 +90,7 @@ TEST_CASE("Parse data with different packets. CRC check") { } } - using enum dsmr::PacketAccumulatorError; + using enum PacketAccumulator::Error; REQUIRE(occurred_errors == std::vector{CrcMismatch, PacketStartSymbolInPacket, IncorrectCrcCharacter, BufferOverflow}); REQUIRE(received_packets == std::vector(4, "/some !")); } @@ -101,9 +103,9 @@ TEST_CASE("Parse data with different packets. No CRC check") { "/some !"; // correct package std::vector received_packets; - std::vector occurred_errors; + std::vector occurred_errors; - dsmr::PacketAccumulator accumulator(15, false); + PacketAccumulator accumulator(15, false); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); if (res.error()) { @@ -115,7 +117,7 @@ TEST_CASE("Parse data with different packets. No CRC check") { } } - using enum dsmr::PacketAccumulatorError; + using enum PacketAccumulator::Error; REQUIRE(occurred_errors == std::vector{PacketStartSymbolInPacket, BufferOverflow}); REQUIRE(received_packets == std::vector(4, "/some !")); } diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp index 2daa4b4..393f109 100644 --- a/src/test/parser_include_test.cpp +++ b/src/test/parser_include_test.cpp @@ -4,7 +4,7 @@ #include "dsmr/fields.h" #include "dsmr/parser.h" -using namespace dsmr; +using namespace arduino_dsmr_2; using namespace fields; void P1Parser_some_function() { diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index ac98daf..ac5a33b 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -3,7 +3,7 @@ #include #include -using namespace dsmr; +using namespace arduino_dsmr_2; using namespace fields; struct Printer { @@ -593,8 +593,8 @@ TEST_CASE("Can parse a dataline if it has a break in the middle") { ParsedData data; P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.gas_delivered_text == "(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)\r\n(00124.477)"); - REQUIRE(data.message_long == - "303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n303132333435363738393A3B3C3D3E3F"); + REQUIRE(data.message_long == "303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F\r\n303132333435363738393A3B3C3D3E3F30313233343536373" + "8393A3B3C3D3E3F\r\n303132333435363738393A3B3C3D3E3F"); } TEST_CASE("Can parse a 0 value without a unit") { diff --git a/src/test/test_data/encrypted_packet.bin b/src/test/test_data/encrypted_packet.bin new file mode 100644 index 0000000000000000000000000000000000000000..1fc75c269fbcfd8960c468791f77a47c839f97df GIT binary patch literal 511 zcmV8R7FimM1leGFc1I$0m2VHtq4?%fBcZ8lWTnf3aB_D5Xat$xD*^- zn~Q&Ax&tDjRJ!HS5m?589+n=2od0!>IGy>KA!DJF2{i{wo3Vq*TP-avEgAf+*J@v= zoMgAWk>}5E$fNROK_yMavo_zUL!5F=)X^~ck}rn8(Ur_LCle9UTI+Q2sNVu%=lpb5 z<$oFGqLLuo#by~Pdb;Z?-6&wcvi6??>IOSOth+}rH%L9_kHsG`m)O$tQhHnU$E!uC zE&|#gHRxR@L_GZ4!_`BhC7wXDRokk<761A2c)-ySEH-1ZhBx3tuSBsFa=GV#4k5C{ z*HhsZW@!}b;Pf6vYTyGJ}gGLefAbTq{%hpC_sm5WgOAX*}i&T`Y(Fv+f6?t zJo1x6V>XXkZ$nu9?((e)W2%VrGZ0TvJ6^B;JO`K8%~>X29Oe#kPGZ)QO4wNtWUU=a B`vm|1 literal 0 HcmV?d00001 diff --git a/src/test/test_data/generate_encrypted_packet.py b/src/test/test_data/generate_encrypted_packet.py new file mode 100644 index 0000000..c532147 --- /dev/null +++ b/src/test/test_data/generate_encrypted_packet.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +# Generate an encrypted DLMS packet using AES128-GCM encryption. +# It is a packet that is sent by Luxembourg Smarty P1. +# The packet format is described in the file "specs/Luxembourg Smarty P1 specification v1.1.3.pdf" chapter "3.2.5 P1 software – Channel security" + +from binascii import unhexlify +from dlms_cosem.protocol.xdlms import GeneralGlobalCipher +from dlms_cosem.security import SecurityControlField, encrypt + +TELEGRAM_SAGEMCOM_T210_D_R = ( + '/EST5\\253710000_A\r\n' + '\r\n' + '1-3:0.2.8(50)\r\n' + '0-0:1.0.0(221006155014S)\r\n' + '1-0:1.8.0(006545766*Wh)\r\n' + '1-0:1.8.1(005017120*Wh)\r\n' + '1-0:1.8.2(001528646*Wh)\r\n' + '1-0:1.7.0(000000286*W)\r\n' + '1-0:2.8.0(000000058*Wh)\r\n' + '1-0:2.8.1(000000000*Wh)\r\n' + '1-0:2.8.2(000000058*Wh)\r\n' + '1-0:2.7.0(000000000*W)\r\n' + '1-0:3.8.0(000000747*varh)\r\n' + '1-0:3.8.1(000000000*varh)\r\n' + '1-0:3.8.2(000000747*varh)\r\n' + '1-0:3.7.0(000000000*var)\r\n' + '1-0:4.8.0(003897726*varh)\r\n' + '1-0:4.8.1(002692848*varh)\r\n' + '1-0:4.8.2(001204878*varh)\r\n' + '1-0:4.7.0(000000166*var)\r\n' + '!7EF9\r\n') + +# The code below creates full_frame with the format: +# Tag (0xDB) | SystemTitleLength (0x08) | SystemTitle (8 bytes) | LongFormLengthIndicator (0x82) | TotalLength (2 bytes, big endian) (SecurityControlFieldLength + InvocationCounterLength + CiphertextLength + GcmTagLength) | SecurityControlField (0x30) | InvocationCounter (4 bytes, big endian) (also called "frame counter") | EncryptedTelegram | GcmTag (12 bytes) + +system_title = "SYSTEMID".encode("ascii") # must be 8 bytes +invocation_counter = [0x10, 0x00, 0x00, 0x01] # must be 4 bytes (can have any value) big endian + +securityControlField = SecurityControlField(security_suite=0, authenticated=True, encrypted=True) +encryptedTelegramWithGcmTag = encrypt(security_control=securityControlField, + key=unhexlify("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"), # the encryption key is supposed to be provided by the electricity provider. + + auth_key=unhexlify("00112233445566778899AABBCCDDEEFF"), # the auth_key is hardcoded and specified in "specs/Luxembourg Smarty P1 specification v1.1.3.pdf" + # chapter "3.2.5 P1 software – Channel security". + system_title=system_title, + invocation_counter=int.from_bytes(invocation_counter), + plain_text=TELEGRAM_SAGEMCOM_T210_D_R.encode("ascii")) + +full_frame = bytearray(GeneralGlobalCipher.TAG.to_bytes(1, "big", signed=False)) # = 0xDB +full_frame.extend([0x08]) # length of the title +full_frame.extend(system_title) # 8 bytes string +full_frame.extend([0x82]) # it means 2 length bytes follow + +total_len = 1 + 4 + len(encryptedTelegramWithGcmTag) # TotalLength = SecurityControlFieldLength + InvocationCounterLength + CiphertextWithGcmTagLength +full_frame.extend(total_len.to_bytes(2, "big", signed=False)) +full_frame.extend(securityControlField.to_bytes()) # = 0x30 +full_frame.extend(invocation_counter) # invocation counter (any 4 bytes value, big endian) +full_frame.extend(encryptedTelegramWithGcmTag) + +with open("encrypted_packet.bin", "wb") as f: + f.write(full_frame) From 5e454e75bd6c6c2aa86d035b0f83ef1df0a03729 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Thu, 18 Sep 2025 16:47:19 +0200 Subject: [PATCH 16/25] * Improve Readme * EncryptedPacketAccumulator: add header consistency check --- README.md | 10 ++++----- src/dsmr/encrypted_packet_accumulator.h | 22 ++++++++++++------- .../encrypted_packet_accumulator_test.cpp | 4 ++-- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 4e61980..bc4fb53 100644 --- a/README.md +++ b/README.md @@ -145,17 +145,17 @@ void main() { } ``` -# History behind this fork +# History behind arduino-dsmr [matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. [glmnet](https://github.com/glmnet) and [zuidwijk](https://github.com/zuidwijk) continued work on this parser in the fork [glmnet/arduino-dsmr](https://github.com/glmnet/arduino-dsmr). They used the parser to create [ESPHome DSMR](https://esphome.io/components/sensor/dsmr/) component. After that, the work on the `arduino-dsmr` parser stopped. -Since then, some issues and unmerged pull requests have accumulated. Additionally, the dependency on the Arduino framework can cause issues for some ESP32 boards. -This fork was created to address the existing issues and make the parser usable on any platform. +Since then, some issues and unmerged pull requests have accumulated. Additionally, the dependency on the Arduino framework causes various issues for some ESP32 boards. +This fork addresses the existing issues and makes the parser usable on any platform. ## The reasons `arduino-dsmr-2` fork was created * Dependency on the Arduino framework limits the applicability of this parser. For example, it is not possible to use it on Linux. -* The Arduino framework on ESP32 inflates the FW size and doesn't allow usage of the latest version of ESP-IDF, and limits the applicability of the parser. -Many pull requests and bug fixes needed to be integrated into the parser. +* The Arduino framework on ESP32 inflates the FW size and doesn't allow usage of the latest version of ESP-IDF. +* Many pull requests and bug fixes needed to be integrated into the parser. * Lack of support for encrypted DSMR messages. # How to work with the code diff --git a/src/dsmr/encrypted_packet_accumulator.h b/src/dsmr/encrypted_packet_accumulator.h index 3383c23..e14a095 100644 --- a/src/dsmr/encrypted_packet_accumulator.h +++ b/src/dsmr/encrypted_packet_accumulator.h @@ -57,6 +57,13 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { std::copy(invocation_counter, invocation_counter + 4, nonce.begin() + 8); return nonce; } + + // There is no way to check if the received header is valid. + // Best we can do is to check the values of the constant fields and that the length is realistic. + bool check_consistency() const { + return header.fields.tag == 0xDB && header.fields.system_title_length == 0x08 && header.fields.long_form_length_indicator == 0x82 && + header.fields.security_control_field == 0x30 && telegram_with_gcm_tag_length() > 25; + } }; class TelegramAccumulator : NonCopyableAndNonMovable { @@ -111,7 +118,7 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { std::array _encryption_key{}; public: - enum class Error { BufferOverflow, TelegramSizeTooSmall, FailedToSetEncryptionKey, DecryptionFailed }; + enum class Error { BufferOverflow, HeaderCorrupted, FailedToSetEncryptionKey, DecryptionFailed }; enum class SetEncryptionKeyError { EncryptionKeyLengthIsNot32Bytes, EncryptionKeyContainsNonHexSymbols }; class Result { @@ -165,15 +172,14 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { return {}; } - if (_header_accumulator.telegram_with_gcm_tag_length() > static_cast(_encrypted_telegram_accumulator.capacity())) { + if (!_header_accumulator.check_consistency()) { _state = State::WaitingForPacketStartSymbol; - return Error::BufferOverflow; + return Error::HeaderCorrupted; } - // Sanity check. The length must be at least 20 bytes - if (_header_accumulator.telegram_with_gcm_tag_length() < 20) { + if (_header_accumulator.telegram_with_gcm_tag_length() > static_cast(_encrypted_telegram_accumulator.capacity())) { _state = State::WaitingForPacketStartSymbol; - return Error::TelegramSizeTooSmall; + return Error::BufferOverflow; } _state = State::AccumulatingTelegramWithGcmTag; @@ -221,8 +227,8 @@ inline const char* to_string(const EncryptedPacketAccumulator::Error error) { switch (error) { case EncryptedPacketAccumulator::Error::BufferOverflow: return "BufferOverflow"; - case EncryptedPacketAccumulator::Error::TelegramSizeTooSmall: - return "TelegramSizeTooSmall"; + case EncryptedPacketAccumulator::Error::HeaderCorrupted: + return "HeaderCorrupted"; case EncryptedPacketAccumulator::Error::FailedToSetEncryptionKey: return "FailedToSetEncryptionKey"; case EncryptedPacketAccumulator::Error::DecryptionFailed: diff --git a/src/test/encrypted_packet_accumulator_test.cpp b/src/test/encrypted_packet_accumulator_test.cpp index 5919ff8..5d21f7a 100644 --- a/src/test/encrypted_packet_accumulator_test.cpp +++ b/src/test/encrypted_packet_accumulator_test.cpp @@ -108,7 +108,7 @@ TEST_CASE("Encryption key validation") { TEST_CASE("BufferOverflow when telegram length exceeds capacity") { arduino_dsmr_2::EncryptedPacketAccumulator acc(10); - const auto& header = make_header(16); + const auto& header = make_header(40); for (const auto byte : header) { const auto& res = acc.process_byte(byte); if (res.error()) { @@ -125,7 +125,7 @@ TEST_CASE("Telegram is too small") { for (const auto byte : header) { const auto& res = acc.process_byte(byte); if (res.error()) { - REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::TelegramSizeTooSmall); + REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::HeaderCorrupted); return; } } From cbf36477649619f6af7f43db7721b833a2d54e4a Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Fri, 19 Sep 2025 02:04:28 +0200 Subject: [PATCH 17/25] Change the folder name from dsmr to arduino-dsmr-2 --- README.md | 15 +++++----- library.json | 4 +-- .../encrypted_packet_accumulator.h | 0 src/{dsmr => arduino-dsmr-2}/fields.h | 0 .../packet_accumulator.h | 0 src/{dsmr => arduino-dsmr-2}/parser.h | 0 src/{dsmr => arduino-dsmr-2}/util.h | 0 ...rypted_packet_accumulator_example_test.cpp | 6 ++-- ...rypted_packet_accumulator_include_test.cpp | 2 +- .../encrypted_packet_accumulator_test.cpp | 30 ++++++++++--------- src/test/packet_accumulator_example_test.cpp | 6 ++-- src/test/packet_accumulator_include_test.cpp | 2 +- src/test/packet_accumulator_test.cpp | 2 +- src/test/parser_include_test.cpp | 4 +-- src/test/parser_test.cpp | 4 +-- 15 files changed, 38 insertions(+), 37 deletions(-) rename src/{dsmr => arduino-dsmr-2}/encrypted_packet_accumulator.h (100%) rename src/{dsmr => arduino-dsmr-2}/fields.h (100%) rename src/{dsmr => arduino-dsmr-2}/packet_accumulator.h (100%) rename src/{dsmr => arduino-dsmr-2}/parser.h (100%) rename src/{dsmr => arduino-dsmr-2}/util.h (100%) diff --git a/README.md b/README.md index bc4fb53..2d64847 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The primary goal is to make the parser independent of the Arduino framework and # How to use ## General usage -The library is header-only. Add the `src/dsmr` folder to your project.
+The library is header-only. Add the `src/arduino-dsmr-2` folder to your project.
Note: `encrypted_packet_accumulator.h` header depends on [Mbed TLS](https://www.trustedfirmware.org/projects/mbed-tls/) library. It is already included in the `ESP-IDF` framework and can be easily added to any other platforms. ## Usage from PlatformIO @@ -30,9 +30,9 @@ The library is available on the PlatformIO registry:
## Complete example ``` -#include "dsmr/fields.h" -#include "dsmr/packet_accumulator.h" -#include "dsmr/parser.h" +#include "arduino-dsmr-2/fields.h" +#include "arduino-dsmr-2/packet_accumulator.h" +#include "arduino-dsmr-2/parser.h" #include using namespace arduino_dsmr_2; @@ -107,10 +107,9 @@ void main() { ## EncryptedPacketAccumulator example ``` -#include "dsmr/fields.h" -#include "dsmr/encrypted_packet_accumulator.h" -#include "dsmr/parser.h" -#include +#include "arduino-dsmr-2/fields.h" +#include "arduino-dsmr-2/encrypted_packet_accumulator.h" +#include "arduino-dsmr-2/parser.h" #include using namespace arduino_dsmr_2; diff --git a/library.json b/library.json index 1901ffd..8e03aec 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "arduino-dsmr-2", - "version": "3.0", + "version": "4.0", "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { @@ -8,5 +8,5 @@ "url": "https://github.com/PolarGoose/arduino-dsmr-2" }, "license": "MIT", - "export": { "include": [ "src/dsmr/*.h" ] } + "export": { "include": [ "src/arduino-dsmr-2/*.h" ] } } diff --git a/src/dsmr/encrypted_packet_accumulator.h b/src/arduino-dsmr-2/encrypted_packet_accumulator.h similarity index 100% rename from src/dsmr/encrypted_packet_accumulator.h rename to src/arduino-dsmr-2/encrypted_packet_accumulator.h diff --git a/src/dsmr/fields.h b/src/arduino-dsmr-2/fields.h similarity index 100% rename from src/dsmr/fields.h rename to src/arduino-dsmr-2/fields.h diff --git a/src/dsmr/packet_accumulator.h b/src/arduino-dsmr-2/packet_accumulator.h similarity index 100% rename from src/dsmr/packet_accumulator.h rename to src/arduino-dsmr-2/packet_accumulator.h diff --git a/src/dsmr/parser.h b/src/arduino-dsmr-2/parser.h similarity index 100% rename from src/dsmr/parser.h rename to src/arduino-dsmr-2/parser.h diff --git a/src/dsmr/util.h b/src/arduino-dsmr-2/util.h similarity index 100% rename from src/dsmr/util.h rename to src/arduino-dsmr-2/util.h diff --git a/src/test/encrypted_packet_accumulator_example_test.cpp b/src/test/encrypted_packet_accumulator_example_test.cpp index 391b3a3..cebd088 100644 --- a/src/test/encrypted_packet_accumulator_example_test.cpp +++ b/src/test/encrypted_packet_accumulator_example_test.cpp @@ -1,6 +1,6 @@ -#include "dsmr/encrypted_packet_accumulator.h" -#include "dsmr/fields.h" -#include "dsmr/parser.h" +#include "arduino-dsmr-2/encrypted_packet_accumulator.h" +#include "arduino-dsmr-2/fields.h" +#include "arduino-dsmr-2/parser.h" #include #include diff --git a/src/test/encrypted_packet_accumulator_include_test.cpp b/src/test/encrypted_packet_accumulator_include_test.cpp index a26ce3e..ba71aca 100644 --- a/src/test/encrypted_packet_accumulator_include_test.cpp +++ b/src/test/encrypted_packet_accumulator_include_test.cpp @@ -1,6 +1,6 @@ // This code tests that the encrypted_packet_accumulator header has all necessary dependencies included in its headers. // We check that the code compiles. -#include "dsmr/encrypted_packet_accumulator.h" +#include "arduino-dsmr-2/encrypted_packet_accumulator.h" void EncryptedPacketAccumulator_some_function() { arduino_dsmr_2::EncryptedPacketAccumulator(1000); } diff --git a/src/test/encrypted_packet_accumulator_test.cpp b/src/test/encrypted_packet_accumulator_test.cpp index 5d21f7a..544c6ff 100644 --- a/src/test/encrypted_packet_accumulator_test.cpp +++ b/src/test/encrypted_packet_accumulator_test.cpp @@ -1,9 +1,11 @@ +#include "arduino-dsmr-2/encrypted_packet_accumulator.h" #include -#include #include #include #include +using namespace arduino_dsmr_2; + inline std::vector read_binary_file(const std::filesystem::path path) { std::ifstream file(path, std::ios::binary); return {std::istreambuf_iterator(file), std::istreambuf_iterator()}; @@ -30,7 +32,7 @@ static std::vector make_header(const std::uint16_t total_len) { } TEST_CASE("Can receive correct packet") { - auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + auto accumulator = EncryptedPacketAccumulator(1000); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); for (const auto& byte : encrypted_packet) { @@ -51,13 +53,13 @@ TEST_CASE("Error on corrupted packet") { auto corrupted_packet = encrypted_packet; corrupted_packet[50] ^= 0xFF; - auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + auto accumulator = EncryptedPacketAccumulator(1000); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); for (const auto& byte : corrupted_packet) { const auto& res = accumulator.process_byte(byte); if (res.error()) { - REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::DecryptionFailed); + REQUIRE(*res.error() == EncryptedPacketAccumulator::Error::DecryptionFailed); return; } } @@ -83,7 +85,7 @@ TEST_CASE("Receive many packets") { total_packet.insert(total_packet.end(), packet4.begin(), packet4.end()); size_t received_packets = 0; - auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + auto accumulator = EncryptedPacketAccumulator(1000); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); for (const auto byte : total_packet) { @@ -98,21 +100,21 @@ TEST_CASE("Receive many packets") { } TEST_CASE("Encryption key validation") { - auto accumulator = arduino_dsmr_2::EncryptedPacketAccumulator(1000); + auto accumulator = EncryptedPacketAccumulator(1000); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); REQUIRE(!accumulator.set_encryption_key("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").has_value()); - REQUIRE(*accumulator.set_encryption_key("AAAAAAAAAAA") == arduino_dsmr_2::EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyLengthIsNot32Bytes); + REQUIRE(*accumulator.set_encryption_key("AAAAAAAAAAA") == EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyLengthIsNot32Bytes); REQUIRE(*accumulator.set_encryption_key("GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") == - arduino_dsmr_2::EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyContainsNonHexSymbols); + EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyContainsNonHexSymbols); } TEST_CASE("BufferOverflow when telegram length exceeds capacity") { - arduino_dsmr_2::EncryptedPacketAccumulator acc(10); + EncryptedPacketAccumulator acc(10); const auto& header = make_header(40); for (const auto byte : header) { const auto& res = acc.process_byte(byte); if (res.error()) { - REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::BufferOverflow); + REQUIRE(*res.error() == EncryptedPacketAccumulator::Error::BufferOverflow); return; } } @@ -120,12 +122,12 @@ TEST_CASE("BufferOverflow when telegram length exceeds capacity") { } TEST_CASE("Telegram is too small") { - arduino_dsmr_2::EncryptedPacketAccumulator acc(1000); + EncryptedPacketAccumulator acc(1000); const auto& header = make_header(16); for (const auto byte : header) { const auto& res = acc.process_byte(byte); if (res.error()) { - REQUIRE(*res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::HeaderCorrupted); + REQUIRE(*res.error() == EncryptedPacketAccumulator::Error::HeaderCorrupted); return; } } @@ -133,14 +135,14 @@ TEST_CASE("Telegram is too small") { } TEST_CASE("Can receive packet after buffer overflow") { - arduino_dsmr_2::EncryptedPacketAccumulator accumulator(1000); + EncryptedPacketAccumulator accumulator(1000); REQUIRE_FALSE(accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); auto too_long_header = make_header(2000); bool overflow_error_occurred = false; for (const auto byte : too_long_header) { const auto& res = accumulator.process_byte(byte); - if (res.error() == arduino_dsmr_2::EncryptedPacketAccumulator::Error::BufferOverflow) { + if (res.error() == EncryptedPacketAccumulator::Error::BufferOverflow) { overflow_error_occurred = true; } } diff --git a/src/test/packet_accumulator_example_test.cpp b/src/test/packet_accumulator_example_test.cpp index a47248d..c11a246 100644 --- a/src/test/packet_accumulator_example_test.cpp +++ b/src/test/packet_accumulator_example_test.cpp @@ -1,6 +1,6 @@ -#include "dsmr/fields.h" -#include "dsmr/packet_accumulator.h" -#include "dsmr/parser.h" +#include "arduino-dsmr-2/fields.h" +#include "arduino-dsmr-2/packet_accumulator.h" +#include "arduino-dsmr-2/parser.h" #include #include diff --git a/src/test/packet_accumulator_include_test.cpp b/src/test/packet_accumulator_include_test.cpp index 11720af..e8beb0b 100644 --- a/src/test/packet_accumulator_include_test.cpp +++ b/src/test/packet_accumulator_include_test.cpp @@ -1,6 +1,6 @@ // This code tests that the packet_accumulator header has all necessary dependencies included in its headers. // We check that the code compiles. -#include "dsmr/packet_accumulator.h" +#include "arduino-dsmr-2/packet_accumulator.h" void PacketAccumulator_some_function() { arduino_dsmr_2::PacketAccumulator({}, true); } diff --git a/src/test/packet_accumulator_test.cpp b/src/test/packet_accumulator_test.cpp index e11d517..c1c7571 100644 --- a/src/test/packet_accumulator_test.cpp +++ b/src/test/packet_accumulator_test.cpp @@ -1,5 +1,5 @@ +#include "arduino-dsmr-2/packet_accumulator.h" #include -#include #include using namespace arduino_dsmr_2; diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp index 393f109..05cf808 100644 --- a/src/test/parser_include_test.cpp +++ b/src/test/parser_include_test.cpp @@ -1,8 +1,8 @@ // This code tests that the parser has all necessary dependencies included in its headers. // We check that the code compiles. -#include "dsmr/fields.h" -#include "dsmr/parser.h" +#include "arduino-dsmr-2/fields.h" +#include "arduino-dsmr-2/parser.h" using namespace arduino_dsmr_2; using namespace fields; diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index ac5a33b..079e5d3 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -1,5 +1,5 @@ -#include "dsmr/fields.h" -#include "dsmr/parser.h" +#include "arduino-dsmr-2/fields.h" +#include "arduino-dsmr-2/parser.h" #include #include From 2a77d68530976a99e3304cbd2b96759d4b7c0b74 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Fri, 19 Sep 2025 12:02:54 +0200 Subject: [PATCH 18/25] Add extra references to Readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2d64847..72fea37 100644 --- a/README.md +++ b/README.md @@ -164,3 +164,5 @@ This fork addresses the existing issues and makes the parser usable on any platf # References * [DSMR parser in Python](https://github.com/ndokter/dsmr_parser/tree/master) +* [SmartyReader](https://www.weigu.lu/microcontroller/smartyReader_P1/index.html) - open source hardware to communicate with P1 port. +* [SmartyReader. Chapter "Encryption"](https://www.weigu.lu/microcontroller/smartyReader/index.html) - description of how the encrypted DSMR protocol works. From e3b3061213f142ed0baa431845cc5ccdcda717cd Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Sat, 20 Sep 2025 01:41:08 +0200 Subject: [PATCH 19/25] Add EncryptedPacketAccumulator::reset method --- README.md | 8 +- library.json | 2 +- .../encrypted_packet_accumulator.h | 9 +- ...rypted_packet_accumulator_example_test.cpp | 8 +- .../encrypted_packet_accumulator_test.cpp | 131 +++++++++--------- 5 files changed, 91 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index 72fea37..d9dedd9 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,8 @@ void main() { // This class is similar to the PacketAccumulator, but it handles encrypted packets. // Use this class only if you have a smart meter that uses encryption. - EncryptedPacketAccumulator accumulator(4000); + // The class allocates two buffers of buffer_size. One for accumulating encrypted data and one for decrypted data. + EncryptedPacketAccumulator accumulator(/* buffer_size */ 4000); // Set the encryption key. This key is unique for each smart meter and should be provided by your energy supplier. const auto error = accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); @@ -140,6 +141,11 @@ void main() { if (res.packet()) { // Parse the received packet the same way as with PacketAccumulator example } + + // If the data stops coming, but the packet is not fully received then you have to drop the accumulated data and start from scratch. + if (/* timeout */ false) { + accumulator.reset(); + } } } ``` diff --git a/library.json b/library.json index 8e03aec..ee20b1f 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "arduino-dsmr-2", - "version": "4.0", + "version": "5.0", "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { diff --git a/src/arduino-dsmr-2/encrypted_packet_accumulator.h b/src/arduino-dsmr-2/encrypted_packet_accumulator.h index e14a095..888deae 100644 --- a/src/arduino-dsmr-2/encrypted_packet_accumulator.h +++ b/src/arduino-dsmr-2/encrypted_packet_accumulator.h @@ -136,7 +136,7 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { auto error() const { return _error; } }; - explicit EncryptedPacketAccumulator(size_t bufferSize) : _encrypted_telegram_accumulator(bufferSize), _decrypted_telegram_buf(bufferSize) {} + explicit EncryptedPacketAccumulator(const size_t buffer_size) : _encrypted_telegram_accumulator(buffer_size), _decrypted_telegram_buf(buffer_size) {} // key_hex is a string like "00112233445566778899AABBCCDDEEFF" std::optional set_encryption_key(std::string_view key_hex) { @@ -211,6 +211,13 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { return {}; } + // According to the specification, packets arrive once every 10 seconds. + // It is possible that some bytes are lost during transmission. + // Thus, you need to use a timeout to detect when a packet transmission finishes. + // In case the transmission finished, but the `process_byte` method did not return a complete packet, + // you need to call this method to reset the internal state machine. + void reset() { _state = State::WaitingForPacketStartSymbol; } + private: static std::optional to_hex_value(const char c) { if (c >= '0' && c <= '9') diff --git a/src/test/encrypted_packet_accumulator_example_test.cpp b/src/test/encrypted_packet_accumulator_example_test.cpp index cebd088..265f30f 100644 --- a/src/test/encrypted_packet_accumulator_example_test.cpp +++ b/src/test/encrypted_packet_accumulator_example_test.cpp @@ -12,7 +12,8 @@ TEST_CASE("Complete example encrypted packet accumulator") { // This class is similar to the PacketAccumulator, but it handles encrypted packets. // Use this class only if you have a smart meter that uses encryption. - EncryptedPacketAccumulator accumulator(4000); + // The class allocates two buffers of buffer_size. One for accumulating encrypted data and one for decrypted data. + EncryptedPacketAccumulator accumulator(/* buffer_size */ 4000); // Set the encryption key. This key is unique for each smart meter and should be provided by your energy supplier. const auto error = accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); @@ -32,5 +33,10 @@ TEST_CASE("Complete example encrypted packet accumulator") { if (res.packet()) { // Parse the received packet the same way as with PacketAccumulator example } + + // If the data stops coming, but the packet is not fully received then you have to drop the accumulated data and start from scratch. + if (/* timeout */ false) { + accumulator.reset(); + } } } diff --git a/src/test/encrypted_packet_accumulator_test.cpp b/src/test/encrypted_packet_accumulator_test.cpp index 544c6ff..8914c09 100644 --- a/src/test/encrypted_packet_accumulator_test.cpp +++ b/src/test/encrypted_packet_accumulator_test.cpp @@ -2,10 +2,20 @@ #include #include #include +#include #include using namespace arduino_dsmr_2; +template +std::vector concat(const std::vector& first, const Vecs&... rest) { + std::vector out; + out.reserve(first.size() + (rest.size() + ... + 0)); + out.insert(out.end(), first.begin(), first.end()); + (out.insert(out.end(), rest.begin(), rest.end()), ...); + return out; +} + inline std::vector read_binary_file(const std::filesystem::path path) { std::ifstream file(path, std::ios::binary); return {std::istreambuf_iterator(file), std::istreambuf_iterator()}; @@ -14,21 +24,9 @@ inline std::vector read_binary_file(const std::filesystem::path pa const auto& encrypted_packet = read_binary_file(std::filesystem::path(std::source_location::current().file_name()).parent_path() / "test_data" / "encrypted_packet.bin"); -static std::vector make_header(const std::uint16_t total_len) { - std::vector header(18); - const std::array system_title = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}; - const std::array invocation_counter = {0x00, 0x11, 0x22, 0x33}; - - header[0] = 0xDB; // tag - header[1] = 0x08; // system_title_length - std::copy(system_title.begin(), system_title.end(), header.begin() + 2); - header[10] = 0x82; // long form length indicator - header[11] = static_cast((total_len >> 8) & 0xFF); - header[12] = static_cast(total_len & 0xFF); - header[13] = 0x30; // security_control_field - std::copy(invocation_counter.begin(), invocation_counter.end(), header.begin() + 14); - - return header; +static void change_length(std::vector& packet, const std::uint16_t total_len) { + packet[11] = static_cast((total_len >> 8) & 0xFF); + packet[12] = static_cast(total_len & 0xFF); } TEST_CASE("Can receive correct packet") { @@ -67,38 +65,6 @@ TEST_CASE("Error on corrupted packet") { REQUIRE(false); } -TEST_CASE("Receive many packets") { - auto garbage1 = std::vector(100, 0x55); - auto packet1 = encrypted_packet; - auto garbage2 = std::vector(100, 0x55); - auto packet2_corrupted = encrypted_packet; - packet2_corrupted[50] ^= 0xFF; - auto packet3 = encrypted_packet; - auto packet4 = encrypted_packet; - - std::vector total_packet; - total_packet.insert(total_packet.end(), garbage1.begin(), garbage1.end()); - total_packet.insert(total_packet.end(), packet1.begin(), packet1.end()); - total_packet.insert(total_packet.end(), garbage2.begin(), garbage2.end()); - total_packet.insert(total_packet.end(), packet2_corrupted.begin(), packet2_corrupted.end()); - total_packet.insert(total_packet.end(), packet3.begin(), packet3.end()); - total_packet.insert(total_packet.end(), packet4.begin(), packet4.end()); - - size_t received_packets = 0; - auto accumulator = EncryptedPacketAccumulator(1000); - REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); - - for (const auto byte : total_packet) { - auto res = accumulator.process_byte(byte); - - if (res.packet()) { - received_packets++; - } - } - - REQUIRE(received_packets == 3); -} - TEST_CASE("Encryption key validation") { auto accumulator = EncryptedPacketAccumulator(1000); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); @@ -110,8 +76,7 @@ TEST_CASE("Encryption key validation") { TEST_CASE("BufferOverflow when telegram length exceeds capacity") { EncryptedPacketAccumulator acc(10); - const auto& header = make_header(40); - for (const auto byte : header) { + for (const auto byte : encrypted_packet) { const auto& res = acc.process_byte(byte); if (res.error()) { REQUIRE(*res.error() == EncryptedPacketAccumulator::Error::BufferOverflow); @@ -123,8 +88,10 @@ TEST_CASE("BufferOverflow when telegram length exceeds capacity") { TEST_CASE("Telegram is too small") { EncryptedPacketAccumulator acc(1000); - const auto& header = make_header(16); - for (const auto byte : header) { + auto too_small_packet = encrypted_packet; + change_length(too_small_packet, 16); + + for (const auto byte : too_small_packet) { const auto& res = acc.process_byte(byte); if (res.error()) { REQUIRE(*res.error() == EncryptedPacketAccumulator::Error::HeaderCorrupted); @@ -134,30 +101,68 @@ TEST_CASE("Telegram is too small") { REQUIRE(false); } -TEST_CASE("Can receive packet after buffer overflow") { +TEST_CASE("Reset works") { EncryptedPacketAccumulator accumulator(1000); REQUIRE_FALSE(accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); - auto too_long_header = make_header(2000); - bool overflow_error_occurred = false; - for (const auto byte : too_long_header) { + for (auto byte : encrypted_packet | std::views::take(50)) { const auto& res = accumulator.process_byte(byte); - if (res.error() == EncryptedPacketAccumulator::Error::BufferOverflow) { - overflow_error_occurred = true; - } + REQUIRE(res.error().has_value() == false); + REQUIRE(res.packet().has_value() == false); } - REQUIRE(overflow_error_occurred); + accumulator.reset(); + + bool got_packet = false; for (const auto& byte : encrypted_packet) { - auto res = accumulator.process_byte(byte); + const auto& res = accumulator.process_byte(byte); REQUIRE(res.error().has_value() == false); if (res.packet()) { - REQUIRE(std::string(*res.packet()).ends_with("1-0:4.7.0(000000166*var)\r\n!7EF9\r\n")); REQUIRE(std::string(*res.packet()).starts_with("/EST5\\253710000_A\r\n")); - return; + REQUIRE(std::string(*res.packet()).ends_with("1-0:4.7.0(000000166*var)\r\n!7EF9\r\n")); + got_packet = true; + break; } } - REQUIRE(false); + REQUIRE(got_packet); +} + +TEST_CASE("Receive many packets") { + auto accumulator = EncryptedPacketAccumulator(500); + REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); + + const auto& garbage = std::vector(100, 0x55); + + auto packet_corrupted = encrypted_packet; + packet_corrupted[50] ^= 0xFF; + + auto packet_too_short_length = encrypted_packet; + change_length(packet_too_short_length, 16); + + auto packet_too_long_length = encrypted_packet; + change_length(packet_too_long_length, 2000); + + size_t received_packets = 0; + std::vector occurred_errors; + + for (const auto byte : concat(garbage, encrypted_packet, garbage, packet_too_short_length, packet_corrupted, encrypted_packet, packet_corrupted, + encrypted_packet, packet_too_long_length, encrypted_packet)) { + auto res = accumulator.process_byte(byte); + + if (res.packet()) { + received_packets++; + } + + if (res.error()) { + occurred_errors.push_back(*res.error()); + } + } + + REQUIRE(received_packets == 4); + + using enum EncryptedPacketAccumulator::Error; + REQUIRE(occurred_errors == std::vector{HeaderCorrupted, HeaderCorrupted, HeaderCorrupted, HeaderCorrupted, DecryptionFailed, DecryptionFailed, BufferOverflow, + HeaderCorrupted, HeaderCorrupted, HeaderCorrupted}); } From 4fdf47e8211731871ee8475594d9237086dee4c6 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Sat, 20 Sep 2025 15:41:52 +0200 Subject: [PATCH 20/25] Merge pull request https://github.com/glmnet/arduino-dsmr/pull/18 Add AveragedFixedField. It fixes the issue https://github.com/esphome/issues/issues/4750 --- library.json | 2 +- src/arduino-dsmr-2/fields.h | 63 ++++++++++++++++++++++++++++++++++++- src/test/parser_test.cpp | 34 ++++++++++++++++++-- 3 files changed, 95 insertions(+), 4 deletions(-) diff --git a/library.json b/library.json index ee20b1f..4a46639 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "arduino-dsmr-2", - "version": "5.0", + "version": "6.0", "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { diff --git a/src/arduino-dsmr-2/fields.h b/src/arduino-dsmr-2/fields.h index d7d53ca..b09c99c 100644 --- a/src/arduino-dsmr-2/fields.h +++ b/src/arduino-dsmr-2/fields.h @@ -156,6 +156,67 @@ struct IntField : ParsedField { static const char* unit() { return _unit; } }; +// Take the average value of multiple values. Example: +// 0-0:98.1.0(2)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW)(230202000000W)(230214224500W)(04.529*kW) +// Will produce an average between 4.329 and 4.529 +template +struct AveragedFixedField : public FixedField { + ParseResult parse(const char* str, const char* end) { + // get the number of values that are available in the data + auto numberOfValues = NumParser::parse(0, "", str, end); + if (numberOfValues.err) { + return numberOfValues; + } + + if (numberOfValues.result == 0) { + numberOfValues.next = end; // mark that we consumed all input + static_cast(this)->val()._value = 0; + return numberOfValues; + } + + // Skip (1-0:1.6.0) + auto res = StringParser::parse_string(1, 20, numberOfValues.next, end); + if (res.err) + return res; + + // Skip another (1-0:1.6.0) + res = StringParser::parse_string(1, 20, res.next, end); + if (res.err) + return res; + + ParseResult average; + average.succeed(0u); + average.next = res.next; + for (uint32_t i = 0; i < numberOfValues.result; i++) { + // skip date (230201000000W) + res = StringParser::parse_string(1, 20, average.next, end); + if (res.err) + return res; + + // skip second date (230117224500W) + res = StringParser::parse_string(1, 20, res.next, end); + if (res.err) + return res; + + // parse value (04.329*kW) or (04329*W) + auto monthValue = NumParser::parse(3, _unit, res.next, end); + if (monthValue.err) { + monthValue = NumParser::parse(0, _int_unit, res.next, end); + if (monthValue.err) + return monthValue; + } + + average.next = monthValue.next; + average.result += monthValue.result; + } + + average.result /= numberOfValues.result; + static_cast(this)->val()._value = average.result; + + return average; + } +}; + // A RawField is not parsed, the entire value (including any parenthesis around it) is returned as a string. template struct RawField : ParsedField { @@ -514,7 +575,7 @@ DEFINE_FIELD(apparent_energy_export_last_completed_demand, FixedValue, ObisId(1, // Maximum energy consumption from the current month DEFINE_FIELD(active_energy_import_maximum_demand_running_month, TimestampedFixedValue, ObisId(1, 0, 1, 6, 0), TimestampedFixedField, units::kW, units::W); // Maximum energy consumption from the last 13 months -DEFINE_FIELD(active_energy_import_maximum_demand_last_13_months, FixedValue, ObisId(0, 0, 98, 1, 0), LastFixedField, units::kW, units::W); +DEFINE_FIELD(active_energy_import_maximum_demand_last_13_months, FixedValue, ObisId(0, 0, 98, 1, 0), AveragedFixedField, units::kW, units::W); // Image Core Version and checksum DEFINE_FIELD(fw_core_version, FixedValue, ObisId(1, 0, 0, 2, 0), FixedField, units::none, units::none); diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index 079e5d3..64b1777 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -33,6 +33,7 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { "0-0:96.7.21(00008)\r\n" "0-0:96.7.9(00007)\r\n" "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" + "0-0:98.1.0(2)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW)(230202000000W)(230214224500W)(04529*W)\r\n" "1-0:32.32.0(00000)\r\n" "1-0:32.36.0(00000)\r\n" "0-0:96.13.1()\r\n" @@ -44,7 +45,7 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { "0-1:96.1.0(0000000000000000000000000000000000)\r\n" "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" "0-1:24.4.0(1)\r\n" - "!6f4A\r\n"; + "!f2C9\r\n"; ParsedData< /* String */ identification, @@ -94,7 +95,8 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { /* uint16_t */ water_device_type, /* String */ water_equipment_id, /* uint8_t */ water_valve_position, - /* TimestampedFixedValue */ water_delivered> + /* TimestampedFixedValue */ water_delivered, + /* AveragedFixedField */ active_energy_import_maximum_demand_last_13_months> data; auto res = P1Parser::parse(&data, msg, std::size(msg), true); @@ -131,6 +133,7 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { REQUIRE(data.gas_equipment_id == "0000000000000000000000000000000000"); REQUIRE(data.gas_valve_position == 1); REQUIRE(data.gas_delivered == 473.789f); + REQUIRE(data.active_energy_import_maximum_demand_last_13_months.val() == 4.429f); } TEST_CASE("Should report an error if the crc has incorrect format") { @@ -626,3 +629,30 @@ TEST_CASE("Use integer fallback unit") { REQUIRE(data.gas_delivered == 0.012f); REQUIRE(data.frequency == 0.05f); } + +TEST_CASE("AveragedFixedField works properly for a long array") { + const auto& msg = "/KMP5 ZABF000000000000\r\n" + "0-0:98.1.0(11)(1-0:1.6.0)(1-0:1.6.0)(230101000000W)(221206183000W)(06.134*kW)(230201000000W)(230127174500W)(05.644*kW)(230301000000W)(" + "230226063000W)(04.895*kW)(230401000000S)(230305181500W)(04.879*kW)(230501000000S)(230416094500S)(04.395*kW)(230601000000S)(230522084500S)(" + "03.242*kW)(230701000000S)(230623053000S)(01.475*kW)(230801000000S)(230724060000S)(02.525*kW)(230901000000S)(230819174500S)(02.491*kW)(" + "231001000000S)(230911063000S)(02.342*kW)(231101000000W)(231031234500W)(02.048*kW)\r\n" + "!"; + + ParsedData data; + P1Parser::parse(&data, msg, std::size(msg), /* unknown_error */ true, /* check_crc */ false); + + REQUIRE(data.active_energy_import_maximum_demand_last_13_months.val() == 3.642f); +} + +TEST_CASE("AveragedFixedField works properly for an empty array") { + const auto& msg = "/KMP5 ZABF000000000000\r\n" + "0-0:98.1.0(0)(garbage that will be skipped)\r\n" + "1-0:1.8.1(000001.000*kwh)\r\n" + "!"; + + ParsedData data; + P1Parser::parse(&data, msg, std::size(msg), /* unknown_error */ true, /* check_crc */ false); + + REQUIRE(data.active_energy_import_maximum_demand_last_13_months.val() == 0.0f); + REQUIRE(data.energy_delivered_tariff1.val() == 1.0f); +} From 664b628a43131bb58bc3a196d8f8f93bd112fabc Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 22 Sep 2025 13:44:32 +0200 Subject: [PATCH 21/25] ParsedData: replace recursion with fold expression --- src/arduino-dsmr-2/parser.h | 57 +++++++++++++------------------------ src/arduino-dsmr-2/util.h | 12 ++++---- 2 files changed, 26 insertions(+), 43 deletions(-) diff --git a/src/arduino-dsmr-2/parser.h b/src/arduino-dsmr-2/parser.h index a4b4186..164c769 100644 --- a/src/arduino-dsmr-2/parser.h +++ b/src/arduino-dsmr-2/parser.h @@ -40,51 +40,34 @@ inline uint16_t crc16_update(uint16_t crc, uint8_t data) { // Furthermore, this class offers some helper methods that can be used // to loop over all the fields inside it. template -struct ParsedData; - -// Base case: No fields present. -template <> -struct ParsedData<> { - ParseResult parse_line(const ObisId& /* id */, const char* str, const char* /* end */) { - // Parsing succeeded, but found no matching handler (so return - // set the next pointer to show nothing was parsed). - return ParseResult().until(str); - } - - template - void applyEach(F&& /* f */) { - // Nothing to do - } - - bool all_present() { return true; } -}; +struct ParsedData : Ts... { + ParseResult parse_line(const ObisId& obisId, const char* str, const char* end) { + ParseResult res; + const auto& try_one = [&](auto& field) -> bool { + using FieldType = std::decay_t; + if (obisId != FieldType::id) { + return false; + } -// General case: At least one typename is passed. -template -struct ParsedData : public T, ParsedData { + if (field.present()) + res = ParseResult().fail("Duplicate field", str); + else { + field.present() = true; + res = field.parse(str, end); + } + return true; + }; - // This method is used by the parser to parse a single line. The - // OBIS id of the line is passed, and this method recursively finds a - // field with a matching id. If any, it calls it's parse method, which - // parses the value and stores it in the field. - ParseResult parse_line(const ObisId& obisId, const char* str, const char* end) { - if (obisId == T::id) { - if (T::present()) - return ParseResult().fail("Duplicate field", str); - T::present() = true; - return T::parse(str, end); - } - return ParsedData::parse_line(obisId, str, end); + const bool found = (try_one(static_cast(*this)) || ...); + return found ? res : ParseResult().until(str); } template void applyEach(F&& f) { - T::apply(f); - return ParsedData::applyEach(f); + (Ts::apply(f), ...); } - // Returns true when all defined fields are present. - bool all_present() { return T::present() && ParsedData::all_present(); } + bool all_present() { return (Ts::present() && ...); } }; struct StringParser { diff --git a/src/arduino-dsmr-2/util.h b/src/arduino-dsmr-2/util.h index 51f1631..8504cb0 100644 --- a/src/arduino-dsmr-2/util.h +++ b/src/arduino-dsmr-2/util.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -134,12 +135,11 @@ struct ParseResult : public _ParseResult, T> { // An OBIS id is 6 bytes, usually noted as a-b:c.d.e.f. Here we put them in an array for easy parsing. struct ObisId { - uint8_t v[6]; - - constexpr ObisId(uint8_t a, uint8_t b = 255, uint8_t c = 255, uint8_t d = 255, uint8_t e = 255, uint8_t f = 255) : v{a, b, c, d, e, f} {}; - constexpr ObisId() : v() {} // Zeroes - - bool operator==(const ObisId& other) const { return memcmp(&v, &other.v, sizeof(v)) == 0; } + std::array v{}; + constexpr ObisId(const uint8_t a, const uint8_t b = 255, const uint8_t c = 255, const uint8_t d = 255, const uint8_t e = 255, const uint8_t f = 255) noexcept + : v{a, b, c, d, e, f} {}; + ObisId() = default; + bool operator==(const ObisId&) const = default; }; } From 043537f849d14fe58dd1d6e738db545d60aff75a Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:15:50 +0200 Subject: [PATCH 22/25] build-win.ps1: Add x86 build --- build-win.ps1 | 64 ++++++++++++++++++++++++--------------------------- library.json | 2 +- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/build-win.ps1 b/build-win.ps1 index 21aef77..a8c5657 100644 --- a/build-win.ps1 +++ b/build-win.ps1 @@ -14,6 +14,27 @@ Function CheckReturnCodeOfPreviousCommand($msg) { } } +Function BuildAndTest($buildType, $arch) { + Info "Build and test $buildType-$arch" + + $thisBuildDir = "$buildDir/win-$buildType-$arch" + + Info "Cmake generate cache" + cmake -S $root ` + -B $thisBuildDir ` + -G Ninja ` + -D CMAKE_BUILD_TYPE=$buildType + CheckReturnCodeOfPreviousCommand "cmake cache failed" + + Info "Cmake build" + cmake --build $thisBuildDir + CheckReturnCodeOfPreviousCommand "cmake build failed" + + Info "Run tests" + & "$thisBuildDir/arduino_dsmr_test.exe" + CheckReturnCodeOfPreviousCommand "tests failed" +} + Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" $ProgressPreference = "SilentlyContinue" @@ -25,39 +46,14 @@ Info "Find Visual Studio installation path" $vswhereCommand = Get-Command -Name "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" $installationPath = & $vswhereCommand -prerelease -latest -property installationPath -Info "Open Visual Studio 2022 Developer PowerShell" +Info "Open Visual Studio 2022 Developer PowerShell amd64" & "$installationPath\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -Info "Build and test debug version" -Info "Cmake generate cache" -cmake ` - -S $root ` - -B $buildDir/win-debug ` - -G Ninja ` - -D CMAKE_BUILD_TYPE=Debug -CheckReturnCodeOfPreviousCommand "cmake cache failed" - -Info "Cmake build" -cmake --build $buildDir/win-debug -CheckReturnCodeOfPreviousCommand "cmake build failed" - -Info "Run tests" -& "$buildDir/win-debug/arduino_dsmr_test.exe" -CheckReturnCodeOfPreviousCommand "tests failed" - -Info "Build and test release version" -Info "Cmake generate cache" -cmake ` - -S $root ` - -B $buildDir/win-release ` - -G Ninja ` - -D CMAKE_BUILD_TYPE=Release -CheckReturnCodeOfPreviousCommand "cmake cache failed" - -Info "Cmake build" -cmake --build $buildDir/win-release -CheckReturnCodeOfPreviousCommand "cmake build failed" - -Info "Run tests" -& "$buildDir/win-release/arduino_dsmr_test.exe" -CheckReturnCodeOfPreviousCommand "tests failed" +BuildAndTest -buildType Debug -arch amd64 +BuildAndTest -buildType Release -arch amd64 + +Info "Open Visual Studio 2022 Developer PowerShell x86" +& "$installationPath\Common7\Tools\Launch-VsDevShell.ps1" -Arch x86 + +BuildAndTest -buildType Debug -arch x86 +BuildAndTest -buildType Release -arch x86 diff --git a/library.json b/library.json index 4a46639..ee592b5 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "arduino-dsmr-2", - "version": "6.0", + "version": "7.0", "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { From 8601ee06bf6fed37a28866aa27f1cf85d489240d Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 6 Oct 2025 22:15:30 +0200 Subject: [PATCH 23/25] Improve PacketAccumulator and EncryptedPacketAccumulator implementation. --- README.md | 138 ++---------------- library.json | 2 +- .../encrypted_packet_accumulator.h | 61 ++++---- src/arduino-dsmr-2/packet_accumulator.h | 34 ++--- ...rypted_packet_accumulator_example_test.cpp | 28 +++- ...rypted_packet_accumulator_include_test.cpp | 4 +- .../encrypted_packet_accumulator_test.cpp | 59 +++----- src/test/packet_accumulator_example_test.cpp | 24 ++- src/test/packet_accumulator_test.cpp | 19 ++- 9 files changed, 136 insertions(+), 233 deletions(-) diff --git a/README.md b/README.md index d9dedd9..1dcd28f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The primary goal is to make the parser independent of the Arduino framework and # Differences from the original arduino-dsmr * Requires a C++20 compatible compiler. * [P1Reader](https://github.com/matthijskooijman/arduino-dsmr/blob/master/src/dsmr/reader.h) class is replaced with the [PacketAccumulator](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/dsmr/packet_accumulator.h) class with a different interface to allow usage on any platform. -* Added `EncryptedPacketAccumulator` class to receive encrypted DSMR messages (like from "Luxembourg Smarty"). +* Added [EncryptedPacketAccumulator](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/arduino-dsmr-2/encrypted_packet_accumulator.h) class to receive encrypted DSMR messages (like from "Luxembourg Smarty"). # How to use ## General usage @@ -24,131 +24,13 @@ The library is available on the PlatformIO registry:
[PlatformIO arduino-dsmr-2](https://registry.platformio.org/libraries/polargoose/arduino-dsmr-2/installation) # Examples -## Examples of how to use the parser -* [minimal_parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/minimal_parse/minimal_parse.ino) -* [parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/parse/parse.ino) - -## Complete example -``` -#include "arduino-dsmr-2/fields.h" -#include "arduino-dsmr-2/packet_accumulator.h" -#include "arduino-dsmr-2/parser.h" -#include - -using namespace arduino_dsmr_2; -using namespace fields; - -void main() { - const auto& data_from_p1_port = "garbage before" - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-3:0.2.8(40)\r\n" - "0-0:1.0.0(150117185916W)\r\n" - "0-0:96.1.1(0000000000000000000000000000000000)\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "!60e5" - "garbage after" - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-3:0.2.8(40)\r\n" - "0-0:1.0.0(150117185916W)\r\n" - "0-0:96.1.1(0000000000000000000000000000000000)\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "!60e5 - "another packet"; - - // Specify the fields you want to parse. - // Full list of available fields is in fields.h - ParsedData< - /* String */ identification, - /* String */ p1_version, - /* String */ timestamp, - /* String */ equipment_id, - /* FixedValue */ energy_delivered_tariff1> - data; - - // This class is used to receive the message from the P1 port. - // It retrieves bytes from the UART and finds a DSMR message and optionally checks the CRC. - // You only need to create this class once. - PacketAccumulator accumulator(/* bufferSize */ 4000, /* check_crc */ true); - - // First step is to get the full message from the P1 port. - // In this example, we go through the bytes from the message above. - // In a real application, you need to read the bytes from the UART one byte at a time. - for (const auto& byte : data_from_p1_port) { - // feed the byte to the accumulator - auto res = accumulator.process_byte(byte); - - // During receiving, errors may occur, such as CRC mismatches. - // You can optionally log these errors, or ignore them. - if (res.error()) { - printf("Error during receiving a packet: %s", to_string(*res.error())); - } - - // When a full packet is received, the packet() method will return it. - // The packet starts with '/' and ends with the '!'. - // The CRC is not included. - if (res.packet()) { - // Parse the received packet. - const auto packet = *res.packet(); - // Specify `check_crc` as false, since the accumulator already checked the CRC and didn't include it in the packet - P1Parser::parse(&data, packet.data(), packet.size(), /* unknown_error */ false, /* check_crc */ false); - - // Now you can use the parsed data. - printf("Identification: %s\n", data.identification.c_str()); - printf("P1 version: %s\n", data.p1_version.c_str()); - printf("Timestamp: %s\n", data.timestamp.c_str()); - printf("Equipment ID: %s\n", data.equipment_id.c_str()); - printf("Energy delivered tariff 1: %.3f\n", static_cast(data.energy_delivered_tariff1.val())); - } - } -} -``` - -## EncryptedPacketAccumulator example -``` -#include "arduino-dsmr-2/fields.h" -#include "arduino-dsmr-2/encrypted_packet_accumulator.h" -#include "arduino-dsmr-2/parser.h" -#include - -using namespace arduino_dsmr_2; -using namespace fields; - -void main() { - std::vector encrypted_data_from_p1_port; - - // This class is similar to the PacketAccumulator, but it handles encrypted packets. - // Use this class only if you have a smart meter that uses encryption. - // The class allocates two buffers of buffer_size. One for accumulating encrypted data and one for decrypted data. - EncryptedPacketAccumulator accumulator(/* buffer_size */ 4000); - - // Set the encryption key. This key is unique for each smart meter and should be provided by your energy supplier. - const auto error = accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); - if (error) { - printf("Failed to set encryption key: %s", to_string(*error)); - return; - } - - for (const auto& byte : encrypted_data_from_p1_port) { - // feed the byte to the accumulator - auto res = accumulator.process_byte(byte); - if (res.error()) { - printf("Error during receiving a packet: %s", to_string(*res.error())); - } - - // When a full packet is received, the packet() method returns unencrypted packet. - if (res.packet()) { - // Parse the received packet the same way as with PacketAccumulator example - } - - // If the data stops coming, but the packet is not fully received then you have to drop the accumulated data and start from scratch. - if (/* timeout */ false) { - accumulator.reset(); - } - } -} -``` +* How to use the parser + * [minimal_parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/minimal_parse/minimal_parse.ino) + * [parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/parse/parse.ino) +* Complete example using PacketAccumulator + * [packet_accumulator_example_test.cpp](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/test/packet_accumulator_example_test.cpp) +* Example using EncryptedPacketAccumulator + * [encrypted_packet_accumulator_example_test.cpp](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/test/encrypted_packet_accumulator_example_test.cpp) # History behind arduino-dsmr [matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. @@ -169,6 +51,6 @@ This fork addresses the existing issues and makes the parser usable on any platf * `build-linux.sh` script needs `clang` to be installed. # References -* [DSMR parser in Python](https://github.com/ndokter/dsmr_parser/tree/master) +* [DSMR parser in Python](https://github.com/ndokter/dsmr_parser/tree/master) - alternative DSMR parser implementation in Python. * [SmartyReader](https://www.weigu.lu/microcontroller/smartyReader_P1/index.html) - open source hardware to communicate with P1 port. -* [SmartyReader. Chapter "Encryption"](https://www.weigu.lu/microcontroller/smartyReader/index.html) - description of how the encrypted DSMR protocol works. +* [SmartyReader. Chapter "Encryption"](https://www.weigu.lu/microcontroller/smartyReader/index.html) - how the encrypted DSMR protocol works. diff --git a/library.json b/library.json index ee592b5..536a16f 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "arduino-dsmr-2", - "version": "7.0", + "version": "8.0", "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { diff --git a/src/arduino-dsmr-2/encrypted_packet_accumulator.h b/src/arduino-dsmr-2/encrypted_packet_accumulator.h index 888deae..ea2fb1b 100644 --- a/src/arduino-dsmr-2/encrypted_packet_accumulator.h +++ b/src/arduino-dsmr-2/encrypted_packet_accumulator.h @@ -12,7 +12,7 @@ namespace arduino_dsmr_2 { // The encryption is described in the "specs/Luxembourg Smarty P1 specification v1.1.3.pdf" chapter "3.2.5 P1 software – Channel security". // The packet has the following structure: // Header (18 bytes) | Telegram | GCM Tag (12 bytes) -class EncryptedPacketAccumulator : NonCopyableAndNonMovable { +class EncryptedPacketAccumulator { class HeaderAccumulator { #pragma pack(push, 1) union Header { @@ -49,43 +49,39 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { // Also called "IV" auto nonce() const { - // SystemTitle (8 bytes) + InvocationCounter (4 bytes) - std::array nonce; - const auto& system_title = header.fields.system_title; - const auto& invocation_counter = header.fields.invocation_counter_big_endian; - std::copy(system_title, system_title + 8, nonce.begin()); - std::copy(invocation_counter, invocation_counter + 4, nonce.begin() + 8); - return nonce; + // nonce = SystemTitle (8 bytes) + InvocationCounter (4 bytes) + const auto& st = header.fields.system_title; + const auto& ic = header.fields.invocation_counter_big_endian; + return std::array{st[0], st[1], st[2], st[3], st[4], st[5], st[6], st[7], ic[0], ic[1], ic[2], ic[3]}; } - // There is no way to check if the received header is valid. - // Best we can do is to check the values of the constant fields and that the length is realistic. bool check_consistency() const { - return header.fields.tag == 0xDB && header.fields.system_title_length == 0x08 && header.fields.long_form_length_indicator == 0x82 && - header.fields.security_control_field == 0x30 && telegram_with_gcm_tag_length() > 25; + // There is no way to check if the received header is valid. + // Best we can do is to check the values of the constant fields and that the length is realistic. + const auto& hf = header.fields; + return hf.tag == 0xDB && hf.system_title_length == 0x08 && hf.long_form_length_indicator == 0x82 && hf.security_control_field == 0x30 && + telegram_with_gcm_tag_length() > 25; } }; - class TelegramAccumulator : NonCopyableAndNonMovable { - std::vector buffer; - std::size_t packetSize = 0; + class TelegramAccumulator { + std::span _buffer; + std::size_t _packetSize = 0; public: - explicit TelegramAccumulator(std::size_t bufferSize) : buffer(bufferSize) {} + explicit TelegramAccumulator(std::span buffer) : _buffer(buffer) {} void add(const uint8_t byte) { - buffer[packetSize] = byte; - packetSize++; + _buffer[_packetSize] = byte; + _packetSize++; } - size_t number_of_accumulated_bytes() const { return packetSize; } - size_t capacity() const { return buffer.size(); } + size_t number_of_accumulated_bytes() const { return _packetSize; } + size_t capacity() const { return _buffer.size(); } // The tag is always last 12 bytes - std::span telegram() const { return {buffer.data(), packetSize - 12}; } - std::span tag() const { return {buffer.data() + packetSize - 12, 12}; } - - void reset() { packetSize = 0; } + std::span telegram() const { return {_buffer.data(), _packetSize - 12}; } + std::span tag() const { return {_buffer.data() + _packetSize - 12, 12}; } }; class MbedTlsAes128GcmDecryptor : NonCopyableAndNonMovable { @@ -96,8 +92,8 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { bool set_encryption_key(const std::span key) { return mbedtls_gcm_setkey(&gcm, MBEDTLS_CIPHER_ID_AES, key.data(), 128) == 0; } - bool decrypt(std::span iv, std::span ciphertext, std::span tag, std::vector& decrypted_output) { - // AdditionalAuthenticatedData = SecurityControlField + AuthenticationKey. + bool decrypt(std::span iv, std::span ciphertext, std::span tag, std::span decrypted_output) { + // aad = AdditionalAuthenticatedData = SecurityControlField + AuthenticationKey. // SecurityControlField is always 0x30. // AuthenticationKey = "00112233445566778899AABBCCDDEEFF". It is hardcoded and is the same for all DSMR devices. constexpr uint8_t aad[] = {0x30, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; @@ -112,9 +108,10 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { enum class State { WaitingForPacketStartSymbol, AccumulatingPacketHeader, AccumulatingTelegramWithGcmTag }; State _state = State::WaitingForPacketStartSymbol; + std::span _raw_receive_encrypted_packet_buffer; + std::span _raw_decrypted_telegram_buffer; HeaderAccumulator _header_accumulator; TelegramAccumulator _encrypted_telegram_accumulator; - std::vector _decrypted_telegram_buf; std::array _encryption_key{}; public: @@ -136,7 +133,9 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { auto error() const { return _error; } }; - explicit EncryptedPacketAccumulator(const size_t buffer_size) : _encrypted_telegram_accumulator(buffer_size), _decrypted_telegram_buf(buffer_size) {} + explicit EncryptedPacketAccumulator(std::span encrypted_packet_buffer, std::span decrypted_telegram_buffer) + : _raw_receive_encrypted_packet_buffer(encrypted_packet_buffer), _raw_decrypted_telegram_buffer(decrypted_telegram_buffer), + _encrypted_telegram_accumulator(encrypted_packet_buffer) {} // key_hex is a string like "00112233445566778899AABBCCDDEEFF" std::optional set_encryption_key(std::string_view key_hex) { @@ -162,7 +161,7 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { if (byte == 0xDB) { _header_accumulator = HeaderAccumulator(); _header_accumulator.add(byte); - _encrypted_telegram_accumulator.reset(); + _encrypted_telegram_accumulator = TelegramAccumulator(_raw_receive_encrypted_packet_buffer); _state = State::AccumulatingPacketHeader; } return {}; @@ -200,11 +199,11 @@ class EncryptedPacketAccumulator : NonCopyableAndNonMovable { } if (!decryptor.decrypt(_header_accumulator.nonce(), _encrypted_telegram_accumulator.telegram(), _encrypted_telegram_accumulator.tag(), - _decrypted_telegram_buf)) { + _raw_decrypted_telegram_buffer)) { return Error::DecryptionFailed; } - return std::string_view(_decrypted_telegram_buf.data(), _encrypted_telegram_accumulator.telegram().size()); + return std::string_view(_raw_decrypted_telegram_buffer.data(), _encrypted_telegram_accumulator.telegram().size()); } // Unreachable diff --git a/src/arduino-dsmr-2/packet_accumulator.h b/src/arduino-dsmr-2/packet_accumulator.h index 3a76842..b998fed 100644 --- a/src/arduino-dsmr-2/packet_accumulator.h +++ b/src/arduino-dsmr-2/packet_accumulator.h @@ -3,34 +3,32 @@ #include #include #include -#include +#include namespace arduino_dsmr_2 { // Receives unencrypted DSMR packets. -class PacketAccumulator : NonCopyableAndNonMovable { - class DsmrPacketBuffer : NonCopyableAndNonMovable { - std::vector buffer; - std::size_t packetSize = 0; +class PacketAccumulator { + class DsmrPacketBuffer { + std::span _buffer; + std::size_t _packetSize = 0; public: - explicit DsmrPacketBuffer(std::size_t bufferSize) : buffer(bufferSize) {} + explicit DsmrPacketBuffer(std::span buffer) : _buffer{buffer} {} - std::string_view packet() const { return std::string_view(buffer.data(), packetSize); } + std::string_view packet() const { return std::string_view(_buffer.data(), _packetSize); } void add(char byte) { - buffer[packetSize] = byte; - packetSize++; + _buffer[_packetSize] = byte; + _packetSize++; } - bool has_space() const { return packetSize < buffer.size(); } - - void reset() { packetSize = 0; } + bool has_space() const { return _packetSize < _buffer.size(); } uint16_t calculate_crc16() const { uint16_t crc = 0; - for (std::size_t i = 0; i < packetSize; ++i) { - crc ^= static_cast(buffer[i]); + for (std::size_t i = 0; i < _packetSize; ++i) { + crc ^= static_cast(_buffer[i]); for (std::size_t bit = 0; bit < 8; bit++) { if (crc & 1) crc = (crc >> 1) ^ 0xa001; @@ -70,6 +68,7 @@ class PacketAccumulator : NonCopyableAndNonMovable { enum class State { WaitingForPacketStartSymbol, WaitingForPacketEndSymbol, WaitingForCrc }; State _state = State::WaitingForPacketStartSymbol; + std::span _raw_buffer; DsmrPacketBuffer _buf; CrcAccumulator _crc_accumulator; bool _check_crc; @@ -97,11 +96,11 @@ class PacketAccumulator : NonCopyableAndNonMovable { auto error() const { return _error; } }; - PacketAccumulator(size_t bufferSize, bool check_crc) : _buf(bufferSize), _check_crc(check_crc) {} + PacketAccumulator(std::span buffer, bool check_crc) : _raw_buffer(buffer), _buf(buffer), _check_crc(check_crc) {} Result process_byte(const char byte) { if (!_buf.has_space()) { - _buf.reset(); + _buf = DsmrPacketBuffer(_raw_buffer); _state = State::WaitingForPacketStartSymbol; if (byte != '/') { return Error::BufferOverflow; @@ -109,7 +108,7 @@ class PacketAccumulator : NonCopyableAndNonMovable { } if (byte == '/') { - _buf.reset(); + _buf = DsmrPacketBuffer(_raw_buffer); _buf.add(byte); const auto prev_state = _state; _state = State::WaitingForPacketEndSymbol; @@ -176,6 +175,7 @@ inline const char* to_string(const PacketAccumulator::Error error) { return "CrcMismatch"; } + // unreachable return "Unknown error"; } diff --git a/src/test/encrypted_packet_accumulator_example_test.cpp b/src/test/encrypted_packet_accumulator_example_test.cpp index 265f30f..7feaa4c 100644 --- a/src/test/encrypted_packet_accumulator_example_test.cpp +++ b/src/test/encrypted_packet_accumulator_example_test.cpp @@ -7,13 +7,21 @@ using namespace arduino_dsmr_2; using namespace fields; -TEST_CASE("Complete example encrypted packet accumulator") { +TEST_CASE("EncryptedPacketAccumulator example") { + + // Buffers to store the incoming bytes and the decrypted packet. + // Both of these buffers must be large enough to hold the full DSMR message. + // Advice: define the buffers as global variables, to avoid using stack and heap memory. + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + + // For the sake of this example, this variable is supposed to contain data that comes from the P1 port. std::vector encrypted_data_from_p1_port; // This class is similar to the PacketAccumulator, but it handles encrypted packets. // Use this class only if you have a smart meter that uses encryption. - // The class allocates two buffers of buffer_size. One for accumulating encrypted data and one for decrypted data. - EncryptedPacketAccumulator accumulator(/* buffer_size */ 4000); + // You only need to create this class once. + EncryptedPacketAccumulator accumulator(encrypted_packet_buffer, decrypted_packet_buffer); // Set the encryption key. This key is unique for each smart meter and should be provided by your energy supplier. const auto error = accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); @@ -22,21 +30,29 @@ TEST_CASE("Complete example encrypted packet accumulator") { return; } + // Main loop. + // We need to read data from P1 port 1 byte at a time. for (const auto& byte : encrypted_data_from_p1_port) { // feed the byte to the accumulator auto res = accumulator.process_byte(byte); + + // During receiving, errors may occur. + // You can optionally log these errors, or ignore them. if (res.error()) { printf("Error during receiving a packet: %s", to_string(*res.error())); } // When a full packet is received, the packet() method returns unencrypted packet. if (res.packet()) { - // Parse the received packet the same way as with PacketAccumulator example + // Parse the received packet the same way as with the PacketAccumulator example } - // If the data stops coming, but the packet is not fully received then you have to drop the accumulated data and start from scratch. + // The specification says that packets arrive once every 10 seconds. + // In case some bytes are lost during transmission, you need to use a timeout to detect when a packet transmission finishes. + // For example, if you stopped receiving bytes for more than 1 second, but you haven't received a complete packet yet, + // you should reset EncryptedPacketAccumulator and start receiving a new packet from scratch. if (/* timeout */ false) { - accumulator.reset(); + accumulator = EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); } } } diff --git a/src/test/encrypted_packet_accumulator_include_test.cpp b/src/test/encrypted_packet_accumulator_include_test.cpp index ba71aca..56e03d5 100644 --- a/src/test/encrypted_packet_accumulator_include_test.cpp +++ b/src/test/encrypted_packet_accumulator_include_test.cpp @@ -3,4 +3,6 @@ #include "arduino-dsmr-2/encrypted_packet_accumulator.h" -void EncryptedPacketAccumulator_some_function() { arduino_dsmr_2::EncryptedPacketAccumulator(1000); } +std::array encrypted_packet_buffer; +std::array decrypted_packet_buffer; +void EncryptedPacketAccumulator_some_function() { arduino_dsmr_2::EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); } diff --git a/src/test/encrypted_packet_accumulator_test.cpp b/src/test/encrypted_packet_accumulator_test.cpp index 8914c09..b2e7d1a 100644 --- a/src/test/encrypted_packet_accumulator_test.cpp +++ b/src/test/encrypted_packet_accumulator_test.cpp @@ -16,7 +16,7 @@ std::vector concat(const std::vector& first, const Vecs&... rest) { return out; } -inline std::vector read_binary_file(const std::filesystem::path path) { +inline std::vector read_binary_file(const std::filesystem::path& path) { std::ifstream file(path, std::ios::binary); return {std::istreambuf_iterator(file), std::istreambuf_iterator()}; } @@ -30,7 +30,9 @@ static void change_length(std::vector& packet, const std::uint16_t } TEST_CASE("Can receive correct packet") { - auto accumulator = EncryptedPacketAccumulator(1000); + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + auto accumulator = EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); for (const auto& byte : encrypted_packet) { @@ -48,10 +50,13 @@ TEST_CASE("Can receive correct packet") { } TEST_CASE("Error on corrupted packet") { + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + auto corrupted_packet = encrypted_packet; corrupted_packet[50] ^= 0xFF; - auto accumulator = EncryptedPacketAccumulator(1000); + auto accumulator = EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); for (const auto& byte : corrupted_packet) { @@ -66,7 +71,10 @@ TEST_CASE("Error on corrupted packet") { } TEST_CASE("Encryption key validation") { - auto accumulator = EncryptedPacketAccumulator(1000); + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + + auto accumulator = EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); REQUIRE(!accumulator.set_encryption_key("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa").has_value()); REQUIRE(*accumulator.set_encryption_key("AAAAAAAAAAA") == EncryptedPacketAccumulator::SetEncryptionKeyError::EncryptionKeyLengthIsNot32Bytes); @@ -75,7 +83,10 @@ TEST_CASE("Encryption key validation") { } TEST_CASE("BufferOverflow when telegram length exceeds capacity") { - EncryptedPacketAccumulator acc(10); + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + + EncryptedPacketAccumulator acc(encrypted_packet_buffer, decrypted_packet_buffer); for (const auto byte : encrypted_packet) { const auto& res = acc.process_byte(byte); if (res.error()) { @@ -87,7 +98,10 @@ TEST_CASE("BufferOverflow when telegram length exceeds capacity") { } TEST_CASE("Telegram is too small") { - EncryptedPacketAccumulator acc(1000); + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + + EncryptedPacketAccumulator acc(encrypted_packet_buffer, decrypted_packet_buffer); auto too_small_packet = encrypted_packet; change_length(too_small_packet, 16); @@ -101,36 +115,11 @@ TEST_CASE("Telegram is too small") { REQUIRE(false); } -TEST_CASE("Reset works") { - EncryptedPacketAccumulator accumulator(1000); - REQUIRE_FALSE(accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); - - for (auto byte : encrypted_packet | std::views::take(50)) { - const auto& res = accumulator.process_byte(byte); - REQUIRE(res.error().has_value() == false); - REQUIRE(res.packet().has_value() == false); - } - - accumulator.reset(); - - bool got_packet = false; - for (const auto& byte : encrypted_packet) { - const auto& res = accumulator.process_byte(byte); - REQUIRE(res.error().has_value() == false); - - if (res.packet()) { - REQUIRE(std::string(*res.packet()).starts_with("/EST5\\253710000_A\r\n")); - REQUIRE(std::string(*res.packet()).ends_with("1-0:4.7.0(000000166*var)\r\n!7EF9\r\n")); - got_packet = true; - break; - } - } - - REQUIRE(got_packet); -} - TEST_CASE("Receive many packets") { - auto accumulator = EncryptedPacketAccumulator(500); + std::array encrypted_packet_buffer; + std::array decrypted_packet_buffer; + + auto accumulator = EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); REQUIRE(!accumulator.set_encryption_key("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").has_value()); const auto& garbage = std::vector(100, 0x55); diff --git a/src/test/packet_accumulator_example_test.cpp b/src/test/packet_accumulator_example_test.cpp index c11a246..7af60f4 100644 --- a/src/test/packet_accumulator_example_test.cpp +++ b/src/test/packet_accumulator_example_test.cpp @@ -7,7 +7,14 @@ using namespace arduino_dsmr_2; using namespace fields; -TEST_CASE("Complete example packet accumulator") { +TEST_CASE("PacketAccumulator example") { + + // Buffer to store the incoming bytes. + // This Buffer must be large enough to hold the full DSMR message. + // Advice: define the Buffer as a global variable, to avoid using stack and heap memory. + std::array buffer; + + // For the sake of this example, we define a data that is supposed to come from the P1 port. const auto& data_from_p1_port = "garbage before" "/KFM5KAIFA-METER\r\n" "\r\n" @@ -26,7 +33,7 @@ TEST_CASE("Complete example packet accumulator") { "!60e5"; // Specify the fields you want to parse. - // Full list of available fields is in fields.h + // Full list of available fields is in "fields.h" file ParsedData< /* String */ identification, /* String */ p1_version, @@ -38,13 +45,12 @@ TEST_CASE("Complete example packet accumulator") { // This class is used to receive the message from the P1 port. // It retrieves bytes from the UART and finds a DSMR message and optionally checks the CRC. // You only need to create this class once. - PacketAccumulator accumulator(/* bufferSize */ 4000, /* check_crc */ true); + PacketAccumulator accumulator(/* buffer */ buffer, /* check_crc */ true); - // First step is to get the full message from the P1 port. - // In this example, we go through the bytes from the message above. - // In a real application, you need to read the bytes from the UART one byte at a time. + // Main loop. + // We need to read data from P1 port 1 byte at a time. for (const auto& byte : data_from_p1_port) { - // feed the byte to the accumulator + // Feed the byte to the accumulator auto res = accumulator.process_byte(byte); // During receiving, errors may occur, such as CRC mismatches. @@ -57,8 +63,10 @@ TEST_CASE("Complete example packet accumulator") { // The packet starts with '/' and ends with the '!'. // The CRC is not included. if (res.packet()) { - // Parse the received packet. + // Get the recieved packet const auto packet = *res.packet(); + + // Parse the packet. // Specify `check_crc` as false, since the accumulator already checked the CRC and didn't include it in the packet P1Parser::parse(&data, packet.data(), packet.size(), /* unknown_error */ false, /* check_crc */ false); diff --git a/src/test/packet_accumulator_test.cpp b/src/test/packet_accumulator_test.cpp index c1c7571..4522801 100644 --- a/src/test/packet_accumulator_test.cpp +++ b/src/test/packet_accumulator_test.cpp @@ -1,13 +1,15 @@ #include "arduino-dsmr-2/packet_accumulator.h" #include #include +#include using namespace arduino_dsmr_2; TEST_CASE("Packet with correct CRC lower case") { + std::vector buffer(1000); const auto& msg = "/some !a3D4"; - auto accumulator = PacketAccumulator(1000, true); + auto accumulator = PacketAccumulator(buffer, true); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); REQUIRE(res.error().has_value() == false); @@ -22,9 +24,10 @@ TEST_CASE("Packet with correct CRC lower case") { } TEST_CASE("Packet with incorrect CRC") { + std::vector buffer(1000); const auto& msg = "/some data!0000"; - PacketAccumulator accumulator(1000, true); + PacketAccumulator accumulator(buffer, true); for (const auto& byte : msg) { auto packet = accumulator.process_byte(byte); if (packet.error()) { @@ -37,9 +40,10 @@ TEST_CASE("Packet with incorrect CRC") { } TEST_CASE("Packet with incorrect CRC symbol") { + std::vector buffer(1000); const auto& msg = "/some data!G000"; - PacketAccumulator accumulator(1000, true); + PacketAccumulator accumulator(buffer, true); for (const auto& byte : msg) { auto packet = accumulator.process_byte(byte); if (packet.error()) { @@ -52,9 +56,10 @@ TEST_CASE("Packet with incorrect CRC symbol") { } TEST_CASE("Packet without CRC") { + std::vector buffer(1000); const auto& msg = "/some data!"; - PacketAccumulator accumulator(1000, false); + PacketAccumulator accumulator(buffer, false); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); REQUIRE(res.error().has_value() == false); @@ -67,6 +72,7 @@ TEST_CASE("Packet without CRC") { } TEST_CASE("Parse data with different packets. CRC check") { + std::vector buffer(15); const auto& msg = "garbage /some !a3D4" // correct package "garbage /some !a3D3" // CRC mismatch "garbage /so/some !a3D4" // Packet start symbol '/' in the middle of the packet @@ -78,7 +84,7 @@ TEST_CASE("Parse data with different packets. CRC check") { std::vector received_packets; std::vector occurred_errors; - PacketAccumulator accumulator(15, true); + PacketAccumulator accumulator(buffer, true); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); if (res.error()) { @@ -96,6 +102,7 @@ TEST_CASE("Parse data with different packets. CRC check") { } TEST_CASE("Parse data with different packets. No CRC check") { + std::vector buffer(15); const auto& msg = "garbage /some !" // correct package "garbage /so/some !" // Packet start symbol '/' in the middle of the packet "/some !" // correct package @@ -105,7 +112,7 @@ TEST_CASE("Parse data with different packets. No CRC check") { std::vector received_packets; std::vector occurred_errors; - PacketAccumulator accumulator(15, false); + PacketAccumulator accumulator(buffer, false); for (const auto& byte : msg) { auto res = accumulator.process_byte(byte); if (res.error()) { From 233fb1de033a0ff6ee441b862507241c9cf89e23 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Mon, 27 Oct 2025 14:38:36 +0100 Subject: [PATCH 24/25] Remove p1_version_ch field because it is a duplicate of p1_version_be --- src/arduino-dsmr-2/fields.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/arduino-dsmr-2/fields.h b/src/arduino-dsmr-2/fields.h index b09c99c..3585c12 100644 --- a/src/arduino-dsmr-2/fields.h +++ b/src/arduino-dsmr-2/fields.h @@ -276,7 +276,6 @@ DEFINE_FIELD(identification, std::string, ObisId(255, 255, 255, 255, 255, 255), // Version information for P1 output DEFINE_FIELD(p1_version, std::string, ObisId(1, 3, 0, 2, 8), StringField, 2, 2); DEFINE_FIELD(p1_version_be, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); -DEFINE_FIELD(p1_version_ch, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); // Date-time stamp of the P1 message DEFINE_FIELD(timestamp, std::string, ObisId(0, 0, 1, 0, 0), TimestampField); From 3f9c4d225c1e85a72dbd50ba12bf7383b75c3fa2 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 28 Oct 2025 08:22:20 +0100 Subject: [PATCH 25/25] Rename the project to dsmr_parser --- README.md | 14 +++++++------- library.json | 8 ++++---- .../encrypted_packet_accumulator.h | 2 +- src/{arduino-dsmr-2 => dsmr_parser}/fields.h | 2 +- .../packet_accumulator.h | 2 +- src/{arduino-dsmr-2 => dsmr_parser}/parser.h | 2 +- src/{arduino-dsmr-2 => dsmr_parser}/util.h | 2 +- .../encrypted_packet_accumulator_example_test.cpp | 8 ++++---- .../encrypted_packet_accumulator_include_test.cpp | 4 ++-- src/test/encrypted_packet_accumulator_test.cpp | 4 ++-- src/test/packet_accumulator_example_test.cpp | 8 ++++---- src/test/packet_accumulator_include_test.cpp | 4 ++-- src/test/packet_accumulator_test.cpp | 4 ++-- src/test/parser_include_test.cpp | 6 +++--- src/test/parser_test.cpp | 6 +++--- 15 files changed, 38 insertions(+), 38 deletions(-) rename src/{arduino-dsmr-2 => dsmr_parser}/encrypted_packet_accumulator.h (99%) rename src/{arduino-dsmr-2 => dsmr_parser}/fields.h (99%) rename src/{arduino-dsmr-2 => dsmr_parser}/packet_accumulator.h (99%) rename src/{arduino-dsmr-2 => dsmr_parser}/parser.h (99%) rename src/{arduino-dsmr-2 => dsmr_parser}/util.h (99%) diff --git a/README.md b/README.md index 1dcd28f..308012f 100644 --- a/README.md +++ b/README.md @@ -11,26 +11,26 @@ The primary goal is to make the parser independent of the Arduino framework and # Differences from the original arduino-dsmr * Requires a C++20 compatible compiler. -* [P1Reader](https://github.com/matthijskooijman/arduino-dsmr/blob/master/src/dsmr/reader.h) class is replaced with the [PacketAccumulator](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/dsmr/packet_accumulator.h) class with a different interface to allow usage on any platform. -* Added [EncryptedPacketAccumulator](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/arduino-dsmr-2/encrypted_packet_accumulator.h) class to receive encrypted DSMR messages (like from "Luxembourg Smarty"). +* [P1Reader](https://github.com/matthijskooijman/arduino-dsmr/blob/master/src/dsmr/reader.h) class is replaced with the [PacketAccumulator](https://github.com/esphome-libs/arduino-dsmr/blob/master/src/dsmr/packet_accumulator.h) class with a different interface to allow usage on any platform. +* Added [EncryptedPacketAccumulator](https://github.com/esphome-libs/arduino-dsmr/blob/master/src/dsmr_parser/encrypted_packet_accumulator.h) class to receive encrypted DSMR messages (like from "Luxembourg Smarty"). # How to use ## General usage -The library is header-only. Add the `src/arduino-dsmr-2` folder to your project.
+The library is header-only. Add the `src/dsmr_parser` folder to your project.
Note: `encrypted_packet_accumulator.h` header depends on [Mbed TLS](https://www.trustedfirmware.org/projects/mbed-tls/) library. It is already included in the `ESP-IDF` framework and can be easily added to any other platforms. ## Usage from PlatformIO The library is available on the PlatformIO registry:
-[PlatformIO arduino-dsmr-2](https://registry.platformio.org/libraries/polargoose/arduino-dsmr-2/installation) +**TODO: configure deployment to PlatformIO ** # Examples * How to use the parser * [minimal_parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/minimal_parse/minimal_parse.ino) * [parse.ino](https://github.com/matthijskooijman/arduino-dsmr/blob/master/examples/parse/parse.ino) * Complete example using PacketAccumulator - * [packet_accumulator_example_test.cpp](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/test/packet_accumulator_example_test.cpp) + * [packet_accumulator_example_test.cpp](https://github.com/esphome-libs/arduino-dsmr/blob/master/src/test/packet_accumulator_example_test.cpp) * Example using EncryptedPacketAccumulator - * [encrypted_packet_accumulator_example_test.cpp](https://github.com/PolarGoose/arduino-dsmr-2/blob/master/src/test/encrypted_packet_accumulator_example_test.cpp) + * [encrypted_packet_accumulator_example_test.cpp](https://github.com/esphome-libs/arduino-dsmr/blob/master/src/test/encrypted_packet_accumulator_example_test.cpp) # History behind arduino-dsmr [matthijskooijman](https://github.com/matthijskooijman) is the original creator of this DSMR parser. @@ -39,7 +39,7 @@ After that, the work on the `arduino-dsmr` parser stopped. Since then, some issues and unmerged pull requests have accumulated. Additionally, the dependency on the Arduino framework causes various issues for some ESP32 boards. This fork addresses the existing issues and makes the parser usable on any platform. -## The reasons `arduino-dsmr-2` fork was created +## The reasons `dsmr_parser` fork was created * Dependency on the Arduino framework limits the applicability of this parser. For example, it is not possible to use it on Linux. * The Arduino framework on ESP32 inflates the FW size and doesn't allow usage of the latest version of ESP-IDF. * Many pull requests and bug fixes needed to be integrated into the parser. diff --git a/library.json b/library.json index 536a16f..2e37548 100644 --- a/library.json +++ b/library.json @@ -1,12 +1,12 @@ { - "name": "arduino-dsmr-2", - "version": "8.0", + "name": "dsmr_parser", + "version": "1.0", "description": "Fork of arduino-dsmr. Doesn't depend on the Arduino framework and has many bug fixes and code quality improvements. Supports encrypted DSMR packets.", "keywords": "dsmr", "repository": { "type": "git", - "url": "https://github.com/PolarGoose/arduino-dsmr-2" + "url": "https://github.com/esphome-libs/arduino-dsmr" }, "license": "MIT", - "export": { "include": [ "src/arduino-dsmr-2/*.h" ] } + "export": { "include": [ "src/dsmr_parser/*.h" ] } } diff --git a/src/arduino-dsmr-2/encrypted_packet_accumulator.h b/src/dsmr_parser/encrypted_packet_accumulator.h similarity index 99% rename from src/arduino-dsmr-2/encrypted_packet_accumulator.h rename to src/dsmr_parser/encrypted_packet_accumulator.h index ea2fb1b..2c4617a 100644 --- a/src/arduino-dsmr-2/encrypted_packet_accumulator.h +++ b/src/dsmr_parser/encrypted_packet_accumulator.h @@ -6,7 +6,7 @@ #include #include -namespace arduino_dsmr_2 { +namespace dsmr_parser { // Some smart meters sent DSMR packets encrypted with AES-128-GCM. // The encryption is described in the "specs/Luxembourg Smarty P1 specification v1.1.3.pdf" chapter "3.2.5 P1 software – Channel security". diff --git a/src/arduino-dsmr-2/fields.h b/src/dsmr_parser/fields.h similarity index 99% rename from src/arduino-dsmr-2/fields.h rename to src/dsmr_parser/fields.h index 3585c12..7f2b43d 100644 --- a/src/arduino-dsmr-2/fields.h +++ b/src/dsmr_parser/fields.h @@ -16,7 +16,7 @@ #define DSMR_SUB_MBUS_ID 4 #endif -namespace arduino_dsmr_2 { +namespace dsmr_parser { // Superclass for data items in a P1 message. template diff --git a/src/arduino-dsmr-2/packet_accumulator.h b/src/dsmr_parser/packet_accumulator.h similarity index 99% rename from src/arduino-dsmr-2/packet_accumulator.h rename to src/dsmr_parser/packet_accumulator.h index b998fed..b6669ce 100644 --- a/src/arduino-dsmr-2/packet_accumulator.h +++ b/src/dsmr_parser/packet_accumulator.h @@ -5,7 +5,7 @@ #include #include -namespace arduino_dsmr_2 { +namespace dsmr_parser { // Receives unencrypted DSMR packets. class PacketAccumulator { diff --git a/src/arduino-dsmr-2/parser.h b/src/dsmr_parser/parser.h similarity index 99% rename from src/arduino-dsmr-2/parser.h rename to src/dsmr_parser/parser.h index 164c769..ce5ea76 100644 --- a/src/arduino-dsmr-2/parser.h +++ b/src/dsmr_parser/parser.h @@ -2,7 +2,7 @@ #include "util.h" -namespace arduino_dsmr_2 { +namespace dsmr_parser { // uses polynomial x^16+x^15+x^2+1 inline uint16_t crc16_update(uint16_t crc, uint8_t data) { diff --git a/src/arduino-dsmr-2/util.h b/src/dsmr_parser/util.h similarity index 99% rename from src/arduino-dsmr-2/util.h rename to src/dsmr_parser/util.h index 8504cb0..f421f7e 100644 --- a/src/arduino-dsmr-2/util.h +++ b/src/dsmr_parser/util.h @@ -7,7 +7,7 @@ #include #include -namespace arduino_dsmr_2 { +namespace dsmr_parser { class NonCopyable { protected: diff --git a/src/test/encrypted_packet_accumulator_example_test.cpp b/src/test/encrypted_packet_accumulator_example_test.cpp index 7feaa4c..4093a7c 100644 --- a/src/test/encrypted_packet_accumulator_example_test.cpp +++ b/src/test/encrypted_packet_accumulator_example_test.cpp @@ -1,10 +1,10 @@ -#include "arduino-dsmr-2/encrypted_packet_accumulator.h" -#include "arduino-dsmr-2/fields.h" -#include "arduino-dsmr-2/parser.h" +#include "dsmr_parser/encrypted_packet_accumulator.h" +#include "dsmr_parser/fields.h" +#include "dsmr_parser/parser.h" #include #include -using namespace arduino_dsmr_2; +using namespace dsmr_parser; using namespace fields; TEST_CASE("EncryptedPacketAccumulator example") { diff --git a/src/test/encrypted_packet_accumulator_include_test.cpp b/src/test/encrypted_packet_accumulator_include_test.cpp index 56e03d5..8fb7e8e 100644 --- a/src/test/encrypted_packet_accumulator_include_test.cpp +++ b/src/test/encrypted_packet_accumulator_include_test.cpp @@ -1,8 +1,8 @@ // This code tests that the encrypted_packet_accumulator header has all necessary dependencies included in its headers. // We check that the code compiles. -#include "arduino-dsmr-2/encrypted_packet_accumulator.h" +#include "dsmr_parser/encrypted_packet_accumulator.h" std::array encrypted_packet_buffer; std::array decrypted_packet_buffer; -void EncryptedPacketAccumulator_some_function() { arduino_dsmr_2::EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); } +void EncryptedPacketAccumulator_some_function() { dsmr_parser::EncryptedPacketAccumulator(encrypted_packet_buffer, decrypted_packet_buffer); } diff --git a/src/test/encrypted_packet_accumulator_test.cpp b/src/test/encrypted_packet_accumulator_test.cpp index b2e7d1a..39fd3fe 100644 --- a/src/test/encrypted_packet_accumulator_test.cpp +++ b/src/test/encrypted_packet_accumulator_test.cpp @@ -1,11 +1,11 @@ -#include "arduino-dsmr-2/encrypted_packet_accumulator.h" +#include "dsmr_parser/encrypted_packet_accumulator.h" #include #include #include #include #include -using namespace arduino_dsmr_2; +using namespace dsmr_parser; template std::vector concat(const std::vector& first, const Vecs&... rest) { diff --git a/src/test/packet_accumulator_example_test.cpp b/src/test/packet_accumulator_example_test.cpp index 7af60f4..4a1d165 100644 --- a/src/test/packet_accumulator_example_test.cpp +++ b/src/test/packet_accumulator_example_test.cpp @@ -1,10 +1,10 @@ -#include "arduino-dsmr-2/fields.h" -#include "arduino-dsmr-2/packet_accumulator.h" -#include "arduino-dsmr-2/parser.h" +#include "dsmr_parser/fields.h" +#include "dsmr_parser/packet_accumulator.h" +#include "dsmr_parser/parser.h" #include #include -using namespace arduino_dsmr_2; +using namespace dsmr_parser; using namespace fields; TEST_CASE("PacketAccumulator example") { diff --git a/src/test/packet_accumulator_include_test.cpp b/src/test/packet_accumulator_include_test.cpp index e8beb0b..88b6eba 100644 --- a/src/test/packet_accumulator_include_test.cpp +++ b/src/test/packet_accumulator_include_test.cpp @@ -1,6 +1,6 @@ // This code tests that the packet_accumulator header has all necessary dependencies included in its headers. // We check that the code compiles. -#include "arduino-dsmr-2/packet_accumulator.h" +#include "dsmr_parser/packet_accumulator.h" -void PacketAccumulator_some_function() { arduino_dsmr_2::PacketAccumulator({}, true); } +void PacketAccumulator_some_function() { dsmr_parser::PacketAccumulator({}, true); } diff --git a/src/test/packet_accumulator_test.cpp b/src/test/packet_accumulator_test.cpp index 4522801..4e7a1a2 100644 --- a/src/test/packet_accumulator_test.cpp +++ b/src/test/packet_accumulator_test.cpp @@ -1,9 +1,9 @@ -#include "arduino-dsmr-2/packet_accumulator.h" +#include "dsmr_parser/packet_accumulator.h" #include #include #include -using namespace arduino_dsmr_2; +using namespace dsmr_parser; TEST_CASE("Packet with correct CRC lower case") { std::vector buffer(1000); diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp index 05cf808..83e02d1 100644 --- a/src/test/parser_include_test.cpp +++ b/src/test/parser_include_test.cpp @@ -1,10 +1,10 @@ // This code tests that the parser has all necessary dependencies included in its headers. // We check that the code compiles. -#include "arduino-dsmr-2/fields.h" -#include "arduino-dsmr-2/parser.h" +#include "dsmr_parser/fields.h" +#include "dsmr_parser/parser.h" -using namespace arduino_dsmr_2; +using namespace dsmr_parser; using namespace fields; void P1Parser_some_function() { diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index 64b1777..037dd87 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -1,9 +1,9 @@ -#include "arduino-dsmr-2/fields.h" -#include "arduino-dsmr-2/parser.h" +#include "dsmr_parser/fields.h" +#include "dsmr_parser/parser.h" #include #include -using namespace arduino_dsmr_2; +using namespace dsmr_parser; using namespace fields; struct Printer {

(this); + template + P& succeed(U&& value) { + result = std::forward(value); + return *static_cast(this); } }; // partial specialization for void result template - struct _ParseResult - { - }; + struct _ParseResult { }; // Actual ParseResult class template struct ParseResult : public _ParseResult, T> { - const char *next = NULL; - const char *err = NULL; - const char *ctx = NULL; + const char *next = nullptr; + const char *err = nullptr; + const char *ctx = nullptr; - ParseResult &fail(const char *err, const char *ctx = NULL) + ParseResult &fail(const char *err, const char *ctx = nullptr) { this->err = err; this->ctx = ctx; @@ -129,7 +76,6 @@ namespace dsmr return *this; } ParseResult() = default; - ParseResult(const ParseResult &other) = default; template ParseResult(const ParseResult &other) : next(other.next), err(other.err), ctx(other.ctx) {} @@ -140,9 +86,9 @@ namespace dsmr * characters in the total parsed string. These are needed to properly * limit the context output. */ - String fullError(const char *start, const char *end) const + std::string fullError(const char *start, const char *end) const { - String res; + std::string res; if (this->ctx && start && end) { // Find the entire line surrounding the context @@ -158,7 +104,8 @@ namespace dsmr res.reserve((line_end - line_start) + 2 + (this->ctx - line_start) + 1 + 2); // Write the line - concat_hack(res, line_start, line_end - line_start); + res.append(line_start, line_end - line_start); + res += "\r\n"; // Write a marker to point out ctx diff --git a/src/test/main.cpp b/src/test/main.cpp new file mode 100644 index 0000000..b8e3a4b --- /dev/null +++ b/src/test/main.cpp @@ -0,0 +1,2 @@ +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp new file mode 100644 index 0000000..1bfe013 --- /dev/null +++ b/src/test/parser_include_test.cpp @@ -0,0 +1,15 @@ +// This code tests that the parser has all necessary dependencies included in its headers. +// We check that the code compiles. + +#include "dsmr/parser.h" +#include "dsmr/fields.h" + +using namespace dsmr; +using namespace fields; + +void SomeFunction() { + const auto& msg = ""; + + ParsedData data; + const auto& res = P1Parser::parse(&data, msg, std::size(msg), true); +} diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp new file mode 100644 index 0000000..51184fa --- /dev/null +++ b/src/test/parser_test.cpp @@ -0,0 +1,573 @@ +#include +#include +#include "dsmr/parser.h" +#include "dsmr/fields.h" + +using namespace dsmr; +using namespace fields; + +struct Printer { + template + void apply(Item &i) { + if (i.present()) { + std::cout << Item::name << ": " << i.val() << Item::unit() << std::endl; + } + } +}; + +TEST_CASE("Should parse all fields in the DSMR message correctly") { + const auto &dsmr_message = + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "1-0:1.8.2(000842.472*kWh)\r\n" + "1-0:2.8.1(000000.000*kWh)\r\n" + "1-0:2.8.2(000000.000*kWh)\r\n" + "0-0:96.14.0(0001)\r\n" + "1-0:1.7.0(00.333*kW)\r\n" + "1-0:2.7.0(00.000*kW)\r\n" + "0-0:17.0.0(999.9*kW)\r\n" + "0-0:96.3.10(1)\r\n" + "0-0:96.7.21(00008)\r\n" + "0-0:96.7.9(00007)\r\n" + "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" + "1-0:32.32.0(00000)\r\n" + "1-0:32.36.0(00000)\r\n" + "0-0:96.13.1()\r\n" + "0-0:96.13.0()\r\n" + "1-0:31.7.0(001*A)\r\n" + "1-0:21.7.0(00.332*kW)\r\n" + "1-0:22.7.0(00.000*kW)\r\n" + "0-1:24.1.0(003)\r\n" + "0-1:96.1.0(0000000000000000000000000000000000)\r\n" + "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" + "0-1:24.4.0(1)\r\n" + "!6f4A\r\n"; + + ParsedData< + /* String */ identification, + /* String */ p1_version, + /* String */ timestamp, + /* String */ equipment_id, + /* FixedValue */ energy_delivered_tariff1, + /* FixedValue */ energy_delivered_tariff2, + /* FixedValue */ energy_returned_tariff1, + /* FixedValue */ energy_returned_tariff2, + /* String */ electricity_tariff, + /* FixedValue */ power_delivered, + /* FixedValue */ power_returned, + /* FixedValue */ electricity_threshold, + /* uint8_t */ electricity_switch_position, + /* uint32_t */ electricity_failures, + /* uint32_t */ electricity_long_failures, + /* String */ electricity_failure_log, + /* uint32_t */ electricity_sags_l1, + /* uint32_t */ electricity_sags_l2, + /* uint32_t */ electricity_sags_l3, + /* uint32_t */ electricity_swells_l1, + /* uint32_t */ electricity_swells_l2, + /* uint32_t */ electricity_swells_l3, + /* String */ message_short, + /* String */ message_long, + /* FixedValue */ voltage_l1, + /* FixedValue */ voltage_l2, + /* FixedValue */ voltage_l3, + /* FixedValue */ current_l1, + /* FixedValue */ current_l2, + /* FixedValue */ current_l3, + /* FixedValue */ power_delivered_l1, + /* FixedValue */ power_delivered_l2, + /* FixedValue */ power_delivered_l3, + /* FixedValue */ power_returned_l1, + /* FixedValue */ power_returned_l2, + /* FixedValue */ power_returned_l3, + /* uint16_t */ gas_device_type, + /* String */ gas_equipment_id, + /* uint8_t */ gas_valve_position, + /* TimestampedFixedValue */ gas_delivered, + /* uint16_t */ thermal_device_type, + /* String */ thermal_equipment_id, + /* uint8_t */ thermal_valve_position, + /* TimestampedFixedValue */ thermal_delivered, + /* uint16_t */ water_device_type, + /* String */ water_equipment_id, + /* uint8_t */ water_valve_position, + /* TimestampedFixedValue */ water_delivered> data; + + auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); + REQUIRE(res.err == nullptr); + + // Print all values + data.applyEach(Printer()); + + // Check that all fields have correct values + REQUIRE(data.identification == "KFM5KAIFA-METER"); + REQUIRE(data.p1_version == "40"); + REQUIRE(data.timestamp == "150117185916W"); + REQUIRE(data.equipment_id == "0000000000000000000000000000000000"); + REQUIRE(data.energy_delivered_tariff1 == 671.578f); + REQUIRE(data.energy_delivered_tariff2 == 842.472f); + REQUIRE(data.energy_returned_tariff1 == 0); + REQUIRE(data.energy_returned_tariff2 == 0); + REQUIRE(data.electricity_tariff == "0001"); + REQUIRE(data.power_delivered == 0.333f); + REQUIRE(data.power_returned == 0); + REQUIRE(data.electricity_threshold == 999.9f); + REQUIRE(data.electricity_switch_position == 1); + REQUIRE(data.electricity_failures == 8); + REQUIRE(data.electricity_long_failures == 7); + REQUIRE(data.electricity_failure_log == "(1)(0-0:96.7.19)(000101000001W)(2147483647*s)"); + REQUIRE(data.electricity_sags_l1 == 0); + REQUIRE(data.electricity_swells_l1 == 0); + REQUIRE(data.message_short.empty()); + REQUIRE(data.message_long.empty()); + REQUIRE(data.current_l1 == 1); + REQUIRE(data.power_delivered_l1 == 0.332f); + REQUIRE(data.power_returned_l1 == 0); + REQUIRE(data.gas_device_type == 3); + REQUIRE(data.gas_equipment_id == "0000000000000000000000000000000000"); + REQUIRE(data.gas_valve_position == 1); + REQUIRE(data.gas_delivered == 473.789f); +} + +TEST_CASE("Should report an error if the crc has incorrect format") { + const auto &dsmr_message = + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "1-0:1.7.0(00.318*kW)\r\n" + "!1ED\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); + REQUIRE(std::string(res.err) == "Incomplete or malformed checksum"); +} + +TEST_CASE("Should report an error if the crc of a package is incorrect") { + const auto &dsmr_message = + "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-0:.8.1(000671.578*kWh)\r\n" + "1-0:1.7.0(00.318*kW)\r\n" + "!1E1D\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); + REQUIRE(std::string(res.err) == "Checksum mismatch"); + + const auto& fullError = res.fullError(dsmr_message, dsmr_message + std::size(dsmr_message)); + std::cout << "Full error" << std::endl << fullError << std::endl; + REQUIRE(fullError == "!1E1D\r\n ^\r\nChecksum mismatch"); +} + +TEST_CASE("Should parse Wh-based integers for FixedField (fallback int_unit path)") { + const auto& msg = + "/ABC5MTR\r\n" + "\r\n" + "1-0:1.8.0(000441879*Wh)\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ energy_delivered_lux> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(res.err == nullptr); + REQUIRE(data.energy_delivered_lux == 441.879f); // 441,879 Wh => 441.879 kWh + REQUIRE(fields::energy_delivered_lux::unit() == std::string("kWh")); + REQUIRE(fields::energy_delivered_lux::int_unit() == std::string("Wh")); +} + +TEST_CASE("Should parse TimestampedFixedField for gas_delivered_be and expose timestamp") { + const auto& msg = + "/DEF5MTR\r\n" + "\r\n" + "0-1:24.2.3(230101120000W)(00012.345*m3)\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* TimestampedFixedValue */ gas_delivered_be> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(res.err == nullptr); + REQUIRE(data.gas_delivered_be == 12.345f); + REQUIRE(data.gas_delivered_be.timestamp == "230101120000W"); +} + +TEST_CASE("Should take the last value with LastFixedField (capacity rate history)") { + const auto& msg = + "/KFM5MTR\r\n" + "\r\n" + "0-0:98.1.0(1)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW)\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ active_energy_import_maximum_demand_last_13_months> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.active_energy_import_maximum_demand_last_13_months == 4.329f); +} + +TEST_CASE("Should detect duplicate fields") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.100*kW)\r\n" + "1-0:1.7.0(00.200*kW)\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Duplicate field"); +} + +TEST_CASE("Should error on unknown field when unknown_error is true") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:2.7.0(00.000*kW)\r\n" // power_returned not part of ParsedData below + "!\r\n"; + + ParsedData< + /* String */ identification> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/true, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Unknown field"); +} + +TEST_CASE("Should report OBIS ID numbers over 255") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "256-0:1.7.0(00.100*kW)\r\n" // invalid OBIS (256) + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Obis ID has number over 255"); +} + +TEST_CASE("Should validate string length bounds (p1_version too short)") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8(4)\r\n" // p1_version expects 2 chars + "!\r\n"; + + ParsedData< + /* String */ identification, + /* String */ p1_version> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Invalid string length"); +} + +TEST_CASE("Should validate units for numeric fields") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.318*kVA)\r\n" // expects kW, not kVA + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Invalid unit"); +} + +TEST_CASE("Should report missing closing parenthesis for StringField") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8(40\r\n" // missing ')' + "!\r\n"; + + ParsedData< + /* String */ identification, + /* String */ p1_version> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Missing )"); +} + +TEST_CASE("Should compute FixedField with decimals and millivolt int_unit correctly") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:32.7.0(230.1*V)\r\n" // voltage_l1 (V / mV) + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ voltage_l1> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.voltage_l1 == 230.1f); +} + +TEST_CASE("all_present() should reflect presence of all requested fields") { + SUBCASE("All fields present -> true") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.all_present()); + } + + SUBCASE("Missing a requested field -> false") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE_FALSE(data.all_present()); + } +} + +TEST_CASE("Should report last dataline not CRLF terminated") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)" // no CRLF before '!' + "!"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + REQUIRE(std::string(res.err) == "Last dataline not CRLF terminated"); +} + +TEST_CASE("Should report an error if checksum is not found") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)" + "!"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + REQUIRE(std::string(res.err) == "No checksum found"); +} + +TEST_CASE("Doesn't crash for an empty packet") { + const auto& msg = ""; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + REQUIRE(std::string(res.err) == "Data should start with /"); + + res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + REQUIRE(std::string(res.err) == "Data should start with /"); +} + +TEST_CASE("Doesn't crash for a small packet") { + const auto& msg = "/!"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + REQUIRE(std::string(res.err) == "No checksum found"); + + res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + REQUIRE(res.err == nullptr); +} + +TEST_CASE("Doesn't crash for a small packet 2") { + const auto& msg = "/a!"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + REQUIRE(std::string(res.err) == "No checksum found"); + + res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + REQUIRE(std::string(res.err) == "Last dataline not CRLF terminated"); +} + +TEST_CASE("Doesn't crash for a partial checksum") { + const auto& msg = "/!A1"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + REQUIRE(std::string(res.err) == "No checksum found"); +} + +TEST_CASE("Doesn't crash for a packet that doesn't end with '!' symbol") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + REQUIRE(std::string(res.err) == "Data should end with !"); +} + +TEST_CASE("Trailing characters on data line") { + const auto& msg = + "/AAA5MTR\r\n\r\n" + "1-0:1.7.0(00.123*kW) trailing\r\n" + "!\r\n"; + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); + REQUIRE(std::string(res.err) == "Trailing characters on data line"); +} + +TEST_CASE("Unknown field ignored when unknown_error is false") { + const auto& msg = + "/AAA5MTR\r\n\r\n" + "1-0:2.7.0(00.000*kW)\r\n" + "!\r\n"; + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(res.err == nullptr); +} + +TEST_CASE("Missing unit when required") { + const auto& msg = + "/AAA5MTR\r\n\r\n" + "1-0:1.7.0(00.123)\r\n" + "!\r\n"; + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); + REQUIRE(std::string(res.err) == "Missing unit"); +} + +TEST_CASE("Unit present when not expected") { + const auto& msg = + "/AAA5MTR\r\n\r\n" + "0-0:96.7.21(00008*s)\r\n" + "!\r\n"; + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); + REQUIRE(std::string(res.err) == "Extra data"); +} + +TEST_CASE("Malformed packet that starts with ')'") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8)40(\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* String */ p1_version> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Missing ("); +} + + +TEST_CASE("Non-digit in numeric part") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.A23*kW)\r\n" + "!\r\n"; + + ParsedData< + /* String */ identification, + /* FixedValue */ power_delivered> data; + + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "Invalid number"); +} + +TEST_CASE("OBIS id empty line") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "garbage\r\n" + "!\r\n"; + + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(std::string(res.err) == "OBIS id Empty"); +} + +TEST_CASE("Accepts LF-only line endings") { + const auto& msg = + "/AAA5MTR\n" + "\n" + "1-0:1.7.0(00.123*kW)\n" + "!\n"; + + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.power_delivered == 0.123f); +} + +TEST_CASE("Unit matching is case-insensitive") { + const auto& msg = + "/ABC5MTR\r\n" + "\r\n" + "1-0:1.8.1(000001.000*kwh)\r\n" + "!\r\n"; + + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.energy_delivered_tariff1 == 1.000f); +} + +TEST_CASE("Numeric without decimals is accepted (auto-padded)") { + const auto& msg = + "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(1*kW)\r\n" + "!\r\n"; + + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(res.err == nullptr); + REQUIRE(data.power_delivered == 1.0f); +} From e5a6ee8ffa0f274e40076921389e0c5eb15205f2 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 9 Sep 2025 20:21:21 +0200 Subject: [PATCH 02/25] * Apply clang-format * Fix comment formatting: use "//" for all comments --- src/.clang-format | 8 + src/dsmr/fields.h | 1042 ++++++++++++++---------------- src/dsmr/parser.h | 719 ++++++++++----------- src/dsmr/util.h | 239 ++++--- src/test/parser_include_test.cpp | 5 +- src/test/parser_test.cpp | 555 ++++++++-------- 6 files changed, 1229 insertions(+), 1339 deletions(-) create mode 100644 src/.clang-format diff --git a/src/.clang-format b/src/.clang-format new file mode 100644 index 0000000..4c29cb3 --- /dev/null +++ b/src/.clang-format @@ -0,0 +1,8 @@ +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html +BasedOnStyle: LLVM +CompactNamespaces: true +AlwaysBreakTemplateDeclarations: Yes +FixNamespaceComments: false +PointerAlignment: Left +AlignEscapedNewlines: Left +ColumnLimit: 200 diff --git a/src/dsmr/fields.h b/src/dsmr/fields.h index 88a1c60..fb2bf1b 100644 --- a/src/dsmr/fields.h +++ b/src/dsmr/fields.h @@ -1,7 +1,7 @@ #pragma once -#include "util.h" #include "parser.h" +#include "util.h" #ifndef DSMR_GAS_MBUS_ID #define DSMR_GAS_MBUS_ID 1 @@ -16,554 +16,510 @@ #define DSMR_SUB_MBUS_ID 4 #endif -namespace dsmr -{ - - /** - * Superclass for data items in a P1 message. - */ - template - struct ParsedField - { - template - void apply(F &f) { f.apply(*static_cast(this)); } - // By defaults, fields have no unit - static const char *unit() { return ""; } - }; - - template - struct StringField : ParsedField - { - ParseResult parse(const char *str, const char *end) - { - ParseResult res = StringParser::parse_string(minlen, maxlen, str, end); - if (!res.err) - static_cast(this)->val() = res.result; - return res; - } - }; - - // A timestamp is essentially a string using YYMMDDhhmmssX format (where - // X is W or S for wintertime or summertime). Parsing this into a proper - // (UNIX) timestamp is hard to do generically. Parsing it into a - // single integer needs > 4 bytes top fit and isn't very useful (you - // cannot really do any calculation with those values). So we just parse - // into a string for now. - template - struct TimestampField : StringField - { - }; - - // Value that is parsed as a three-decimal float, but stored as an - // integer (by multiplying by 1000). Supports val() (or implicit cast to - // float) to get the original value, and int_val() to get the more - // efficient integer value. The unit() and int_unit() methods on - // FixedField return the corresponding units for these values. - struct FixedValue - { - operator float() const { return val(); } - float val() const { return _value / 1000.0; } - uint32_t int_val() const { return _value; } - - uint32_t _value; - }; - - // Floating point numbers in the message never have more than 3 decimal - // digits. To prevent inefficient floating point operations, we store - // them as a fixed-point number: an integer that stores the value in - // thousands. For example, a value of 1.234 kWh is stored as 1234. This - // effectively means that the integer value is the value in Wh. To allow - // automatic printing of these values, both the original unit and the - // integer unit is passed as a template argument. - template - struct FixedField : ParsedField - { - ParseResult parse(const char *str, const char *end) - { - // Check if the value is a float value, plus its expected unit type. - ParseResult res_float = NumParser::parse(3, _unit, str, end); - if (!res_float.err) { - static_cast(this)->val()._value = res_float.result; - return res_float; - } - // If not, then check for an int value, plus its expected unit type. - // This accomodates for some smart meters that publish int values instead - // of floats. E.g. most meters would publish "1-0:1.8.0(000441.879*kWh)", - // but some use "1-0:1.8.0(000441879*Wh)" instead. - ParseResult res_int = NumParser::parse(0, _int_unit, str, end); - if (!res_int.err) { - static_cast(this)->val()._value = res_int.result; - return res_int; - } - // If not, then return the initial error result for the float parsing step. +namespace dsmr { + +// Superclass for data items in a P1 message. +template +struct ParsedField { + template + void apply(F& f) { + f.apply(*static_cast(this)); + } + // By defaults, fields have no unit + static const char* unit() { return ""; } +}; + +template +struct StringField : ParsedField { + ParseResult parse(const char* str, const char* end) { + ParseResult res = StringParser::parse_string(minlen, maxlen, str, end); + if (!res.err) + static_cast(this)->val() = res.result; + return res; + } +}; + +// A timestamp is essentially a string using YYMMDDhhmmssX format (where +// X is W or S for wintertime or summertime). Parsing this into a proper +// (UNIX) timestamp is hard to do generically. Parsing it into a +// single integer needs > 4 bytes top fit and isn't very useful (you +// cannot really do any calculation with those values). So we just parse +// into a string for now. +template +struct TimestampField : StringField {}; + +// Value that is parsed as a three-decimal float, but stored as an +// integer (by multiplying by 1000). Supports val() (or implicit cast to +// float) to get the original value, and int_val() to get the more +// efficient integer value. The unit() and int_unit() methods on +// FixedField return the corresponding units for these values. +struct FixedValue { + operator float() const { return val(); } + float val() const { return _value / 1000.0; } + uint32_t int_val() const { return _value; } + + uint32_t _value; +}; + +// Floating point numbers in the message never have more than 3 decimal +// digits. To prevent inefficient floating point operations, we store +// them as a fixed-point number: an integer that stores the value in +// thousands. For example, a value of 1.234 kWh is stored as 1234. This +// effectively means that the integer value is the value in Wh. To allow +// automatic printing of these values, both the original unit and the +// integer unit is passed as a template argument. +template +struct FixedField : ParsedField { + ParseResult parse(const char* str, const char* end) { + // Check if the value is a float value, plus its expected unit type. + ParseResult res_float = NumParser::parse(3, _unit, str, end); + if (!res_float.err) { + static_cast(this)->val()._value = res_float.result; return res_float; } + // If not, then check for an int value, plus its expected unit type. + // This accomodates for some smart meters that publish int values instead + // of floats. E.g. most meters would publish "1-0:1.8.0(000441.879*kWh)", + // but some use "1-0:1.8.0(000441879*Wh)" instead. + ParseResult res_int = NumParser::parse(0, _int_unit, str, end); + if (!res_int.err) { + static_cast(this)->val()._value = res_int.result; + return res_int; + } + // If not, then return the initial error result for the float parsing step. + return res_float; + } - static const char *unit() { return _unit; } - static const char *int_unit() { return _int_unit; } - }; - - struct TimestampedFixedValue : public FixedValue - { - std::string timestamp; - }; - - // Some numerical values are prefixed with a timestamp. This is simply - // both of them concatenated, e.g. 0-1:24.2.1(150117180000W)(00473.789*m3) - template - struct TimestampedFixedField : public FixedField - { - ParseResult parse(const char *str, const char *end) - { - // First, parse timestamp - ParseResult res = StringParser::parse_string(13, 13, str, end); - if (res.err) - return res; + static const char* unit() { return _unit; } + static const char* int_unit() { return _int_unit; } +}; + +struct TimestampedFixedValue : public FixedValue { + std::string timestamp; +}; + +// Some numerical values are prefixed with a timestamp. This is simply +// both of them concatenated, e.g. 0-1:24.2.1(150117180000W)(00473.789*m3) +template +struct TimestampedFixedField : public FixedField { + ParseResult parse(const char* str, const char* end) { + // First, parse timestamp + ParseResult res = StringParser::parse_string(13, 13, str, end); + if (res.err) + return res; - static_cast(this)->val().timestamp = res.result; + static_cast(this)->val().timestamp = res.result; - // Which is immediately followed by the numerical value - return FixedField::parse(res.next, end); - } - }; - - // Take the last value of multiple values - // e.g. 0-0:98.1.0(1)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW) - template - struct LastFixedField : public FixedField - { - ParseResult parse(const char *str, const char *end) - { - // we parse last entry 2 times - const char *last = end; - - ParseResult res; - res.next = str; - - while (res.next != end) - { - last = res.next; - res = StringParser::parse_string(1, 20, res.next, end); - if (res.err) - return res; - } - - // (04.329*kW) Which is followed by the numerical value - return FixedField::parse(last, end); - } - }; - - // A integer number is just represented as an integer. - template - struct IntField : ParsedField - { - ParseResult parse(const char *str, const char *end) - { - ParseResult res = NumParser::parse(0, _unit, str, end); - if (!res.err) - static_cast(this)->val() = res.result; - return res; + // Which is immediately followed by the numerical value + return FixedField::parse(res.next, end); + } +}; + +// Take the last value of multiple values +// e.g. 0-0:98.1.0(1)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW) +template +struct LastFixedField : public FixedField { + ParseResult parse(const char* str, const char* end) { + // we parse last entry 2 times + const char* last = end; + + ParseResult res; + res.next = str; + + while (res.next != end) { + last = res.next; + res = StringParser::parse_string(1, 20, res.next, end); + if (res.err) + return res; } - static const char *unit() { return _unit; } - }; - - // A RawField is not parsed, the entire value (including any - // parenthesis around it) is returned as a string. - template - struct RawField : ParsedField - { - ParseResult parse(const char *str, const char *end) - { - // Just copy the string verbatim value without any parsing - static_cast(this)->val().append(str, end - str); - return ParseResult().until(end); - } - }; - - namespace fields - { - struct units - { - static inline constexpr char none[] = ""; - static inline constexpr char kWh[] = "kWh"; - static inline constexpr char Wh[] = "Wh"; - static inline constexpr char kW[] = "kW"; - static inline constexpr char W[] = "W"; - static inline constexpr char kV[] = "kV"; - static inline constexpr char V[] = "V"; - static inline constexpr char mV[] = "mV"; - static inline constexpr char kA[] = "kA"; - static inline constexpr char A[] = "A"; - static inline constexpr char mA[] = "mA"; - static inline constexpr char m3[] = "m3"; - static inline constexpr char dm3[] = "dm3"; - static inline constexpr char GJ[] = "GJ"; - static inline constexpr char MJ[] = "MJ"; - static inline constexpr char kvar[] = "kvar"; - static inline constexpr char kvarh[] = "kvarh"; - static inline constexpr char kVA[] = "kVA"; - static inline constexpr char VA[] = "VA"; - static inline constexpr char s[] = "s"; - static inline constexpr char Hz[] ="Hz"; - static inline constexpr char kHz[] ="kHz"; - }; - - const uint8_t GAS_MBUS_ID = DSMR_GAS_MBUS_ID; - const uint8_t WATER_MBUS_ID = DSMR_WATER_MBUS_ID; - const uint8_t THERMAL_MBUS_ID = DSMR_THERMAL_MBUS_ID; - const uint8_t SUB_MBUS_ID = DSMR_SUB_MBUS_ID; - -#define DEFINE_FIELD(fieldname, value_t, obis, field_t, ...) \ - struct fieldname : field_t \ - { \ - value_t fieldname; \ - bool fieldname##_present = false; \ - static inline constexpr ObisId id = obis; \ - static inline constexpr char name[] = #fieldname; \ - value_t &val() { return fieldname; } \ - bool &present() { return fieldname##_present; } \ + // (04.329*kW) Which is followed by the numerical value + return FixedField::parse(last, end); + } +}; + +// A integer number is just represented as an integer. +template +struct IntField : ParsedField { + ParseResult parse(const char* str, const char* end) { + ParseResult res = NumParser::parse(0, _unit, str, end); + if (!res.err) + static_cast(this)->val() = res.result; + return res; + } + + static const char* unit() { return _unit; } +}; + +// A RawField is not parsed, the entire value (including any +// parenthesis around it) is returned as a string. +template +struct RawField : ParsedField { + ParseResult parse(const char* str, const char* end) { + // Just copy the string verbatim value without any parsing + static_cast(this)->val().append(str, end - str); + return ParseResult().until(end); + } +}; + +namespace fields { +struct units { + static inline constexpr char none[] = ""; + static inline constexpr char kWh[] = "kWh"; + static inline constexpr char Wh[] = "Wh"; + static inline constexpr char kW[] = "kW"; + static inline constexpr char W[] = "W"; + static inline constexpr char kV[] = "kV"; + static inline constexpr char V[] = "V"; + static inline constexpr char mV[] = "mV"; + static inline constexpr char kA[] = "kA"; + static inline constexpr char A[] = "A"; + static inline constexpr char mA[] = "mA"; + static inline constexpr char m3[] = "m3"; + static inline constexpr char dm3[] = "dm3"; + static inline constexpr char GJ[] = "GJ"; + static inline constexpr char MJ[] = "MJ"; + static inline constexpr char kvar[] = "kvar"; + static inline constexpr char kvarh[] = "kvarh"; + static inline constexpr char kVA[] = "kVA"; + static inline constexpr char VA[] = "VA"; + static inline constexpr char s[] = "s"; + static inline constexpr char Hz[] = "Hz"; + static inline constexpr char kHz[] = "kHz"; +}; + +const uint8_t GAS_MBUS_ID = DSMR_GAS_MBUS_ID; +const uint8_t WATER_MBUS_ID = DSMR_WATER_MBUS_ID; +const uint8_t THERMAL_MBUS_ID = DSMR_THERMAL_MBUS_ID; +const uint8_t SUB_MBUS_ID = DSMR_SUB_MBUS_ID; + +#define DEFINE_FIELD(fieldname, value_t, obis, field_t, ...) \ + struct fieldname : field_t { \ + value_t fieldname; \ + bool fieldname##_present = false; \ + static inline constexpr ObisId id = obis; \ + static inline constexpr char name[] = #fieldname; \ + value_t& val() { return fieldname; } \ + bool& present() { return fieldname##_present; } \ } - /* Meter identification. This is not a normal field, but a - * specially-formatted first line of the message */ - DEFINE_FIELD(identification, std::string, ObisId(255, 255, 255, 255, 255, 255), RawField); - - /* Version information for P1 output */ - DEFINE_FIELD(p1_version, std::string, ObisId(1, 3, 0, 2, 8), StringField, 2, 2); - DEFINE_FIELD(p1_version_be, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); - DEFINE_FIELD(p1_version_ch, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); - - /* Date-time stamp of the P1 message */ - DEFINE_FIELD(timestamp, std::string, ObisId(0, 0, 1, 0, 0), TimestampField); - - /* Equipment identifier */ - DEFINE_FIELD(equipment_id, std::string, ObisId(0, 0, 96, 1, 1), StringField, 0, 96); - - /* Meter Reading electricity delivered to client (Special for Lux) in 0,001 kWh */ - /* TODO: by OBIS 1-0:1.8.0.255 IEC 62056 it should be Positive active energy (A+) total [kWh], should we rename it? */ - DEFINE_FIELD(energy_delivered_lux, FixedValue, ObisId(1, 0, 1, 8, 0), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered to client (Tariff 1) in 0,001 kWh */ - DEFINE_FIELD(energy_delivered_tariff1, FixedValue, ObisId(1, 0, 1, 8, 1), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered to client (Tariff 2) in 0,001 kWh */ - DEFINE_FIELD(energy_delivered_tariff2, FixedValue, ObisId(1, 0, 1, 8, 2), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered to client (Tariff 3) in 0,001 kWh */ - DEFINE_FIELD(energy_delivered_tariff3, FixedValue, ObisId(1, 0, 1, 8, 3), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered to client (Tariff 4) in 0,001 kWh */ - DEFINE_FIELD(energy_delivered_tariff4, FixedValue, ObisId(1, 0, 1, 8, 4), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Special for Lux) in 0,001 kWh */ - /* TODO: by OBIS 1-0:2.8.0.255 IEC 62056 it should be Negative active energy (A+) total [kWh], should we rename it? */ - DEFINE_FIELD(energy_returned_lux, FixedValue, ObisId(1, 0, 2, 8, 0), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Tariff 1) in 0,001 kWh */ - DEFINE_FIELD(energy_returned_tariff1, FixedValue, ObisId(1, 0, 2, 8, 1), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Tariff 2) in 0,001 kWh */ - DEFINE_FIELD(energy_returned_tariff2, FixedValue, ObisId(1, 0, 2, 8, 2), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Tariff 1) in 0,001 kWh */ - DEFINE_FIELD(energy_returned_tariff3, FixedValue, ObisId(1, 0, 2, 8, 3), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Tariff 2) in 0,001 kWh */ - DEFINE_FIELD(energy_returned_tariff4, FixedValue, ObisId(1, 0, 2, 8, 4), FixedField, units::kWh, units::Wh); - /* - * Extra fields used for Luxembourg and Lithuania - */ - DEFINE_FIELD(total_imported_energy, FixedValue, ObisId(1, 0, 3, 8, 0), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered to client (Tariff 1) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_delivered_tariff1, FixedValue, ObisId(1, 0, 3, 8, 1), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered to client (Tariff 2) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_delivered_tariff2, FixedValue, ObisId(1, 0, 3, 8, 2), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered to client (Tariff 3) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_delivered_tariff3, FixedValue, ObisId(1, 0, 3, 8, 3), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered to client (Tariff 4) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_delivered_tariff4, FixedValue, ObisId(1, 0, 3, 8, 4), FixedField, units::kvarh, units::kvarh); - - DEFINE_FIELD(total_exported_energy, FixedValue, ObisId(1, 0, 4, 8, 0), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered by client (Tariff 1) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_returned_tariff1, FixedValue, ObisId(1, 0, 4, 8, 1), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered by client (Tariff 2) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_returned_tariff2, FixedValue, ObisId(1, 0, 4, 8, 2), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered by client (Tariff 3) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_returned_tariff3, FixedValue, ObisId(1, 0, 4, 8, 3), FixedField, units::kvarh, units::kvarh); - /* Meter Reading Reactive energy delivered by client (Tariff 4) in 0,001 kvarh */ - DEFINE_FIELD(reactive_energy_returned_tariff4, FixedValue, ObisId(1, 0, 4, 8, 4), FixedField, units::kvarh, units::kvarh); - - /* - * Specific fields used for Switzerland - */ - /* Meter Reading electricity delivered to client (Tariff 1) in 0,001 kWh */ - DEFINE_FIELD(energy_delivered_tariff1_ch, FixedValue, ObisId(1, 1, 1, 8, 1), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered to client (Tariff 2) in 0,001 kWh */ - DEFINE_FIELD(energy_delivered_tariff2_ch, FixedValue, ObisId(1, 1, 1, 8, 2), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Tariff 1) in 0,001 kWh */ - DEFINE_FIELD(energy_returned_tariff1_ch, FixedValue, ObisId(1, 1, 2, 8, 1), FixedField, units::kWh, units::Wh); - /* Meter Reading electricity delivered by client (Tariff 2) in 0,001 kWh */ - DEFINE_FIELD(energy_returned_tariff2_ch, FixedValue, ObisId(1, 1, 2, 8, 2), FixedField, units::kWh, units::Wh); - - /* Tariff indicator electricity. The tariff indicator can also be used - * to switch tariff dependent loads e.g boilers. This is the - * responsibility of the P1 user */ - DEFINE_FIELD(electricity_tariff, std::string, ObisId(0, 0, 96, 14, 0), StringField, 4, 4); - - /* Actual electricity power delivered (+P) in 1 Watt resolution */ - DEFINE_FIELD(power_delivered, FixedValue, ObisId(1, 0, 1, 7, 0), FixedField, units::kW, units::W); - /* Actual electricity power received (-P) in 1 Watt resolution */ - DEFINE_FIELD(power_returned, FixedValue, ObisId(1, 0, 2, 7, 0), FixedField, units::kW, units::W); - - /* - * Extra fields used for Luxembourg and Lithuania - */ - DEFINE_FIELD(reactive_power_delivered, FixedValue, ObisId(1, 0, 3, 7, 0), FixedField, units::kvar, units::kvar); - DEFINE_FIELD(reactive_power_returned, FixedValue, ObisId(1, 0, 4, 7, 0), FixedField, units::kvar, units::kvar); - - /* - * Specific fields used for Switzerland - */ - /* Actual electricity power delivered (+P) in 1 Watt resolution */ - DEFINE_FIELD(power_delivered_ch, FixedValue, ObisId(1, 1, 1, 7, 0), FixedField, units::kW, units::W); - /* Actual electricity power received (-P) in 1 Watt resolution */ - DEFINE_FIELD(power_returned_ch, FixedValue, ObisId(1, 1, 2, 7, 0), FixedField, units::kW, units::W); - - /* The actual threshold Electricity in kW. Removed in 4.0.7 / 4.2.2 / 5.0 */ - DEFINE_FIELD(electricity_threshold, FixedValue, ObisId(0, 0, 17, 0, 0), FixedField, units::kW, units::W); - - /* Switch position Electricity (in/out/enabled). Removed in 4.0.7 / 4.2.2 / 5.0 */ - DEFINE_FIELD(electricity_switch_position, uint8_t, ObisId(0, 0, 96, 3, 10), IntField, units::none); - - /* Number of power failures in any phase */ - DEFINE_FIELD(electricity_failures, uint32_t, ObisId(0, 0, 96, 7, 21), IntField, units::none); - /* Number of long power failures in any phase */ - DEFINE_FIELD(electricity_long_failures, uint32_t, ObisId(0, 0, 96, 7, 9), IntField, units::none); - - /* Power Failure Event Log (long power failures) */ - DEFINE_FIELD(electricity_failure_log, std::string, ObisId(1, 0, 99, 97, 0), RawField); - - /* Number of voltage sags in phase L1 */ - DEFINE_FIELD(electricity_sags_l1, uint32_t, ObisId(1, 0, 32, 32, 0), IntField, units::none); - DEFINE_FIELD(voltage_sag_time_l1, uint32_t, ObisId(1, 0, 32, 33, 0), IntField, units::s); - DEFINE_FIELD(voltage_sag_l1, uint32_t, ObisId(1, 0, 32, 34, 0), IntField, units::V); - - /* Number of voltage sags in phase L2 (polyphase meters only) */ - DEFINE_FIELD(electricity_sags_l2, uint32_t, ObisId(1, 0, 52, 32, 0), IntField, units::none); - DEFINE_FIELD(voltage_sag_time_l2, uint32_t, ObisId(1, 0, 52, 33, 0), IntField, units::s); - DEFINE_FIELD(voltage_sag_l2, uint32_t, ObisId(1, 0, 52, 34, 0), IntField, units::V); - - /* Number of voltage sags in phase L3 (polyphase meters only) */ - DEFINE_FIELD(electricity_sags_l3, uint32_t, ObisId(1, 0, 72, 32, 0), IntField, units::none); - DEFINE_FIELD(voltage_sag_time_l3, uint32_t, ObisId(1, 0, 72, 33, 0), IntField, units::s); - DEFINE_FIELD(voltage_sag_l3, uint32_t, ObisId(1, 0, 72, 34, 0), IntField, units::V); - - /* Number of voltage swells in phase L1 */ - DEFINE_FIELD(electricity_swells_l1, uint32_t, ObisId(1, 0, 32, 36, 0), IntField, units::none); - DEFINE_FIELD(voltage_swell_time_l1, uint32_t, ObisId(1, 0, 32, 37, 0), IntField, units::s); - DEFINE_FIELD(voltage_swell_l1, uint32_t, ObisId(1, 0, 32, 38, 0), IntField, units::V); - - /* Number of voltage swells in phase L2 (polyphase meters only) */ - DEFINE_FIELD(electricity_swells_l2, uint32_t, ObisId(1, 0, 52, 36, 0), IntField, units::none); - DEFINE_FIELD(voltage_swell_time_l2, uint32_t, ObisId(1, 0, 52, 37, 0), IntField, units::s); - DEFINE_FIELD(voltage_swell_l2, uint32_t, ObisId(1, 0, 52, 38, 0), IntField, units::V); - - /* Number of voltage swells in phase L3 (polyphase meters only) */ - DEFINE_FIELD(electricity_swells_l3, uint32_t, ObisId(1, 0, 72, 36, 0), IntField, units::none); - DEFINE_FIELD(voltage_swell_time_l3, uint32_t, ObisId(1, 0, 72, 37, 0), IntField, units::s); - DEFINE_FIELD(voltage_swell_l3, uint32_t, ObisId(1, 0, 72, 38, 0), IntField, units::V); - - /* Text message codes: numeric 8 digits (Note: Missing from 5.0 spec) - * */ - DEFINE_FIELD(message_short, std::string, ObisId(0, 0, 96, 13, 1), StringField, 0, 16); - /* Text message max 2048 characters (Note: Spec says 1024 in comment and - * 2048 in format spec, so we stick to 2048). */ - DEFINE_FIELD(message_long, std::string, ObisId(0, 0, 96, 13, 0), StringField, 0, 2048); - - /* Instantaneous voltage L1 in 0.1V resolution (Note: Spec says V - * resolution in comment, but 0.1V resolution in format spec. Added in - * 5.0) */ - DEFINE_FIELD(voltage_l1, FixedValue, ObisId(1, 0, 32, 7, 0), FixedField, units::V, units::mV); - DEFINE_FIELD(voltage_avg_l1, FixedValue, ObisId(1, 0, 32, 24, 0), FixedField, units::V, units::mV); - /* Instantaneous voltage L2 in 0.1V resolution (Note: Spec says V - * resolution in comment, but 0.1V resolution in format spec. Added in - * 5.0) */ - DEFINE_FIELD(voltage_l2, FixedValue, ObisId(1, 0, 52, 7, 0), FixedField, units::V, units::mV); - DEFINE_FIELD(voltage_avg_l2, FixedValue, ObisId(1, 0, 52, 24, 0), FixedField, units::V, units::mV); - /* Instantaneous voltage L3 in 0.1V resolution (Note: Spec says V - * resolution in comment, but 0.1V resolution in format spec. Added in - * 5.0) */ - DEFINE_FIELD(voltage_l3, FixedValue, ObisId(1, 0, 72, 7, 0), FixedField, units::V, units::mV); - DEFINE_FIELD(voltage_avg_l3, FixedValue, ObisId(1, 0, 72, 24, 0), FixedField, units::V, units::mV); - - /* Instantaneous voltage (U) [V] */ - DEFINE_FIELD(voltage, FixedValue, ObisId(1, 0, 12, 7, 0), FixedField, units::V, units::mV); - /* Frequency [Hz] */ - DEFINE_FIELD(frequency, FixedValue, ObisId(1, 0, 14, 7, 0), FixedField, units::kHz, units::Hz); - /* Absolute active instantaneous power (|A|) [kW] */ - DEFINE_FIELD(abs_power, FixedValue, ObisId(1, 0, 15, 7, 0), FixedField, units::kW, units::W); - - /* Instantaneous current L1 in A resolution */ - DEFINE_FIELD(current_l1, FixedValue, ObisId(1, 0, 31, 7, 0), FixedField, units::A, units::mA); - DEFINE_FIELD(current_fuse_l1, FixedValue, ObisId(1, 0, 31, 4, 0), FixedField, units::A, units::mA); - /* Instantaneous current L2 in A resolution */ - DEFINE_FIELD(current_l2, FixedValue, ObisId(1, 0, 51, 7, 0), FixedField, units::A, units::mA); - DEFINE_FIELD(current_fuse_l2, FixedValue, ObisId(1, 0, 51, 4, 0), FixedField, units::A, units::mA); - /* Instantaneous current L3 in A resolution */ - DEFINE_FIELD(current_l3, FixedValue, ObisId(1, 0, 71, 7, 0), FixedField, units::A, units::mA); - DEFINE_FIELD(current_fuse_l3, FixedValue, ObisId(1, 0, 71, 4, 0), FixedField, units::A, units::mA); - - /* Instantaneous active power L1 (+P) in W resolution */ - DEFINE_FIELD(power_delivered_l1, FixedValue, ObisId(1, 0, 21, 7, 0), FixedField, units::kW, units::W); - /* Instantaneous active power L2 (+P) in W resolution */ - DEFINE_FIELD(power_delivered_l2, FixedValue, ObisId(1, 0, 41, 7, 0), FixedField, units::kW, units::W); - /* Instantaneous active power L3 (+P) in W resolution */ - DEFINE_FIELD(power_delivered_l3, FixedValue, ObisId(1, 0, 61, 7, 0), FixedField, units::kW, units::W); - - /* Instantaneous active power L1 (-P) in W resolution */ - DEFINE_FIELD(power_returned_l1, FixedValue, ObisId(1, 0, 22, 7, 0), FixedField, units::kW, units::W); - /* Instantaneous active power L2 (-P) in W resolution */ - DEFINE_FIELD(power_returned_l2, FixedValue, ObisId(1, 0, 42, 7, 0), FixedField, units::kW, units::W); - /* Instantaneous active power L3 (-P) in W resolution */ - DEFINE_FIELD(power_returned_l3, FixedValue, ObisId(1, 0, 62, 7, 0), FixedField, units::kW, units::W); - - /* Instantaneous current (I) [A] */ - DEFINE_FIELD(current, FixedValue, ObisId(1, 0, 11, 7, 0), FixedField, units::A, units::mA); - /* Instantaneous current (I) in neutral [A] */ - DEFINE_FIELD(current_n, FixedValue, ObisId(1, 0, 91, 7, 0), FixedField, units::A, units::mA); - /* Instantaneous sum of all phase current's (I) [A] */ - DEFINE_FIELD(current_sum, FixedValue, ObisId(1, 0, 90, 7, 0), FixedField, units::A, units::mA); - - /* - * LUX and Lithuania - */ - /* TODO: by IEC 62056 unit's shoudl be kvar, safe to change? */ - /* Instantaneous reactive power L1 (+Q) in W resolution */ - DEFINE_FIELD(reactive_power_delivered_l1, FixedValue, ObisId(1, 0, 23, 7, 0), FixedField, units::none, units::none); - /* Instantaneous reactive power L2 (+Q) in W resolution */ - DEFINE_FIELD(reactive_power_delivered_l2, FixedValue, ObisId(1, 0, 43, 7, 0), FixedField, units::none, units::none); - /* Instantaneous reactive power L3 (+Q) in W resolution */ - DEFINE_FIELD(reactive_power_delivered_l3, FixedValue, ObisId(1, 0, 63, 7, 0), FixedField, units::none, units::none); - - /* - * LUX and Lithuania - */ - /* TODO: by IEC 62056 unit's shoudl be kvar, safe to change? */ - /* Instantaneous reactive power L1 (-Q) in W resolution */ - DEFINE_FIELD(reactive_power_returned_l1, FixedValue, ObisId(1, 0, 24, 7, 0), FixedField, units::none, units::none); - /* Instantaneous reactive power L2 (-Q) in W resolution */ - DEFINE_FIELD(reactive_power_returned_l2, FixedValue, ObisId(1, 0, 44, 7, 0), FixedField, units::none, units::none); - /* Instantaneous reactive power L3 (-Q) in W resolution */ - DEFINE_FIELD(reactive_power_returned_l3, FixedValue, ObisId(1, 0, 64, 7, 0), FixedField, units::none, units::none); - - /* Apparent instantaneous power (+S) in kVA resolution */ - DEFINE_FIELD(apparent_delivery_power, FixedValue, ObisId(1, 0, 9, 7, 0), FixedField, units::kVA, units::VA); - /* Apparent instantaneous power L1 (+S) in kVA resolution */ - DEFINE_FIELD(apparent_delivery_power_l1, FixedValue, ObisId(1, 0, 29, 7, 0), FixedField, units::kVA, units::VA); - /* Apparent instantaneous power L2 (+S) in kVA resolution */ - DEFINE_FIELD(apparent_delivery_power_l2, FixedValue, ObisId(1, 0, 49, 7, 0), FixedField, units::kVA, units::VA); - /* Apparent instantaneous power L3 (+S) in kVA resolution */ - DEFINE_FIELD(apparent_delivery_power_l3, FixedValue, ObisId(1, 0, 69, 7, 0), FixedField, units::kVA, units::VA); - - /* Apparent instantaneous power (-S) in kVA resolution */ - DEFINE_FIELD(apparent_return_power, FixedValue, ObisId(1, 0, 10, 7, 0), FixedField, units::kVA, units::VA); - /* Apparent instantaneous power L1 (-S) in kVA resolution */ - DEFINE_FIELD(apparent_return_power_l1, FixedValue, ObisId(1, 0, 30, 7, 0), FixedField, units::kVA, units::VA); - /* Apparent instantaneous power L2 (-S) in kVA resolution */ - DEFINE_FIELD(apparent_return_power_l2, FixedValue, ObisId(1, 0, 50, 7, 0), FixedField, units::kVA, units::VA); - /* Apparent instantaneous power L3 (-S) in kVA resolution */ - DEFINE_FIELD(apparent_return_power_l3, FixedValue, ObisId(1, 0, 70, 7, 0), FixedField, units::kVA, units::VA); - - /* Active Demand Avg3 Plus in W resolution */ - DEFINE_FIELD(active_demand_power, FixedValue, ObisId(1, 0, 1, 24, 0), FixedField, units::kW, units::W); - /* Active Demand Avg3 Net in W resolution */ - /* TODO: 1-0.16.24.0.255 can have negative value, this library is not ready for negative numbers. */ - // DEFINE_FIELD(active_demand_net, int32_t, ObisId(1, 0, 16, 24, 0), IntField, units::kW); - /* Active Demand Avg3 Absolute in W resolution */ - DEFINE_FIELD(active_demand_abs, FixedValue, ObisId(1, 0, 15, 24, 0), FixedField, units::kW, units::W); - - /* Device-Type */ - DEFINE_FIELD(gas_device_type, uint16_t, ObisId(0, GAS_MBUS_ID, 24, 1, 0), IntField, units::none); - - /* Equipment identifier (Gas) */ - DEFINE_FIELD(gas_equipment_id, std::string, ObisId(0, GAS_MBUS_ID, 96, 1, 0), StringField, 0, 96); - /* Equipment identifier (Gas) BE */ - DEFINE_FIELD(gas_equipment_id_be, std::string, ObisId(0, GAS_MBUS_ID, 96, 1, 1), StringField, 0, 96); - - /* Valve position Gas (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ - DEFINE_FIELD(gas_valve_position, uint8_t, ObisId(0, GAS_MBUS_ID, 24, 4, 0), IntField, units::none); - - /* Last 5-minute value (temperature converted), gas delivered to client - * in m3, including decimal values and capture time (Note: 4.x spec has - * "hourly value") */ - DEFINE_FIELD(gas_delivered, TimestampedFixedValue, ObisId(0, GAS_MBUS_ID, 24, 2, 1), TimestampedFixedField, units::m3, - units::dm3); - /* _BE */ - DEFINE_FIELD(gas_delivered_be, TimestampedFixedValue, ObisId(0, GAS_MBUS_ID, 24, 2, 3), TimestampedFixedField, - units::m3, units::dm3); - DEFINE_FIELD(gas_delivered_text, std::string, ObisId(0, GAS_MBUS_ID, 24, 3, 0), RawField); - - /* Device-Type */ - DEFINE_FIELD(thermal_device_type, uint16_t, ObisId(0, THERMAL_MBUS_ID, 24, 1, 0), IntField, units::none); - - /* Equipment identifier (Thermal: heat or cold) */ - DEFINE_FIELD(thermal_equipment_id, std::string, ObisId(0, THERMAL_MBUS_ID, 96, 1, 0), StringField, 0, 96); - - /* Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ - DEFINE_FIELD(thermal_valve_position, uint8_t, ObisId(0, THERMAL_MBUS_ID, 24, 4, 0), IntField, units::none); - - /* Last 5-minute Meter reading Heat or Cold in 0,01 GJ and capture time - * (Note: 4.x spec has "hourly meter reading") */ - DEFINE_FIELD(thermal_delivered, TimestampedFixedValue, ObisId(0, THERMAL_MBUS_ID, 24, 2, 1), TimestampedFixedField, - units::GJ, units::MJ); - - /* Device-Type */ - DEFINE_FIELD(water_device_type, uint16_t, ObisId(0, WATER_MBUS_ID, 24, 1, 0), IntField, units::none); - - /* Equipment identifier (Thermal: heat or cold) */ - DEFINE_FIELD(water_equipment_id, std::string, ObisId(0, WATER_MBUS_ID, 96, 1, 0), StringField, 0, 96); - - /* Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ - DEFINE_FIELD(water_valve_position, uint8_t, ObisId(0, WATER_MBUS_ID, 24, 4, 0), IntField, units::none); - - /* Last 5-minute Meter reading in 0,001 m3 and capture time - * (Note: 4.x spec has "hourly meter reading") */ - DEFINE_FIELD(water_delivered, TimestampedFixedValue, ObisId(0, WATER_MBUS_ID, 24, 2, 1), TimestampedFixedField, - units::m3, units::dm3); - - /* Device-Type */ - DEFINE_FIELD(sub_device_type, uint16_t, ObisId(0, SUB_MBUS_ID, 24, 1, 0), IntField, units::none); - - /* Equipment identifier (Thermal: heat or cold) */ - DEFINE_FIELD(sub_equipment_id, std::string, ObisId(0, SUB_MBUS_ID, 96, 1, 0), StringField, 0, 96); - - /* Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). */ - DEFINE_FIELD(sub_valve_position, uint8_t, ObisId(0, SUB_MBUS_ID, 24, 4, 0), IntField, units::none); - - /* Last 5-minute Meter reading Heat or Cold and capture time (e.g. sub - * E meter) (Note: 4.x spec has "hourly meter reading") */ - DEFINE_FIELD(sub_delivered, TimestampedFixedValue, ObisId(0, SUB_MBUS_ID, 24, 2, 1), TimestampedFixedField, - units::m3, units::dm3); - - /* Extra fields used for Belgian capacity rate/peak consumption (cappaciteitstarief) */ - /*Current quart-hourly energy consumption*/ - DEFINE_FIELD(active_energy_import_current_average_demand, FixedValue, ObisId(1, 0, 1, 4, 0), FixedField, units::kW, units::W); - DEFINE_FIELD(active_energy_export_current_average_demand, FixedValue, ObisId(1, 0, 2, 4, 0), FixedField, units::kW, units::W); - DEFINE_FIELD(reactive_energy_import_current_average_demand, FixedValue, ObisId(1, 0, 3, 4, 0), FixedField, units::kvar, units::kvar); - DEFINE_FIELD(reactive_energy_export_current_average_demand, FixedValue, ObisId(1, 0, 4, 4, 0), FixedField, units::kvar, units::kvar); - DEFINE_FIELD(apparent_energy_import_current_average_demand, FixedValue, ObisId(1, 0, 9, 4, 0), FixedField, units::kVA, units::VA); - DEFINE_FIELD(apparent_energy_export_current_average_demand, FixedValue, ObisId(1, 0, 10, 4, 0), FixedField, units::kVA, units::VA); - DEFINE_FIELD(active_energy_import_last_completed_demand, FixedValue, ObisId(1, 0, 1, 5, 0), FixedField, units::kW, units::W); - DEFINE_FIELD(active_energy_export_last_completed_demand, FixedValue, ObisId(1, 0, 2, 5, 0), FixedField, units::kW, units::W); - DEFINE_FIELD(reactive_energy_import_last_completed_demand, FixedValue, ObisId(1, 0, 3, 5, 0), FixedField, units::kvar, units::kvar); - DEFINE_FIELD(reactive_energy_export_last_completed_demand, FixedValue, ObisId(1, 0, 4, 5, 0), FixedField, units::kvar, units::kvar); - DEFINE_FIELD(apparent_energy_import_last_completed_demand, FixedValue, ObisId(1, 0, 9, 5, 0), FixedField, units::kVA, units::VA); - DEFINE_FIELD(apparent_energy_export_last_completed_demand, FixedValue, ObisId(1, 0, 10, 5, 0), FixedField, units::kVA, units::VA); - - /*Maximum energy consumption from the current month*/ - DEFINE_FIELD(active_energy_import_maximum_demand_running_month, TimestampedFixedValue, ObisId(1, 0, 1, 6, 0), TimestampedFixedField, units::kW, units::W); - /*Maximum energy consumption from the last 13 months*/ - DEFINE_FIELD(active_energy_import_maximum_demand_last_13_months, FixedValue, ObisId(0, 0, 98, 1, 0), LastFixedField, units::kW, units::W); - - /* Image Core Version and checksum */ - DEFINE_FIELD(fw_core_version, FixedValue, ObisId(1, 0, 0, 2, 0), FixedField, units::none, units::none); - DEFINE_FIELD(fw_core_checksum, std::string, ObisId(1, 0, 0, 2, 8), StringField, 0, 8); - /* Image Module Version and checksum */ - DEFINE_FIELD(fw_module_version, FixedValue, ObisId(1, 1, 0, 2, 0), FixedField, units::none, units::none); - DEFINE_FIELD(fw_module_checksum, std::string, ObisId(1, 1, 0, 2, 8), StringField, 0, 8); - - } // namespace fields - -} // namespace dsmr +// Meter identification. This is not a normal field, but a specially-formatted first line of the message +DEFINE_FIELD(identification, std::string, ObisId(255, 255, 255, 255, 255, 255), RawField); + +// Version information for P1 output +DEFINE_FIELD(p1_version, std::string, ObisId(1, 3, 0, 2, 8), StringField, 2, 2); +DEFINE_FIELD(p1_version_be, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); +DEFINE_FIELD(p1_version_ch, std::string, ObisId(0, 0, 96, 1, 4), StringField, 2, 96); + +// Date-time stamp of the P1 message +DEFINE_FIELD(timestamp, std::string, ObisId(0, 0, 1, 0, 0), TimestampField); + +// Equipment identifier +DEFINE_FIELD(equipment_id, std::string, ObisId(0, 0, 96, 1, 1), StringField, 0, 96); + +// Meter Reading electricity delivered to client (Special for Lux) in 0,001 kWh +// TODO: by OBIS 1-0:1.8.0.255 IEC 62056 it should be Positive active energy (A+) total [kWh], should we rename it? +DEFINE_FIELD(energy_delivered_lux, FixedValue, ObisId(1, 0, 1, 8, 0), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered to client (Tariff 1) in 0,001 kWh +DEFINE_FIELD(energy_delivered_tariff1, FixedValue, ObisId(1, 0, 1, 8, 1), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered to client (Tariff 2) in 0,001 kWh +DEFINE_FIELD(energy_delivered_tariff2, FixedValue, ObisId(1, 0, 1, 8, 2), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered to client (Tariff 3) in 0,001 kWh +DEFINE_FIELD(energy_delivered_tariff3, FixedValue, ObisId(1, 0, 1, 8, 3), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered to client (Tariff 4) in 0,001 kWh +DEFINE_FIELD(energy_delivered_tariff4, FixedValue, ObisId(1, 0, 1, 8, 4), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Special for Lux) in 0,001 kWh +// TODO: by OBIS 1-0:2.8.0.255 IEC 62056 it should be Negative active energy (A+) total [kWh], should we rename it? +DEFINE_FIELD(energy_returned_lux, FixedValue, ObisId(1, 0, 2, 8, 0), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Tariff 1) in 0,001 kWh +DEFINE_FIELD(energy_returned_tariff1, FixedValue, ObisId(1, 0, 2, 8, 1), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Tariff 2) in 0,001 kWh +DEFINE_FIELD(energy_returned_tariff2, FixedValue, ObisId(1, 0, 2, 8, 2), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Tariff 1) in 0,001 kWh +DEFINE_FIELD(energy_returned_tariff3, FixedValue, ObisId(1, 0, 2, 8, 3), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Tariff 2) in 0,001 kWh +DEFINE_FIELD(energy_returned_tariff4, FixedValue, ObisId(1, 0, 2, 8, 4), FixedField, units::kWh, units::Wh); + +// Extra fields used for Luxembourg and Lithuania +DEFINE_FIELD(total_imported_energy, FixedValue, ObisId(1, 0, 3, 8, 0), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered to client (Tariff 1) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_delivered_tariff1, FixedValue, ObisId(1, 0, 3, 8, 1), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered to client (Tariff 2) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_delivered_tariff2, FixedValue, ObisId(1, 0, 3, 8, 2), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered to client (Tariff 3) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_delivered_tariff3, FixedValue, ObisId(1, 0, 3, 8, 3), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered to client (Tariff 4) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_delivered_tariff4, FixedValue, ObisId(1, 0, 3, 8, 4), FixedField, units::kvarh, units::kvarh); + +DEFINE_FIELD(total_exported_energy, FixedValue, ObisId(1, 0, 4, 8, 0), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered by client (Tariff 1) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_returned_tariff1, FixedValue, ObisId(1, 0, 4, 8, 1), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered by client (Tariff 2) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_returned_tariff2, FixedValue, ObisId(1, 0, 4, 8, 2), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered by client (Tariff 3) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_returned_tariff3, FixedValue, ObisId(1, 0, 4, 8, 3), FixedField, units::kvarh, units::kvarh); +// Meter Reading Reactive energy delivered by client (Tariff 4) in 0,001 kvarh +DEFINE_FIELD(reactive_energy_returned_tariff4, FixedValue, ObisId(1, 0, 4, 8, 4), FixedField, units::kvarh, units::kvarh); + +// Specific fields used for Switzerland +// Meter Reading electricity delivered to client (Tariff 1) in 0,001 kWh +DEFINE_FIELD(energy_delivered_tariff1_ch, FixedValue, ObisId(1, 1, 1, 8, 1), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered to client (Tariff 2) in 0,001 kWh +DEFINE_FIELD(energy_delivered_tariff2_ch, FixedValue, ObisId(1, 1, 1, 8, 2), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Tariff 1) in 0,001 kWh +DEFINE_FIELD(energy_returned_tariff1_ch, FixedValue, ObisId(1, 1, 2, 8, 1), FixedField, units::kWh, units::Wh); +// Meter Reading electricity delivered by client (Tariff 2) in 0,001 kWh +DEFINE_FIELD(energy_returned_tariff2_ch, FixedValue, ObisId(1, 1, 2, 8, 2), FixedField, units::kWh, units::Wh); + +// Tariff indicator electricity. The tariff indicator can also be used +// to switch tariff dependent loads e.g boilers. This is the +// responsibility of the P1 user +DEFINE_FIELD(electricity_tariff, std::string, ObisId(0, 0, 96, 14, 0), StringField, 4, 4); + +// Actual electricity power delivered (+P) in 1 Watt resolution +DEFINE_FIELD(power_delivered, FixedValue, ObisId(1, 0, 1, 7, 0), FixedField, units::kW, units::W); +// Actual electricity power received (-P) in 1 Watt resolution +DEFINE_FIELD(power_returned, FixedValue, ObisId(1, 0, 2, 7, 0), FixedField, units::kW, units::W); + +// Extra fields used for Luxembourg and Lithuania +DEFINE_FIELD(reactive_power_delivered, FixedValue, ObisId(1, 0, 3, 7, 0), FixedField, units::kvar, units::kvar); +DEFINE_FIELD(reactive_power_returned, FixedValue, ObisId(1, 0, 4, 7, 0), FixedField, units::kvar, units::kvar); + +// Specific fields used for Switzerland +// Actual electricity power delivered (+P) in 1 Watt resolution +DEFINE_FIELD(power_delivered_ch, FixedValue, ObisId(1, 1, 1, 7, 0), FixedField, units::kW, units::W); +// Actual electricity power received (-P) in 1 Watt resolution +DEFINE_FIELD(power_returned_ch, FixedValue, ObisId(1, 1, 2, 7, 0), FixedField, units::kW, units::W); + +// The actual threshold Electricity in kW. Removed in 4.0.7 / 4.2.2 / 5.0 +DEFINE_FIELD(electricity_threshold, FixedValue, ObisId(0, 0, 17, 0, 0), FixedField, units::kW, units::W); + +// Switch position Electricity (in/out/enabled). Removed in 4.0.7 / 4.2.2 / 5.0 +DEFINE_FIELD(electricity_switch_position, uint8_t, ObisId(0, 0, 96, 3, 10), IntField, units::none); + +// Number of power failures in any phase +DEFINE_FIELD(electricity_failures, uint32_t, ObisId(0, 0, 96, 7, 21), IntField, units::none); +// Number of long power failures in any phase +DEFINE_FIELD(electricity_long_failures, uint32_t, ObisId(0, 0, 96, 7, 9), IntField, units::none); + +// Power Failure Event Log (long power failures) +DEFINE_FIELD(electricity_failure_log, std::string, ObisId(1, 0, 99, 97, 0), RawField); + +// Number of voltage sags in phase L1 +DEFINE_FIELD(electricity_sags_l1, uint32_t, ObisId(1, 0, 32, 32, 0), IntField, units::none); +DEFINE_FIELD(voltage_sag_time_l1, uint32_t, ObisId(1, 0, 32, 33, 0), IntField, units::s); +DEFINE_FIELD(voltage_sag_l1, uint32_t, ObisId(1, 0, 32, 34, 0), IntField, units::V); + +// Number of voltage sags in phase L2 (polyphase meters only) +DEFINE_FIELD(electricity_sags_l2, uint32_t, ObisId(1, 0, 52, 32, 0), IntField, units::none); +DEFINE_FIELD(voltage_sag_time_l2, uint32_t, ObisId(1, 0, 52, 33, 0), IntField, units::s); +DEFINE_FIELD(voltage_sag_l2, uint32_t, ObisId(1, 0, 52, 34, 0), IntField, units::V); + +// Number of voltage sags in phase L3 (polyphase meters only) +DEFINE_FIELD(electricity_sags_l3, uint32_t, ObisId(1, 0, 72, 32, 0), IntField, units::none); +DEFINE_FIELD(voltage_sag_time_l3, uint32_t, ObisId(1, 0, 72, 33, 0), IntField, units::s); +DEFINE_FIELD(voltage_sag_l3, uint32_t, ObisId(1, 0, 72, 34, 0), IntField, units::V); + +// Number of voltage swells in phase L1 +DEFINE_FIELD(electricity_swells_l1, uint32_t, ObisId(1, 0, 32, 36, 0), IntField, units::none); +DEFINE_FIELD(voltage_swell_time_l1, uint32_t, ObisId(1, 0, 32, 37, 0), IntField, units::s); +DEFINE_FIELD(voltage_swell_l1, uint32_t, ObisId(1, 0, 32, 38, 0), IntField, units::V); + +// Number of voltage swells in phase L2 (polyphase meters only) +DEFINE_FIELD(electricity_swells_l2, uint32_t, ObisId(1, 0, 52, 36, 0), IntField, units::none); +DEFINE_FIELD(voltage_swell_time_l2, uint32_t, ObisId(1, 0, 52, 37, 0), IntField, units::s); +DEFINE_FIELD(voltage_swell_l2, uint32_t, ObisId(1, 0, 52, 38, 0), IntField, units::V); + +// Number of voltage swells in phase L3 (polyphase meters only) +DEFINE_FIELD(electricity_swells_l3, uint32_t, ObisId(1, 0, 72, 36, 0), IntField, units::none); +DEFINE_FIELD(voltage_swell_time_l3, uint32_t, ObisId(1, 0, 72, 37, 0), IntField, units::s); +DEFINE_FIELD(voltage_swell_l3, uint32_t, ObisId(1, 0, 72, 38, 0), IntField, units::V); + +// Text message codes: numeric 8 digits (Note: Missing from 5.0 spec) +DEFINE_FIELD(message_short, std::string, ObisId(0, 0, 96, 13, 1), StringField, 0, 16); +// Text message max 2048 characters (Note: Spec says 1024 in comment and +// 2048 in format spec, so we stick to 2048). +DEFINE_FIELD(message_long, std::string, ObisId(0, 0, 96, 13, 0), StringField, 0, 2048); + +// Instantaneous voltage L1 in 0.1V resolution (Note: Spec says V +// resolution in comment, but 0.1V resolution in format spec. Added in 5.0) +DEFINE_FIELD(voltage_l1, FixedValue, ObisId(1, 0, 32, 7, 0), FixedField, units::V, units::mV); +DEFINE_FIELD(voltage_avg_l1, FixedValue, ObisId(1, 0, 32, 24, 0), FixedField, units::V, units::mV); +// Instantaneous voltage L2 in 0.1V resolution (Note: Spec says V +// resolution in comment, but 0.1V resolution in format spec. Added in 5.0) +DEFINE_FIELD(voltage_l2, FixedValue, ObisId(1, 0, 52, 7, 0), FixedField, units::V, units::mV); +DEFINE_FIELD(voltage_avg_l2, FixedValue, ObisId(1, 0, 52, 24, 0), FixedField, units::V, units::mV); +// Instantaneous voltage L3 in 0.1V resolution (Note: Spec says V +// resolution in comment, but 0.1V resolution in format spec. Added in 5.0) +DEFINE_FIELD(voltage_l3, FixedValue, ObisId(1, 0, 72, 7, 0), FixedField, units::V, units::mV); +DEFINE_FIELD(voltage_avg_l3, FixedValue, ObisId(1, 0, 72, 24, 0), FixedField, units::V, units::mV); + +// Instantaneous voltage (U) [V] +DEFINE_FIELD(voltage, FixedValue, ObisId(1, 0, 12, 7, 0), FixedField, units::V, units::mV); +// Frequency [Hz] +DEFINE_FIELD(frequency, FixedValue, ObisId(1, 0, 14, 7, 0), FixedField, units::kHz, units::Hz); +// Absolute active instantaneous power (|A|) [kW] +DEFINE_FIELD(abs_power, FixedValue, ObisId(1, 0, 15, 7, 0), FixedField, units::kW, units::W); + +// Instantaneous current L1 in A resolution +DEFINE_FIELD(current_l1, FixedValue, ObisId(1, 0, 31, 7, 0), FixedField, units::A, units::mA); +DEFINE_FIELD(current_fuse_l1, FixedValue, ObisId(1, 0, 31, 4, 0), FixedField, units::A, units::mA); +// Instantaneous current L2 in A resolution +DEFINE_FIELD(current_l2, FixedValue, ObisId(1, 0, 51, 7, 0), FixedField, units::A, units::mA); +DEFINE_FIELD(current_fuse_l2, FixedValue, ObisId(1, 0, 51, 4, 0), FixedField, units::A, units::mA); +// Instantaneous current L3 in A resolution +DEFINE_FIELD(current_l3, FixedValue, ObisId(1, 0, 71, 7, 0), FixedField, units::A, units::mA); +DEFINE_FIELD(current_fuse_l3, FixedValue, ObisId(1, 0, 71, 4, 0), FixedField, units::A, units::mA); + +// Instantaneous active power L1 (+P) in W resolution +DEFINE_FIELD(power_delivered_l1, FixedValue, ObisId(1, 0, 21, 7, 0), FixedField, units::kW, units::W); +// Instantaneous active power L2 (+P) in W resolution +DEFINE_FIELD(power_delivered_l2, FixedValue, ObisId(1, 0, 41, 7, 0), FixedField, units::kW, units::W); +// Instantaneous active power L3 (+P) in W resolution +DEFINE_FIELD(power_delivered_l3, FixedValue, ObisId(1, 0, 61, 7, 0), FixedField, units::kW, units::W); + +// Instantaneous active power L1 (-P) in W resolution +DEFINE_FIELD(power_returned_l1, FixedValue, ObisId(1, 0, 22, 7, 0), FixedField, units::kW, units::W); +// Instantaneous active power L2 (-P) in W resolution +DEFINE_FIELD(power_returned_l2, FixedValue, ObisId(1, 0, 42, 7, 0), FixedField, units::kW, units::W); +// Instantaneous active power L3 (-P) in W resolution +DEFINE_FIELD(power_returned_l3, FixedValue, ObisId(1, 0, 62, 7, 0), FixedField, units::kW, units::W); + +// Instantaneous current (I) [A] +DEFINE_FIELD(current, FixedValue, ObisId(1, 0, 11, 7, 0), FixedField, units::A, units::mA); +// Instantaneous current (I) in neutral [A] +DEFINE_FIELD(current_n, FixedValue, ObisId(1, 0, 91, 7, 0), FixedField, units::A, units::mA); +// Instantaneous sum of all phase current's (I) [A] +DEFINE_FIELD(current_sum, FixedValue, ObisId(1, 0, 90, 7, 0), FixedField, units::A, units::mA); + +// LUX and Lithuania + +// TODO: by IEC 62056 unit's shoudl be kvar, safe to change? +// Instantaneous reactive power L1 (+Q) in W resolution +DEFINE_FIELD(reactive_power_delivered_l1, FixedValue, ObisId(1, 0, 23, 7, 0), FixedField, units::none, units::none); +// Instantaneous reactive power L2 (+Q) in W resolution +DEFINE_FIELD(reactive_power_delivered_l2, FixedValue, ObisId(1, 0, 43, 7, 0), FixedField, units::none, units::none); +// Instantaneous reactive power L3 (+Q) in W resolution +DEFINE_FIELD(reactive_power_delivered_l3, FixedValue, ObisId(1, 0, 63, 7, 0), FixedField, units::none, units::none); + +// LUX and Lithuania + +// TODO: by IEC 62056 unit's shoudl be kvar, safe to change? +// Instantaneous reactive power L1 (-Q) in W resolution +DEFINE_FIELD(reactive_power_returned_l1, FixedValue, ObisId(1, 0, 24, 7, 0), FixedField, units::none, units::none); +// Instantaneous reactive power L2 (-Q) in W resolution +DEFINE_FIELD(reactive_power_returned_l2, FixedValue, ObisId(1, 0, 44, 7, 0), FixedField, units::none, units::none); +// Instantaneous reactive power L3 (-Q) in W resolution +DEFINE_FIELD(reactive_power_returned_l3, FixedValue, ObisId(1, 0, 64, 7, 0), FixedField, units::none, units::none); + +// Apparent instantaneous power (+S) in kVA resolution +DEFINE_FIELD(apparent_delivery_power, FixedValue, ObisId(1, 0, 9, 7, 0), FixedField, units::kVA, units::VA); +// Apparent instantaneous power L1 (+S) in kVA resolution +DEFINE_FIELD(apparent_delivery_power_l1, FixedValue, ObisId(1, 0, 29, 7, 0), FixedField, units::kVA, units::VA); +// Apparent instantaneous power L2 (+S) in kVA resolution +DEFINE_FIELD(apparent_delivery_power_l2, FixedValue, ObisId(1, 0, 49, 7, 0), FixedField, units::kVA, units::VA); +// Apparent instantaneous power L3 (+S) in kVA resolution +DEFINE_FIELD(apparent_delivery_power_l3, FixedValue, ObisId(1, 0, 69, 7, 0), FixedField, units::kVA, units::VA); + +// Apparent instantaneous power (-S) in kVA resolution +DEFINE_FIELD(apparent_return_power, FixedValue, ObisId(1, 0, 10, 7, 0), FixedField, units::kVA, units::VA); +// Apparent instantaneous power L1 (-S) in kVA resolution +DEFINE_FIELD(apparent_return_power_l1, FixedValue, ObisId(1, 0, 30, 7, 0), FixedField, units::kVA, units::VA); +// Apparent instantaneous power L2 (-S) in kVA resolution +DEFINE_FIELD(apparent_return_power_l2, FixedValue, ObisId(1, 0, 50, 7, 0), FixedField, units::kVA, units::VA); +// Apparent instantaneous power L3 (-S) in kVA resolution +DEFINE_FIELD(apparent_return_power_l3, FixedValue, ObisId(1, 0, 70, 7, 0), FixedField, units::kVA, units::VA); + +// Active Demand Avg3 Plus in W resolution +DEFINE_FIELD(active_demand_power, FixedValue, ObisId(1, 0, 1, 24, 0), FixedField, units::kW, units::W); +// Active Demand Avg3 Net in W resolution +// TODO: 1-0.16.24.0.255 can have negative value, this library is not ready for negative numbers. +// DEFINE_FIELD(active_demand_net, int32_t, ObisId(1, 0, 16, 24, 0), IntField, units::kW); +// Active Demand Avg3 Absolute in W resolution +DEFINE_FIELD(active_demand_abs, FixedValue, ObisId(1, 0, 15, 24, 0), FixedField, units::kW, units::W); + +// Device-Type +DEFINE_FIELD(gas_device_type, uint16_t, ObisId(0, GAS_MBUS_ID, 24, 1, 0), IntField, units::none); + +// Equipment identifier (Gas) +DEFINE_FIELD(gas_equipment_id, std::string, ObisId(0, GAS_MBUS_ID, 96, 1, 0), StringField, 0, 96); +// Equipment identifier (Gas) BE +DEFINE_FIELD(gas_equipment_id_be, std::string, ObisId(0, GAS_MBUS_ID, 96, 1, 1), StringField, 0, 96); + +// Valve position Gas (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). +DEFINE_FIELD(gas_valve_position, uint8_t, ObisId(0, GAS_MBUS_ID, 24, 4, 0), IntField, units::none); + +// Last 5-minute value (temperature converted), gas delivered to client +// in m3, including decimal values and capture time (Note: 4.x spec has "hourly value") +DEFINE_FIELD(gas_delivered, TimestampedFixedValue, ObisId(0, GAS_MBUS_ID, 24, 2, 1), TimestampedFixedField, units::m3, units::dm3); +// _BE +DEFINE_FIELD(gas_delivered_be, TimestampedFixedValue, ObisId(0, GAS_MBUS_ID, 24, 2, 3), TimestampedFixedField, units::m3, units::dm3); +DEFINE_FIELD(gas_delivered_text, std::string, ObisId(0, GAS_MBUS_ID, 24, 3, 0), RawField); + +// Device-Type +DEFINE_FIELD(thermal_device_type, uint16_t, ObisId(0, THERMAL_MBUS_ID, 24, 1, 0), IntField, units::none); + +// Equipment identifier (Thermal: heat or cold) +DEFINE_FIELD(thermal_equipment_id, std::string, ObisId(0, THERMAL_MBUS_ID, 96, 1, 0), StringField, 0, 96); + +// Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). +DEFINE_FIELD(thermal_valve_position, uint8_t, ObisId(0, THERMAL_MBUS_ID, 24, 4, 0), IntField, units::none); + +// Last 5-minute Meter reading Heat or Cold in 0,01 GJ and capture time +// (Note: 4.x spec has "hourly meter reading") +DEFINE_FIELD(thermal_delivered, TimestampedFixedValue, ObisId(0, THERMAL_MBUS_ID, 24, 2, 1), TimestampedFixedField, units::GJ, units::MJ); + +// Device-Type +DEFINE_FIELD(water_device_type, uint16_t, ObisId(0, WATER_MBUS_ID, 24, 1, 0), IntField, units::none); + +// Equipment identifier (Thermal: heat or cold) +DEFINE_FIELD(water_equipment_id, std::string, ObisId(0, WATER_MBUS_ID, 96, 1, 0), StringField, 0, 96); + +// Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). +DEFINE_FIELD(water_valve_position, uint8_t, ObisId(0, WATER_MBUS_ID, 24, 4, 0), IntField, units::none); + +// Last 5-minute Meter reading in 0,001 m3 and capture time +// (Note: 4.x spec has "hourly meter reading") +DEFINE_FIELD(water_delivered, TimestampedFixedValue, ObisId(0, WATER_MBUS_ID, 24, 2, 1), TimestampedFixedField, units::m3, units::dm3); + +// Device-Type +DEFINE_FIELD(sub_device_type, uint16_t, ObisId(0, SUB_MBUS_ID, 24, 1, 0), IntField, units::none); + +// Equipment identifier (Thermal: heat or cold) +DEFINE_FIELD(sub_equipment_id, std::string, ObisId(0, SUB_MBUS_ID, 96, 1, 0), StringField, 0, 96); + +// Valve position (on/off/released) (Note: Removed in 4.0.7 / 4.2.2 / 5.0). +DEFINE_FIELD(sub_valve_position, uint8_t, ObisId(0, SUB_MBUS_ID, 24, 4, 0), IntField, units::none); + +// Last 5-minute Meter reading Heat or Cold and capture time (e.g. sub +// E meter) (Note: 4.x spec has "hourly meter reading") +DEFINE_FIELD(sub_delivered, TimestampedFixedValue, ObisId(0, SUB_MBUS_ID, 24, 2, 1), TimestampedFixedField, units::m3, units::dm3); + +// Extra fields used for Belgian capacity rate/peak consumption (cappaciteitstarief). Current quart-hourly energy consumption +DEFINE_FIELD(active_energy_import_current_average_demand, FixedValue, ObisId(1, 0, 1, 4, 0), FixedField, units::kW, units::W); +DEFINE_FIELD(active_energy_export_current_average_demand, FixedValue, ObisId(1, 0, 2, 4, 0), FixedField, units::kW, units::W); +DEFINE_FIELD(reactive_energy_import_current_average_demand, FixedValue, ObisId(1, 0, 3, 4, 0), FixedField, units::kvar, units::kvar); +DEFINE_FIELD(reactive_energy_export_current_average_demand, FixedValue, ObisId(1, 0, 4, 4, 0), FixedField, units::kvar, units::kvar); +DEFINE_FIELD(apparent_energy_import_current_average_demand, FixedValue, ObisId(1, 0, 9, 4, 0), FixedField, units::kVA, units::VA); +DEFINE_FIELD(apparent_energy_export_current_average_demand, FixedValue, ObisId(1, 0, 10, 4, 0), FixedField, units::kVA, units::VA); +DEFINE_FIELD(active_energy_import_last_completed_demand, FixedValue, ObisId(1, 0, 1, 5, 0), FixedField, units::kW, units::W); +DEFINE_FIELD(active_energy_export_last_completed_demand, FixedValue, ObisId(1, 0, 2, 5, 0), FixedField, units::kW, units::W); +DEFINE_FIELD(reactive_energy_import_last_completed_demand, FixedValue, ObisId(1, 0, 3, 5, 0), FixedField, units::kvar, units::kvar); +DEFINE_FIELD(reactive_energy_export_last_completed_demand, FixedValue, ObisId(1, 0, 4, 5, 0), FixedField, units::kvar, units::kvar); +DEFINE_FIELD(apparent_energy_import_last_completed_demand, FixedValue, ObisId(1, 0, 9, 5, 0), FixedField, units::kVA, units::VA); +DEFINE_FIELD(apparent_energy_export_last_completed_demand, FixedValue, ObisId(1, 0, 10, 5, 0), FixedField, units::kVA, units::VA); + +// Maximum energy consumption from the current month +DEFINE_FIELD(active_energy_import_maximum_demand_running_month, TimestampedFixedValue, ObisId(1, 0, 1, 6, 0), TimestampedFixedField, units::kW, units::W); +// Maximum energy consumption from the last 13 months +DEFINE_FIELD(active_energy_import_maximum_demand_last_13_months, FixedValue, ObisId(0, 0, 98, 1, 0), LastFixedField, units::kW, units::W); + +// Image Core Version and checksum +DEFINE_FIELD(fw_core_version, FixedValue, ObisId(1, 0, 0, 2, 0), FixedField, units::none, units::none); +DEFINE_FIELD(fw_core_checksum, std::string, ObisId(1, 0, 0, 2, 8), StringField, 0, 8); +// Image Module Version and checksum +DEFINE_FIELD(fw_module_version, FixedValue, ObisId(1, 1, 0, 2, 0), FixedField, units::none, units::none); +DEFINE_FIELD(fw_module_checksum, std::string, ObisId(1, 1, 0, 2, 8), StringField, 0, 8); + +} +} diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index acff89c..165214a 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -2,444 +2,391 @@ #include "util.h" -namespace dsmr -{ - // uses polynomial x^16+x^15+x^2+1 - static uint16_t crc16_update(uint16_t crc, uint8_t data) - { - unsigned int i; - - crc ^= data; - for (i = 0; i < 8; ++i) - { - if (crc & 1) - { - crc = (crc >> 1) ^ 0xA001; - } - else - { - crc = (crc >> 1); - } +namespace dsmr { + +// uses polynomial x^16+x^15+x^2+1 +static uint16_t crc16_update(uint16_t crc, uint8_t data) { + crc ^= data; + for (size_t i = 0; i < 8; ++i) { + if (crc & 1) { + crc = (crc >> 1) ^ 0xA001; + } else { + crc = (crc >> 1); } - return crc; + } + return crc; +} + +// ParsedData is a template for the result of parsing a Dsmr P1 message. +// You pass the fields you want to add to it as template arguments. +// +// This template will then generate a class that extends all the fields +// passed (the fields really are classes themselves). Since each field +// class has a single member variable, with the same name as the field +// class, all of these fields will be available on the generated class. +// +// In other words, if I have: +// +// using MyData = ParsedData< +// identification, +// equipment_id +// >; +// +// MyData data; +// +// then I can refer to the fields like data.identification and +// data.equipment_id normally. +// +// Furthermore, this class offers some helper methods that can be used +// to loop over all the fields inside it. +template +struct ParsedData; + +// Base case: No fields present. +template <> +struct ParsedData<> { + ParseResult parse_line(const ObisId& /* id */, const char* str, const char* /* end */) { + // Parsing succeeded, but found no matching handler (so return + // set the next pointer to show nothing was parsed). + return ParseResult().until(str); } - /** - * ParsedData is a template for the result of parsing a Dsmr P1 message. - * You pass the fields you want to add to it as template arguments. - * - * This template will then generate a class that extends all the fields - * passed (the fields really are classes themselves). Since each field - * class has a single member variable, with the same name as the field - * class, all of these fields will be available on the generated class. - * - * In other words, if I have: - * - * using MyData = ParsedData< - * identification, - * equipment_id - * >; - * - * MyData data; - * - * then I can refer to the fields like data.identification and - * data.equipment_id normally. - * - * Furthermore, this class offers some helper methods that can be used - * to loop over all the fields inside it. - */ - template - struct ParsedData; - - /** - * Base case: No fields present. - */ - template <> - struct ParsedData<> - { - ParseResult parse_line(const ObisId & /* id */, const char *str, const char * /* end */) - { - // Parsing succeeded, but found no matching handler (so return - // set the next pointer to show nothing was parsed). - return ParseResult().until(str); - } + template + void applyEach(F&& /* f */) { + // Nothing to do + } - template - void applyEach(F && /* f */) - { - // Nothing to do + bool all_present() { return true; } +}; + +// General case: At least one typename is passed. +template +struct ParsedData : public T, ParsedData { + + // This method is used by the parser to parse a single line. The + // OBIS id of the line is passed, and this method recursively finds a + // field with a matching id. If any, it calls it's parse method, which + // parses the value and stores it in the field. + ParseResult parse_line(const ObisId& id, const char* str, const char* end) { + if (id == T::id) { + if (T::present()) + return ParseResult().fail("Duplicate field", str); + T::present() = true; + return T::parse(str, end); } + return ParsedData::parse_line(id, str, end); + } - bool all_present() { return true; } - }; - - /** - * General case: At least one typename is passed. - */ - template - struct ParsedData : public T, ParsedData - { - /** - * This method is used by the parser to parse a single line. The - * OBIS id of the line is passed, and this method recursively finds a - * field with a matching id. If any, it calls it's parse method, which - * parses the value and stores it in the field. - */ - ParseResult parse_line(const ObisId &id, const char *str, const char *end) - { - if (id == T::id) - { - if (T::present()) - return ParseResult().fail("Duplicate field", str); - T::present() = true; - return T::parse(str, end); - } - return ParsedData::parse_line(id, str, end); - } + template + void applyEach(F&& f) { + T::apply(f); + return ParsedData::applyEach(f); + } - template - void applyEach(F &&f) - { - T::apply(f); - return ParsedData::applyEach(f); - } + // Returns true when all defined fields are present. + bool all_present() { return T::present() && ParsedData::all_present(); } +}; - /** - * Returns true when all defined fields are present. - */ - bool all_present() { return T::present() && ParsedData::all_present(); } - }; +struct StringParser { + static ParseResult parse_string(size_t min, size_t max, const char* str, const char* end) { + ParseResult res; + if (str >= end || *str != '(') + return res.fail("Missing (", str); - struct StringParser - { - static ParseResult parse_string(size_t min, size_t max, const char *str, const char *end) - { - ParseResult res; - if (str >= end || *str != '(') - return res.fail("Missing (", str); + const char* str_start = str + 1; // Skip ( + const char* str_end = str_start; - const char *str_start = str + 1; // Skip ( - const char *str_end = str_start; + while (str_end < end && *str_end != ')') + ++str_end; - while (str_end < end && *str_end != ')') - ++str_end; + if (str_end == end) + return res.fail("Missing )", str_end); - if (str_end == end) - return res.fail("Missing )", str_end); + size_t len = str_end - str_start; + if (len < min || len > max) + return res.fail("Invalid string length", str_start); - size_t len = str_end - str_start; - if (len < min || len > max) - return res.fail("Invalid string length", str_start); + res.result.append(str_start, len); - res.result.append(str_start, len); + return res.until(str_end + 1); // Skip ) + } +}; - return res.until(str_end + 1); // Skip ) - } - }; +static constexpr char INVALID_NUMBER[] = "Invalid number"; +static constexpr char INVALID_UNIT[] = "Invalid unit"; + +struct NumParser { + static ParseResult parse(size_t max_decimals, const char* unit, const char* str, const char* end) { + ParseResult res; + if (str >= end || *str != '(') + return res.fail("Missing (", str); - static constexpr char INVALID_NUMBER[] = "Invalid number"; - static constexpr char INVALID_UNIT[] = "Invalid unit"; + const char* num_start = str + 1; // Skip ( + const char* num_end = num_start; - struct NumParser - { - static ParseResult parse(size_t max_decimals, const char *unit, const char *str, const char *end) - { - ParseResult res; - if (str >= end || *str != '(') - return res.fail("Missing (", str); + uint32_t value = 0; - const char *num_start = str + 1; // Skip ( - const char *num_end = num_start; + // Parse integer part + while (num_end < end && !strchr("*.)", *num_end)) { + if (*num_end < '0' || *num_end > '9') + return res.fail(INVALID_NUMBER, num_end); + value *= 10; + value += *num_end - '0'; + ++num_end; + } - uint32_t value = 0; + // Parse decimal part, if any + if (max_decimals && num_end < end && *num_end == '.') { + ++num_end; - // Parse integer part - while (num_end < end && !strchr("*.)", *num_end)) - { + while (num_end < end && !strchr("*)", *num_end) && max_decimals) { + max_decimals--; if (*num_end < '0' || *num_end > '9') return res.fail(INVALID_NUMBER, num_end); value *= 10; value += *num_end - '0'; ++num_end; } + } - // Parse decimal part, if any - if (max_decimals && num_end < end && *num_end == '.') - { - ++num_end; - - while (num_end < end && !strchr("*)", *num_end) && max_decimals) - { - max_decimals--; - if (*num_end < '0' || *num_end > '9') - return res.fail(INVALID_NUMBER, num_end); - value *= 10; - value += *num_end - '0'; - ++num_end; - } + // Fill in missing decimals with zeroes + while (max_decimals--) + value *= 10; + + // If a unit was passed, check that the unit in the messages + // messages the unit passed. + if (unit && *unit) { + if (num_end >= end || *num_end != '*') + return res.fail("Missing unit", num_end); + const char* unit_start = ++num_end; // skip * + while (num_end < end && *num_end != ')' && *unit) { + // Next character in units do not match? + if (std::tolower(static_cast(*num_end++)) != std::tolower(static_cast(*unit++))) + return res.fail(INVALID_UNIT, unit_start); } + // At the end of the message unit, but not the passed unit? + if (*unit) + return res.fail(INVALID_UNIT, unit_start); + } - // Fill in missing decimals with zeroes - while (max_decimals--) - value *= 10; + if (num_end >= end || *num_end != ')') + return res.fail("Extra data", num_end); - // If a unit was passed, check that the unit in the messages - // messages the unit passed. - if (unit && *unit) - { - if (num_end >= end || *num_end != '*') - return res.fail("Missing unit", num_end); - const char *unit_start = ++num_end; // skip * - while (num_end < end && *num_end != ')' && *unit) - { - // Next character in units do not match? - if (std::tolower(static_cast(*num_end++)) != std::tolower(static_cast(*unit++))) - return res.fail(INVALID_UNIT, unit_start); - } - // At the end of the message unit, but not the passed unit? - if (*unit) - return res.fail(INVALID_UNIT, unit_start); + return res.succeed(value).until(num_end + 1); // Skip ) + } +}; + +struct ObisIdParser { + static ParseResult parse(const char* str, const char* end) { + // Parse a Obis ID of the form 1-2:3.4.5.6 + // Stops parsing on the first unrecognized character. Any unparsed + // parts are set to 255. + ParseResult res; + ObisId& id = res.result; + res.next = str; + uint8_t part = 0; + while (res.next < end) { + char c = *res.next; + + if (c >= '0' && c <= '9') { + uint8_t digit = c - '0'; + if (id.v[part] > 25 || (id.v[part] == 25 && digit > 5)) + return res.fail("Obis ID has number over 255", res.next); + id.v[part] = id.v[part] * 10 + digit; + } else if (part == 0 && c == '-') { + part++; + } else if (part == 1 && c == ':') { + part++; + } else if (part > 1 && part < 5 && c == '.') { + part++; + } else { + break; } + ++res.next; + } - if (num_end >= end || *num_end != ')') - return res.fail("Extra data", num_end); + if (res.next == str) + return res.fail("OBIS id Empty", str); - return res.succeed(value).until(num_end + 1); // Skip ) - } - }; - - struct ObisIdParser - { - static ParseResult parse(const char *str, const char *end) - { - // Parse a Obis ID of the form 1-2:3.4.5.6 - // Stops parsing on the first unrecognized character. Any unparsed - // parts are set to 255. - ParseResult res; - ObisId &id = res.result; - res.next = str; - uint8_t part = 0; - while (res.next < end) - { - char c = *res.next; - - if (c >= '0' && c <= '9') - { - uint8_t digit = c - '0'; - if (id.v[part] > 25 || (id.v[part] == 25 && digit > 5)) - return res.fail("Obis ID has number over 255", res.next); - id.v[part] = id.v[part] * 10 + digit; - } - else if (part == 0 && c == '-') - { - part++; - } - else if (part == 1 && c == ':') - { - part++; - } - else if (part > 1 && part < 5 && c == '.') - { - part++; - } - else - { - break; - } - ++res.next; - } + for (++part; part < 6; ++part) + id.v[part] = 255; - if (res.next == str) - return res.fail("OBIS id Empty", str); + return res; + } +}; - for (++part; part < 6; ++part) - id.v[part] = 255; +struct CrcParser { +private: + static const size_t CRC_LEN = 4; - return res; + static bool hex_nibble(char c, uint8_t& out) { + if (c >= '0' && c <= '9') { + out = static_cast(c - '0'); + return true; } - }; - - struct CrcParser - { - private: - static const size_t CRC_LEN = 4; - - static bool hex_nibble(char c, uint8_t& out) - { - if (c >= '0' && c <= '9') { out = static_cast(c - '0'); return true; } - if (c >= 'A' && c <= 'F') { out = static_cast(c - 'A' + 10); return true; } - if (c >= 'a' && c <= 'f') { out = static_cast(c - 'a' + 10); return true; } - return false; + if (c >= 'A' && c <= 'F') { + out = static_cast(c - 'A' + 10); + return true; } + if (c >= 'a' && c <= 'f') { + out = static_cast(c - 'a' + 10); + return true; + } + return false; + } - public: +public: + // Parse a crc value. str must point to the first of the four hex + // bytes in the CRC. + static ParseResult parse(const char* str, const char* end) { + ParseResult res; + + if (str + CRC_LEN > end) + return res.fail("No checksum found", str); + + uint16_t value = 0; + for (size_t i = 0; i < CRC_LEN; ++i) { + uint8_t nibble; + if (!hex_nibble(str[i], nibble)) + return res.fail("Incomplete or malformed checksum", str + i); + value = static_cast((value << 4) | nibble); + } - // Parse a crc value. str must point to the first of the four hex - // bytes in the CRC. - static ParseResult parse(const char* str, const char* end) - { - ParseResult res; + res.next = str + CRC_LEN; + return res.succeed(value); + } +}; - if (str + CRC_LEN > end) - return res.fail("No checksum found", str); +struct P1Parser { - uint16_t value = 0; - for (size_t i = 0; i < CRC_LEN; ++i) - { - uint8_t nibble; - if (!hex_nibble(str[i], nibble)) - return res.fail("Incomplete or malformed checksum", str + i); - value = static_cast((value << 4) | nibble); - } + // Parse a complete P1 telegram. The string passed should start + // with '/' and run up to and including the ! and the following + // four byte checksum. It's ok if the string is longer, the .next + // pointer in the result will indicate the next unprocessed byte. + template + static ParseResult parse(ParsedData* data, const char* str, size_t n, bool unknown_error = false, bool check_crc = true) { + ParseResult res; - res.next = str + CRC_LEN; - return res.succeed(value); - } - }; - - struct P1Parser - { - /** - * Parse a complete P1 telegram. The string passed should start - * with '/' and run up to and including the ! and the following - * four byte checksum. It's ok if the string is longer, the .next - * pointer in the result will indicate the next unprocessed byte. - */ - template - static ParseResult parse(ParsedData *data, const char *str, size_t n, bool unknown_error = false, bool check_crc = true) - { - ParseResult res; - - const char* const buf_begin = str; - const char* const buf_end = str + n; - - if (!n || *buf_begin != '/') - return res.fail("Data should start with /", buf_begin); - - // The payload starts after '/', and runs up to (but not including) '!' - const char* const data_begin = buf_begin + 1; - - // Find the terminating '!' (or the end of buffer if not present) - const char* term = std::find(data_begin, buf_end, '!'); - if(term == buf_end) - return res.fail("Data should end with !"); - - if (check_crc) - { - // With CRC enabled, '!' must exist and be followed by 4 hex chars. - if (term >= buf_end) - return res.fail("No checksum found", term); - - // Compute CRC over '/' .. '!' (inclusive). - uint16_t crc = 0; - for (const char* p = buf_begin; p <= term; ++p) - crc = crc16_update(crc, static_cast(*p)); - - // Parse and verify the 4-hex checksum after '!' - ParseResult check = CrcParser::parse(term + 1, buf_end); - if (check.err) - return check; - if (check.result != crc) - return res.fail("Checksum mismatch", term + 1); - - // Parse payload (between '/' and '!') - res = parse_data(data, data_begin, term, unknown_error); - res.next = check.next; // Advance past checksum - return res; - } + const char* const buf_begin = str; + const char* const buf_end = str + n; + + if (!n || *buf_begin != '/') + return res.fail("Data should start with /", buf_begin); + + // The payload starts after '/', and runs up to (but not including) '!' + const char* const data_begin = buf_begin + 1; + + // Find the terminating '!' (or the end of buffer if not present) + const char* term = std::find(data_begin, buf_end, '!'); + if (term == buf_end) + return res.fail("Data should end with !"); + + if (check_crc) { + // With CRC enabled, '!' must exist and be followed by 4 hex chars. + if (term >= buf_end) + return res.fail("No checksum found", term); + + // Compute CRC over '/' .. '!' (inclusive). + uint16_t crc = 0; + for (const char* p = buf_begin; p <= term; ++p) + crc = crc16_update(crc, static_cast(*p)); + + // Parse and verify the 4-hex checksum after '!' + ParseResult check = CrcParser::parse(term + 1, buf_end); + if (check.err) + return check; + if (check.result != crc) + return res.fail("Checksum mismatch", term + 1); - // No CRC checking: parse up to '!' if present, otherwise up to buf_end. + // Parse payload (between '/' and '!') res = parse_data(data, data_begin, term, unknown_error); - res.next = (term < buf_end) ? term : buf_end; + res.next = check.next; // Advance past checksum return res; } - /** - * Parse the data part of a message. Str should point to the first - * character after the leading /, end should point to the ! before the - * checksum. Does not verify the checksum. - */ - template - static ParseResult parse_data(ParsedData *data, const char *str, const char *end, - bool unknown_error = false) - { - // Split into lines and parse those - const char *line_end = str, *line_start = str; - - // Parse ID line - while (line_end < end) - { - if (*line_end == '\r' || *line_end == '\n') - { - // The first identification line looks like: - // XXX5 - // The DSMR spec is vague on details, but in 62056-21, the X's - // are a three-letter (registerd) manufacturer ID, the id - // string is up to 16 chars of arbitrary characters and the - // '5' is a baud rate indication. 5 apparently means 9600, - // which DSMR 3.x and below used. It seems that DSMR 2.x - // passed '3' here (which is mandatory for "mode D" - // communication according to 62956-21), so we also allow - // that. Apparently swedish meters use '9' for 115200. This code - // used to check the format of the line somewhat, but for - // flexibility (and since we do not actually parse the contents - // of the line anyway), just allow anything now. - // - // Offer it for processing using the all-ones Obis ID, which - // is not otherwise valid. - ParseResult tmp = data->parse_line(ObisId(255, 255, 255, 255, 255, 255), line_start, line_end); - if (tmp.err) - return tmp; - line_start = ++line_end; - break; - } - ++line_end; + // No CRC checking: parse up to '!' if present, otherwise up to buf_end. + res = parse_data(data, data_begin, term, unknown_error); + res.next = (term < buf_end) ? term : buf_end; + return res; + } + + // Parse the data part of a message. Str should point to the first + // character after the leading /, end should point to the ! before the + // checksum. Does not verify the checksum. + template + static ParseResult parse_data(ParsedData* data, const char* str, const char* end, bool unknown_error = false) { + // Split into lines and parse those + const char *line_end = str, *line_start = str; + + // Parse ID line + while (line_end < end) { + if (*line_end == '\r' || *line_end == '\n') { + // The first identification line looks like: + // XXX5 + // The DSMR spec is vague on details, but in 62056-21, the X's + // are a three-letter (registerd) manufacturer ID, the id + // string is up to 16 chars of arbitrary characters and the + // '5' is a baud rate indication. 5 apparently means 9600, + // which DSMR 3.x and below used. It seems that DSMR 2.x + // passed '3' here (which is mandatory for "mode D" + // communication according to 62956-21), so we also allow + // that. Apparently swedish meters use '9' for 115200. This code + // used to check the format of the line somewhat, but for + // flexibility (and since we do not actually parse the contents + // of the line anyway), just allow anything now. + // + // Offer it for processing using the all-ones Obis ID, which + // is not otherwise valid. + ParseResult tmp = data->parse_line(ObisId(255, 255, 255, 255, 255, 255), line_start, line_end); + if (tmp.err) + return tmp; + line_start = ++line_end; + break; } + ++line_end; + } - // Parse data lines - while (line_end < end) - { - if (*line_end == '\r' || *line_end == '\n') - { - ParseResult tmp = parse_line(data, line_start, line_end, unknown_error); - if (tmp.err) - return tmp; - line_start = line_end + 1; - } - line_end++; + // Parse data lines + while (line_end < end) { + if (*line_end == '\r' || *line_end == '\n') { + ParseResult tmp = parse_line(data, line_start, line_end, unknown_error); + if (tmp.err) + return tmp; + line_start = line_end + 1; } + line_end++; + } - if (line_end != line_start) - return ParseResult().fail("Last dataline not CRLF terminated", line_end); + if (line_end != line_start) + return ParseResult().fail("Last dataline not CRLF terminated", line_end); - return ParseResult(); - } + return ParseResult(); + } - template - static ParseResult parse_line(Data *data, const char *line, const char *end, bool unknown_error) - { - ParseResult res; - if (line == end) - return res; - - ParseResult idres = ObisIdParser::parse(line, end); - if (idres.err) - return idres; - - ParseResult datares = data->parse_line(idres.result, idres.next, end); - if (datares.err) - return datares; - - // If datares.next didn't move at all, there was no parser for - // this field, that's ok. But if it did move, but not all the way - // to the end, that's an error. - if (datares.next != idres.next && datares.next != end) - return res.fail("Trailing characters on data line", datares.next); - else if (datares.next == idres.next && unknown_error) - return res.fail("Unknown field", line); - - return res.until(end); - } - }; + template + static ParseResult parse_line(Data* data, const char* line, const char* end, bool unknown_error) { + ParseResult res; + if (line == end) + return res; + + ParseResult idres = ObisIdParser::parse(line, end); + if (idres.err) + return idres; + + ParseResult datares = data->parse_line(idres.result, idres.next, end); + if (datares.err) + return datares; + + // If datares.next didn't move at all, there was no parser for + // this field, that's ok. But if it did move, but not all the way + // to the end, that's an error. + if (datares.next != idres.next && datares.next != end) + return res.fail("Trailing characters on data line", datares.next); + else if (datares.next == idres.next && unknown_error) + return res.fail("Unknown field", line); + + return res.until(end); + } +}; -} // namespace dsmr +} diff --git a/src/dsmr/util.h b/src/dsmr/util.h index 1d594a8..35684f7 100644 --- a/src/dsmr/util.h +++ b/src/dsmr/util.h @@ -1,137 +1,122 @@ #pragma once -#include -#include +#include #include #include -#include +#include +#include -namespace dsmr -{ - /** - * The ParseResult class wraps the result of a parse function. The type - * of the result is passed as a template parameter and can be void to - * not return any result. - * - * A ParseResult can either: - * - Return an error. In this case, err is set to an error message, ctx - * is optionally set to where the error occurred. The result (if any) - * and the next pointer are meaningless. - * - Return succesfully. In this case, err and ctx are NULL, result - * contains the result (if any) and next points one past the last - * byte processed by the parser. - * - * The ParseResult class has some convenience functions: - * - succeed(result): sets the result to the given value and returns - * the ParseResult again. - * - fail(err): Set the err member to the error message passed, - * optionally sets the ctx and return the ParseResult again. - * - until(next): Set the next member and return the ParseResult again. - * - * Furthermore, ParseResults can be implicitely converted to other - * types. In this case, the error message, context and and next pointer are - * conserved, the return value is reset to the default value for the - * target type. - * - * Note that ctx points into the string being parsed, so it does not - * need to be freed, lives as long as the original string and is - * probably way longer that needed. - */ - - // Superclass for ParseResult so we can specialize for void without - // having to duplicate all content - template - struct _ParseResult - { - T result; - - template - P& succeed(U&& value) { - result = std::forward(value); - return *static_cast(this); - } - }; - - // partial specialization for void result - template - struct _ParseResult { }; - - // Actual ParseResult class - template - struct ParseResult : public _ParseResult, T> - { - const char *next = nullptr; - const char *err = nullptr; - const char *ctx = nullptr; - - ParseResult &fail(const char *err, const char *ctx = nullptr) - { - this->err = err; - this->ctx = ctx; - return *this; - } - ParseResult &until(const char *next) - { - this->next = next; - return *this; - } - ParseResult() = default; - - template - ParseResult(const ParseResult &other) : next(other.next), err(other.err), ctx(other.ctx) {} - - /** - * Returns the error, including context in a fancy multi-line format. - * The start and end passed are the first and one-past-the-end - * characters in the total parsed string. These are needed to properly - * limit the context output. - */ - std::string fullError(const char *start, const char *end) const - { - std::string res; - if (this->ctx && start && end) - { - // Find the entire line surrounding the context - const char *line_end = this->ctx; - while (line_end < end && line_end[0] != '\r' && line_end[0] != '\n') - ++line_end; - const char *line_start = this->ctx; - while (line_start > start && line_start[-1] != '\r' && line_start[-1] != '\n') - --line_start; - - // We can now predict the context string length, so let String allocate - // memory in advance - res.reserve((line_end - line_start) + 2 + (this->ctx - line_start) + 1 + 2); - - // Write the line - res.append(line_start, line_end - line_start); - - res += "\r\n"; - - // Write a marker to point out ctx - while (line_start++ < this->ctx) - res += ' '; - res += '^'; - res += "\r\n"; - } - res += this->err; - return res; +namespace dsmr { + +// The ParseResult class wraps the result of a parse function. The type +// of the result is passed as a template parameter and can be void to +// not return any result. +// +// A ParseResult can either: +// - Return an error. In this case, err is set to an error message, ctx +// is optionally set to where the error occurred. The result (if any) +// and the next pointer are meaningless. +// - Return succesfully. In this case, err and ctx are NULL, result +// contains the result (if any) and next points one past the last +// byte processed by the parser. +// +// The ParseResult class has some convenience functions: +// - succeed(result): sets the result to the given value and returns +// the ParseResult again. +// - fail(err): Set the err member to the error message passed, +// optionally sets the ctx and return the ParseResult again. +// - until(next): Set the next member and return the ParseResult again. +// +// Furthermore, ParseResults can be implicitely converted to other +// types. In this case, the error message, context and and next pointer are +// conserved, the return value is reset to the default value for the +// target type. +// +// Note that ctx points into the string being parsed, so it does not +// need to be freed, lives as long as the original string and is +// probably way longer that needed. + +// Superclass for ParseResult so we can specialize for void without +// having to duplicate all content +template +struct _ParseResult { + T result; + + template + P& succeed(U&& value) { + result = std::forward(value); + return *static_cast(this); + } +}; + +// partial specialization for void result +template +struct _ParseResult {}; + +// Actual ParseResult class +template +struct ParseResult : public _ParseResult, T> { + const char* next = nullptr; + const char* err = nullptr; + const char* ctx = nullptr; + + ParseResult& fail(const char* err, const char* ctx = nullptr) { + this->err = err; + this->ctx = ctx; + return *this; + } + ParseResult& until(const char* next) { + this->next = next; + return *this; + } + ParseResult() = default; + + template + ParseResult(const ParseResult& other) : next(other.next), err(other.err), ctx(other.ctx) {} + + // Returns the error, including context in a fancy multi-line format. + // The start and end passed are the first and one-past-the-end + // characters in the total parsed string. These are needed to properly + // limit the context output. + std::string fullError(const char* start, const char* end) const { + std::string res; + if (this->ctx && start && end) { + // Find the entire line surrounding the context + const char* line_end = this->ctx; + while (line_end < end && line_end[0] != '\r' && line_end[0] != '\n') + ++line_end; + const char* line_start = this->ctx; + while (line_start > start && line_start[-1] != '\r' && line_start[-1] != '\n') + --line_start; + + // We can now predict the context string length, so let String allocate + // memory in advance + res.reserve((line_end - line_start) + 2 + (this->ctx - line_start) + 1 + 2); + + // Write the line + res.append(line_start, line_end - line_start); + + res += "\r\n"; + + // Write a marker to point out ctx + while (line_start++ < this->ctx) + res += ' '; + res += '^'; + res += "\r\n"; } - }; + res += this->err; + return res; + } +}; - /** - * An OBIS id is 6 bytes, usually noted as a-b:c.d.e.f. Here we put them - * in an array for easy parsing. - */ - struct ObisId - { - uint8_t v[6]; +// An OBIS id is 6 bytes, usually noted as a-b:c.d.e.f. Here we put them in an array for easy parsing. +struct ObisId { + uint8_t v[6]; - constexpr ObisId(uint8_t a, uint8_t b = 255, uint8_t c = 255, uint8_t d = 255, uint8_t e = 255, uint8_t f = 255) - : v{a, b, c, d, e, f} {}; - constexpr ObisId() : v() {} // Zeroes + constexpr ObisId(uint8_t a, uint8_t b = 255, uint8_t c = 255, uint8_t d = 255, uint8_t e = 255, uint8_t f = 255) : v{a, b, c, d, e, f} {}; + constexpr ObisId() : v() {} // Zeroes - bool operator==(const ObisId &other) const { return memcmp(&v, &other.v, sizeof(v)) == 0; } - }; + bool operator==(const ObisId& other) const { return memcmp(&v, &other.v, sizeof(v)) == 0; } +}; -} // namespace dsmr +} diff --git a/src/test/parser_include_test.cpp b/src/test/parser_include_test.cpp index 1bfe013..37bfaca 100644 --- a/src/test/parser_include_test.cpp +++ b/src/test/parser_include_test.cpp @@ -1,15 +1,14 @@ // This code tests that the parser has all necessary dependencies included in its headers. // We check that the code compiles. -#include "dsmr/parser.h" #include "dsmr/fields.h" +#include "dsmr/parser.h" using namespace dsmr; using namespace fields; void SomeFunction() { const auto& msg = ""; - - ParsedData data; + ParsedData data; const auto& res = P1Parser::parse(&data, msg, std::size(msg), true); } diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index 51184fa..85237a6 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -1,14 +1,14 @@ -#include -#include -#include "dsmr/parser.h" #include "dsmr/fields.h" +#include "dsmr/parser.h" +#include +#include using namespace dsmr; using namespace fields; struct Printer { - template - void apply(Item &i) { + template + void apply(Item& i) { if (i.present()) { std::cout << Item::name << ": " << i.val() << Item::unit() << std::endl; } @@ -16,86 +16,86 @@ struct Printer { }; TEST_CASE("Should parse all fields in the DSMR message correctly") { - const auto &dsmr_message = - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-3:0.2.8(40)\r\n" - "0-0:1.0.0(150117185916W)\r\n" - "0-0:96.1.1(0000000000000000000000000000000000)\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "1-0:1.8.2(000842.472*kWh)\r\n" - "1-0:2.8.1(000000.000*kWh)\r\n" - "1-0:2.8.2(000000.000*kWh)\r\n" - "0-0:96.14.0(0001)\r\n" - "1-0:1.7.0(00.333*kW)\r\n" - "1-0:2.7.0(00.000*kW)\r\n" - "0-0:17.0.0(999.9*kW)\r\n" - "0-0:96.3.10(1)\r\n" - "0-0:96.7.21(00008)\r\n" - "0-0:96.7.9(00007)\r\n" - "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" - "1-0:32.32.0(00000)\r\n" - "1-0:32.36.0(00000)\r\n" - "0-0:96.13.1()\r\n" - "0-0:96.13.0()\r\n" - "1-0:31.7.0(001*A)\r\n" - "1-0:21.7.0(00.332*kW)\r\n" - "1-0:22.7.0(00.000*kW)\r\n" - "0-1:24.1.0(003)\r\n" - "0-1:96.1.0(0000000000000000000000000000000000)\r\n" - "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" - "0-1:24.4.0(1)\r\n" - "!6f4A\r\n"; + const auto& dsmr_message = "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-3:0.2.8(40)\r\n" + "0-0:1.0.0(150117185916W)\r\n" + "0-0:96.1.1(0000000000000000000000000000000000)\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "1-0:1.8.2(000842.472*kWh)\r\n" + "1-0:2.8.1(000000.000*kWh)\r\n" + "1-0:2.8.2(000000.000*kWh)\r\n" + "0-0:96.14.0(0001)\r\n" + "1-0:1.7.0(00.333*kW)\r\n" + "1-0:2.7.0(00.000*kW)\r\n" + "0-0:17.0.0(999.9*kW)\r\n" + "0-0:96.3.10(1)\r\n" + "0-0:96.7.21(00008)\r\n" + "0-0:96.7.9(00007)\r\n" + "1-0:99.97.0(1)(0-0:96.7.19)(000101000001W)(2147483647*s)\r\n" + "1-0:32.32.0(00000)\r\n" + "1-0:32.36.0(00000)\r\n" + "0-0:96.13.1()\r\n" + "0-0:96.13.0()\r\n" + "1-0:31.7.0(001*A)\r\n" + "1-0:21.7.0(00.332*kW)\r\n" + "1-0:22.7.0(00.000*kW)\r\n" + "0-1:24.1.0(003)\r\n" + "0-1:96.1.0(0000000000000000000000000000000000)\r\n" + "0-1:24.2.1(150117180000W)(00473.789*m3)\r\n" + "0-1:24.4.0(1)\r\n" + "!6f4A\r\n"; ParsedData< - /* String */ identification, - /* String */ p1_version, - /* String */ timestamp, - /* String */ equipment_id, - /* FixedValue */ energy_delivered_tariff1, - /* FixedValue */ energy_delivered_tariff2, - /* FixedValue */ energy_returned_tariff1, - /* FixedValue */ energy_returned_tariff2, - /* String */ electricity_tariff, - /* FixedValue */ power_delivered, - /* FixedValue */ power_returned, - /* FixedValue */ electricity_threshold, - /* uint8_t */ electricity_switch_position, - /* uint32_t */ electricity_failures, - /* uint32_t */ electricity_long_failures, - /* String */ electricity_failure_log, - /* uint32_t */ electricity_sags_l1, - /* uint32_t */ electricity_sags_l2, - /* uint32_t */ electricity_sags_l3, - /* uint32_t */ electricity_swells_l1, - /* uint32_t */ electricity_swells_l2, - /* uint32_t */ electricity_swells_l3, - /* String */ message_short, - /* String */ message_long, - /* FixedValue */ voltage_l1, - /* FixedValue */ voltage_l2, - /* FixedValue */ voltage_l3, - /* FixedValue */ current_l1, - /* FixedValue */ current_l2, - /* FixedValue */ current_l3, - /* FixedValue */ power_delivered_l1, - /* FixedValue */ power_delivered_l2, - /* FixedValue */ power_delivered_l3, - /* FixedValue */ power_returned_l1, - /* FixedValue */ power_returned_l2, - /* FixedValue */ power_returned_l3, - /* uint16_t */ gas_device_type, - /* String */ gas_equipment_id, - /* uint8_t */ gas_valve_position, - /* TimestampedFixedValue */ gas_delivered, - /* uint16_t */ thermal_device_type, - /* String */ thermal_equipment_id, - /* uint8_t */ thermal_valve_position, - /* TimestampedFixedValue */ thermal_delivered, - /* uint16_t */ water_device_type, - /* String */ water_equipment_id, - /* uint8_t */ water_valve_position, - /* TimestampedFixedValue */ water_delivered> data; + /* String */ identification, + /* String */ p1_version, + /* String */ timestamp, + /* String */ equipment_id, + /* FixedValue */ energy_delivered_tariff1, + /* FixedValue */ energy_delivered_tariff2, + /* FixedValue */ energy_returned_tariff1, + /* FixedValue */ energy_returned_tariff2, + /* String */ electricity_tariff, + /* FixedValue */ power_delivered, + /* FixedValue */ power_returned, + /* FixedValue */ electricity_threshold, + /* uint8_t */ electricity_switch_position, + /* uint32_t */ electricity_failures, + /* uint32_t */ electricity_long_failures, + /* String */ electricity_failure_log, + /* uint32_t */ electricity_sags_l1, + /* uint32_t */ electricity_sags_l2, + /* uint32_t */ electricity_sags_l3, + /* uint32_t */ electricity_swells_l1, + /* uint32_t */ electricity_swells_l2, + /* uint32_t */ electricity_swells_l3, + /* String */ message_short, + /* String */ message_long, + /* FixedValue */ voltage_l1, + /* FixedValue */ voltage_l2, + /* FixedValue */ voltage_l3, + /* FixedValue */ current_l1, + /* FixedValue */ current_l2, + /* FixedValue */ current_l3, + /* FixedValue */ power_delivered_l1, + /* FixedValue */ power_delivered_l2, + /* FixedValue */ power_delivered_l3, + /* FixedValue */ power_returned_l1, + /* FixedValue */ power_returned_l2, + /* FixedValue */ power_returned_l3, + /* uint16_t */ gas_device_type, + /* String */ gas_equipment_id, + /* uint8_t */ gas_valve_position, + /* TimestampedFixedValue */ gas_delivered, + /* uint16_t */ thermal_device_type, + /* String */ thermal_equipment_id, + /* uint8_t */ thermal_valve_position, + /* TimestampedFixedValue */ thermal_delivered, + /* uint16_t */ water_device_type, + /* String */ water_equipment_id, + /* uint8_t */ water_valve_position, + /* TimestampedFixedValue */ water_delivered> + data; auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); REQUIRE(res.err == nullptr); @@ -134,32 +134,32 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { } TEST_CASE("Should report an error if the crc has incorrect format") { - const auto &dsmr_message = - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "1-0:1.7.0(00.318*kW)\r\n" - "!1ED\r\n"; + const auto& dsmr_message = "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "1-0:1.7.0(00.318*kW)\r\n" + "!1ED\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); REQUIRE(std::string(res.err) == "Incomplete or malformed checksum"); } TEST_CASE("Should report an error if the crc of a package is incorrect") { - const auto &dsmr_message = - "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-0:.8.1(000671.578*kWh)\r\n" - "1-0:1.7.0(00.318*kW)\r\n" - "!1E1D\r\n"; + const auto& dsmr_message = "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-0:.8.1(000671.578*kWh)\r\n" + "1-0:1.7.0(00.318*kW)\r\n" + "!1E1D\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); REQUIRE(std::string(res.err) == "Checksum mismatch"); @@ -170,33 +170,33 @@ TEST_CASE("Should report an error if the crc of a package is incorrect") { } TEST_CASE("Should parse Wh-based integers for FixedField (fallback int_unit path)") { - const auto& msg = - "/ABC5MTR\r\n" - "\r\n" - "1-0:1.8.0(000441879*Wh)\r\n" - "!\r\n"; + const auto& msg = "/ABC5MTR\r\n" + "\r\n" + "1-0:1.8.0(000441879*Wh)\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ energy_delivered_lux> data; + /* String */ identification, + /* FixedValue */ energy_delivered_lux> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); - REQUIRE(data.energy_delivered_lux == 441.879f); // 441,879 Wh => 441.879 kWh + REQUIRE(data.energy_delivered_lux == 441.879f); // 441,879 Wh => 441.879 kWh REQUIRE(fields::energy_delivered_lux::unit() == std::string("kWh")); REQUIRE(fields::energy_delivered_lux::int_unit() == std::string("Wh")); } TEST_CASE("Should parse TimestampedFixedField for gas_delivered_be and expose timestamp") { - const auto& msg = - "/DEF5MTR\r\n" - "\r\n" - "0-1:24.2.3(230101120000W)(00012.345*m3)\r\n" - "!\r\n"; + const auto& msg = "/DEF5MTR\r\n" + "\r\n" + "0-1:24.2.3(230101120000W)(00012.345*m3)\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* TimestampedFixedValue */ gas_delivered_be> data; + /* String */ identification, + /* TimestampedFixedValue */ gas_delivered_be> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); @@ -205,120 +205,120 @@ TEST_CASE("Should parse TimestampedFixedField for gas_delivered_be and expose ti } TEST_CASE("Should take the last value with LastFixedField (capacity rate history)") { - const auto& msg = - "/KFM5MTR\r\n" - "\r\n" - "0-0:98.1.0(1)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW)\r\n" - "!\r\n"; + const auto& msg = "/KFM5MTR\r\n" + "\r\n" + "0-0:98.1.0(1)(1-0:1.6.0)(1-0:1.6.0)(230201000000W)(230117224500W)(04.329*kW)\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ active_energy_import_maximum_demand_last_13_months> data; + /* String */ identification, + /* FixedValue */ active_energy_import_maximum_demand_last_13_months> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.active_energy_import_maximum_demand_last_13_months == 4.329f); } TEST_CASE("Should detect duplicate fields") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.100*kW)\r\n" - "1-0:1.7.0(00.200*kW)\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.100*kW)\r\n" + "1-0:1.7.0(00.200*kW)\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Duplicate field"); } TEST_CASE("Should error on unknown field when unknown_error is true") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:2.7.0(00.000*kW)\r\n" // power_returned not part of ParsedData below - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:2.7.0(00.000*kW)\r\n" // power_returned not part of ParsedData below + "!\r\n"; ParsedData< - /* String */ identification> data; + /* String */ identification> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/true, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Unknown field"); } TEST_CASE("Should report OBIS ID numbers over 255") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "256-0:1.7.0(00.100*kW)\r\n" // invalid OBIS (256) - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "256-0:1.7.0(00.100*kW)\r\n" // invalid OBIS (256) + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Obis ID has number over 255"); } TEST_CASE("Should validate string length bounds (p1_version too short)") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-3:0.2.8(4)\r\n" // p1_version expects 2 chars - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8(4)\r\n" // p1_version expects 2 chars + "!\r\n"; ParsedData< - /* String */ identification, - /* String */ p1_version> data; + /* String */ identification, + /* String */ p1_version> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Invalid string length"); } TEST_CASE("Should validate units for numeric fields") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.318*kVA)\r\n" // expects kW, not kVA - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.318*kVA)\r\n" // expects kW, not kVA + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Invalid unit"); } TEST_CASE("Should report missing closing parenthesis for StringField") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-3:0.2.8(40\r\n" // missing ')' - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8(40\r\n" // missing ')' + "!\r\n"; ParsedData< - /* String */ identification, - /* String */ p1_version> data; + /* String */ identification, + /* String */ p1_version> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Missing )"); } TEST_CASE("Should compute FixedField with decimals and millivolt int_unit correctly") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:32.7.0(230.1*V)\r\n" // voltage_l1 (V / mV) - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:32.7.0(230.1*V)\r\n" // voltage_l1 (V / mV) + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ voltage_l1> data; + /* String */ identification, + /* FixedValue */ voltage_l1> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.voltage_l1 == 230.1f); @@ -326,29 +326,29 @@ TEST_CASE("Should compute FixedField with decimals and millivolt int_unit correc TEST_CASE("all_present() should reflect presence of all requested fields") { SUBCASE("All fields present -> true") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.123*kW)\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.all_present()); } SUBCASE("Missing a requested field -> false") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE_FALSE(data.all_present()); @@ -356,32 +356,32 @@ TEST_CASE("all_present() should reflect presence of all requested fields") { } TEST_CASE("Should report last dataline not CRLF terminated") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.123*kW)" // no CRLF before '!' - "!"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)" // no CRLF before '!' + "!"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Last dataline not CRLF terminated"); } TEST_CASE("Should report an error if checksum is not found") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.123*kW)" - "!"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)" + "!"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "No checksum found"); } @@ -389,13 +389,14 @@ TEST_CASE("Doesn't crash for an empty packet") { const auto& msg = ""; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "Data should start with /"); - res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Data should start with /"); } @@ -403,13 +404,14 @@ TEST_CASE("Doesn't crash for a small packet") { const auto& msg = "/!"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "No checksum found"); - res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); } @@ -417,13 +419,14 @@ TEST_CASE("Doesn't crash for a small packet 2") { const auto& msg = "/a!"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "No checksum found"); - res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ false); + res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Last dataline not CRLF terminated"); } @@ -431,142 +434,134 @@ TEST_CASE("Doesn't crash for a partial checksum") { const auto& msg = "/!A1"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "No checksum found"); } TEST_CASE("Doesn't crash for a packet that doesn't end with '!' symbol") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.123*kW)"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.123*kW)"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; - auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/ true); + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/true); REQUIRE(std::string(res.err) == "Data should end with !"); } TEST_CASE("Trailing characters on data line") { - const auto& msg = - "/AAA5MTR\r\n\r\n" - "1-0:1.7.0(00.123*kW) trailing\r\n" - "!\r\n"; - ParsedData data; + const auto& msg = "/AAA5MTR\r\n\r\n" + "1-0:1.7.0(00.123*kW) trailing\r\n" + "!\r\n"; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); REQUIRE(std::string(res.err) == "Trailing characters on data line"); } TEST_CASE("Unknown field ignored when unknown_error is false") { - const auto& msg = - "/AAA5MTR\r\n\r\n" - "1-0:2.7.0(00.000*kW)\r\n" - "!\r\n"; - ParsedData data; + const auto& msg = "/AAA5MTR\r\n\r\n" + "1-0:2.7.0(00.000*kW)\r\n" + "!\r\n"; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); } TEST_CASE("Missing unit when required") { - const auto& msg = - "/AAA5MTR\r\n\r\n" - "1-0:1.7.0(00.123)\r\n" - "!\r\n"; - ParsedData data; + const auto& msg = "/AAA5MTR\r\n\r\n" + "1-0:1.7.0(00.123)\r\n" + "!\r\n"; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); REQUIRE(std::string(res.err) == "Missing unit"); } TEST_CASE("Unit present when not expected") { - const auto& msg = - "/AAA5MTR\r\n\r\n" - "0-0:96.7.21(00008*s)\r\n" - "!\r\n"; - ParsedData data; + const auto& msg = "/AAA5MTR\r\n\r\n" + "0-0:96.7.21(00008*s)\r\n" + "!\r\n"; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), false, false); REQUIRE(std::string(res.err) == "Extra data"); } TEST_CASE("Malformed packet that starts with ')'") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-3:0.2.8)40(\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-3:0.2.8)40(\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* String */ p1_version> data; + /* String */ identification, + /* String */ p1_version> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Missing ("); } - TEST_CASE("Non-digit in numeric part") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(00.A23*kW)\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(00.A23*kW)\r\n" + "!\r\n"; ParsedData< - /* String */ identification, - /* FixedValue */ power_delivered> data; + /* String */ identification, + /* FixedValue */ power_delivered> + data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "Invalid number"); } TEST_CASE("OBIS id empty line") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "garbage\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "garbage\r\n" + "!\r\n"; - ParsedData data; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(std::string(res.err) == "OBIS id Empty"); } TEST_CASE("Accepts LF-only line endings") { - const auto& msg = - "/AAA5MTR\n" - "\n" - "1-0:1.7.0(00.123*kW)\n" - "!\n"; + const auto& msg = "/AAA5MTR\n" + "\n" + "1-0:1.7.0(00.123*kW)\n" + "!\n"; - ParsedData data; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.power_delivered == 0.123f); } TEST_CASE("Unit matching is case-insensitive") { - const auto& msg = - "/ABC5MTR\r\n" - "\r\n" - "1-0:1.8.1(000001.000*kwh)\r\n" - "!\r\n"; + const auto& msg = "/ABC5MTR\r\n" + "\r\n" + "1-0:1.8.1(000001.000*kwh)\r\n" + "!\r\n"; - ParsedData data; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(data.energy_delivered_tariff1 == 1.000f); } TEST_CASE("Numeric without decimals is accepted (auto-padded)") { - const auto& msg = - "/AAA5MTR\r\n" - "\r\n" - "1-0:1.7.0(1*kW)\r\n" - "!\r\n"; + const auto& msg = "/AAA5MTR\r\n" + "\r\n" + "1-0:1.7.0(1*kW)\r\n" + "!\r\n"; - ParsedData data; + ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); REQUIRE(data.power_delivered == 1.0f); From 89c0ada3e263cb9a26f8e87aece0373fdcea2f5c Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Tue, 9 Sep 2025 21:11:10 +0200 Subject: [PATCH 03/25] Add a workaround to allow the CRLF symbol in the middle of the data line before the "(" symbol. https://github.com/matthijskooijman/arduino-dsmr/issues/22 --- src/dsmr/parser.h | 14 ++++++++++---- src/test/parser_test.cpp | 39 +++++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/dsmr/parser.h b/src/dsmr/parser.h index 165214a..4c43983 100644 --- a/src/dsmr/parser.h +++ b/src/dsmr/parser.h @@ -349,10 +349,16 @@ struct P1Parser { // Parse data lines while (line_end < end) { if (*line_end == '\r' || *line_end == '\n') { - ParseResult tmp = parse_line(data, line_start, line_end, unknown_error); - if (tmp.err) - return tmp; - line_start = line_end + 1; + + // Workaround for https://github.com/matthijskooijman/arduino-dsmr/issues/22 + // DSMR v3 allows CRLF in the middle of a data line + const auto& isBreakInTheMiddleOfTheDataLine = *(line_end + 1) == '(' || *(line_end + 2) == '('; + if (!isBreakInTheMiddleOfTheDataLine) { + ParseResult tmp = parse_line(data, line_start, line_end, unknown_error); + if (tmp.err) + return tmp; + line_start = line_end + 1; + } } line_end++; } diff --git a/src/test/parser_test.cpp b/src/test/parser_test.cpp index 85237a6..215fa5e 100644 --- a/src/test/parser_test.cpp +++ b/src/test/parser_test.cpp @@ -134,37 +134,37 @@ TEST_CASE("Should parse all fields in the DSMR message correctly") { } TEST_CASE("Should report an error if the crc has incorrect format") { - const auto& dsmr_message = "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-0:1.8.1(000671.578*kWh)\r\n" - "1-0:1.7.0(00.318*kW)\r\n" - "!1ED\r\n"; + const auto& msg = "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-0:1.8.1(000671.578*kWh)\r\n" + "1-0:1.7.0(00.318*kW)\r\n" + "!1ED\r\n"; ParsedData< /* String */ identification, /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); + auto res = P1Parser::parse(&data, msg, std::size(msg), true); REQUIRE(std::string(res.err) == "Incomplete or malformed checksum"); } TEST_CASE("Should report an error if the crc of a package is incorrect") { - const auto& dsmr_message = "/KFM5KAIFA-METER\r\n" - "\r\n" - "1-0:.8.1(000671.578*kWh)\r\n" - "1-0:1.7.0(00.318*kW)\r\n" - "!1E1D\r\n"; + const auto& msg = "/KFM5KAIFA-METER\r\n" + "\r\n" + "1-0:.8.1(000671.578*kWh)\r\n" + "1-0:1.7.0(00.318*kW)\r\n" + "!1E1D\r\n"; ParsedData< /* String */ identification, /* FixedValue */ power_delivered> data; - auto res = P1Parser::parse(&data, dsmr_message, std::size(dsmr_message), true); + auto res = P1Parser::parse(&data, msg, std::size(msg), true); REQUIRE(std::string(res.err) == "Checksum mismatch"); - const auto& fullError = res.fullError(dsmr_message, dsmr_message + std::size(dsmr_message)); + const auto& fullError = res.fullError(msg, msg + std::size(msg)); std::cout << "Full error" << std::endl << fullError << std::endl; REQUIRE(fullError == "!1E1D\r\n ^\r\nChecksum mismatch"); } @@ -559,10 +559,21 @@ TEST_CASE("Numeric without decimals is accepted (auto-padded)") { const auto& msg = "/AAA5MTR\r\n" "\r\n" "1-0:1.7.0(1*kW)\r\n" - "!\r\n"; + "!"; ParsedData data; auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); REQUIRE(res.err == nullptr); REQUIRE(data.power_delivered == 1.0f); } + +TEST_CASE("Can parse a dataline if it has a break in the middle") { + const auto& msg = "/KMP5 ZABF000000000000\r\n" + "0-1:24.3.0(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)\r\n" + "(00124.477)\r\n" + "!"; + + ParsedData data; + auto res = P1Parser::parse(&data, msg, std::size(msg), /*unknown_error=*/false, /*check_crc=*/false); + REQUIRE(data.gas_delivered_text == "(120517020000)(08)(60)(1)(0-1:24.2.1)(m3)\r\n(00124.477)"); +} From eac7ce4991ce8065e5e4123d5c80de0e9a298f26 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Wed, 10 Sep 2025 07:09:41 +0200 Subject: [PATCH 04/25] Add library.json --- library.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 library.json diff --git a/library.json b/library.json new file mode 100644 index 0000000..a59f240 --- /dev/null +++ b/library.json @@ -0,0 +1,9 @@ +{ + "name": "Arduino DSMR", + "version": "1.0", + "description": "Parser and utilities for Dutch Smart Meters (Implementing DSMR)", + "keywords": "dsmr", + "repository": { "type": "git", "url": "https://github.com/PolarGoose/arduino-dsmr-make-work-on-Windows-and-Linux" }, + "license": "MIT", + "export": { "include": [ "src/dsmr/*.h" ] } +} From c3dd299683a0123592542bfd8519e0d626579a56 Mon Sep 17 00:00:00 2001 From: PolarGoose <35307286+PolarGoose@users.noreply.github.com> Date: Thu, 11 Sep 2025 17:40:13 +0200 Subject: [PATCH 05/25] Add "Luxembourg Smarty P1 specification v1.1.3.pdf" --- ...xembourg Smarty P1 specification v1.1.3.pdf | Bin 0 -> 556182 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 specs/Luxembourg Smarty P1 specification v1.1.3.pdf diff --git a/specs/Luxembourg Smarty P1 specification v1.1.3.pdf b/specs/Luxembourg Smarty P1 specification v1.1.3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f596986735883d0c99f6e0e2962dbb09a3daa0db GIT binary patch literal 556182 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