4 个版本
0.1.3 | 2020 年 6 月 1 日 |
---|---|
0.1.2 | 2020 年 5 月 21 日 |
0.1.1 | 2020 年 5 月 21 日 |
0.1.0 | 2020 年 5 月 2 日 |
#19 in #home
54KB
1K SLoC
New Home Core
这是 "new-home" 项目的核心应用。项目的目标是创建一个框架,用于控制您家中每一个设备。从灯光和电源插座开始,直至控制家中的温度。
这部分只是众多部分之一。它提供了 UI 和最终设备之间的 API。其他部分可以在这里找到
计划中的功能
- 收集网络中的所有应用
- 提供 HTTP API 以维护所有设备
- 在发生事情时执行例程
- 响应由注册的应用程序发送的事件
安装和设置
安装
编译需要使用 nightly Rust。
要安装应用程序,您必须在项目文件夹中以 root 用户运行 (sudo) make install
命令。这将安装所有必要的文件。
应用程序的配置和资源可以在 /etc/new-home-core
目录中找到。
设置
运行 make install 命令后,您可以通过 systemctl 使用 systemctl start new-home-core
命令启动核心。现在应用程序应该可以通过 RASPBERRY_PI_IP:5354 访问。您可以在浏览器中尝试。
下一步是设置 new-home-ui。
卸载
要卸载此应用程序,您可以只需运行 (sudo) make uninstall
。 这将永久删除应用程序及其所有配置。
文档(scratch v0.1)
命名
以下表格是用于描述此 new-home 项目上下文中事物用语的列表
术语 | 含义 |
---|---|
应用程序 | 该应用描述了运行在服务器上(例如树莓派)的新住宅应用,它处理最终的方法调用。 |
房间 | 房间用作包含多个设备(在现实中基本上是家里的一个房间)的组。 |
设备 | 设备是一个设备,例如一盏灯。它是应用程序控制的设备。一个应用程序上可能有连接到不同GPIO引脚的两个灯。每个这样的灯都是一个设备。 |
通道 | 通道以简单的URL形式显示,该URL描述了设备对于应用程序来说是可访问的。(例如,灯1可能连接到GPIO引脚18,这可能导致以下URL:gpio://18 ) |
视图 | 视图用于前端。它指的是用户可以进行操作的部分。例如,房间或应用概览。 |
所需方法
以下列出的方法需要在新的住宅应用中实现,才能与核心或其他新的住宅组件按预期工作。
方法 | 用途 | 使用 |
---|---|---|
get_script | 核心 | 此方法用于将JavaScript文件内容转发到前端。它需要一个“script_name”作为参数,并且必须以“script”消息响应,其内容将以“text/javascript”的内容类型返回。 |
config_root | 前端 | 此方法用于在前端显示配置视图。它必须以“action message”响应(更多关于操作消息的信息可以在下一节中找到)。 |
device_action | 前端 | 此方法用于在用户在“房间 > 设备”部分点击设备时在前端显示视图。此方法同样需要返回一个操作消息。 |
操作消息
操作消息用于前端以执行特定操作,这些操作可以以简单的JSON格式定义。例如,它可以改变前端当前视图或打开模态框。
操作类型
类型的定义可以在前端script/functions/deviceActions/*.js
文件夹中找到。
操作 | 描述 |
---|---|
error, message, markdown, success, debug, info | 这些操作用于在前端显示简单的文本消息,作为对按钮点击等事件的反应。 |
scripts | 在脚本操作中应定义一个数组。它包含执行以下操作所需的脚本路径(例如,包含用于视图或模态框的定制组件)。 |
component | 组件用于设置一个将替换当前视图的组件。它包含即将出现的HTML元素的标签名,可能是一个自定义HTML元素。它通常与“scripts”操作一起使用。 |
modal | 此操作显示模态框。它包含有关模态框外观的信息,例如title (提交按钮的文本)或close 按钮。尽管这三个信息是可选的,但“component”信息是必需的。它包含应作为模态内容加载的HTML元素的标签名。 |
结构
操作消息以JSON格式构建。它们可以写成单个对象,也可以在数组中的多个对象中。
{
"message": {
"error": "Example error",
"success": "You successfully did something"
}
}
等于
{
"message": [
{
"error": "Example error"
},
{
"success": "You successfully did something"
}
]
}
尽管这两种结构以相同的方式处理,但建议使用数组来分组操作。例如,打开一个视图可能包含 scripts
和 component
在一个单独的对象中,因为它们在逻辑上是一个组,而一个 info
消息除了改变视图外,在前端还会引起其他不同的变化。
依赖关系
~17-29MB
~622K SLoC