2 个版本
0.1.42 | 2022年8月7日 |
---|---|
0.1.39 | 2022年8月6日 |
#6 in #swagger-ui
300KB
6.5K SLoC
divoom-gateway
一个提供Swagger UI的REST API网关,它封装了用于控制Divoom设备(如pixoo)的Divoom HTTP API,根据Divoom的API/文档组织方式,未来可能支持更多HTTP设备。
发布 | 状态 |
---|---|
Crates.io | |
安装 | |
Nuget 包 |
|
> divoom-gateway 192.168.0.123
Starting divoom gateway on: http://127.0.0.1:20821 for device 192.168.0.123.
Please open your browser with URL: http://127.0.0.1:20821 and happy divooming!
# Now, we can open http://127.0.0.1:20821 in browser! Happy Divooming!
如何安装
通过Cargo
cargo install divoom-gateway
通过winget
winget install DivoomGateway
通过scoop
由于我们没有达到Scoop主存储桶的准则,因此目前我们需要使用自己的存储桶。
# Add our scoop bucket for the first time.
scoop bucket add r12f https://github.com/r12f/scoop-bucket
# Install
scoop install divoom-gateway
如何使用
要启动网关,我们需要以下3个步骤
1. 找到设备的IP地址。
有多种方法可以发现地址
-
在divoom应用中获取地址。
-
或者,尝试我们的divoom-cli命令行工具并发现所有设备。
> .\divoom-cli.exe discover - device-name: Pixoo device-id: 300000001 device-private-ip: 192.168.0.123
2. 使用分配的设备地址启动网关
> divoom-gateway 192.168.0.123
Starting divoom gateway on: http://127.0.0.1:20821 for device 192.168.0.123.
Please open your browser with URL: http://127.0.0.1:20821 and happy divooming!
如果我们启动网关时看到以下错误,这意味着默认端口已被占用,我们需要使用另一个端口
Error: Os { code: 10048, kind: AddrInUse, message: "Only one usage of each socket address (protocol/network address/port) is normally permitted." }
我们可以在需要时使用以下选项指定IP和端口
# divoom-gateway <divoom-device-ip> -s <our-machine-ip> -p <port>
# In this case our machine IP is 192.168.0.234, and we are opening 20822 to connect to device 192.168.0.123:
> divoom-gateway 192.168.0.123 -s 192.168.0.234 -p 20822
Starting divoom gateway on: http://192.168.0.151:20822 for device 192.168.0.164.
Please open your browser with URL: http://192.168.0.151:20822 and happy divooming!
3. 使用URL打开浏览器,就这样!
支持的命令和更多
目前,我们支持Divoom公开API文档中记录的所有命令。有关详细信息,请参阅此处。
播放GIF动画
Pixoo设备提供了一个API,通过提供文件位置来播放GIF文件,我们将其封装并提供了一个在/api/animation/play-gif
上的API。
然而,此API对图像大小非常有限制,并且不是很稳定。它可能会导致设备崩溃。因此,我们添加了另一个名为/api/animation/render-gif
的API,允许我们上传GIF文件并生成要播放的动画,这要稳定得多。
播放文本动画
一旦我们使用/api/animation/render-gif
命令播放任何动画,我们就可以开始使用文本动画API,否则这些API将被设备无操作'ed。
动画模板
为了使构建动画更简单,Divoom Gateway 支持使用 YAML 和 SVG 创建模板,然后通过传递参数生成动画。
有关更多信息,请参阅此处:https://github.com/r12f/divoom/wiki/Animation-template。
设备日程表
为了更好地自动控制设备,Divoom Gateway 支持基于 cron 表达式的日程配置来创建任务。
有关更多信息,请参阅此处:https://github.com/r12f/divoom/wiki/Device-schedule。
更多帮助
我们可以在以下命令帮助中找到更多信息。
> divoom-gateway --help
divoom-gateway 0.0.1
r12f <[email protected]>
A REST API gateway with swagger UI provided that wraps divoom HTTP APIs for controlling divoom
devices, like pixoo.
USAGE:
divoom-gateway.exe [OPTIONS] <DEVICE_ADDRESS>
ARGS:
<DEVICE_ADDRESS> Device address.
OPTIONS:
-h, --help Print help information
-p, --port <SERVER_PORT> Server port. [default: 20821]
-s, --server <SERVER_ADDRESS> Server address. [default: 127.0.0.1]
-V, --version Print version information
调试
为了调试并查看我们发送的日志和原始请求,我们可以使用 RUST_LOG
环境变量将日志级别更改为 debug
以启用日志记录
在 Windows 的 PowerShell 中
$env:RUST_LOG="debug"; divoom-cli 192.168.0.123 channel get
在 Windows 的 cmd 中
set RUST_LOG=debug && divoom-cli 192.168.0.164 channel get
以及 Linux 上
RUST_LOG=debug divoom-cli 192.168.0.123 channel get
然后我们将看到以下输出日志
Starting divoom gateway on: http://127.0.0.1:20821 for device 192.168.0.123.
Please open your browser with URL: http://127.0.0.1:20821 and happy divooming!
[2022-08-01T02:59:40Z INFO poem::server] listening addr=socket://127.0.0.1:20821
[2022-08-01T02:59:40Z INFO poem::server] server started
[2022-08-01T02:59:42Z DEBUG hyper::proto::h1::io] parsed 17 headers
[2022-08-01T02:59:42Z DEBUG hyper::proto::h1::conn] incoming body is content-length (230 bytes)
[2022-08-01T02:59:42Z DEBUG hyper::proto::h1::conn] incoming body completed
[2022-08-01T02:59:42Z DEBUG divoom::clients::common::divoom_rest_client] Sending request: Url = "http://192.168.0.123/post", Body = "{"Command":"Draw/SendHttpText","TextId":0,"x":0,"y":0,"dir":1,"font":0,"TextWidth":0,"speed":100,"TextString":"The gray fox jumped over the lazy dog","color":"#000000","align":2}", Timeout = 2s
[2022-08-01T02:59:42Z DEBUG reqwest::connect] starting new connection: http://192.168.0.123/
[2022-08-01T02:59:42Z DEBUG hyper::client::connect::http] connecting to 192.168.0.123:80
[2022-08-01T02:59:42Z DEBUG hyper::client::connect::http] connected to 192.168.0.123:80
...
要将其恢复,我们可以使用相同的方法将 RUST_LOG
设置为 warn
级别
> $env:RUST_LOG="warn"
API && SDK
如果您对工具调用的 API 和使用的 Rust SDK 感兴趣,请参阅此处:https://github.com/r12f/divoom/blob/main/README.md。
致谢
- 感谢 @farique1 允许我将经典 8 位字体打包,这些字体是通过他的优秀项目 Chartotype 生成的,作为 Divoom Gateway 的一部分,它有助于生成文本动画。
许可证
Apache-2.0: https://www.apache.org/licenses/LICENSE-2.0
依赖项
~34–56MB
~1M SLoC