You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*For contributing see [CONTRIBUTING.md](./CONTRIBUTING.md)*
9
+
*For contributing see [CONTRIBUTING.md](./CONTRIBUTING.md), for change history see [CHANGELOG.md](./CHANGELOG.md),*
11
10
12
-
m-bus-parser is an open source parser (sometimes also refered to as decoder and/or deserializer) of **wired** m-bus portocol and is written in rust.
11
+
m-bus-parser is an open source parser (sometimes also refered to as decoder and/or deserializer) of **wired** and **wireless** m-bus portocol and is written in rust.
13
12
14
13
"M-Bus or Meter-Bus is a European standard (EN 13757-2 physical and link layer, EN 13757-3 application layer) for the remote reading of water, gas or electricity meters. M-Bus is also usable for other types of consumption meters, such as heating systems or water meters. The M-Bus interface is made for communication on two wires, making it cost-effective." - [Wikipedia](https://en.wikipedia.org/wiki/Meter-Bus)
15
14
16
15
An outdated specification is available freely on the [m-bus website](https://m-bus.com/documentation). This document is a good starting point for understanding the protocol. There have been many other implementations of the specification.
17
16
18
17
Furthermore, the Open Metering System (OMS) Group has published a specification for the m-bus protocol. This specification is available for free on the [OMS website](https://www.oms-group.org/en/) or more specificially [here](https://oms-group.org/en/open-metering-system/oms-specification).
19
18
19
+
There are many m bus parsers in the wild on github, such as a no longer maitained [ m-bus encoder and decoder by rscada](https://github.com/rscada/libmbus) written in **c**, [jMbus](https://github.com/qvest-digital/jmbus) written in **java**,[Valley.Net.Protocols.MeterBus](https://github.com/sympthom/Valley.Net.Protocols.MeterBus/) written in **C#**, [tmbus](https://dev-lab.github.io/tmbus/) written in javascript or [pyMeterBus](https://github.com/ganehag/pyMeterBus) written in python.
20
+
21
+
## Supported Features
22
+
23
+
### Control Information Types
24
+
25
+
The parser currently supports the following Control Information (CI) types:
For a complete list, refer to EN 13757-3 specification.
49
+
50
+
### Value Information Units
20
51
21
-
such as a no longer maitained [ m-bus encoder and decoder by rscada](https://github.com/rscada/libmbus) written in **c**, [jMbus](https://github.com/qvest-digital/jmbus) written in **java**,[Valley.Net.Protocols.MeterBus](https://github.com/sympthom/Valley.Net.Protocols.MeterBus/) written in **C#**, [tmbus](https://dev-lab.github.io/tmbus/) written in javascript or [pyMeterBus](https://github.com/ganehag/pyMeterBus) written in python.
52
+
Most common value information unit codes are supported. Some specialized units may return `DataInformationError::Unimplemented`:
53
+
- Reserved length values in variable length data
54
+
- Special functions data parsing
55
+
- Partial primary and extended value information unit codes
22
56
57
+
Contributions to implement additional CI types and value information units are welcome!
23
58
24
59
## Dependants and Deployments
25
60
@@ -43,7 +78,13 @@ The are some python bindings, the source is in the sub folder "python" and is pu
43
78
44
79
### Visualization of Library Function
45
80
46
-
Do not get confused about the different types of frame types. The most important one to understand at first is the `LongFrame` which is the most common frame type. The others are for example for searching for a slave or for setting the primary address of a slave. This is not of primary intrest for most users. Visualization was made with the help of the tool [excalidraw](https://excalidraw.com/).
81
+
## Wireless Link Layer
82
+
83
+

84
+
85
+
## Wired Link Layer
86
+
87
+
The most common wired frame is the `LongFrame`.
47
88
48
89

49
90
@@ -58,17 +99,8 @@ The searlized application layer above can be further broken into parsable parts.
- Follow the Rust API Guideline https://rust-lang.github.io/api-guidelines/
65
-
- minimal copy
66
102
67
-
## Development status
68
-
69
-
The library is currently under development. It is able to parse the link layer but not the application layer. The next goal is to parse the application layer. Once this is achieved the library will be released as `v0.1.0`. Further goals, such as decryption, will be set after this milestone is achieved.
70
-
71
-
## Example of current function
103
+
## Simple example, parsing wired m bus frame
72
104
73
105
Examples taken from https://m-bus.com/documentation-wired/06-application-layer:
74
106
@@ -79,19 +111,19 @@ Examples taken from https://m-bus.com/documentation-wired/06-application-layer:
79
111
Parsing the frame using the library (the data is not yet parsable with the lib):
0 commit comments