#devices #swagger-ui #api-gateway #pixoo #controlling #url #divoom

app divoom-gateway

提供Swagger UI的REST API网关,用于控制Divoom设备

2 个版本

0.1.42 2022年8月7日
0.1.39 2022年8月6日

#6 in #swagger-ui

Apache-2.0

300KB
6.5K SLoC

divoom-gateway

Divoom

一个提供Swagger UI的REST API网关,它封装了用于控制Divoom设备(如pixoo)的Divoom HTTP API,根据Divoom的API/文档组织方式,未来可能支持更多HTTP设备。

License: Apache 2.0 Build Status

发布 状态
Crates.io Crates.io
安装 winget divoom-gateway
Nuget
Nuget Nuget Nuget
Nuget Nuget Nuget Nuget
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地址。

有多种方法可以发现地址

  1. 在divoom应用中获取地址。

    image

  2. 或者,尝试我们的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打开浏览器,就这样!

image

支持的命令和更多

目前,我们支持Divoom公开API文档中记录的所有命令。有关详细信息,请参阅此处

播放GIF动画

Pixoo设备提供了一个API,通过提供文件位置来播放GIF文件,我们将其封装并提供了一个在/api/animation/play-gif上的API。

image

然而,此API对图像大小非常有限制,并且不是很稳定。它可能会导致设备崩溃。因此,我们添加了另一个名为/api/animation/render-gif的API,允许我们上传GIF文件并生成要播放的动画,这要稳定得多。

image

播放文本动画

一旦我们使用/api/animation/render-gif命令播放任何动画,我们就可以开始使用文本动画API,否则这些API将被设备无操作'ed。

image

动画模板

为了使构建动画更简单,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