#power #sensor #teleinfo

teleinfo-nom

一个用于解析来自法国电表的teleinfo流的库

3个不稳定版本

0.2.1 2023年5月29日
0.1.1 2022年7月20日
0.1.0 2020年3月2日

#1150解析器实现

每月 25 次下载

WTFPL 许可证

75KB
1K SLoC

teleinfo_nom: nom中的综合性teleinfo解析器

[Build Status] Crates.io

目的

这个crate旨在解析来自法国电表teleinfo总线的数据。数据格式信息在法文中可在linky旧式电表中找到。这个crate只解析个人客户或小型企业合同(蓝色合同)。

如果您需要一个更小的crate,可以使用teleinfo-parser

状态

该crate允许访问所有来自旧版或标准消息的字段。它包括辅助函数,用于从消息中获取值,例如当前电价指数或返回旧版合同的匹配索引。消息模式会自动检测。

待办事项

为了获取与旧版合同相同的计费索引信息,需要更多信息,但这可能可以实现。解析二进制字段,如标准模式中的STGE字段,可以轻松完成。

用法

use std::fs::File;
extern crate teleinfo_nom;
// Could be a serial port with serialport crate
let mut stream = File::open("assets/stream_standard_raw.txt").unwrap();
let (remain, msg1) = teleinfo_nom::get_message_buf(&mut stream, "".to_string()).unwrap();
let current_indices = msg1.get_billing_indices();
let current_values = msg1.get_values(current_indices);
for (index,value) in current_values.into_iter() {
  match value {
    Some(val) => println!("store {}: {} in database", index, val),
    None => (),
  }
}
let (remain, msg2) = teleinfo_nom::get_message(&mut stream, remain).unwrap();

依赖关系

~2MB
~37K SLoC