1个不稳定版本
0.4.0 | 2023年3月1日 |
---|
#835 in 嵌入式开发
170KB
3K SLoC
OpenSensor - 实现新传感器的特性和泛型
用于实现与OpenSensor基础设施交互的新传感器的泛型。
要求
- rust: 最小支持的Rust版本 1.65
- lld链接器: 用于更快的Rust构建。
- 有关平台特定的安装说明,请参阅.cargo/config.toml,以及使用lld的原因请参阅Rust性能书籍。
- docker: 容器引擎
- docker compose: 多容器编排。注意:
docker-compose
现已弃用,compose功能已集成到docker compose
命令中。要与现有的docker安装一起安装,请运行sudo apt-get install docker-compose-plugin
。参考。
对于基于Debian的Linux发行版,您可以使用以下命令安装opensensor-rs
的依赖项(Docker除外,需要特殊仓库配置,如上所述)
apt-getinstall clang build-essential lld clang zstd libzstd-dev make cmake pkg-config libssl-dev
opensensor-rs
已在Ubuntu 22.04 LTS上测试,但欢迎提交修复Windows或MacOS问题的pull请求。
快速开始
- 克隆仓库:
git clone https://github.com/opensensordotdev/opensensor-rs.git
- 确保已安装所有要求,特别是lld链接器!否则
opensensor-rs
无法构建!
./bootstrap_cluster.sh
:启动测试Redpanda,MinIO和监控堆栈。cargo test
:验证所有cargo测试通过
提供的泛型
Measurement
:表示传感器产生的离散数据单元的物理数据结构。每个Sensor
可以产生多种类型的Measurements
。Transducer
:与传感器硬件的接口,产生一系列Measurements
。传感器
:多个产生相同类型测量值
的转换器
之间的抽象,将常见的验证逻辑组合在一起。从转换器
发送测量值
的mpsc
通道中消耗,验证它们,并输出到Redpanda。
添加新的测量值
测量值
在概念上使用Google flatbuffers进行序列化。有关测量值
、转换器
和传感器
的示例实现,请参阅opensensor存储库中的sensor-simple
crate。
Arrow + Parquet存档
为了尽可能简化新传感器的实现,opensensor-rs
试图通过Rust的Arrow绑定自动将测量值
实现者的存档输出到Parquet。将任意Rust结构存档到arrow和parquet的实验在archiver
目录和arrow.rs
中进行了文档记录。理想情况下,此功能可以通过特性和实现来派生,以便任意测量值可以序列化和反序列化到/从parquet。
在arrow2上提交了此问题,尽管他们提交的PR修复了Rust代码(test_arrow.rs
中的测试现在通过),但任何嵌套数组或结构的结果parquet仍然不能在pyarrow中进行反序列化。
test_arrow.rs
中的测试用例基于以下示例
依赖关系
~72MB
~1.5M SLoC