pymbusparser 0.4.2__tar.gz → 0.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/CHANGELOG.md +14 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/Cargo.lock +4 -4
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/Cargo.toml +1 -1
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/PKG-INFO +1 -1
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/README.md +4 -1
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/docs/index.html +9 -9
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/docs/m_bus_parser_wasm_pack.js +297 -299
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/docs/m_bus_parser_wasm_pack_bg.wasm +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/Cargo.toml +2 -2
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/tests/test_bindings.py +1 -1
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/src/mbus_data.rs +2 -2
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/src/output.rs +82 -172
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/.github/dependabot.yml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/.github/workflows/python.yml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/.github/workflows/rust.yml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/.gitignore +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/.vscode/launch.json +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/.vscode/settings.json +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/CONTRIBUTING.md +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/LICENSE +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/README_python.md +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/benches/bench.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/.gitignore +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/Cargo.toml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/README.md +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/examples/parse_data_records.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/src/data_information.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/src/data_record.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/src/extended_link_layer.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/src/lib.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/src/value_information.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-application-layer/src/variable_user_data.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-core/Cargo.toml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-core/src/decryption.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/m-bus-core/src/lib.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/wired-mbus-link-layer/Cargo.toml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/wired-mbus-link-layer/src/lib.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/wireless-mbus-link-layer/Cargo.toml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/crates/wireless-mbus-link-layer/src/lib.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/docs/m_bus_parser_wasm_pack_bg.js +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/docs/meter.png +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/pyproject.toml +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/.gitignore +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/README_python.md +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/py.typed +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/pymbusparser.pyi +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/python/src/lib.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/src/annotate.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/src/lib.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/src/manufacturers.rs +0 -0
- {pymbusparser-0.4.2 → pymbusparser-0.4.3}/src/rscada_xml.rs +0 -0
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.3] - 2026-08-11
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Advanced the canonical output schema to version 3. Record values now contain
|
|
15
|
+
one parsed `value` instead of repeating display, numeric, precision, scaling,
|
|
16
|
+
component, and raw-byte representations. Record bytes live only in
|
|
17
|
+
`header_hex` and `data_hex`.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Restored frame, application-header, DIF/VIF, and payload colors in the web
|
|
22
|
+
hex view after annotation identifiers moved to `snake_case`.
|
|
23
|
+
|
|
10
24
|
## [0.4.2] - 2026-08-10
|
|
11
25
|
|
|
12
26
|
### Changed
|
|
@@ -934,7 +934,7 @@ dependencies = [
|
|
|
934
934
|
|
|
935
935
|
[[package]]
|
|
936
936
|
name = "m-bus-parser"
|
|
937
|
-
version = "0.4.
|
|
937
|
+
version = "0.4.3"
|
|
938
938
|
dependencies = [
|
|
939
939
|
"aes",
|
|
940
940
|
"aes-gcm",
|
|
@@ -963,7 +963,7 @@ dependencies = [
|
|
|
963
963
|
|
|
964
964
|
[[package]]
|
|
965
965
|
name = "m-bus-parser-cli"
|
|
966
|
-
version = "0.4.
|
|
966
|
+
version = "0.4.3"
|
|
967
967
|
dependencies = [
|
|
968
968
|
"clap",
|
|
969
969
|
"hex",
|
|
@@ -973,7 +973,7 @@ dependencies = [
|
|
|
973
973
|
|
|
974
974
|
[[package]]
|
|
975
975
|
name = "m-bus-parser-wasm-pack"
|
|
976
|
-
version = "0.4.
|
|
976
|
+
version = "0.4.3"
|
|
977
977
|
dependencies = [
|
|
978
978
|
"console_error_panic_hook",
|
|
979
979
|
"js-sys",
|
|
@@ -1161,7 +1161,7 @@ dependencies = [
|
|
|
1161
1161
|
|
|
1162
1162
|
[[package]]
|
|
1163
1163
|
name = "pymbusparser"
|
|
1164
|
-
version = "0.4.
|
|
1164
|
+
version = "0.4.3"
|
|
1165
1165
|
dependencies = [
|
|
1166
1166
|
"hex",
|
|
1167
1167
|
"m-bus-parser",
|
|
@@ -236,8 +236,11 @@ share one vocabulary:
|
|
|
236
236
|
when one is available, such as `W`, `Cel`, or `m3.h-1`.
|
|
237
237
|
- Complete temporal values use ISO 8601 notation. The parser does not invent a
|
|
238
238
|
timezone when a meter does not transmit one.
|
|
239
|
+
- Each record value contains a `kind` and at most one parsed `value`. Exact
|
|
240
|
+
decimals, text, and complete temporal values use strings; finite floats use
|
|
241
|
+
JSON numbers; partial temporal values use a compact component object.
|
|
239
242
|
- Raw binary values use uppercase hexadecimal and fields containing them end
|
|
240
|
-
in `_hex`.
|
|
243
|
+
in `_hex`. Record bytes live only in `header_hex` and `data_hex`.
|
|
241
244
|
|
|
242
245
|
There is no common JSON schema shared by M-Bus parsers. These rules retain the
|
|
243
246
|
protocol vocabulary used by [M-Bus](https://m-bus.com/documentation-wired/06-application-layer)
|
|
@@ -859,7 +859,7 @@
|
|
|
859
859
|
<div id="output" aria-live="polite"></div>
|
|
860
860
|
</div>
|
|
861
861
|
<script type="module">
|
|
862
|
-
import init, { m_bus_highlight, m_bus_render, version } from "./m_bus_parser_wasm_pack.js?v=0.4.
|
|
862
|
+
import init, { m_bus_highlight, m_bus_render, version } from "./m_bus_parser_wasm_pack.js?v=0.4.3";
|
|
863
863
|
|
|
864
864
|
let currentFormat = "json";
|
|
865
865
|
let lastTableWidth = null;
|
|
@@ -945,7 +945,7 @@
|
|
|
945
945
|
}
|
|
946
946
|
});
|
|
947
947
|
|
|
948
|
-
await init(new URL("./m_bus_parser_wasm_pack_bg.wasm?v=0.4.
|
|
948
|
+
await init(new URL("./m_bus_parser_wasm_pack_bg.wasm?v=0.4.3", import.meta.url));
|
|
949
949
|
document.getElementById('parser-version').textContent = 'v' + version();
|
|
950
950
|
|
|
951
951
|
// Load data and format from URL params and auto-parse if present
|
|
@@ -1176,14 +1176,14 @@
|
|
|
1176
1176
|
|
|
1177
1177
|
// Layer CSS class
|
|
1178
1178
|
function layerClass(layer) {
|
|
1179
|
-
if (layer === '
|
|
1180
|
-
if (layer === '
|
|
1179
|
+
if (layer === 'frame') return 'hex-layer-frame';
|
|
1180
|
+
if (layer === 'app_header') return 'hex-layer-appheader';
|
|
1181
1181
|
return 'hex-layer-record';
|
|
1182
1182
|
}
|
|
1183
1183
|
function segmentKindClass(kind) {
|
|
1184
|
-
if (kind === '
|
|
1185
|
-
if (kind === '
|
|
1186
|
-
if (kind === '
|
|
1184
|
+
if (kind === 'dif' || kind === 'dife') return 'hex-kind-dif';
|
|
1185
|
+
if (kind === 'vif' || kind === 'vife' || kind === 'plaintext_vif') return 'hex-kind-vif';
|
|
1186
|
+
if (kind === 'data_payload') return 'hex-kind-data';
|
|
1187
1187
|
return '';
|
|
1188
1188
|
}
|
|
1189
1189
|
|
|
@@ -1375,14 +1375,14 @@
|
|
|
1375
1375
|
currentGroup = null;
|
|
1376
1376
|
const layerLabel = document.createElement('div');
|
|
1377
1377
|
layerLabel.className = 'hex-tree-layer';
|
|
1378
|
-
const layerNames = { '
|
|
1378
|
+
const layerNames = { 'frame': 'Frame', 'app_header': 'Application Header', 'record_field': 'Data Records' };
|
|
1379
1379
|
layerLabel.textContent = layerNames[seg.layer] || seg.layer;
|
|
1380
1380
|
rightPanel.appendChild(layerLabel);
|
|
1381
1381
|
groupBody = null;
|
|
1382
1382
|
}
|
|
1383
1383
|
|
|
1384
1384
|
// Record grouping
|
|
1385
|
-
if (seg.layer === '
|
|
1385
|
+
if (seg.layer === 'record_field' && seg.group !== null && seg.group !== currentGroup) {
|
|
1386
1386
|
currentGroup = seg.group;
|
|
1387
1387
|
const groupDiv = document.createElement('div');
|
|
1388
1388
|
groupDiv.className = 'hex-tree-group';
|