3个不稳定版本
0.2.1 | 2023年5月29日 |
---|---|
0.1.1 | 2022年7月20日 |
0.1.0 | 2020年3月2日 |
#1150 在 解析器实现
每月 25 次下载
75KB
1K SLoC
teleinfo_nom: nom中的综合性teleinfo解析器
目的
这个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