6个版本

0.3.5 2021年5月7日
0.3.4 2020年10月31日
0.3.2 2020年6月25日
0.2.0 2020年5月31日
0.1.3 2019年4月6日

#15 in #meter

每月21次下载

GPL-3.0-or-later

46KB
750

mbus-httpd

一个HTTP微服务,暴露(有线)M-Bus功能,允许您扫描M-Bus和查询M-Bus从设备。

您需要一个串行-M-Bus设备,以便将您的服务器连接到M-Bus。

如果您想使用Raspberry Pi并需要一个M-Bus主帽,请参阅此处。或者

  • 从ebay或aliexpress购买USB M-Bus主设备。
  • 使用广泛可用的原理图自行组装。

快速入门

运行mbus-httpd的最简单方法是使用预构建的容器,使用docker。一个支持x86_64、ARMv6 & ARMv7(覆盖所有Raspberry Pi型号)的mbus-httpd docker清单可用。

  • x86_64
  • ARMv6 & ARMv7

如果您需要docker,最简单的方法是运行

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

安装docker后(您可能需要在安装后注销并重新登录),您可以使用以下命令运行mbus-httpd(将ttyAMA0替换为您的串行设备)

docker run --name mbus \
          -d -p 8080:8080 \
          -e RUST_LOG=INFO \
          --device /dev/ttyAMA0:/dev/ttyAMA0 \
          packom/mbus-release

这将启动监听8080端口的mbus-httpd网络服务器。

如果您使用的是M-Bus主帽,请按以下方式运行容器

docker run --name mbus \
           -d -p 8080:8080 \
           -e RUST_LOG=INFO \
           --device /dev/ttyAMA0:/dev/ttyAMA0 \
           -v /proc/device-tree/hat:/proc/device-tree/hat \
           --privileged \
           packom/mbus-release

要检查是否工作正常,在另一个shell中运行

curl -v -X GET http://127.0.0.1:8080/mbus/api

或者,根据需要修改并粘贴到浏览器中

http://<your_host_name>:8080/mbus/mbus_api 

应该返回YAML API文档

使用

如果您使用的是M-Bus主帽,您可以通过运行以下命令来检查它是否正确物理安装

curl -v -X GET http://127.0.0.1:8080/mbus/hat

您应该得到如下响应

{
  "product":"M-Bus Master",
  "productId":"0x0001",
  "productVer":"0x0002",
  "uuid":"abcdef12-abcd-abcd-abcd-123456abcdef",
  "vendor":"packom.net"
}

如果您使用M-Bus主帽,则需要通过以下方式给M-Bus供电

curl -v -X POST http://127.0.0.1:8080/mbus/hat/on

要扫描连接到设备/dev/ttyAMA0的M-Bus(波特率为2400)

curl -v -X POST http://127.0.0.1:8080/mbus/scan/ttyAMA0/2400

从设备地址48(0x30)获取信息

curl -v -X POST http://127.0.0.1:8080/mbus/get/ttyAMA0/2400/48

构建

要构建,您需要安装Rust。如果您不想费心安装Rust,您可以使用支持Rust的构建容器,例如这个,它适用于x86_64、ARMv6和ARMv7(因此所有Raspberry Pi型号)。

docker run --rm -ti -v some_local_dir:/home/build/builds piersfinlayson/build

安装Rust后运行

cd ~
git clone https://github.com/packom/mbus-httpd
cd mbus-httpd
cargo build

您还需要libmbus。在Ubuntu上,您可以这样安装:

sudo apt install libtool autoconf
cd ~
git clone https://github.com/rscada/libmbus
cd libmbus
./build.sh
sudo make install

运行

要运行

cd ~/mbus-httpd
cargo run

由于mbus-httpd设计为在容器中运行,所有配置都通过环境变量完成。您几乎肯定需要

LIBMBUS_PATH=<limbus binary path e.g. ~/libmbus/bin>
LD_LIBRARY_PATH<path libmbus.so is installed to e.g. /usr/local/lib>

您可能还需要

SERVER_IP=<IP to listen on>
SERVER_PORT=<port to listen on>
RUST_LOG=<log level, e.g. INFO>

例如

cd ~/mbus-httpd
env SERVER_IP=localhost \
env SERVER_PORT=8080 \
env LIBMBUS_PATH=~/libmbus/bin \
env LD_LIBRARY_PATH=/usr/local/lib \
env RUST_LOG=INFO \
cargo run

客户端

提供了一个用Rust实现的mbus-httpd客户端示例。要构建和运行

cargo run --example hat-tester

这是为对M-Bus Master Hat进行功能性和烧录测试而设计的,并且相当直观。

要运行,对M-Bus Master Hat进行一系列完整测试

cargo run --example hat-tester -- \
          --host localhost \
          --port 8080 \
          --address 48 \
          --baudrate 2400 \
          --device ttyAMA0 \
          --reps 10 \
          --get-reps 100 \
          --hat \
          --scan \
          --check-scan \
          --product-ver 0x0002 \
          --uuid=148f8981-033b-407a-a13f-72405d08e0fe

要在其他类型的M-Bus Master上运行,连接到设备/dev/ttyUSB0,使用如下命令

cargo run --example hat-tester -- \
          --host localhost \
          --port 8080 \
          --address 48 \
          --baudrate 2400 \
          --device ttyUSB0 \
          --scan \
          --check-scan

要获取帮助并查看其他命令行选项

cargo run --example hat-tester -- --help

调试

要查看日志,请确保RUST_LOG设置为INFO或DEBUG(见上文)。如果在shell中运行,日志将输出到stdout。如果在docker中运行,您可以使用以下命令查看日志

docker logs -f mbus

许可证

mbus-httpd的许可证为GPL v3.0或更高版本

libmbus的许可证为BSD

依赖关系

~28–42MB
~705K SLoC