Compare commits
54 Commits
adjustable
...
cmake-fix
Author | SHA1 | Date | |
---|---|---|---|
d479e17d38 | |||
f9e2edcb09 | |||
7e5bcaaea2 | |||
0dcf1c531e | |||
f498cf1a37 | |||
3897ac72da | |||
e89f929f6c | |||
69019312c9 | |||
2d09cfc41d | |||
446cf41a2a | |||
ec4bff91db | |||
fe2b4ec024 | |||
8d781ad240 | |||
67ea2d3900 | |||
5b26e62f55 | |||
6c1e2026d6 | |||
908334af0b | |||
e27a95c4db | |||
9799794213 | |||
bf177d1fe7 | |||
17a73287c2 | |||
1e25cf1096 | |||
23d8ee4844 | |||
643022388d | |||
b5e59aa52f | |||
baf03e2a47 | |||
ba18321e11 | |||
f569816788 | |||
716fe0358c | |||
ee3a69e5df | |||
9f9c7a5dbf | |||
f31fbea817 | |||
f3a62d560b | |||
989404de83 | |||
b58aca4432 | |||
505c25aa9b | |||
fffdca0504 | |||
b0f413037a | |||
724822b3ab | |||
155e245b61 | |||
ff2e50a38a | |||
bd2fa5759b | |||
6fb724698f | |||
5a3d13e7ad | |||
576da85302 | |||
433b3c4219 | |||
e864d27fbf | |||
89db118821 | |||
d96dcfad09 | |||
6edab86078 | |||
62ac3678ff | |||
2dc3daaf70 | |||
36a85d3737 | |||
2f9fa5ccc8 |
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/_build
|
||||||
|
/build
|
58
.github/workflows/ccpp.yml
vendored
Normal file
58
.github/workflows/ccpp.yml
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
name: CMake
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: build examples and tests
|
||||||
|
run: |
|
||||||
|
rm -rf build || true
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake .. -DLIBMBUS_BUILD_EXAMPLES=ON -DLIBMBUS_BUILD_TESTS=ON -DLIBMBUS_ENABLE_COVERAGE=ON && cmake --build . -j
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- name: generate test frames
|
||||||
|
run: |
|
||||||
|
./test/generate-xml.sh test/test-frames
|
||||||
|
echo "NOTE: error-frames have about 30 parse errors, and unsupported-frames have 12"
|
||||||
|
./test/generate-xml.sh test/error-frames || true
|
||||||
|
./test/generate-xml.sh test/unsupported-frames || true
|
||||||
|
|
||||||
|
- name: install and run gcovr
|
||||||
|
run: sudo pip install gcovr && gcovr build/.
|
||||||
|
|
||||||
|
debian:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: build debian package
|
||||||
|
run: |
|
||||||
|
rm -rf build || true
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake .. -DLIBMBUS_PACKAGE_DEB=ON
|
||||||
|
cpack ..
|
||||||
|
sudo dpkg -i *.deb
|
||||||
|
ls /usr/lib
|
||||||
|
|
||||||
|
doc:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: build doxygen documentation
|
||||||
|
run: sudo apt install -y doxygen
|
||||||
|
|
||||||
|
- name: build doxygen documentation
|
||||||
|
run: |
|
||||||
|
rm -rf build || true
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. -DLIBMBUS_BUILD_DOCS=ON
|
||||||
|
cmake --build . --target doc
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -10,7 +10,6 @@ test/Makefile.in
|
|||||||
/compile
|
/compile
|
||||||
config.guess
|
config.guess
|
||||||
config.sub
|
config.sub
|
||||||
config.h.in
|
|
||||||
configure
|
configure
|
||||||
/depcomp
|
/depcomp
|
||||||
/install-sh
|
/install-sh
|
||||||
@ -72,3 +71,9 @@ test/test-frames/*.xml.new
|
|||||||
test/error-frames/*.xml.new
|
test/error-frames/*.xml.new
|
||||||
test/unsupported-frames/*.xml.new
|
test/unsupported-frames/*.xml.new
|
||||||
|
|
||||||
|
/build/
|
||||||
|
_build/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
/.vscode/
|
||||||
|
CMakeLists.txt.user
|
@ -11,3 +11,5 @@ os:
|
|||||||
script:
|
script:
|
||||||
- ./build.sh
|
- ./build.sh
|
||||||
- cd test && make && ./generate-xml.sh test-frames
|
- cd test && make && ./generate-xml.sh test-frames
|
||||||
|
- cd test && make && ./generate-xml.sh test/error-frames || true
|
||||||
|
- cd test && make && ./generate-xml.sh test/unsupported-frames || true
|
||||||
|
309
CMakeLists.txt
Normal file
309
CMakeLists.txt
Normal file
@ -0,0 +1,309 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
project(
|
||||||
|
libmbus
|
||||||
|
LANGUAGES CXX C
|
||||||
|
VERSION "0.9.0")
|
||||||
|
|
||||||
|
if(CMAKE_BUILD_TYPE STREQUAL "")
|
||||||
|
message(STATUS "CMAKE_BUILD_TYPE empty setting to Debug")
|
||||||
|
set(CMAKE_BUILD_TYPE "Debug")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# default options -> changed with e.g. cd build && cmake ..
|
||||||
|
# -DLIBMBUS_BUILD_TESTS=ON
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
option(LIBMBUS_BUILD_EXAMPLES "build examples" OFF)
|
||||||
|
option(LIBMBUS_BUILD_TESTS "build tests" OFF)
|
||||||
|
option(LIBMBUS_ENABLE_COVERAGE "build with coverage support" OFF)
|
||||||
|
option(LIBMBUS_RUN_CLANG_TIDY "use Clang-Tidy for static analysis" OFF)
|
||||||
|
option(LIBMBUS_PACKAGE_DEB "build debian package" OFF)
|
||||||
|
option(LIBMBUS_PACKAGE_RPM "build rpm package" OFF)
|
||||||
|
option(LIBMBUS_BUILD_DOCS "build documentation" OFF)
|
||||||
|
option(BUILD_SHARED_LIBS "build shared lib" ON)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
|
||||||
|
# Append our module directory to CMake
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_BINARY_DIR}")
|
||||||
|
|
||||||
|
# Set the output of the libraries and executables.
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||||
|
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# static analysis
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
if(LIBMBUS_RUN_CLANG_TIDY)
|
||||||
|
find_program(
|
||||||
|
CLANG_TIDY_EXE
|
||||||
|
NAMES "clang-tidy"
|
||||||
|
DOC "/usr/bin/clang-tidy")
|
||||||
|
if(NOT CLANG_TIDY_EXE)
|
||||||
|
message(WARNING "clang-tidy not found.")
|
||||||
|
else()
|
||||||
|
message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
|
||||||
|
endif()
|
||||||
|
endif(LIBMBUS_RUN_CLANG_TIDY)
|
||||||
|
|
||||||
|
if(LIBMBUS_ENABLE_COVERAGE)
|
||||||
|
if(NOT CMAKE_BUILD_TYPE MATCHES "(Debug)|(RelWithDebInfo)")
|
||||||
|
message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
# using Clang
|
||||||
|
message(STATUS "Not doing coverage...")
|
||||||
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
|
# using GCC
|
||||||
|
message(STATUS "Building with code coverage...")
|
||||||
|
set(CMAKE_BUILD_TYPE DEBUG)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -ggdb3 -O0 --coverage -fprofile-arcs -ftest-coverage")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -ggdb3 -O0 --coverage -fprofile-arcs -ftest-coverage ")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_CXX_FLAGS} --coverage -fprofile-arcs -ftest-coverage ")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_FLAGS} --coverage -fprofile-arcs -ftest-coverage ")
|
||||||
|
link_libraries(-lgcov)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CheckIncludeFile)
|
||||||
|
|
||||||
|
check_include_file(dlfcn.h HAVE_DLFCN_H)
|
||||||
|
check_include_file(inttypes.h HAVE_INTTYPES_H)
|
||||||
|
check_include_file(memory.h HAVE_MEMORY_H)
|
||||||
|
check_include_file(stdlib.h HAVE_STDINT_H)
|
||||||
|
check_include_file(stdint.h HAVE_STDLIB_H)
|
||||||
|
check_include_file(strings.h HAVE_STRINGS_H)
|
||||||
|
check_include_file(string.h HAVE_STRING_H)
|
||||||
|
check_include_file(sys/stat.h HAVE_SYS_STAT_H)
|
||||||
|
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
||||||
|
check_include_file(unistd.h HAVE_UNISTD_H)
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# library
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
set(PACKAGE_STRING "${PROJECT_NAME} ${PROJECT_VERSION}")
|
||||||
|
|
||||||
|
set(PACKAGE_VERSION "${PROJECT_VERSION}")
|
||||||
|
set(VERSION "${PROJECT_VERSION}")
|
||||||
|
configure_file(${CMAKE_CURRENT_LIST_DIR}/mbus/config.h.in ${CMAKE_CURRENT_LIST_DIR}/config.h @ONLY)
|
||||||
|
|
||||||
|
# list of source files
|
||||||
|
add_library(objlib OBJECT
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-protocol.c"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-protocol.h"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-tcp.c"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-tcp.h"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus.c"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus.h"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-protocol-aux.c"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-protocol-aux.h"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-serial.c"
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/mbus/mbus-serial.h")
|
||||||
|
|
||||||
|
# shared and static libraries built from the same object files
|
||||||
|
add_library(${PROJECT_NAME} SHARED $<TARGET_OBJECTS:objlib>)
|
||||||
|
add_library(libmbus_static STATIC $<TARGET_OBJECTS:objlib>)
|
||||||
|
|
||||||
|
set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
|
||||||
|
set_target_properties(libmbus_static PROPERTIES OUTPUT_NAME mbus)
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
${PROJECT_NAME}
|
||||||
|
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
||||||
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE m)
|
||||||
|
endif()
|
||||||
|
if(NOT MSVC)
|
||||||
|
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wno-pedantic)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}
|
||||||
|
PROPERTIES PREFIX ""
|
||||||
|
SOVERSION ${VERSION})
|
||||||
|
|
||||||
|
if(CLANG_TIDY_EXE)
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_EXE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# examples
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
if(LIBMBUS_BUILD_EXAMPLES)
|
||||||
|
message(STATUS "building examples")
|
||||||
|
add_subdirectory(bin)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# tests
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
if(LIBMBUS_BUILD_TESTS)
|
||||||
|
message(STATUS "building tests")
|
||||||
|
enable_testing()
|
||||||
|
add_subdirectory(test)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# install
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
|
set(INSTALL_PKGCONFIG_DIR
|
||||||
|
"${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig"
|
||||||
|
CACHE PATH "Installation directory for pkgconfig (.pc) files")
|
||||||
|
set(INSTALL_INC_DIR
|
||||||
|
"${CMAKE_INSTALL_INCLUDEDIR}/mbus"
|
||||||
|
CACHE PATH "Installation directory for headers")
|
||||||
|
set(INSTALL_LIB_DIR
|
||||||
|
"${CMAKE_INSTALL_LIBDIR}"
|
||||||
|
CACHE PATH "Installation directory for libraries")
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libmbus.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libmbus.pc @ONLY)
|
||||||
|
install(
|
||||||
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/libmbus.pc
|
||||||
|
DESTINATION "${INSTALL_PKGCONFIG_DIR}"
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
|
set(LIBMBUS_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
||||||
|
install(
|
||||||
|
TARGETS ${PROJECT_NAME}
|
||||||
|
EXPORT ${PROJECT_NAME}Targets
|
||||||
|
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib
|
||||||
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
|
||||||
|
install(
|
||||||
|
EXPORT ${PROJECT_NAME}Targets
|
||||||
|
DESTINATION "${LIBMBUS_CONFIG_INSTALL_DIR}"
|
||||||
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
|
configure_package_config_file(cmake/Config.cmake.in ${PROJECT_NAME}Config.cmake INSTALL_DESTINATION
|
||||||
|
"${LIBMBUS_CONFIG_INSTALL_DIR}")
|
||||||
|
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake COMPATIBILITY SameMajorVersion)
|
||||||
|
install(
|
||||||
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
DESTINATION "${LIBMBUS_CONFIG_INSTALL_DIR}"
|
||||||
|
COMPONENT dev)
|
||||||
|
|
||||||
|
install(
|
||||||
|
DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/mbus/"
|
||||||
|
DESTINATION "${INSTALL_INC_DIR}"
|
||||||
|
COMPONENT dev
|
||||||
|
FILES_MATCHING
|
||||||
|
PATTERN "*.h")
|
||||||
|
|
||||||
|
install(
|
||||||
|
TARGETS libmbus_static
|
||||||
|
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT dev)
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# package
|
||||||
|
# mkdir build ; cd build ; cmake .. -DLIBMBUS_PACKAGE_DEB=ON ; cpack ..
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
include(InstallRequiredSystemLibraries)
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open source M-bus (Meter-Bus) library.")
|
||||||
|
set(CPACK_PACKAGE_DESCRIPTION
|
||||||
|
"libmbus is an open source library for the M-bus (Meter-Bus) protocol.
|
||||||
|
The Meter-Bus is a standard for reading out meter data from electricity meters,
|
||||||
|
heat meters, gas meters, etc. The M-bus standard deals with both the electrical
|
||||||
|
signals on the M-Bus, and the protocol and data format used in transmissions
|
||||||
|
on the M-Bus. The role of libmbus is to decode/encode M-bus data, and to handle
|
||||||
|
the communication with M-Bus devices.
|
||||||
|
|
||||||
|
For more information see http://www.rscada.se/libmbus")
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_VENDOR "Raditex Control AB")
|
||||||
|
set(CPACK_PACKAGE_CONTACT "Stefan Wahren <info@lategoodbye.de>")
|
||||||
|
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/rscada/libmbus/")
|
||||||
|
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
|
||||||
|
set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
||||||
|
set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
||||||
|
set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
|
||||||
|
set(CPACK_DEB_COMPONENT_INSTALL ON)
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_DEBUG ON)
|
||||||
|
set(CPACK_PACKAGE_RELEASE 1)
|
||||||
|
|
||||||
|
# create 2 components, libmbus, libmbus-dev
|
||||||
|
set(CPACK_COMPONENTS_ALL lib dev)
|
||||||
|
set(CPACK_COMPONENT_LIB_DESCRIPTION "FreeSCADA M-Bus Library.
|
||||||
|
A free and open-source library for M-Bus (Meter Bus) from the rSCADA project.")
|
||||||
|
set(CPACK_DEBIAN_LIB_PACKAGE_SECTION libs)
|
||||||
|
|
||||||
|
set(CPACK_COMPONENT_DEVEL_DESCRIPTION
|
||||||
|
"FreeSCADA M-Bus Library Development files.
|
||||||
|
A free and open-source library for M-Bus (Meter Bus) from the rSCADA project,
|
||||||
|
including development files.")
|
||||||
|
set(CPACK_DEBIAN_DEVEL_PACKAGE_SECTION libdevel)
|
||||||
|
|
||||||
|
set(CPACK_COMPONENT_DEVEL_DEPENDS lib)
|
||||||
|
|
||||||
|
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
||||||
|
set(CPACK_PACKAGE_FILE_NAME
|
||||||
|
"${CMAKE_PROJECT_NAME}_${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
|
||||||
|
|
||||||
|
if(LIBMBUS_PACKAGE_DEB)
|
||||||
|
set(CPACK_GENERATOR "DEB")
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Stefan Wahren <info@lategoodbye.de>")
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_SECTION "Development/Languages/C and C++")
|
||||||
|
set(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_VERSION
|
||||||
|
"${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${CPACK_PACKAGE_RELEASE}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(LIBMBUS_PACKAGE_RPM)
|
||||||
|
set(CPACK_GENERATOR "RPM")
|
||||||
|
set(CPACK_RPM_PACKAGE_LICENSE "BSD")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CPack)
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# doc
|
||||||
|
# mkdir build ; cd build ; cmake .. -DLIBMBUS_BUILD_DOCS=ON ; cmake --build . --target doc
|
||||||
|
# ##############################################################################
|
||||||
|
|
||||||
|
if(LIBMBUS_BUILD_DOCS)
|
||||||
|
message(STATUS "building with documentation")
|
||||||
|
# Generate targets for documentation
|
||||||
|
# check if Doxygen is installed
|
||||||
|
find_package(Doxygen)
|
||||||
|
|
||||||
|
if(Doxygen_FOUND)
|
||||||
|
# set input and output files
|
||||||
|
set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
|
||||||
|
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
|
||||||
|
|
||||||
|
# request to configure the file
|
||||||
|
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
|
||||||
|
|
||||||
|
# note the option ALL which allows to build the docs together with the application
|
||||||
|
add_custom_target(
|
||||||
|
doc ALL
|
||||||
|
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
COMMENT "Generating API documentation with Doxygen"
|
||||||
|
VERBATIM)
|
||||||
|
|
||||||
|
message(STATUS "Setup up the Doxygen documention build")
|
||||||
|
|
||||||
|
else(Doxygen_FOUND)
|
||||||
|
message(WARNING "Doxygen need to be installed to generate the doxygen documentation")
|
||||||
|
endif(Doxygen_FOUND)
|
||||||
|
endif()
|
14
Dockerfile.deb
Normal file
14
Dockerfile.deb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# docker build . -f Dockerfile.deb -t deb_builder
|
||||||
|
|
||||||
|
FROM ubuntu
|
||||||
|
|
||||||
|
RUN apt update -y && apt install -y cmake gcc g++ make
|
||||||
|
COPY . /tmp
|
||||||
|
RUN cd /tmp && \
|
||||||
|
mkdir build && \
|
||||||
|
cd build && \
|
||||||
|
cmake .. -DLIBMBUS_PACKAGE_DEB=ON && \
|
||||||
|
cpack .. && \
|
||||||
|
ls -al && \
|
||||||
|
dpkg -i *.deb
|
||||||
|
|
14
Dockerfile.rpm
Normal file
14
Dockerfile.rpm
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# docker build . -f Dockerfile.rpm -t rpm_builder
|
||||||
|
|
||||||
|
FROM fedora
|
||||||
|
|
||||||
|
RUN dnf install -y cmake gcc g++ make rpm-build
|
||||||
|
COPY . /tmp
|
||||||
|
RUN cd /tmp && \
|
||||||
|
mkdir build && \
|
||||||
|
cd build && \
|
||||||
|
cmake .. -DLIBMBUS_PACKAGE_RPM=ON && \
|
||||||
|
cpack .. && \
|
||||||
|
ls -al && \
|
||||||
|
rpm -i *.rpm
|
||||||
|
|
18
Dockerfile.test
Normal file
18
Dockerfile.test
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# docker build . -f Dockerfile.test -t test_builder
|
||||||
|
|
||||||
|
FROM ubuntu
|
||||||
|
|
||||||
|
RUN apt update -y && apt install -y cmake gcc g++ make
|
||||||
|
COPY . /tmp
|
||||||
|
RUN cd /tmp && \
|
||||||
|
mkdir build && \
|
||||||
|
cd build && \
|
||||||
|
cmake .. -DLIBMBUS_BUILD_EXAMPLES=ON -DLIBMBUS_BUILD_TESTS=ON -DLIBMBUS_ENABLE_COVERAGE=ON && \
|
||||||
|
cmake --build . -j && \
|
||||||
|
cd .. && \
|
||||||
|
./test/generate-xml.sh test/test-frames
|
||||||
|
|
||||||
|
RUN cd /tmp && \
|
||||||
|
echo "NOTE: error-frames have about 30 parse errors, and unsupported-frames have 12" && \
|
||||||
|
./test/generate-xml.sh test/error-frames || true ; \
|
||||||
|
./test/generate-xml.sh test/unsupported-frames || true
|
@ -25,13 +25,13 @@ DOXYFILE_ENCODING = UTF-8
|
|||||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
||||||
# by quotes) that should identify the project.
|
# by quotes) that should identify the project.
|
||||||
|
|
||||||
PROJECT_NAME = libmbus
|
PROJECT_NAME = "@CMAKE_PROJECT_NAME@"
|
||||||
|
|
||||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
|
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
|
||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER =
|
PROJECT_NUMBER = @VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
# base path where the generated documentation will be put.
|
# base path where the generated documentation will be put.
|
||||||
@ -581,7 +581,7 @@ WARN_LOGFILE =
|
|||||||
# directories like "/usr/src/myproject". Separate the files or directories
|
# directories like "/usr/src/myproject". Separate the files or directories
|
||||||
# with spaces.
|
# with spaces.
|
||||||
|
|
||||||
INPUT = mbus
|
INPUT = @CMAKE_CURRENT_LIST_DIR@/mbus
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
||||||
@ -1628,3 +1628,6 @@ GENERATE_LEGEND = YES
|
|||||||
# the various graphs.
|
# the various graphs.
|
||||||
|
|
||||||
DOT_CLEANUP = YES
|
DOT_CLEANUP = YES
|
||||||
|
|
||||||
|
|
||||||
|
USE_MDFILE_AS_MAINPAGE = @CMAKE_CURRENT_LIST_DIR@/README.md
|
@ -1,25 +0,0 @@
|
|||||||
# Copyright (c) 2010
|
|
||||||
# Robert Johansson
|
|
||||||
# Raditex AB.
|
|
||||||
# All rights reserved.
|
|
||||||
|
|
||||||
LIB = libmbus.so
|
|
||||||
|
|
||||||
CFLAGS = -Wall -W -g -fPIC -I.
|
|
||||||
HEADERS = mbus.h mbus-protocol.h
|
|
||||||
OBJS = mbus.o mbus-protocol.o
|
|
||||||
|
|
||||||
$(LIB): $(OBJS)
|
|
||||||
gcc -shared -o $(LIB) $(OBJS)
|
|
||||||
|
|
||||||
all: $(LIB)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *.o *core core $(LIB)
|
|
||||||
|
|
||||||
test:
|
|
||||||
(cd test && make)
|
|
||||||
|
|
||||||
install: all
|
|
||||||
cp $(LIB) /usr/local/freescada/lib
|
|
||||||
cp $(HEADERS) /usr/local/freescada/include
|
|
20
Makefile.am
20
Makefile.am
@ -1,20 +0,0 @@
|
|||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
PACKAGE = @PACKAGE@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
|
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
|
||||||
pkgconfig_DATA = libmbus.pc
|
|
||||||
|
|
||||||
|
|
||||||
docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION)
|
|
||||||
dist_docdir = $(DESTDIR)$(docdir)
|
|
||||||
doc_DATA = README.md \
|
|
||||||
COPYING \
|
|
||||||
hardware/MBus_USB.pdf \
|
|
||||||
hardware/MBus_USB.txt
|
|
||||||
|
|
||||||
SUBDIRS = mbus bin
|
|
||||||
ACLOCAL = aclocal -I .
|
|
||||||
ACLOCAL_AMFLAGS = -Werror -I m4
|
|
32
README.md
32
README.md
@ -1,4 +1,6 @@
|
|||||||
# libmbus: M-bus Library from Raditex Control (http://www.rscada.se) <span style="float:right;"><a href="https://travis-ci.org/rscada/libmbus" style="border-bottom:none"></a></span>
|
# libmbus: M-bus Library from Raditex Control (http://www.rscada.se) <span style="float:right;"><a href="https://travis-ci.org/rscada/libmbus" style="border-bottom:none">
|
||||||
|
|
||||||
|
</a></span>
|
||||||
|
|
||||||
libmbus is an open source library for the M-bus (Meter-Bus) protocol.
|
libmbus is an open source library for the M-bus (Meter-Bus) protocol.
|
||||||
|
|
||||||
@ -8,4 +10,32 @@ signals on the M-Bus, and the protocol and data format used in transmissions on
|
|||||||
the M-Bus. The role of libmbus is to decode/encode M-bus data, and to handle
|
the M-Bus. The role of libmbus is to decode/encode M-bus data, and to handle
|
||||||
the communication with M-Bus devices.
|
the communication with M-Bus devices.
|
||||||
|
|
||||||
|
|
||||||
|
## BUILD
|
||||||
|
|
||||||
|
with cmake
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rm -rf _build
|
||||||
|
mkdir _build
|
||||||
|
cd _build
|
||||||
|
# configure
|
||||||
|
# e.g. on linux
|
||||||
|
cmake .. -DLIBMBUS_BUILD_EXAMPLES=ON
|
||||||
|
# e.g. for a target device
|
||||||
|
cmake .. -DLIBMBUS_BUILD_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain/foo-bar-baz.cmake
|
||||||
|
# compile
|
||||||
|
cmake --build . -j
|
||||||
|
# install - optional
|
||||||
|
cmake --build . --target install
|
||||||
|
```
|
||||||
|
|
||||||
|
## CONSUME
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
find_package(libmbus)
|
||||||
|
add_executable(my_app main.cpp)
|
||||||
|
target_link_libraries(my_app libmbus::libmbus)
|
||||||
|
```
|
||||||
|
|
||||||
For more information see http://www.rscada.se/libmbus
|
For more information see http://www.rscada.se/libmbus
|
||||||
|
19
bin/CMakeLists.txt
Normal file
19
bin/CMakeLists.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
function(add_example SRCS)
|
||||||
|
add_executable(${SRCS} ${CMAKE_CURRENT_LIST_DIR}/${SRCS}.c)
|
||||||
|
target_link_libraries(${SRCS} PRIVATE libmbus::libmbus)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
add_example(mbus-serial-request-data)
|
||||||
|
add_example(mbus-serial-request-data-multi-reply)
|
||||||
|
add_example(mbus-serial-scan)
|
||||||
|
add_example(mbus-serial-scan-secondary)
|
||||||
|
add_example(mbus-serial-select-secondary)
|
||||||
|
add_example(mbus-serial-set-address)
|
||||||
|
add_example(mbus-serial-switch-baudrate)
|
||||||
|
add_example(mbus-tcp-application-reset)
|
||||||
|
add_example(mbus-tcp-raw-send)
|
||||||
|
add_example(mbus-tcp-request-data)
|
||||||
|
add_example(mbus-tcp-request-data-multi-reply)
|
||||||
|
add_example(mbus-tcp-scan)
|
||||||
|
add_example(mbus-tcp-scan-secondary)
|
||||||
|
add_example(mbus-tcp-select-secondary)
|
@ -1,24 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2011, Robert Johansson, Raditex AB
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# rSCADA
|
|
||||||
# http://www.rSCADA.se
|
|
||||||
# info@rscada.se
|
|
||||||
#
|
|
||||||
CFLAGS=-Wall -g -I..
|
|
||||||
LDFLAGS=-L.. -lm -lmbus
|
|
||||||
|
|
||||||
all: mbus-tcp-scan mbus-tcp-request-data
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(CC) -c $(CFLAGS) $< -o $@
|
|
||||||
|
|
||||||
mbus-tcp-scan: mbus-tcp-scan.o mbus-tcp.o
|
|
||||||
gcc -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
mbus-tcp-request-data: mbus-tcp-request-data.o mbus-tcp.o
|
|
||||||
gcc -o $@ $^ $(LDFLAGS)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf mbus-tcp-request-data mbus-tcp-scan *.o *~
|
|
102
bin/Makefile.am
102
bin/Makefile.am
@ -1,102 +0,0 @@
|
|||||||
# ------------------------------------------------------------------------------
|
|
||||||
# Copyright (C) 2010, Raditex AB
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# rSCADA
|
|
||||||
# http://www.rSCADA.se
|
|
||||||
# info@rscada.se
|
|
||||||
#
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
PACKAGE = @PACKAGE@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/src
|
|
||||||
|
|
||||||
noinst_HEADERS =
|
|
||||||
bin_PROGRAMS = mbus-tcp-scan mbus-tcp-request-data mbus-tcp-request-data-multi-reply \
|
|
||||||
mbus-tcp-select-secondary mbus-tcp-scan-secondary \
|
|
||||||
mbus-serial-scan mbus-serial-request-data mbus-serial-request-data-multi-reply \
|
|
||||||
mbus-serial-select-secondary mbus-serial-scan-secondary \
|
|
||||||
mbus-serial-switch-baudrate mbus-tcp-raw-send mbus-tcp-application-reset \
|
|
||||||
mbus-serial-set-address
|
|
||||||
|
|
||||||
# tcp
|
|
||||||
mbus_tcp_scan_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_scan_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_scan_SOURCES = mbus-tcp-scan.c
|
|
||||||
|
|
||||||
mbus_tcp_request_data_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_request_data_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_request_data_SOURCES = mbus-tcp-request-data.c
|
|
||||||
|
|
||||||
mbus_tcp_request_data_multi_reply_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_request_data_multi_reply_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_request_data_multi_reply_SOURCES = mbus-tcp-request-data-multi-reply.c
|
|
||||||
|
|
||||||
mbus_tcp_select_secondary_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_select_secondary_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_select_secondary_SOURCES = mbus-tcp-select-secondary.c
|
|
||||||
|
|
||||||
mbus_tcp_scan_secondary_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_scan_secondary_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_scan_secondary_SOURCES = mbus-tcp-scan-secondary.c
|
|
||||||
|
|
||||||
mbus_tcp_raw_send_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_raw_send_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_raw_send_SOURCES = mbus-tcp-raw-send.c
|
|
||||||
|
|
||||||
mbus_tcp_application_reset_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_tcp_application_reset_LDADD = -lmbus -lm
|
|
||||||
mbus_tcp_application_reset_SOURCES = mbus-tcp-application-reset.c
|
|
||||||
|
|
||||||
# serial
|
|
||||||
mbus_serial_scan_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_scan_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_scan_SOURCES = mbus-serial-scan.c
|
|
||||||
|
|
||||||
mbus_serial_request_data_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_request_data_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_request_data_SOURCES = mbus-serial-request-data.c
|
|
||||||
|
|
||||||
mbus_serial_request_data_multi_reply_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_request_data_multi_reply_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_request_data_multi_reply_SOURCES = mbus-serial-request-data-multi-reply.c
|
|
||||||
|
|
||||||
mbus_serial_select_secondary_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_select_secondary_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_select_secondary_SOURCES = mbus-serial-select-secondary.c
|
|
||||||
|
|
||||||
mbus_serial_scan_secondary_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_scan_secondary_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_scan_secondary_SOURCES = mbus-serial-scan-secondary.c
|
|
||||||
|
|
||||||
mbus_serial_switch_baudrate_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_switch_baudrate_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_switch_baudrate_SOURCES = mbus-serial-switch-baudrate.c
|
|
||||||
|
|
||||||
mbus_serial_set_address_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_serial_set_address_LDADD = -lmbus -lm
|
|
||||||
mbus_serial_set_address_SOURCES = mbus-serial-set-address.c
|
|
||||||
|
|
||||||
# man pages
|
|
||||||
dist_man_MANS = libmbus.1 \
|
|
||||||
mbus-tcp-scan.1 \
|
|
||||||
mbus-tcp-request-data.1 \
|
|
||||||
mbus-tcp-request-data-multi-reply.1 \
|
|
||||||
mbus-tcp-select-secondary.1 \
|
|
||||||
mbus-tcp-scan-secondary.1 \
|
|
||||||
mbus-tcp-raw-send.1 \
|
|
||||||
mbus-serial-scan.1 \
|
|
||||||
mbus-serial-request-data.1 \
|
|
||||||
mbus-serial-request-data-multi-reply.1 \
|
|
||||||
mbus-serial-select-secondary.1 \
|
|
||||||
mbus-serial-scan-secondary.1 \
|
|
||||||
mbus-serial-switch-baudrate.1
|
|
||||||
|
|
||||||
.pod.1:
|
|
||||||
pod2man --release=$(VERSION) --center=$(PACKAGE) $< \
|
|
||||||
>.pod2man.tmp.$$$$ 2>/dev/null && mv -f .pod2man.tmp.$$$$ $@ || true
|
|
||||||
@if grep '\<POD ERRORS\>' $@ >/dev/null 2>&1; \
|
|
||||||
then \
|
|
||||||
echo "$@ has some POD errors!"; false; \
|
|
||||||
fi
|
|
@ -11,7 +11,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
|
||||||
#include <mbus/mbus.h>
|
#include <mbus/mbus.h>
|
||||||
|
|
||||||
static int debug = 0;
|
static int debug = 0;
|
||||||
@ -55,43 +54,60 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
mbus_handle *handle;
|
mbus_handle *handle;
|
||||||
char *device;
|
char *device;
|
||||||
int address, retries = 0, timeout = 0;
|
int address, retries = 0;
|
||||||
long baudrate = 9600;
|
long baudrate = 9600;
|
||||||
int opt, ret;
|
int ret;
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "db:r:t:")) != -1)
|
if (argc == 2)
|
||||||
{
|
{
|
||||||
switch (opt)
|
device = argv[1];
|
||||||
{
|
|
||||||
case 'd':
|
|
||||||
debug = 1;
|
|
||||||
break;
|
|
||||||
case 'b':
|
|
||||||
baudrate = atol(optarg);
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
retries = atoi(optarg);
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
timeout = atoi(optarg);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fprintf(stderr,"usage: %s [-d] [-b BAUDRATE] [-r RETRIES] [-t TIMEOUT] device\n",
|
|
||||||
argv[0]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (argc == 3 && strcmp(argv[1], "-d") == 0)
|
||||||
if (optind >= argc) {
|
{
|
||||||
fprintf(stderr,"usage: %s [-d] [-b BAUDRATE] [-r RETRIES] [-t TIMEOUT] device\n",
|
debug = 1;
|
||||||
argv[0]);
|
device = argv[2];
|
||||||
|
}
|
||||||
|
else if (argc == 4 && strcmp(argv[1], "-b") == 0)
|
||||||
|
{
|
||||||
|
baudrate = atol(argv[2]);
|
||||||
|
device = argv[3];
|
||||||
|
}
|
||||||
|
else if (argc == 4 && strcmp(argv[1], "-r") == 0)
|
||||||
|
{
|
||||||
|
retries = atoi(argv[2]);
|
||||||
|
device = argv[3];
|
||||||
|
}
|
||||||
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0)
|
||||||
|
{
|
||||||
|
debug = 1;
|
||||||
|
baudrate = atol(argv[3]);
|
||||||
|
device = argv[4];
|
||||||
|
}
|
||||||
|
else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0)
|
||||||
|
{
|
||||||
|
debug = 1;
|
||||||
|
retries = atoi(argv[3]);
|
||||||
|
device = argv[4];
|
||||||
|
}
|
||||||
|
else if (argc == 6 && strcmp(argv[1], "-b") == 0 && strcmp(argv[3], "-r") == 0)
|
||||||
|
{
|
||||||
|
baudrate = atol(argv[2]);
|
||||||
|
retries = atoi(argv[4]);
|
||||||
|
device = argv[5];
|
||||||
|
}
|
||||||
|
else if (argc == 7 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0 && strcmp(argv[4], "-r") == 0)
|
||||||
|
{
|
||||||
|
debug = 1;
|
||||||
|
baudrate = atol(argv[3]);
|
||||||
|
retries = atoi(argv[5]);
|
||||||
|
device = argv[6];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr,"usage: %s [-d] [-b BAUDRATE] [-r RETRIES] device\n", argv[0]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
device = argv[optind];
|
|
||||||
|
|
||||||
if ((handle = mbus_context_serial(device)) == NULL)
|
if ((handle = mbus_context_serial(device)) == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Scan failed: Could not initialize M-Bus context: %s\n", mbus_error_str());
|
fprintf(stderr,"Scan failed: Could not initialize M-Bus context: %s\n", mbus_error_str());
|
||||||
@ -116,12 +132,6 @@ main(int argc, char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mbus_context_set_option(handle, MBUS_OPTION_TIMEOUT_OFFSET, timeout) == -1)
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Failed to set timeout offset\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mbus_serial_set_baudrate(handle, baudrate) == -1)
|
if (mbus_serial_set_baudrate(handle, baudrate) == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Failed to set baud rate.\n");
|
fprintf(stderr,"Failed to set baud rate.\n");
|
||||||
|
13
build-deb.sh
13
build-deb.sh
@ -8,18 +8,5 @@
|
|||||||
#
|
#
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
if [ ! -f Makefile ]; then
|
|
||||||
#
|
|
||||||
# regenerate automake files
|
|
||||||
#
|
|
||||||
echo "Running autotools..."
|
|
||||||
|
|
||||||
autoheader \
|
|
||||||
&& aclocal \
|
|
||||||
&& libtoolize --ltdl --copy --force \
|
|
||||||
&& automake --add-missing --copy \
|
|
||||||
&& autoconf
|
|
||||||
fi
|
|
||||||
|
|
||||||
debuild -i -us -uc -b
|
debuild -i -us -uc -b
|
||||||
#sudo pbuilder build $(NAME)_$(VERSION)-1.dsc
|
#sudo pbuilder build $(NAME)_$(VERSION)-1.dsc
|
||||||
|
37
build.sh
37
build.sh
@ -1,21 +1,24 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
|
||||||
|
|
||||||
if [ -f Makefile ]; then
|
|
||||||
# use existing automake files
|
|
||||||
echo >> /dev/null
|
|
||||||
else
|
|
||||||
# regenerate automake files
|
|
||||||
echo "Running autotools..."
|
|
||||||
|
|
||||||
autoheader \
|
rm -rf build
|
||||||
&& aclocal \
|
mkdir build
|
||||||
&& case \
|
cd build
|
||||||
$(uname) in Darwin*) glibtoolize --ltdl --copy --force ;; \
|
cmake .. -DLIBMBUS_BUILD_EXAMPLES=ON -DLIBMBUS_BUILD_TESTS=ON
|
||||||
*) libtoolize --ltdl --copy --force ;; esac \
|
cmake --build .
|
||||||
&& automake --add-missing --copy \
|
|
||||||
&& autoconf \
|
|
||||||
&& ./configure
|
|
||||||
fi
|
|
||||||
|
|
||||||
make
|
# build deb
|
||||||
|
|
||||||
|
# rm -rf build
|
||||||
|
# mkdir build
|
||||||
|
# cd build
|
||||||
|
# cmake .. -DLIBMBUS_PACKAGE_DEB=ON
|
||||||
|
# cpack ..
|
||||||
|
# dpkg -i *.deb
|
||||||
|
|
||||||
|
# build doc
|
||||||
|
|
||||||
|
# mkdir build
|
||||||
|
# cd build
|
||||||
|
# cmake .. -DLIBMBUS_BUILD_DOCS=ON
|
||||||
|
# cmake --build . --target doc
|
||||||
|
15
cmake-format.yaml
Normal file
15
cmake-format.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# https://github.com/cheshirekow/cmake_format
|
||||||
|
|
||||||
|
# How wide to allow formatted cmake files
|
||||||
|
line_width: 120
|
||||||
|
|
||||||
|
# How many spaces to tab for indent
|
||||||
|
tab_size: 2
|
||||||
|
|
||||||
|
# Format command names consistently as 'lower' or 'upper' case
|
||||||
|
command_case: "lower"
|
||||||
|
|
||||||
|
first_comment_is_literal: False
|
||||||
|
|
||||||
|
# enable comment markup parsing and reflow
|
||||||
|
enable_markup: False
|
4
cmake/Config.cmake.in
Normal file
4
cmake/Config.cmake.in
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
|
||||||
|
check_required_components("@PROJECT_NAME@")
|
44
configure.ac
44
configure.ac
@ -1,44 +0,0 @@
|
|||||||
dnl ----------------------------------------------------------------------------
|
|
||||||
dnl Copyright (C) 2010, Raditex AB
|
|
||||||
dnl All rights reserved.
|
|
||||||
dnl
|
|
||||||
dnl rSCADA
|
|
||||||
dnl http://www.rSCADA.se
|
|
||||||
dnl info@rscada.se
|
|
||||||
dnl
|
|
||||||
dnl ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
LT_CONFIG_LTDL_DIR([libltdl])
|
|
||||||
|
|
||||||
AC_INIT([libmbus], [0.8.0], [info@rscada.se], [libmbus], [http://www.rscada.se/libmbus/])
|
|
||||||
AC_CONFIG_AUX_DIR([libltdl/config])
|
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
|
||||||
|
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
# fix for automake 1.11 & 1.12
|
|
||||||
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
|
||||||
|
|
||||||
LDFLAGS="$LDFLAGS -version-info 0:8:0"
|
|
||||||
|
|
||||||
dnl ----------------------
|
|
||||||
dnl
|
|
||||||
AC_PROG_CC
|
|
||||||
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
|
||||||
AC_CONFIG_FILES([Makefile mbus/Makefile test/Makefile bin/Makefile libmbus.pc])
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
|
|
||||||
echo \
|
|
||||||
"----------------------------------------------------------
|
|
||||||
Configuration:
|
|
||||||
|
|
||||||
Source location: ${srcdir}
|
|
||||||
Compile: ${CC}
|
|
||||||
Compiler flags: ${CFLAGS}
|
|
||||||
Linker flags: ${LDFLAGS}
|
|
||||||
Host system type: ${host}
|
|
||||||
Install path: ${prefix}
|
|
||||||
|
|
||||||
See config.h for further configuration.
|
|
||||||
----------------------------------------------------------"
|
|
2
debian/rules
vendored
2
debian/rules
vendored
@ -3,7 +3,7 @@
|
|||||||
#export DH_VERBOSE=1
|
#export DH_VERBOSE=1
|
||||||
|
|
||||||
%:
|
%:
|
||||||
dh --with autoreconf $@
|
dh $@
|
||||||
|
|
||||||
.PHONY: override_dh_strip
|
.PHONY: override_dh_strip
|
||||||
override_dh_strip:
|
override_dh_strip:
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
prefix=@prefix@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
libdir=@libdir@
|
libdir=@INSTALL_LIB_DIR@
|
||||||
includedir=@includedir@
|
includedir=@INSTALL_INC_DIR@
|
||||||
|
|
||||||
Name: libmbus
|
Name: libmbus
|
||||||
Description: Open source M-bus (Meter-Bus) library.
|
Description: Open source M-bus (Meter-Bus) library.
|
||||||
Requires:
|
Requires:
|
||||||
Version: @PACKAGE_VERSION@
|
Version: @PROJECT_VERSION@
|
||||||
URL: http://www.rscada.se/libmbus/
|
URL: http://www.rscada.se/libmbus/
|
||||||
Libs: -L${libdir} -lmbus -lm
|
Libs: -L${libdir} -lmbus -lm
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
84
libmbus.spec
84
libmbus.spec
@ -1,84 +0,0 @@
|
|||||||
#
|
|
||||||
# spec file for package libmbus
|
|
||||||
#
|
|
||||||
# Copyright (c) 2010-2013, Raditex Control AB
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# rSCADA
|
|
||||||
# http://www.rSCADA.se
|
|
||||||
# info@rscada.se
|
|
||||||
#
|
|
||||||
|
|
||||||
Summary: Open source M-bus (Meter-Bus) library
|
|
||||||
Name: libmbus
|
|
||||||
Version: 0.8.0
|
|
||||||
Release: 1
|
|
||||||
Source: http://www.rscada.se/public-dist/%{name}-%{version}.tar.gz
|
|
||||||
URL: http://www.rscada.se/libmbus/
|
|
||||||
License: BSD
|
|
||||||
Vendor: Raditex Control AB
|
|
||||||
Packager: Stefan Wahren <info@lategoodbye.de>
|
|
||||||
Group: Development/Languages/C and C++
|
|
||||||
BuildRoot: {_tmppath}/%{name}-%{version}-build
|
|
||||||
AutoReqProv: on
|
|
||||||
|
|
||||||
%description
|
|
||||||
libmbus: M-bus Library from Raditex Control (http://www.rscada.se)
|
|
||||||
|
|
||||||
libmbus is an open source library for the M-bus (Meter-Bus) protocol.
|
|
||||||
The Meter-Bus is a standard for reading out meter data from electricity meters,
|
|
||||||
heat meters, gas meters, etc. The M-bus standard deals with both the electrical
|
|
||||||
signals on the M-Bus, and the protocol and data format used in transmissions
|
|
||||||
on the M-Bus. The role of libmbus is to decode/encode M-bus data, and to handle
|
|
||||||
the communication with M-Bus devices.
|
|
||||||
|
|
||||||
For more information see http://www.rscada.se/libmbus
|
|
||||||
|
|
||||||
%package devel
|
|
||||||
License: BSD
|
|
||||||
Summary: Development libraries and header files for using the M-bus library
|
|
||||||
Group: Development/Libraries/C and C++
|
|
||||||
AutoReqProv: on
|
|
||||||
Requires: %{name} = %{version}
|
|
||||||
|
|
||||||
%description devel
|
|
||||||
This package contains all necessary include files and libraries needed
|
|
||||||
to compile and link applications which use the M-bus (Meter-Bus) library.
|
|
||||||
|
|
||||||
%prep -q
|
|
||||||
%setup -q
|
|
||||||
# workaround to get it's build
|
|
||||||
autoreconf
|
|
||||||
|
|
||||||
%build
|
|
||||||
./configure --prefix=/usr
|
|
||||||
make
|
|
||||||
|
|
||||||
%install
|
|
||||||
rm -Rf "%buildroot"
|
|
||||||
mkdir "%buildroot"
|
|
||||||
make install DESTDIR="%buildroot"
|
|
||||||
|
|
||||||
%clean
|
|
||||||
rm -rf "%buildroot"
|
|
||||||
|
|
||||||
%files
|
|
||||||
%defattr (-,root,root)
|
|
||||||
%doc COPYING README.md
|
|
||||||
%{_bindir}/mbus-serial-*
|
|
||||||
%{_bindir}/mbus-tcp-*
|
|
||||||
%{_libdir}/libmbus.so*
|
|
||||||
# man pages doesn't exist in this version
|
|
||||||
# %{_mandir}/man1/libmbus.1
|
|
||||||
# %{_mandir}/man1/mbus-*
|
|
||||||
|
|
||||||
%files devel
|
|
||||||
%defattr (-,root,root)
|
|
||||||
%{_includedir}/mbus
|
|
||||||
%{_libdir}/libmbus.a
|
|
||||||
%{_libdir}/libmbus.la
|
|
||||||
%{_libdir}/pkgconfig/libmbus.pc
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
* Fri Mar 29 2013 Stefan Wahren <info@lategoodbye.de> - 0.8.0-1
|
|
||||||
- Initial package based on the last official release
|
|
@ -1,20 +0,0 @@
|
|||||||
# ------------------------------------------------------------------------------
|
|
||||||
# Copyright (C) 2010, Raditex AB
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# rSCADA
|
|
||||||
# http://www.rSCADA.se
|
|
||||||
# info@rscada.se
|
|
||||||
#
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
PACKAGE = @PACKAGE@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir)
|
|
||||||
|
|
||||||
includedir = $(prefix)/include/mbus
|
|
||||||
include_HEADERS = mbus.h mbus-protocol.h mbus-tcp.h mbus-serial.h mbus-protocol-aux.h
|
|
||||||
|
|
||||||
lib_LTLIBRARIES = libmbus.la
|
|
||||||
libmbus_la_SOURCES = mbus.c mbus-protocol.c mbus-tcp.c mbus-serial.c mbus-protocol-aux.c
|
|
||||||
|
|
56
mbus/config.h.in
Normal file
56
mbus/config.h.in
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
#cmakedefine HAVE_DLFCN_H "@HAVE_DLFCN_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#cmakedefine HAVE_INTTYPES_H "@HAVE_INTTYPES_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#cmakedefine HAVE_MEMORY_H "@HAVE_MEMORY_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#cmakedefine HAVE_STDINT_H "@HAVE_STDINT_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#cmakedefine HAVE_STDLIB_H "@HAVE_STDLIB_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#cmakedefine HAVE_STRINGS_H "@HAVE_STRINGS_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#cmakedefine HAVE_STRING_H "@HAVE_STRING_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_STAT_H "@HAVE_SYS_STAT_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_TYPES_H "@HAVE_SYS_TYPES_H@"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#cmakedefine HAVE_UNISTD_H "@HAVE_UNISTD_H@"
|
||||||
|
|
||||||
|
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||||
|
#define LT_OBJDIR ".libs/"
|
||||||
|
|
||||||
|
/* Name of package */
|
||||||
|
#define PACKAGE "@PROJECT_NAME@"
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "info@rscada.se"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "@PROJECT_NAME@"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "@PROJECT_NAME@"
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#define PACKAGE_URL "http://www.rscada.se/libmbus/"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@"
|
||||||
|
|
||||||
|
/* Version number of package */
|
||||||
|
#cmakedefine VERSION "@PACKAGE_VERSION@"
|
@ -201,10 +201,10 @@ mbus_variable_vif vif_table[] = {
|
|||||||
{ 0x73, 86400.0, "s", "Averaging Duration" }, /* days */
|
{ 0x73, 86400.0, "s", "Averaging Duration" }, /* days */
|
||||||
|
|
||||||
/* E111 01nn Actuality Duration s */
|
/* E111 01nn Actuality Duration s */
|
||||||
{ 0x74, 1.0, "s", "Averaging Duration" }, /* seconds */
|
{ 0x74, 1.0, "s", "Actuality Duration" }, /* seconds */
|
||||||
{ 0x75, 60.0, "s", "Averaging Duration" }, /* minutes */
|
{ 0x75, 60.0, "s", "Actuality Duration" }, /* minutes */
|
||||||
{ 0x76, 3600.0, "s", "Averaging Duration" }, /* hours */
|
{ 0x76, 3600.0, "s", "Actuality Duration" }, /* hours */
|
||||||
{ 0x77, 86400.0, "s", "Averaging Duration" }, /* days */
|
{ 0x77, 86400.0, "s", "Actuality Duration" }, /* days */
|
||||||
|
|
||||||
/* Fabrication No */
|
/* Fabrication No */
|
||||||
{ 0x78, 1.0, "", "Fabrication No" },
|
{ 0x78, 1.0, "", "Fabrication No" },
|
||||||
@ -247,7 +247,7 @@ mbus_variable_vif vif_table[] = {
|
|||||||
{ 0x108, 1.0e0, "", "Access Number (transmission count)" },
|
{ 0x108, 1.0e0, "", "Access Number (transmission count)" },
|
||||||
|
|
||||||
/* E000 1001 Medium (as in fixed header) */
|
/* E000 1001 Medium (as in fixed header) */
|
||||||
{ 0x109, 1.0e0, "", "Device type" },
|
{ 0x109, 1.0e0, "", "Medium" },
|
||||||
|
|
||||||
/* E000 1010 Manufacturer (as in fixed header) */
|
/* E000 1010 Manufacturer (as in fixed header) */
|
||||||
{ 0x10A, 1.0e0, "", "Manufacturer" },
|
{ 0x10A, 1.0e0, "", "Manufacturer" },
|
||||||
@ -256,7 +256,7 @@ mbus_variable_vif vif_table[] = {
|
|||||||
{ 0x10B, 1.0e0, "", "Parameter set identification" },
|
{ 0x10B, 1.0e0, "", "Parameter set identification" },
|
||||||
|
|
||||||
/* E000 1100 Model / Version */
|
/* E000 1100 Model / Version */
|
||||||
{ 0x10C, 1.0e0, "", "Device type" },
|
{ 0x10C, 1.0e0, "", "Model / Version" },
|
||||||
|
|
||||||
/* E000 1101 Hardware version # */
|
/* E000 1101 Hardware version # */
|
||||||
{ 0x10D, 1.0e0, "", "Hardware version" },
|
{ 0x10D, 1.0e0, "", "Hardware version" },
|
||||||
@ -356,9 +356,9 @@ mbus_variable_vif vif_table[] = {
|
|||||||
{ 0x130, 1.0e0, "Reserved", "Reserved" }, /* ???? */
|
{ 0x130, 1.0e0, "Reserved", "Reserved" }, /* ???? */
|
||||||
|
|
||||||
/* E011 00nn Duration of tariff (nn=01 ..11: min to days) */
|
/* E011 00nn Duration of tariff (nn=01 ..11: min to days) */
|
||||||
{ 0x131, 60.0, "s", "Storage interval" }, /* minute(s) */
|
{ 0x131, 60.0, "s", "Duration of tariff" }, /* minute(s) */
|
||||||
{ 0x132, 3600.0, "s", "Storage interval" }, /* hour(s) */
|
{ 0x132, 3600.0, "s", "Duration of tariff" }, /* hour(s) */
|
||||||
{ 0x133, 86400.0, "s", "Storage interval" }, /* day(s) */
|
{ 0x133, 86400.0, "s", "Duration of tariff" }, /* day(s) */
|
||||||
|
|
||||||
/* E011 01nn Period of tariff [sec(s) to day(s)] */
|
/* E011 01nn Period of tariff [sec(s) to day(s)] */
|
||||||
{ 0x134, 1.0, "s", "Period of tariff" }, /* seconds */
|
{ 0x134, 1.0, "s", "Period of tariff" }, /* seconds */
|
||||||
@ -785,8 +785,6 @@ mbus_register_found_event(mbus_handle * handle, void (*event)(mbus_handle * hand
|
|||||||
|
|
||||||
int mbus_fixed_normalize(int medium_unit, long medium_value, char **unit_out, double *value_out, char **quantity_out)
|
int mbus_fixed_normalize(int medium_unit, long medium_value, char **unit_out, double *value_out, char **quantity_out)
|
||||||
{
|
{
|
||||||
double exponent = 0.0;
|
|
||||||
int i;
|
|
||||||
medium_unit = medium_unit & 0x3F;
|
medium_unit = medium_unit & 0x3F;
|
||||||
|
|
||||||
if (unit_out == NULL || value_out == NULL || quantity_out == NULL)
|
if (unit_out == NULL || value_out == NULL || quantity_out == NULL)
|
||||||
@ -807,7 +805,7 @@ int mbus_fixed_normalize(int medium_unit, long medium_value, char **unit_out, do
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
for(i=0; fixed_table[i].vif < 0xfff; ++i)
|
for(int i=0; fixed_table[i].vif < 0xfff; ++i)
|
||||||
{
|
{
|
||||||
if (fixed_table[i].vif == medium_unit)
|
if (fixed_table[i].vif == medium_unit)
|
||||||
{
|
{
|
||||||
@ -820,7 +818,6 @@ int mbus_fixed_normalize(int medium_unit, long medium_value, char **unit_out, do
|
|||||||
|
|
||||||
*unit_out = strdup("Unknown");
|
*unit_out = strdup("Unknown");
|
||||||
*quantity_out = strdup("Unknown");
|
*quantity_out = strdup("Unknown");
|
||||||
exponent = 0.0;
|
|
||||||
*value_out = 0.0;
|
*value_out = 0.0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -835,7 +832,6 @@ int mbus_variable_value_decode(mbus_data_record *record, double *value_out_real,
|
|||||||
unsigned char vif, vife;
|
unsigned char vif, vife;
|
||||||
struct tm time;
|
struct tm time;
|
||||||
int value_out_int;
|
int value_out_int;
|
||||||
long value_out_long;
|
|
||||||
long long value_out_long_long;
|
long long value_out_long_long;
|
||||||
*value_out_real = 0.0;
|
*value_out_real = 0.0;
|
||||||
*value_out_str = NULL;
|
*value_out_str = NULL;
|
||||||
@ -1038,7 +1034,6 @@ int
|
|||||||
mbus_vif_unit_normalize(int vif, double value, char **unit_out, double *value_out, char **quantity_out)
|
mbus_vif_unit_normalize(int vif, double value, char **unit_out, double *value_out, char **quantity_out)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
double exponent = 1.0;
|
|
||||||
unsigned newVif = vif & 0xF7F; /* clear extension bit */
|
unsigned newVif = vif & 0xF7F; /* clear extension bit */
|
||||||
|
|
||||||
MBUS_DEBUG("vif_unit_normalize = 0x%03X \n", vif);
|
MBUS_DEBUG("vif_unit_normalize = 0x%03X \n", vif);
|
||||||
@ -1063,7 +1058,6 @@ mbus_vif_unit_normalize(int vif, double value, char **unit_out, double *value_ou
|
|||||||
MBUS_ERROR("%s: Unknown VIF 0x%03X\n", __PRETTY_FUNCTION__, newVif);
|
MBUS_ERROR("%s: Unknown VIF 0x%03X\n", __PRETTY_FUNCTION__, newVif);
|
||||||
*unit_out = strdup("Unknown (VIF=0x%.02X)");
|
*unit_out = strdup("Unknown (VIF=0x%.02X)");
|
||||||
*quantity_out = strdup("Unknown");
|
*quantity_out = strdup("Unknown");
|
||||||
exponent = 0.0;
|
|
||||||
*value_out = 0.0;
|
*value_out = 0.0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1519,7 +1513,6 @@ mbus_context_serial(const char *device)
|
|||||||
|
|
||||||
handle->max_data_retry = 3;
|
handle->max_data_retry = 3;
|
||||||
handle->max_search_retry = 1;
|
handle->max_search_retry = 1;
|
||||||
handle->timeout_offset = 0;
|
|
||||||
handle->is_serial = 1;
|
handle->is_serial = 1;
|
||||||
handle->purge_first_frame = MBUS_FRAME_PURGE_M2S;
|
handle->purge_first_frame = MBUS_FRAME_PURGE_M2S;
|
||||||
handle->auxdata = serial_data;
|
handle->auxdata = serial_data;
|
||||||
@ -1568,7 +1561,6 @@ mbus_context_tcp(const char *host, uint16_t port)
|
|||||||
|
|
||||||
handle->max_data_retry = 3;
|
handle->max_data_retry = 3;
|
||||||
handle->max_search_retry = 1;
|
handle->max_search_retry = 1;
|
||||||
handle->timeout_offset = 0;
|
|
||||||
handle->is_serial = 0;
|
handle->is_serial = 0;
|
||||||
handle->purge_first_frame = MBUS_FRAME_PURGE_M2S;
|
handle->purge_first_frame = MBUS_FRAME_PURGE_M2S;
|
||||||
handle->auxdata = tcp_data;
|
handle->auxdata = tcp_data;
|
||||||
@ -1654,13 +1646,6 @@ mbus_context_set_option(mbus_handle * handle, mbus_context_option option, long v
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MBUS_OPTION_TIMEOUT_OFFSET:
|
|
||||||
if ((value >= 0) && (value <= 100))
|
|
||||||
{
|
|
||||||
handle->timeout_offset = value;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MBUS_OPTION_PURGE_FIRST_FRAME:
|
case MBUS_OPTION_PURGE_FIRST_FRAME:
|
||||||
if ((value == MBUS_FRAME_PURGE_NONE) ||
|
if ((value == MBUS_FRAME_PURGE_NONE) ||
|
||||||
(value == MBUS_FRAME_PURGE_M2S) ||
|
(value == MBUS_FRAME_PURGE_M2S) ||
|
||||||
|
@ -87,7 +87,6 @@ typedef struct _mbus_handle {
|
|||||||
int fd;
|
int fd;
|
||||||
int max_data_retry;
|
int max_data_retry;
|
||||||
int max_search_retry;
|
int max_search_retry;
|
||||||
unsigned int timeout_offset;
|
|
||||||
char purge_first_frame;
|
char purge_first_frame;
|
||||||
char is_serial; /**< _handle type (non zero for serial) */
|
char is_serial; /**< _handle type (non zero for serial) */
|
||||||
int (*open) (struct _mbus_handle *handle);
|
int (*open) (struct _mbus_handle *handle);
|
||||||
@ -155,8 +154,7 @@ typedef struct _mbus_record {
|
|||||||
typedef enum _mbus_context_option {
|
typedef enum _mbus_context_option {
|
||||||
MBUS_OPTION_MAX_DATA_RETRY, /**< option defines the maximum attempts of data request retransmission */
|
MBUS_OPTION_MAX_DATA_RETRY, /**< option defines the maximum attempts of data request retransmission */
|
||||||
MBUS_OPTION_MAX_SEARCH_RETRY, /**< option defines the maximum attempts of search request retransmission */
|
MBUS_OPTION_MAX_SEARCH_RETRY, /**< option defines the maximum attempts of search request retransmission */
|
||||||
MBUS_OPTION_PURGE_FIRST_FRAME, /**< option controls the echo cancelation for mbus_recv_frame */
|
MBUS_OPTION_PURGE_FIRST_FRAME /**< option controls the echo cancelation for mbus_recv_frame */
|
||||||
MBUS_OPTION_TIMEOUT_OFFSET, /**< option defines the additional timeout offset */
|
|
||||||
} mbus_context_option;
|
} mbus_context_option;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -487,10 +487,27 @@ typedef struct _mbus_data_secondary_address {
|
|||||||
#define MBUS_VARIABLE_DATA_MEDIUM_HEAT_COOL 0x0D
|
#define MBUS_VARIABLE_DATA_MEDIUM_HEAT_COOL 0x0D
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_BUS 0x0E
|
#define MBUS_VARIABLE_DATA_MEDIUM_BUS 0x0E
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_UNKNOWN 0x0F
|
#define MBUS_VARIABLE_DATA_MEDIUM_UNKNOWN 0x0F
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_IRRIGATION 0x10
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_WATER_LOGGER 0x11
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_GAS_LOGGER 0x12
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_GAS_CONV 0x13
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_COLORIFIC 0x14
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_BOIL_WATER 0x15
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_COLD_WATER 0x16
|
#define MBUS_VARIABLE_DATA_MEDIUM_COLD_WATER 0x16
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_DUAL_WATER 0x17
|
#define MBUS_VARIABLE_DATA_MEDIUM_DUAL_WATER 0x17
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_PRESSURE 0x18
|
#define MBUS_VARIABLE_DATA_MEDIUM_PRESSURE 0x18
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_ADC 0x19
|
#define MBUS_VARIABLE_DATA_MEDIUM_ADC 0x19
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_SMOKE 0x1A
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_ROOM_SENSOR 0x1B
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_GAS_DETECTOR 0x1C
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_BREAKER_E 0x20
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_VALVE 0x21
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_CUSTOMER_UNIT 0x25
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_WASTE_WATER 0x28
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_GARBAGE 0x29
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_SERVICE_UNIT 0x30
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_RC_SYSTEM 0x36
|
||||||
|
#define MBUS_VARIABLE_DATA_MEDIUM_RC_METER 0x37
|
||||||
|
|
||||||
//
|
//
|
||||||
// Returns the manufacturer ID or zero if the given
|
// Returns the manufacturer ID or zero if the given
|
||||||
@ -554,6 +571,8 @@ const char *mbus_data_fixed_function(int status);
|
|||||||
long mbus_data_record_storage_number(mbus_data_record *record);
|
long mbus_data_record_storage_number(mbus_data_record *record);
|
||||||
long mbus_data_record_tariff(mbus_data_record *record);
|
long mbus_data_record_tariff(mbus_data_record *record);
|
||||||
int mbus_data_record_device(mbus_data_record *record);
|
int mbus_data_record_device(mbus_data_record *record);
|
||||||
|
const char *mbus_data_record_unit(mbus_data_record *record);
|
||||||
|
const char *mbus_data_record_value(mbus_data_record *record);
|
||||||
|
|
||||||
//
|
//
|
||||||
// M-Bus frame data struct access/write functions
|
// M-Bus frame data struct access/write functions
|
||||||
@ -608,6 +627,7 @@ int mbus_data_bcd_encode(unsigned char *bcd_data, size_t bcd_data_size, int valu
|
|||||||
int mbus_data_int_encode(unsigned char *int_data, size_t int_data_size, int value);
|
int mbus_data_int_encode(unsigned char *int_data, size_t int_data_size, int value);
|
||||||
|
|
||||||
long long mbus_data_bcd_decode(unsigned char *bcd_data, size_t bcd_data_size);
|
long long mbus_data_bcd_decode(unsigned char *bcd_data, size_t bcd_data_size);
|
||||||
|
long long mbus_data_bcd_decode_hex(unsigned char *bcd_data, size_t bcd_data_size);
|
||||||
int mbus_data_int_decode(unsigned char *int_data, size_t int_data_size, int *value);
|
int mbus_data_int_decode(unsigned char *int_data, size_t int_data_size, int *value);
|
||||||
int mbus_data_long_decode(unsigned char *int_data, size_t int_data_size, long *value);
|
int mbus_data_long_decode(unsigned char *int_data, size_t int_data_size, long *value);
|
||||||
int mbus_data_long_long_decode(unsigned char *int_data, size_t int_data_size, long long *value);
|
int mbus_data_long_long_decode(unsigned char *int_data, size_t int_data_size, long long *value);
|
||||||
@ -643,4 +663,3 @@ int mbus_is_secondary_address(const char * value);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _MBUS_PROTOCOL_H_ */
|
#endif /* _MBUS_PROTOCOL_H_ */
|
||||||
|
|
||||||
|
@ -72,10 +72,13 @@ mbus_serial_connect(mbus_handle *handle)
|
|||||||
// between the end of a master send telegram and the beginning of the response telegram of the slave shall be
|
// between the end of a master send telegram and the beginning of the response telegram of the slave shall be
|
||||||
// between 11 bit times and (330 bit times + 50ms).
|
// between 11 bit times and (330 bit times + 50ms).
|
||||||
//
|
//
|
||||||
// For 2400Bd this means (330 + 11) / 2400 + 0.05 = 188.75 ms (added 11 bit periods to receive first byte).
|
// Nowadays the usage of USB to serial adapter is very common, which could
|
||||||
// I.e. timeout of 0.2s seems appropriate for 2400Bd.
|
// result in additional delay of 100 ms in worst case.
|
||||||
|
//
|
||||||
|
// For 2400Bd this means (330 + 11) / 2400 + 0.15 = 292 ms (added 11 bit periods to receive first byte).
|
||||||
|
// I.e. timeout of 0.3s seems appropriate for 2400Bd.
|
||||||
|
|
||||||
term->c_cc[VTIME] = (cc_t) 2 + handle->timeout_offset; // Timeout in 1/10 sec
|
term->c_cc[VTIME] = (cc_t) 3; // Timeout in 1/10 sec
|
||||||
|
|
||||||
cfsetispeed(term, B2400);
|
cfsetispeed(term, B2400);
|
||||||
cfsetospeed(term, B2400);
|
cfsetospeed(term, B2400);
|
||||||
@ -113,51 +116,48 @@ mbus_serial_set_baudrate(mbus_handle *handle, long baudrate)
|
|||||||
{
|
{
|
||||||
case 300:
|
case 300:
|
||||||
speed = B300;
|
speed = B300;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 12; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 13; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 600:
|
case 600:
|
||||||
speed = B600;
|
speed = B600;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 6; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 8; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1200:
|
case 1200:
|
||||||
speed = B1200;
|
speed = B1200;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 4; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 5; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2400:
|
case 2400:
|
||||||
speed = B2400;
|
speed = B2400;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 3; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4800:
|
case 4800:
|
||||||
speed = B4800;
|
speed = B4800;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 3; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9600:
|
case 9600:
|
||||||
speed = B9600;
|
speed = B9600;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 19200:
|
case 19200:
|
||||||
speed = B19200;
|
speed = B19200;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 38400:
|
case 38400:
|
||||||
speed = B38400;
|
speed = B38400;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -1; // unsupported baudrate
|
return -1; // unsupported baudrate
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add timeout offset for additional delay
|
|
||||||
serial_data->t.c_cc[VTIME] += handle->timeout_offset;
|
|
||||||
|
|
||||||
// Set input baud rate
|
// Set input baud rate
|
||||||
if (cfsetispeed(&(serial_data->t), speed) != 0)
|
if (cfsetispeed(&(serial_data->t), speed) != 0)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,14 @@
|
|||||||
Release notes for libmbus
|
Release notes for libmbus
|
||||||
|
|
||||||
|
Version 0.9.0 (2019-02-22):
|
||||||
|
|
||||||
|
Added support for negative BCD numbers (type A) and date time CP48 (type I),
|
||||||
|
new program (set primary address), extended XML output (storage number,
|
||||||
|
tariff, device), echo cancelation and better retry handling. Also this version
|
||||||
|
has countless bug fixes.
|
||||||
|
|
||||||
|
Many thanks to all contributers
|
||||||
|
|
||||||
Version 0.8.0 (2012-06-18):
|
Version 0.8.0 (2012-06-18):
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
5
test/CMakeLists.txt
Normal file
5
test/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
add_executable(mbus_parse ${CMAKE_CURRENT_LIST_DIR}/mbus_parse.c)
|
||||||
|
target_link_libraries(mbus_parse PRIVATE libmbus::libmbus)
|
||||||
|
|
||||||
|
add_executable(mbus_parse_hex ${CMAKE_CURRENT_LIST_DIR}/mbus_parse_hex.c)
|
||||||
|
target_link_libraries(mbus_parse_hex PRIVATE libmbus::libmbus)
|
@ -1,25 +0,0 @@
|
|||||||
# ------------------------------------------------------------------------------
|
|
||||||
# Copyright (C) 2010, Raditex AB
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# rSCADA
|
|
||||||
# http://www.rSCADA.se
|
|
||||||
# info@rscada.se
|
|
||||||
#
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
PACKAGE = @PACKAGE@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/mbus
|
|
||||||
|
|
||||||
noinst_HEADERS =
|
|
||||||
noinst_PROGRAMS = mbus_parse mbus_parse_hex
|
|
||||||
|
|
||||||
mbus_parse_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_parse_LDADD = -lmbus -lm
|
|
||||||
mbus_parse_SOURCES = mbus_parse.c
|
|
||||||
|
|
||||||
mbus_parse_hex_LDFLAGS = -L$(top_builddir)/mbus
|
|
||||||
mbus_parse_hex_LDADD = -lmbus -lm
|
|
||||||
mbus_parse_hex_SOURCES = mbus_parse_hex.c
|
|
||||||
|
|
@ -12,66 +12,130 @@
|
|||||||
#
|
#
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Check if mbus_parse_hex exists
|
NUMBER_OF_PARSING_ERRORS=0
|
||||||
if [ ! -x ./mbus_parse_hex ]; then
|
FAILING_TESTS=failing_tests.txt
|
||||||
echo "mbus_parse_hex not found"
|
NEW_TESTS=new_tests.txt
|
||||||
exit 3
|
touch $FAILING_TESTS
|
||||||
fi
|
touch $NEW_TESTS
|
||||||
|
|
||||||
# Check commandline parameter
|
# Check commandline parameter
|
||||||
if [ $# -ne 1 ]; then
|
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
||||||
echo "usage: $0 directory"
|
echo "usage: $0 path_to_directory_with_xml_files"
|
||||||
|
echo "or"
|
||||||
|
echo "usage: $0 path_to_directory_with_xml_files path_to_mbus_parse_hex_with_filename"
|
||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
directory="$1"
|
directory="$1"
|
||||||
|
|
||||||
# Check directory
|
# # Check directory
|
||||||
if [ ! -d "$directory" ]; then
|
if [ ! -d "$directory" ]; then
|
||||||
echo "usage: $0 directory"
|
echo "$directory not found"
|
||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Default location is this one
|
||||||
|
mbus_parse_hex="build/bin/mbus_parse_hex"
|
||||||
|
|
||||||
|
# though can be overriten
|
||||||
|
if [ $# -eq 2 ]; then
|
||||||
|
mbus_parse_hex="$2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if mbus_parse_hex exists
|
||||||
|
if [ ! -x "$mbus_parse_hex" ]; then
|
||||||
|
echo "mbus_parse_hex not found"
|
||||||
|
echo "path to mbus_parse_hex: $mbus_parse_hex"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
generate_xml() {
|
||||||
|
directory="$1"
|
||||||
|
hexfile="$2"
|
||||||
|
mode="$3"
|
||||||
|
|
||||||
|
filename=$(basename "$hexfile" .hex)
|
||||||
|
|
||||||
|
if [ "$mode" = "normalized" ]; then
|
||||||
|
options="-n"
|
||||||
|
mode=".norm"
|
||||||
|
else
|
||||||
|
options=""
|
||||||
|
mode=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse hex file and write XML in file
|
||||||
|
"$mbus_parse_hex" $options "$hexfile" > "$directory/$filename$mode.xml.new"
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
# Check parsing result
|
||||||
|
if [ $result -ne 0 ]; then
|
||||||
|
NUMBER_OF_PARSING_ERRORS=$((NUMBER_OF_PARSING_ERRORS + 1))
|
||||||
|
echo "Unable to generate XML for $hexfile"
|
||||||
|
rm "$directory/$filename$mode.xml.new"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Compare old XML with new XML and write in file
|
||||||
|
diff -u "$directory/$filename$mode.xml" "$directory/$filename$mode.xml.new" 2> /dev/null > "$directory/$filename$mode.dif"
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
case "$result" in
|
||||||
|
0)
|
||||||
|
# XML equal -> remove new
|
||||||
|
rm "$directory/$filename$mode.xml.new"
|
||||||
|
rm "$directory/$filename$mode.dif"
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
# different -> print diff
|
||||||
|
echo "== $directory/$filename$mode failed"
|
||||||
|
cat "$directory/$filename$mode.dif" && rm "$directory/$filename$mode.dif"
|
||||||
|
echo ""
|
||||||
|
echo "$filename$mode" >> $FAILING_TESTS
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# no old -> rename XML
|
||||||
|
echo "Create $filename$mode.xml"
|
||||||
|
mv "$directory/$filename$mode.xml.new" "$directory/$filename$mode.xml"
|
||||||
|
rm "$directory/$filename$mode.dif"
|
||||||
|
echo "$filename$mode" >> $NEW_TESTS
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
for hexfile in "$directory"/*.hex; do
|
for hexfile in "$directory"/*.hex; do
|
||||||
if [ ! -f "$hexfile" ]; then
|
if [ ! -f "$hexfile" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
filename=`basename $hexfile .hex`
|
generate_xml "$directory" "$hexfile" "default"
|
||||||
|
|
||||||
# Parse hex file and write XML in file
|
generate_xml "$directory" "$hexfile" "normalized"
|
||||||
./mbus_parse_hex "$hexfile" > "$directory/$filename.xml.new"
|
|
||||||
result=$?
|
|
||||||
|
|
||||||
# Check parsing result
|
|
||||||
if [ $result -ne 0 ]; then
|
|
||||||
echo "Unable to generate XML for $hexfile"
|
|
||||||
rm "$directory/$filename.xml.new"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Compare old XML with new XML and write in file
|
|
||||||
diff -u "$directory/$filename.xml" "$directory/$filename.xml.new" 2> /dev/null > "$directory/$filename.dif"
|
|
||||||
result=$?
|
|
||||||
|
|
||||||
case "$result" in
|
|
||||||
0)
|
|
||||||
# XML equal -> remove new
|
|
||||||
rm "$directory/$filename.xml.new"
|
|
||||||
rm "$directory/$filename.dif"
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
# different -> print diff
|
|
||||||
cat "$directory/$filename.dif" && rm "$directory/$filename.dif"
|
|
||||||
echo ""
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# no old -> rename XML
|
|
||||||
echo "Create $filename.xml"
|
|
||||||
mv "$directory/$filename.xml.new" "$directory/$filename.xml"
|
|
||||||
rm "$directory/$filename.dif"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Check the size of the file $FAILING_TESTS. Make sure to indicate failure.
|
||||||
|
if [ -s $FAILING_TESTS ]; then
|
||||||
|
echo "** There were errors in the following file(s):"
|
||||||
|
cat $FAILING_TESTS
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
rm $FAILING_TESTS
|
||||||
|
fi
|
||||||
|
if [ -s $NEW_TESTS ]; then
|
||||||
|
echo "** There were new test in the following file(s):"
|
||||||
|
cat $NEW_TESTS
|
||||||
|
else
|
||||||
|
rm $NEW_TESTS
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check that there was no files that failed to parse
|
||||||
|
if [ $NUMBER_OF_PARSING_ERRORS -ne 0 ]; then
|
||||||
|
echo "** There were $NUMBER_OF_PARSING_ERRORS files that did not parse, expected 0 files."
|
||||||
|
echo
|
||||||
|
exit $NUMBER_OF_PARSING_ERRORS
|
||||||
|
fi
|
||||||
|
DIRECTORY_BASENAME="$(basename "$directory")"
|
||||||
|
echo "** Tests executed successfully in \"$DIRECTORY_BASENAME\"."
|
||||||
|
echo
|
||||||
|
@ -18,7 +18,7 @@ int
|
|||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
size_t buff_len, len;
|
size_t len;
|
||||||
int normalized = 0;
|
int normalized = 0;
|
||||||
unsigned char buf[1024];
|
unsigned char buf[1024];
|
||||||
mbus_frame reply;
|
mbus_frame reply;
|
||||||
@ -53,6 +53,7 @@ main(int argc, char *argv[])
|
|||||||
if (ferror(fp) != 0)
|
if (ferror(fp) != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file);
|
fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file);
|
||||||
|
fclose(fp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ int
|
|||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
size_t buff_len, len;
|
size_t buff_len;
|
||||||
int result, normalized = 0;
|
int result, normalized = 0;
|
||||||
unsigned char raw_buff[4096], buff[4096];
|
unsigned char raw_buff[4096], buff[4096];
|
||||||
mbus_frame reply;
|
mbus_frame reply;
|
||||||
@ -48,11 +48,12 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(raw_buff, 0, sizeof(raw_buff));
|
memset(raw_buff, 0, sizeof(raw_buff));
|
||||||
len = fread(raw_buff, 1, sizeof(raw_buff), fp);
|
fread(raw_buff, 1, sizeof(raw_buff), fp);
|
||||||
|
|
||||||
if (ferror(fp) != 0)
|
if (ferror(fp) != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file);
|
fprintf(stderr, "%s: failed to read '%s'\n", argv[0], file);
|
||||||
|
fclose(fp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
87
test/test-frames/ACW_Itron-BM-plus-m.norm.xml
Normal file
87
test/test-frames/ACW_Itron-BM-plus-m.norm.xml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11490378</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>14</Version>
|
||||||
|
<ProductName>Itron BM +m</ProductName>
|
||||||
|
<Medium>Cold water</Medium>
|
||||||
|
<AccessNumber>10</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11490378.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>54.321000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2000-00-00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-13T11:11:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>6.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 01 75 13</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
79
test/test-frames/ACW_Itron-CYBLE-M-Bus-14.norm.xml
Normal file
79
test/test-frames/ACW_Itron-CYBLE-M-Bus-14.norm.xml
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>9011523</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>20</Version>
|
||||||
|
<ProductName>Itron CYBLE M-Bus 1.4</ProductName>
|
||||||
|
<Medium>Water</Medium>
|
||||||
|
<AccessNumber>37</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>9011523.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>cust. ID</Quantity>
|
||||||
|
<Value>09LA076755</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-13T14:26:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>bat. time</Quantity>
|
||||||
|
<Value>2516.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.031000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.031000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 01 1F</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
231
test/test-frames/EDC.norm.xml
Normal file
231
test/test-frames/EDC.norm.xml
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11120895</Id>
|
||||||
|
<Manufacturer>EDC</Manufacturer>
|
||||||
|
<Version>2</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>23</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>35000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>465000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>21.536703</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>21.605042</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>92.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>92.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000707</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.357622</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>18511.912109</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-07-10T15:25:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>C</Quantity>
|
||||||
|
<Value>3571.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>C</Quantity>
|
||||||
|
<Value>413.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>c</Quantity>
|
||||||
|
<Value>1.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>c</Quantity>
|
||||||
|
<Value>1.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value></Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
229
test/test-frames/EFE_Engelmann-Elster-SensoStar-2.norm.xml
Normal file
229
test/test-frames/EFE_Engelmann-Elster-SensoStar-2.norm.xml
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>24083345</Id>
|
||||||
|
<Manufacturer>EFE</Manufacturer>
|
||||||
|
<Version>0</Version>
|
||||||
|
<ProductName>Engelmann / Elster SensoStar 2</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>102</AccessNumber>
|
||||||
|
<Status>27</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>24083345.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-12T14:23:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.025000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>11.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>22.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>21.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.090000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="22">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>On time</Quantity>
|
||||||
|
<Value>45273600.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="23">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="24">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000011</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
113
test/test-frames/EFE_Engelmann-WaterStar.norm.xml
Normal file
113
test/test-frames/EFE_Engelmann-WaterStar.norm.xml
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>4990254</Id>
|
||||||
|
<Manufacturer>EFE</Manufacturer>
|
||||||
|
<Version>0</Version>
|
||||||
|
<ProductName>Engelmann WaterStar</ProductName>
|
||||||
|
<Medium>Warm water (30-90°C)</Medium>
|
||||||
|
<AccessNumber>12</AccessNumber>
|
||||||
|
<Status>27</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>4990254.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-13T12:10:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.332000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.331000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.332000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>2.070000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>On time</Quantity>
|
||||||
|
<Value>102902400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000008</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -6,7 +6,7 @@
|
|||||||
<Manufacturer>EFE</Manufacturer>
|
<Manufacturer>EFE</Manufacturer>
|
||||||
<Version>0</Version>
|
<Version>0</Version>
|
||||||
<ProductName>Engelmann WaterStar</ProductName>
|
<ProductName>Engelmann WaterStar</ProductName>
|
||||||
<Medium>Hot water</Medium>
|
<Medium>Warm water (30-90°C)</Medium>
|
||||||
<AccessNumber>12</AccessNumber>
|
<AccessNumber>12</AccessNumber>
|
||||||
<Status>27</Status>
|
<Status>27</Status>
|
||||||
<Signature>0000</Signature>
|
<Signature>0000</Signature>
|
||||||
|
151
test/test-frames/ELS_Elster-F96-Plus.norm.xml
Normal file
151
test/test-frames/ELS_Elster-F96-Plus.norm.xml
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>44493951</Id>
|
||||||
|
<Manufacturer>ELS</Manufacturer>
|
||||||
|
<Version>47</Version>
|
||||||
|
<ProductName>Elster F96 Plus</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>161</AccessNumber>
|
||||||
|
<Status>70</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>13131113.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>131.113000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>22.700000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>22.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>63072000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-13T13:09:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-05-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -48,14 +48,14 @@
|
|||||||
<Function>Value during error state</Function>
|
<Function>Value during error state</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Power (W)</Unit>
|
<Unit>Power (W)</Unit>
|
||||||
<Value>144445223</Value>
|
<Value>DDDDEBBD</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
<DataRecord id="5">
|
<DataRecord id="5">
|
||||||
<Function>Value during error state</Function>
|
<Function>Value during error state</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Volume flow (m m^3/h)</Unit>
|
<Unit>Volume flow (m m^3/h)</Unit>
|
||||||
<Value>1445223</Value>
|
<Value>DDEBBD</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
<DataRecord id="6">
|
<DataRecord id="6">
|
||||||
|
121
test/test-frames/ELV-Elvaco-CMa10.norm.xml
Normal file
121
test/test-frames/ELV-Elvaco-CMa10.norm.xml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>24011561</Id>
|
||||||
|
<Manufacturer>ELV</Manufacturer>
|
||||||
|
<Version>22</Version>
|
||||||
|
<ProductName>Elvaco CMa10</ProductName>
|
||||||
|
<Medium>Other</Medium>
|
||||||
|
<AccessNumber>63</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Digital Input</Quantity>
|
||||||
|
<Value>2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>54.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>33.640000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>73.630000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>20.940000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>13.720000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>29.780000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Averaging Duration</Quantity>
|
||||||
|
<Value>86400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>20.920000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>20.790000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>24011561.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>262144.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value></Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
287
test/test-frames/EMU_EMU-Professional-375-M-Bus.norm.xml
Normal file
287
test/test-frames/EMU_EMU-Professional-375-M-Bus.norm.xml
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>32629</Id>
|
||||||
|
<Manufacturer>EMU</Manufacturer>
|
||||||
|
<Version>16</Version>
|
||||||
|
<ProductName>EMU Professional 3/75 M-Bus</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>2</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>32629.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>1364.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>7854.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>14.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>14.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>225.700000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>187.400000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>241.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="22">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>-0.066000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="23">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="24">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="25">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>-0.066000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="26">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>13.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="27">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="28">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="29">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>500.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="30">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Reset counter</Quantity>
|
||||||
|
<Value>56.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="31">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -241,7 +241,7 @@
|
|||||||
<DataRecord id="30">
|
<DataRecord id="30">
|
||||||
<Function>Instantaneous value</Function>
|
<Function>Instantaneous value</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Unrecognized VIF extension: 0x60</Unit>
|
<Unit>Reset counter</Unit>
|
||||||
<Value>56</Value>
|
<Value>56</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
|
133
test/test-frames/Elster-F2.norm.xml
Normal file
133
test/test-frames/Elster-F2.norm.xml
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>802657</Id>
|
||||||
|
<Manufacturer>SVM</Manufacturer>
|
||||||
|
<Version>8</Version>
|
||||||
|
<ProductName>Elster F2 / Deltamess F2</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>70</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>5272000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>1204.270000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>917.690000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>28.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>34.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>On time</Quantity>
|
||||||
|
<Value>149014800.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>149014800.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2013-06-29T12:12:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Units for H.C.A.</Unit>
|
||||||
|
<Quantity>H.C.A.</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Units for H.C.A.</Unit>
|
||||||
|
<Quantity>H.C.A.</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>C4 09 01 01 12 00 01 01 01 07 57 26 80 00 CD 4E 08 04 07 A3 FF 03 57 26 80 00 04 04 0D 02 FF 0F 05 3C FF 62 E7 62 96 0A 89 0A 02 00 15 40 17 01 00 00 63 42</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
69
test/test-frames/FIN-Finder-7E.23.8.230.0020.norm.xml
Normal file
69
test/test-frames/FIN-Finder-7E.23.8.230.0020.norm.xml
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>23006207</Id>
|
||||||
|
<Manufacturer>FIN</Manufacturer>
|
||||||
|
<Version>35</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>146</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>1728680.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>1728680.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>230.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>90.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-30.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
31
test/test-frames/GWF-MTKcoder.norm.xml
Normal file
31
test/test-frames/GWF-MTKcoder.norm.xml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>182007</Id>
|
||||||
|
<Manufacturer>GWF</Manufacturer>
|
||||||
|
<Version>53</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Water</Medium>
|
||||||
|
<AccessNumber>76</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>182007.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>269.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
65
test/test-frames/LGB_G350.norm.xml
Normal file
65
test/test-frames/LGB_G350.norm.xml
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>12082058</Id>
|
||||||
|
<Manufacturer>LGB</Manufacturer>
|
||||||
|
<Version>64</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Gas</Medium>
|
||||||
|
<AccessNumber>64</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>10834.092000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2016-07-22T08:00:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>G0017591208205814</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Digital Output</Quantity>
|
||||||
|
<Value>1.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Special supplier information</Quantity>
|
||||||
|
<Value>15.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -52,7 +52,7 @@
|
|||||||
<DataRecord id="5">
|
<DataRecord id="5">
|
||||||
<Function>Instantaneous value</Function>
|
<Function>Instantaneous value</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Unrecognized VIF extension: 0x67</Unit>
|
<Unit>Special supplier information</Unit>
|
||||||
<Value>15</Value>
|
<Value>15</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
|
63
test/test-frames/REL-Relay-Padpuls2.norm.xml
Normal file
63
test/test-frames/REL-Relay-Padpuls2.norm.xml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11216301</Id>
|
||||||
|
<Manufacturer>REL</Manufacturer>
|
||||||
|
<Version>65</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Gas</Medium>
|
||||||
|
<AccessNumber>177</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>28760.810000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>1900-01-00T00:00:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>25973.820000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2015-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>C0 01 01 0C</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
191
test/test-frames/SBC_Saia-Burgess-ALE3.norm.xml
Normal file
191
test/test-frames/SBC_Saia-Burgess-ALE3.norm.xml
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>19000055</Id>
|
||||||
|
<Manufacturer>SBC</Manufacturer>
|
||||||
|
<Version>22</Version>
|
||||||
|
<ProductName>Saia-Burgess ALE3</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>191</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>2930.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>2930.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>60.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>60.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>223.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
143
test/test-frames/SEN_Pollustat.norm.xml
Normal file
143
test/test-frames/SEN_Pollustat.norm.xml
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11788</Id>
|
||||||
|
<Manufacturer>SEN</Manufacturer>
|
||||||
|
<Version>6</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Heat / Cooling load meter</Medium>
|
||||||
|
<AccessNumber>62</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2015-04-07T14:59:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2000-01-01T00:00:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>67108864.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>On time</Quantity>
|
||||||
|
<Value>15803026.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>15145636.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>39831000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>6162.878000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-170.721784</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>3.230039</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>31.147324</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>31.193100</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>-0.045776</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>11582321.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>756.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11788.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>-19184.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
95
test/test-frames/SEN_Sensus-PolluStat-E.norm.xml
Normal file
95
test/test-frames/SEN_Sensus-PolluStat-E.norm.xml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>21265095</Id>
|
||||||
|
<Manufacturer>SEN</Manufacturer>
|
||||||
|
<Version>14</Version>
|
||||||
|
<ProductName>Sensus PolluStat E</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>181</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>20.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>20.200000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>21265095.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Customer location</Quantity>
|
||||||
|
<Value>21265095.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value></Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
87
test/test-frames/SEN_Sensus-PolluTherm.norm.xml
Normal file
87
test/test-frames/SEN_Sensus-PolluTherm.norm.xml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>24351689</Id>
|
||||||
|
<Manufacturer>SEN</Manufacturer>
|
||||||
|
<Version>11</Version>
|
||||||
|
<ProductName>Sensus PolluTherm</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>84</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>24351689.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Customer location</Quantity>
|
||||||
|
<Value>24351689.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
139
test/test-frames/SLB_CF-Compact-Integral-MK-MaXX.norm.xml
Normal file
139
test/test-frames/SLB_CF-Compact-Integral-MK-MaXX.norm.xml
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11817314</Id>
|
||||||
|
<Manufacturer>SLB</Manufacturer>
|
||||||
|
<Version>6</Version>
|
||||||
|
<ProductName>CF Compact / Integral MK MaXX</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>3</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11817314.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.020000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>21.800000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>22.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>-0.180000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>101606400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-13T14:02:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>1.230000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>3.210000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>3.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>18.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 16</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -58,7 +58,7 @@
|
|||||||
<Function>Instantaneous value</Function>
|
<Function>Instantaneous value</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Temperature Difference (1e-2 deg C)</Unit>
|
<Unit>Temperature Difference (1e-2 deg C)</Unit>
|
||||||
<Value>1500018</Value>
|
<Value>F00018</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
<DataRecord id="7">
|
<DataRecord id="7">
|
||||||
|
121
test/test-frames/THI_cma10.norm.xml
Normal file
121
test/test-frames/THI_cma10.norm.xml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>2</Id>
|
||||||
|
<Manufacturer>ELV</Manufacturer>
|
||||||
|
<Version>21</Version>
|
||||||
|
<ProductName>Elvaco CMa10</ProductName>
|
||||||
|
<Medium>Other</Medium>
|
||||||
|
<AccessNumber>13</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Digital Input</Quantity>
|
||||||
|
<Value>2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>46.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>37.820000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>51.220000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>22.620000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>22.500000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>23.260000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Averaging Duration</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>772.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value></Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
335
test/test-frames/ZRM_Minol-Minocal-C2.norm.xml
Normal file
335
test/test-frames/ZRM_Minol-Minocal-C2.norm.xml
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>31425084</Id>
|
||||||
|
<Manufacturer>ZRM</Manufacturer>
|
||||||
|
<Version>129</Version>
|
||||||
|
<ProductName>Minol Minocal C2</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>115</AccessNumber>
|
||||||
|
<Status>27</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>8</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2015-01-01T00:00:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>8</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>10</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.074000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.043000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2011-09-01T08:30:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>2000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2011-09-01T08:30:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>20.710000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>20.380000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2014-03-13T12:45:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>32</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-03-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>32</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>33</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-02-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>33</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>34</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-01-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>34</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>35</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-12-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="22">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>35</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="23">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>36</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-11-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="24">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>36</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="25">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>37</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-10-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="26">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>37</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="27">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>38</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-09-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="28">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>38</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="29">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>39</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2013-08-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="30">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>39</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>3000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="31">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>32</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2014-03-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="32">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>32</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="33">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>32</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
153
test/test-frames/abb_delta.norm.xml
Normal file
153
test/test-frames/abb_delta.norm.xml
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>78563412</Id>
|
||||||
|
<Manufacturer>ABB</Manufacturer>
|
||||||
|
<Version>2</Version>
|
||||||
|
<ProductName>ABB Delta-Meter</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>69</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>4</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>4</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>1000000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value></Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
131
test/test-frames/abb_f95.norm.xml
Normal file
131
test/test-frames/abb_f95.norm.xml
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>26718590</Id>
|
||||||
|
<Manufacturer>HYD</Manufacturer>
|
||||||
|
<Version>40</Version>
|
||||||
|
<ProductName>ABB F95 Typ US770</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>115</AccessNumber>
|
||||||
|
<Status>50</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.074200</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>1311041.300000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>11.041300</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>20.400000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>20.400000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-13T16:34:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2011-04-30T23:59:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-04-30T23:59:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2011-12-31T23:59:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>311590800.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -30,14 +30,14 @@
|
|||||||
<Function>Value during error state</Function>
|
<Function>Value during error state</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Power (1e-1 W)</Unit>
|
<Unit>Power (1e-1 W)</Unit>
|
||||||
<Value>144521543</Value>
|
<Value>DDEBB4DD</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
<DataRecord id="3">
|
<DataRecord id="3">
|
||||||
<Function>Value during error state</Function>
|
<Function>Value during error state</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Volume flow (1e-4 m^3/h)</Unit>
|
<Unit>Volume flow (1e-4 m^3/h)</Unit>
|
||||||
<Value>1521543</Value>
|
<Value>EBB4DD</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
<DataRecord id="4">
|
<DataRecord id="4">
|
||||||
|
95
test/test-frames/allmess_cf50.norm.xml
Normal file
95
test/test-frames/allmess_cf50.norm.xml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>2205100</Id>
|
||||||
|
<Manufacturer>SLB</Manufacturer>
|
||||||
|
<Version>2</Version>
|
||||||
|
<ProductName>Allmess Megacontrol CF-50</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>0</AccessNumber>
|
||||||
|
<Status>88</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.300000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>128.800000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>51.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>77.230000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2012-01-12</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>292291200.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>60 00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
1
test/test-frames/amt_calec_mb.hex
Normal file
1
test/test-frames/amt_calec_mb.hex
Normal file
@ -0,0 +1 @@
|
|||||||
|
68 38 38 68 08 C8 72 09 31 54 03 B4 05 B0 04 C9 10 FF FF 03 22 9A 00 00 05 2E A0 C8 51 46 05 3E B4 E3 D7 42 05 5B 90 D3 07 43 05 5F 0E AA E7 41 05 63 9C BC D5 42 04 6D 10 09 05 C5 77 16
|
71
test/test-frames/amt_calec_mb.norm.xml
Normal file
71
test/test-frames/amt_calec_mb.norm.xml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>3543109</Id>
|
||||||
|
<Manufacturer>AMT</Manufacturer>
|
||||||
|
<Version>176</Version>
|
||||||
|
<ProductName>Aquametro CALEC MB</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>201</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>FFFF</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>On time</Quantity>
|
||||||
|
<Value>554400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>13426156.250000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>107.944733</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>135.826416</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>28.958035</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>106.868378</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2096-05-05T09:16:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
64
test/test-frames/amt_calec_mb.xml
Normal file
64
test/test-frames/amt_calec_mb.xml
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>3543109</Id>
|
||||||
|
<Manufacturer>AMT</Manufacturer>
|
||||||
|
<Version>176</Version>
|
||||||
|
<ProductName>Aquametro CALEC MB</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>201</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>FFFF</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>On time (hours)</Unit>
|
||||||
|
<Value>154</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Power (kW)</Unit>
|
||||||
|
<Value>13426.156250</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Volume flow ( m^3/h)</Unit>
|
||||||
|
<Value>107.944733</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Flow temperature (deg C)</Unit>
|
||||||
|
<Value>135.826416</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Return temperature (deg C)</Unit>
|
||||||
|
<Value>28.958035</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Temperature Difference ( deg C)</Unit>
|
||||||
|
<Value>106.868378</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Time Point (time & date)</Unit>
|
||||||
|
<Value>2096-05-05T09:16:00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
169
test/test-frames/berg_dz_plus.norm.xml
Normal file
169
test/test-frames/berg_dz_plus.norm.xml
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>0</Id>
|
||||||
|
<Manufacturer>ABB</Manufacturer>
|
||||||
|
<Version>2</Version>
|
||||||
|
<ProductName>ABB Delta-Meter</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>0</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>4</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>4</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
1
test/test-frames/eastron_sdm630.hex
Normal file
1
test/test-frames/eastron_sdm630.hex
Normal file
@ -0,0 +1 @@
|
|||||||
|
68 90 90 68 08 0A 72 78 65 34 21 24 40 01 02 55 00 00 00 0B FD 47 56 34 12 0B FD 47 56 34 12 0B FD 47 56 34 12 0B FD 47 56 34 12 0B FD 47 56 34 12 0B FD 47 56 34 12 0B FD 59 56 34 12 0B FD 59 56 34 12 0B FD 59 56 34 12 0B FD 59 56 34 12 0B 2A 56 34 12 0B 2A 56 34 12 0B 2A 56 34 12 0B 2A 56 34 12 0B FD 3A 56 34 12 0B FD 3A 56 34 12 0B FD 3A 56 34 12 0B FD 3A 56 34 12 0A FD 3A 00 05 0A FD 3A 05 00 0A FD 3A 05 00 0A FD 3A 05 00 0A FD 3A 50 00 4D 16
|
199
test/test-frames/eastron_sdm630.norm.xml
Normal file
199
test/test-frames/eastron_sdm630.norm.xml
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>21346578</Id>
|
||||||
|
<Manufacturer>PAD</Manufacturer>
|
||||||
|
<Version>1</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>85</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>1234.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>1234.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>1234.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>1234.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>1234.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>1234.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>123.456000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>123.456000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>123.456000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>123.456000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>12345.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>12345.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>12345.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>12345.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>123456.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>123456.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>123456.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>123456.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>500.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>5.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>5.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>5.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="22">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Dimensionless</Quantity>
|
||||||
|
<Value>50.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
176
test/test-frames/eastron_sdm630.xml
Normal file
176
test/test-frames/eastron_sdm630.xml
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>21346578</Id>
|
||||||
|
<Manufacturer>PAD</Manufacturer>
|
||||||
|
<Version>1</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>85</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>1e-2 V</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>1e-2 V</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>1e-2 V</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>1e-2 V</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>1e-2 V</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>1e-2 V</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m A</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m A</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m A</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m A</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Power (1e-1 W)</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Power (1e-1 W)</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Power (1e-1 W)</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Power (1e-1 W)</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>123456</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>500</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>5</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>5</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>5</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="22">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>dimensionless / no VIF</Unit>
|
||||||
|
<Value>50</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
191
test/test-frames/electricity-meter-1.norm.xml
Normal file
191
test/test-frames/electricity-meter-1.norm.xml
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>500023E</Id>
|
||||||
|
<Manufacturer>SBC</Manufacturer>
|
||||||
|
<Version>18</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>19</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>12520.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>12520.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>17744330.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>17744330.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>237.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>3.200000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>790.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-180.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>231.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>3.500000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>810.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-150.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>228.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>6.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>1600.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-320.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>3200.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-650.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>4.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -2,7 +2,7 @@
|
|||||||
<MBusData>
|
<MBusData>
|
||||||
|
|
||||||
<SlaveInformation>
|
<SlaveInformation>
|
||||||
<Id>5000244</Id>
|
<Id>500023E</Id>
|
||||||
<Manufacturer>SBC</Manufacturer>
|
<Manufacturer>SBC</Manufacturer>
|
||||||
<Version>18</Version>
|
<Version>18</Version>
|
||||||
<ProductName></ProductName>
|
<ProductName></ProductName>
|
||||||
|
191
test/test-frames/electricity-meter-2.norm.xml
Normal file
191
test/test-frames/electricity-meter-2.norm.xml
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>50002E5</Id>
|
||||||
|
<Manufacturer>@@@</Manufacturer>
|
||||||
|
<Version>18</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>37</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>2540.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>2540.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>4441280.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>4441280.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>233.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>234.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>235.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Manufacturer specific</Quantity>
|
||||||
|
<Value>4.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -2,7 +2,7 @@
|
|||||||
<MBusData>
|
<MBusData>
|
||||||
|
|
||||||
<SlaveInformation>
|
<SlaveInformation>
|
||||||
<Id>5000345</Id>
|
<Id>50002E5</Id>
|
||||||
<Manufacturer>@@@</Manufacturer>
|
<Manufacturer>@@@</Manufacturer>
|
||||||
<Version>18</Version>
|
<Version>18</Version>
|
||||||
<ProductName></ProductName>
|
<ProductName></ProductName>
|
||||||
|
87
test/test-frames/els_falcon.norm.xml
Normal file
87
test/test-frames/els_falcon.norm.xml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>70112345</Id>
|
||||||
|
<Manufacturer>ELS</Manufacturer>
|
||||||
|
<Version>10</Version>
|
||||||
|
<ProductName>Elster Falcon</ProductName>
|
||||||
|
<Medium>Water</Medium>
|
||||||
|
<AccessNumber>2</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>1234.567000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2007-02-06T13:58:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2007-01-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>456.951000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2008-01-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>5.945000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2008-01-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>6.137000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>0E 42 20 01 01 01 00 05 08 5E 01 20 3D 12 08 3D 12 08 00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
63
test/test-frames/els_tmpa_telegramm1.norm.xml
Normal file
63
test/test-frames/els_tmpa_telegramm1.norm.xml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>70112345</Id>
|
||||||
|
<Manufacturer>ELS</Manufacturer>
|
||||||
|
<Version>2</Version>
|
||||||
|
<ProductName>Elster TMP-A</ProductName>
|
||||||
|
<Medium>Water</Medium>
|
||||||
|
<AccessNumber>2</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>1234.567000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2007-02-06T13:58:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2007-01-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>456.951000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2008-01-01</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
121
test/test-frames/elv_temp_humid.norm.xml
Normal file
121
test/test-frames/elv_temp_humid.norm.xml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>54000834</Id>
|
||||||
|
<Manufacturer>ELV</Manufacturer>
|
||||||
|
<Version>50</Version>
|
||||||
|
<ProductName>Elvaco CMa11</ProductName>
|
||||||
|
<Medium>Other</Medium>
|
||||||
|
<AccessNumber>242</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Digital Input</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>45.640000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>45.520000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>%RH</Quantity>
|
||||||
|
<Value>58.120000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>22.560000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Minimum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>21.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>23.390000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Averaging Duration</Quantity>
|
||||||
|
<Value>86400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>22.760000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>External temperature</Quantity>
|
||||||
|
<Value>22.690000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>54000834.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>262144.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>More records follow</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value></Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
43
test/test-frames/emh_diz.norm.xml
Normal file
43
test/test-frames/emh_diz.norm.xml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>623702</Id>
|
||||||
|
<Manufacturer>EMH</Manufacturer>
|
||||||
|
<Version>0</Version>
|
||||||
|
<ProductName>EMH DIZ</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>7</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>4090.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
225
test/test-frames/engelmann_sensostar2c.norm.xml
Normal file
225
test/test-frames/engelmann_sensostar2c.norm.xml
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>10380010</Id>
|
||||||
|
<Manufacturer>EFE</Manufacturer>
|
||||||
|
<Version>1</Version>
|
||||||
|
<ProductName>Engelmann SensoStar 2C</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>30</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>10380010.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-06-06T20:50:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>12.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>800000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>95.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>43.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>52.580000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>43718400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Error flags</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2011-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>12.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>800000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2010-12-31</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="20">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>8.400000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="21">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>500000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="22">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="23">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>3</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -36,7 +36,7 @@
|
|||||||
<DataRecord id="3">
|
<DataRecord id="3">
|
||||||
<Function>Instantaneous value</Function>
|
<Function>Instantaneous value</Function>
|
||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>8</Value>
|
<Value>8</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -45,7 +45,7 @@
|
|||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Tariff>2</Tariff>
|
<Tariff>2</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>0</Value>
|
<Value>0</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<StorageNumber>0</StorageNumber>
|
<StorageNumber>0</StorageNumber>
|
||||||
<Tariff>3</Tariff>
|
<Tariff>3</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>0</Value>
|
<Value>0</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -131,7 +131,7 @@
|
|||||||
<DataRecord id="16">
|
<DataRecord id="16">
|
||||||
<Function>Instantaneous value</Function>
|
<Function>Instantaneous value</Function>
|
||||||
<StorageNumber>1</StorageNumber>
|
<StorageNumber>1</StorageNumber>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>8</Value>
|
<Value>8</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -140,7 +140,7 @@
|
|||||||
<StorageNumber>1</StorageNumber>
|
<StorageNumber>1</StorageNumber>
|
||||||
<Tariff>2</Tariff>
|
<Tariff>2</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>0</Value>
|
<Value>0</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -149,7 +149,7 @@
|
|||||||
<StorageNumber>1</StorageNumber>
|
<StorageNumber>1</StorageNumber>
|
||||||
<Tariff>3</Tariff>
|
<Tariff>3</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>0</Value>
|
<Value>0</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -176,7 +176,7 @@
|
|||||||
<StorageNumber>2</StorageNumber>
|
<StorageNumber>2</StorageNumber>
|
||||||
<Tariff>0</Tariff>
|
<Tariff>0</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>5</Value>
|
<Value>5</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -185,7 +185,7 @@
|
|||||||
<StorageNumber>2</StorageNumber>
|
<StorageNumber>2</StorageNumber>
|
||||||
<Tariff>2</Tariff>
|
<Tariff>2</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>0</Value>
|
<Value>0</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
@ -194,7 +194,7 @@
|
|||||||
<StorageNumber>2</StorageNumber>
|
<StorageNumber>2</StorageNumber>
|
||||||
<Tariff>3</Tariff>
|
<Tariff>3</Tariff>
|
||||||
<Device>0</Device>
|
<Device>0</Device>
|
||||||
<Unit>Unrecognized VIF extension: 0x00</Unit>
|
<Unit>Energy (0.1 MWh)</Unit>
|
||||||
<Value>0</Value>
|
<Value>0</Value>
|
||||||
</DataRecord>
|
</DataRecord>
|
||||||
|
|
||||||
|
63
test/test-frames/example_data_01.norm.xml
Normal file
63
test/test-frames/example_data_01.norm.xml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>3575845</Id>
|
||||||
|
<Manufacturer>AMT</Manufacturer>
|
||||||
|
<Version>52</Version>
|
||||||
|
<ProductName>Aquametro AMTRON</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>158</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>B627</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>1389817000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>504647.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>41.737434</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>35.463650</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -5,7 +5,7 @@
|
|||||||
<Id>3575845</Id>
|
<Id>3575845</Id>
|
||||||
<Manufacturer>AMT</Manufacturer>
|
<Manufacturer>AMT</Manufacturer>
|
||||||
<Version>52</Version>
|
<Version>52</Version>
|
||||||
<ProductName></ProductName>
|
<ProductName>Aquametro AMTRON</ProductName>
|
||||||
<Medium>Heat: Outlet</Medium>
|
<Medium>Heat: Outlet</Medium>
|
||||||
<AccessNumber>158</AccessNumber>
|
<AccessNumber>158</AccessNumber>
|
||||||
<Status>00</Status>
|
<Status>00</Status>
|
||||||
|
63
test/test-frames/example_data_02.norm.xml
Normal file
63
test/test-frames/example_data_02.norm.xml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>3575845</Id>
|
||||||
|
<Manufacturer>AMT</Manufacturer>
|
||||||
|
<Version>52</Version>
|
||||||
|
<ProductName>Aquametro AMTRON</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>161</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>B627</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>1389817000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>504647.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>41.211052</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>35.385593</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
@ -5,7 +5,7 @@
|
|||||||
<Id>3575845</Id>
|
<Id>3575845</Id>
|
||||||
<Manufacturer>AMT</Manufacturer>
|
<Manufacturer>AMT</Manufacturer>
|
||||||
<Version>52</Version>
|
<Version>52</Version>
|
||||||
<ProductName></ProductName>
|
<ProductName>Aquametro AMTRON</ProductName>
|
||||||
<Medium>Heat: Outlet</Medium>
|
<Medium>Heat: Outlet</Medium>
|
||||||
<AccessNumber>161</AccessNumber>
|
<AccessNumber>161</AccessNumber>
|
||||||
<Status>00</Status>
|
<Status>00</Status>
|
||||||
|
23
test/test-frames/filler.norm.xml
Normal file
23
test/test-frames/filler.norm.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>17677731</Id>
|
||||||
|
<Manufacturer>KAM</Manufacturer>
|
||||||
|
<Version>1</Version>
|
||||||
|
<ProductName>Kamstrup 382 (6850-005)</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>0</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>5000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
23
test/test-frames/frame1.norm.xml
Normal file
23
test/test-frames/frame1.norm.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>10060958</Id>
|
||||||
|
<Manufacturer>LSE</Manufacturer>
|
||||||
|
<Version>22</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Bus/System</Medium>
|
||||||
|
<AccessNumber>123</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>5F 42 01 11 FF FF FF FF 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
43
test/test-frames/frame2.norm.xml
Normal file
43
test/test-frames/frame2.norm.xml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>12345678</Id>
|
||||||
|
<Manufacturer>PAD</Manufacturer>
|
||||||
|
<Version>1</Version>
|
||||||
|
<ProductName></ProductName>
|
||||||
|
<Medium>Water</Medium>
|
||||||
|
<AccessNumber>85</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>12.565000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>5</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.113000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>218370.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
215
test/test-frames/gmc_emmod206.norm.xml
Normal file
215
test/test-frames/gmc_emmod206.norm.xml
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>12345678</Id>
|
||||||
|
<Manufacturer>GMC</Manufacturer>
|
||||||
|
<Version>230</Version>
|
||||||
|
<ProductName>GMC-I A230 EMMOD 206</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>2</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>86.400000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>95.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>3</Device>
|
||||||
|
<Unit>V</Unit>
|
||||||
|
<Quantity>Voltage</Quantity>
|
||||||
|
<Value>105.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>0.957000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>1.055000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>3</Device>
|
||||||
|
<Unit>A</Unit>
|
||||||
|
<Quantity>Current</Quantity>
|
||||||
|
<Value>1.150000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>224.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>-202.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>103880.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>0</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>150000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>201590.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>250000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>300910.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>350000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>3</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>402370.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>3</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>450000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="16">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>2</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>224.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="17">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>4</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="18">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>6</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="19">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>8</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>202.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
87
test/test-frames/itron_bm_+m.norm.xml
Normal file
87
test/test-frames/itron_bm_+m.norm.xml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11490378</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>14</Version>
|
||||||
|
<ProductName>Itron BM +m</ProductName>
|
||||||
|
<Medium>Cold water</Medium>
|
||||||
|
<AccessNumber>41</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11490378.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>54.321000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date)</Quantity>
|
||||||
|
<Value>2000-00-00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-24T13:29:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>2.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>6.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 00 8F 13</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
147
test/test-frames/itron_cf_51.norm.xml
Normal file
147
test/test-frames/itron_cf_51.norm.xml
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11155185</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>10</Version>
|
||||||
|
<ProductName>Itron CF 51</ProductName>
|
||||||
|
<Medium>Heat / Cooling load meter</Medium>
|
||||||
|
<AccessNumber>27</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11155185.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>99999900.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>999.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>999.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>9999.990000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-24T13:24:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>8985600.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>11.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>26.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>321.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>1.230000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="15">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>03 20</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
119
test/test-frames/itron_cf_55.norm.xml
Normal file
119
test/test-frames/itron_cf_55.norm.xml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11127667</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>11</Version>
|
||||||
|
<ProductName>Itron CF 55</ProductName>
|
||||||
|
<Medium>Heat: Inlet</Medium>
|
||||||
|
<AccessNumber>11</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11127667.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>99999900.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>999.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>999.900000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>9999.990000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-24T11:47:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>21772800.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>10.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>21.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>03 20</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
119
test/test-frames/itron_cf_echo_2.norm.xml
Normal file
119
test/test-frames/itron_cf_echo_2.norm.xml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11100091</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>9</Version>
|
||||||
|
<ProductName>Itron CF Echo 2</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>81</AccessNumber>
|
||||||
|
<Status>10</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11100091.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>99999900.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>999.999000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>20.500000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>20.600000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.090000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-24T13:29:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>33264000.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>19.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>45.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>20 00</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
79
test/test-frames/itron_cyble_m-bus_v1.4_cold_water.norm.xml
Normal file
79
test/test-frames/itron_cyble_m-bus_v1.4_cold_water.norm.xml
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>10020380</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>20</Version>
|
||||||
|
<ProductName>Itron CYBLE M-Bus 1.4</ProductName>
|
||||||
|
<Medium>Cold water</Medium>
|
||||||
|
<AccessNumber>161</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>10020380.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>cust. ID</Quantity>
|
||||||
|
<Value> </Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2011-10-25T15:39:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>bat. time</Quantity>
|
||||||
|
<Value>4050.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>453.500000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>453.500000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 04 1F</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
79
test/test-frames/itron_cyble_m-bus_v1.4_gas.norm.xml
Normal file
79
test/test-frames/itron_cyble_m-bus_v1.4_gas.norm.xml
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>10020387</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>20</Version>
|
||||||
|
<ProductName>Itron CYBLE M-Bus 1.4</ProductName>
|
||||||
|
<Medium>Gas</Medium>
|
||||||
|
<AccessNumber>154</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>10020387.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>cust. ID</Quantity>
|
||||||
|
<Value> </Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2011-10-25T15:43:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>bat. time</Quantity>
|
||||||
|
<Value>4050.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.260000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.250000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 02 1F</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
79
test/test-frames/itron_cyble_m-bus_v1.4_water.norm.xml
Normal file
79
test/test-frames/itron_cyble_m-bus_v1.4_water.norm.xml
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>12000071</Id>
|
||||||
|
<Manufacturer>ACW</Manufacturer>
|
||||||
|
<Version>20</Version>
|
||||||
|
<ProductName>Itron CYBLE M-Bus 1.4</ProductName>
|
||||||
|
<Medium>Water</Medium>
|
||||||
|
<AccessNumber>10</AccessNumber>
|
||||||
|
<Status>30</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>12000071.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>cust. ID</Quantity>
|
||||||
|
<Value>TEST CYBLE</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-24T13:43:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>bat. time</Quantity>
|
||||||
|
<Value>4338.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>123.490000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.200000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>1</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>10 01 1F</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
139
test/test-frames/itron_integral_mk_maxx.norm.xml
Normal file
139
test/test-frames/itron_integral_mk_maxx.norm.xml
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>11817314</Id>
|
||||||
|
<Manufacturer>SLB</Manufacturer>
|
||||||
|
<Version>6</Version>
|
||||||
|
<ProductName>CF Compact / Integral MK MaXX</ProductName>
|
||||||
|
<Medium>Heat: Outlet</Medium>
|
||||||
|
<AccessNumber>93</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Fabrication No</Quantity>
|
||||||
|
<Value>11817314.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>0.020000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>m^3/h</Unit>
|
||||||
|
<Quantity>Volume flow</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Flow temperature</Quantity>
|
||||||
|
<Value>21.200000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>°C</Unit>
|
||||||
|
<Quantity>Return temperature</Quantity>
|
||||||
|
<Value>21.100000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>K</Unit>
|
||||||
|
<Quantity>Temperature difference</Quantity>
|
||||||
|
<Value>0.070000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="7">
|
||||||
|
<Function>Value during error state</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="8">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>Operating time</Quantity>
|
||||||
|
<Value>34300800.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="9">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>-</Unit>
|
||||||
|
<Quantity>Time point (date & time)</Quantity>
|
||||||
|
<Value>2012-01-24T14:17:00Z</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="10">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>1.230000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="11">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>0</Tariff>
|
||||||
|
<Device>2</Device>
|
||||||
|
<Unit>m^3</Unit>
|
||||||
|
<Quantity>Volume</Quantity>
|
||||||
|
<Value>3.210000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="12">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Firmware version</Quantity>
|
||||||
|
<Value>3.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="13">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity>Software version</Quantity>
|
||||||
|
<Value>18.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="14">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 16</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
75
test/test-frames/kamstrup_382_005.norm.xml
Normal file
75
test/test-frames/kamstrup_382_005.norm.xml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<MBusData>
|
||||||
|
|
||||||
|
<SlaveInformation>
|
||||||
|
<Id>14839120</Id>
|
||||||
|
<Manufacturer>KAM</Manufacturer>
|
||||||
|
<Version>1</Version>
|
||||||
|
<ProductName>Kamstrup 382 (6850-005)</ProductName>
|
||||||
|
<Medium>Electricity</Medium>
|
||||||
|
<AccessNumber>4</AccessNumber>
|
||||||
|
<Status>00</Status>
|
||||||
|
<Signature>0000</Signature>
|
||||||
|
</SlaveInformation>
|
||||||
|
|
||||||
|
<DataRecord id="0">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="1">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>s</Unit>
|
||||||
|
<Quantity>On time</Quantity>
|
||||||
|
<Value>32400.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="2">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="3">
|
||||||
|
<Function>Maximum value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit>W</Unit>
|
||||||
|
<Quantity>Power</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="4">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>1</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="5">
|
||||||
|
<Function>Instantaneous value</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Tariff>2</Tariff>
|
||||||
|
<Device>1</Device>
|
||||||
|
<Unit>Wh</Unit>
|
||||||
|
<Quantity>Energy</Quantity>
|
||||||
|
<Value>0.000000</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
<DataRecord id="6">
|
||||||
|
<Function>Manufacturer specific</Function>
|
||||||
|
<StorageNumber>0</StorageNumber>
|
||||||
|
<Unit></Unit>
|
||||||
|
<Quantity></Quantity>
|
||||||
|
<Value>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10</Value>
|
||||||
|
</DataRecord>
|
||||||
|
|
||||||
|
</MBusData>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user