2个不稳定版本
0.2.0 | 2021年5月30日 |
---|---|
0.1.0 | 2021年4月28日 |
#3 在 #door
365KB
797 行
用Raspberry Pi打开和关闭你的车库门(或类似设备)。
有时候我离开家时会忘记关车库门。有时候我不在家时需要让某人进来。这让我可以以低复杂度的方式完成这两件事。或者至少,以一种我感到舒适的复杂度方式完成。
优点
- 成本低。Raspberry Pi很普遍且价格低廉。我有两个闲着的。所需的HATs很便宜(或者你可以直接焊接一个继电器),外壳便宜,电线便宜。
- 没有生态系统。这些板通过常规Wi-Fi或以太网连接,并公开简单的HTTP接口。你可以按自己的意愿将其暴露于互联网,或者不暴露。你可以将其暴露于自动化工具(如Home Assistant),或者不暴露。
缺点
- 非即插即用。构建硬件和设置软件不难,但仍然是一种比现成设备涉及更多设置的解决方案。
- 没有完善。不会直接通过“重要他人测试™”。
快速入门
只想试一试?如果你已安装Cargo,克隆并运行
$ cargo run --no-default-features config.example.toml
然后点击链接!
按按钮以查看在真实Raspberry Pi上会发生的GPIO引脚变化。
硬件
你需要获得三个主要组件
- Raspberry Pi电脑
- 每个按钮一个24V继电器(通常来自HAT),通过GPIO控制
- 墙壁或天花板可安装外壳
示例构建#1:Pi Zero
Raspberry Pi Zero由于其价格、软件CPU/RAM要求低以及很可能被安装在天花板上,是理想之选。由于其尺寸和HAT的可用性,Pi Zero最多只能控制两个单按钮门或一个开/关按钮门。
确保你获得Zero W,因为它包含Wi-Fi芯片(或Zero WH)。
BC Robotics Relay HAT提供了两个继电器,可以控制最多两个单按钮门或一个开/关按钮门。
HAT通过40针连接器连接到Pi。你可以使用11mm或12mm的支架在另一侧将其固定。
寻找替代HATs?
Pimoroni Automation HAT mini 只提供一个继电器,适合单按钮门。
HAT 通过 40 引脚连接器连接到 Pi。您可以在另一侧使用 10mm 支撑件将其固定在原位。
UniPiCase Zero (高型) 足够高,可以容纳 HAT,但需要稍作修改才能使用。
外壳顶部有两个塑料结构部件,必须将其削薄以容纳 HAT。
需要在靠近终端的地方钻一个孔,以便容纳车库门线。
将线连接到继电器。尽管项目的名称是“常开”,但您应该使用“公共”(COM)和“常开”(NO)端子,因为触发按钮应该暂时关闭电路。
外壳没有安装孔。组件足够轻,可以使用海报安装方形或其他双面胶粘剂。我在外壳上下各嵌入两个螺丝以固定。
将线的另一端连接到与墙壁按钮相同的终端的 garage door motor unit。
示例构建 #2:Pi 3/4
全尺寸 Raspberry Pi 板完全能够胜任(如果不是过度设计)。通常,只有在您已经有一个或需要控制超过两个门的两个继电器(否则不构建自定义继电器板)时,才会首选它们。
Pimoroni Automation HAT 提供 3 个继电器,可以控制最多 3 个单按钮门或一个带开/关按钮的门和 1 个单按钮门。
HAT 通过 40 引脚连接器连接到 Pi。您可以在另一侧使用 10mm 支撑件将其固定在原位。
LoveRPI Active Cooling Media Center PC Case 不适合 HAT,但稍作修改就可以容纳它们。
如果您的 HAT 用支架和螺丝固定到 Pi 上,您必须在电路板下方将塑料支架削薄约 1mm 以容纳螺丝头。
此外,您还必须拆除风扇、风扇支架和连接支架以适应 HAT。
必须将车库门线穿过风扇缝隙,或者在终端附近为每个继电器塑形一个专用的孔。
将线连接到继电器。尽管项目的名称是“常开”,但您应该使用“公共”(COM)和“常开”(NO)端子,因为触发按钮应该暂时关闭电路。
由于外壳已经有安装孔,您必须在车库门电机单元附近的天花板或墙上拧入两个螺丝,并设置 Pi。
将线的另一端连接到与墙壁按钮相同的终端的 garage door motor unit。
安装
Docker
从 Docker Hub 和 GitHub Container Registry 可获得运行二进制文件的容器。
安装包含 config.toml
的 /config
文件夹,或者直接安装 /config/config.toml
文件作为 配置文件。容器在端口 80 上提供服务。您可以使用 -p
将其映射到所需的端口。
$ docker run -d \
-v /path/to/config.toml:/config/config.toml \
-p 8080:80 \
jakewharton/normally-closed
Docker Compose 也受支持
services:
normally-closed:
image: jakewharton/normally-closed
restart: unless-stopped
ports:
- 8080:80
volumes:
- /path/to/config.toml:/config/config.toml
二进制文件
如果您已安装Rust和Cargo,可以通过运行以下命令安装二进制文件:cargo install normally-closed
()。否则,可以在最新GitHub版本中找到预构建的二进制文件。
配置文件的路径是一个必需的参数。默认情况下,网站将在端口31415上提供服务。
$ normally-closed --help
normally-closed 0.1.0
USAGE:
normally-closed [OPTIONS] <config-file>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--http-port <port> HTTP port [default: 31415]
ARGS:
<config-file> TOML configuration file. See https://github.com/JakeWharton/NormallyClosed#configuration
其他
想要维护Linux发行版的安装?请这么做!欢迎提交有关发行版安装的PR。
配置
一个TOML文件定义了可用的中继以及哪些门映射到哪些中继。
以下是一个完整的示例
version = 0
[relays]
board = "PIM213"
[[door]]
name = "Left"
relay = 1
[[door]]
name = "Right"
relay = 2
版本
直到1.0.0版本发布,总是0。
二级主机
显示在此主机上的门的附加主机。
secondary_hosts = [
"http://example.com:1234",
]
每个主机的门每分钟更新一次。
注意:“https”目前不支持。
中继
一个命名的板
[relays]
board = "PIM213"
板 | 中继计数 |
---|---|
PIM213 | 3 |
PIM487 | 1 |
PIM221 | 1 |
RAS-109 / RAS-194 | 2 |
或对应中继的GPIO引脚列表
[relays]
pins = [11, 13, 15, 17]
门
一个单切换按钮
[[door]]
name = "Garage"
relay = 1
或多个离散按钮
[[door]]
name = "Garage"
open_relay = 1
close_relay = 2
stop_relay = 3 # OPTIONAL!
无论哪种形式,所有门都必须有名称,中继使用基于1的索引,且没有门可以与另一个门使用相同的中继。
用法
在浏览器中访问网站。点击按钮!
您的URL将取决于Pi的主机名和您选择的端口。
本地开发
二进制文件通过使用Cargo功能针对Raspberry Pi进行编译,该功能默认启用。禁用默认功能将允许您进行本地运行,并打印出GPIO引脚更改。
- 构建:
cargo build --no-default-features
- 测试:
cargo test --no-default-features
- 代码审查:
cargo clippy --no-default-features
- 格式:
cargo +nightly fmt
- 运行:
./target/debug/normally-closed args...
常见问题解答
为什么不选择OpenGarage?
- 我已经在车库里有摄像头,不需要检测。
- 我不喜欢它通过互联网暴露自己。
- 不支持具有显式开/关控制按钮的门。
- 我手头有两组Raspberry Pi 3b板子和陪产假时间。
为什么不选择Z-Wave / Zigbee?
- 我不想为两个简单的切换建立生态系统。
- 我手头有两组Raspberry Pi 3b板子和陪产假时间。
为什么不选择[某些其他产品]?
- 我可能不知道它存在。
- 我手头有两组Raspberry Pi 3b板子和陪产假时间。
为什么?
我手头有两组Raspberry Pi 3b板子和陪产假时间。
我如何访问我家庭网络之外的内容?
这是你的问题!
我个人使用WireGuard跳入我的家庭网络,并直接连接到每个Pi。
许可
Copyright 2021 Jake Wharton
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
依赖
~14–27MB
~427K SLoC