#devices #home #applications #name #light #framework #system

nightly bin+lib new-home-core

New Home Core 正如其名,是整个 New Home 生态系统的基础。它管理您家中所有 New Home 应用。

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

MIT 许可证

54KB
1K SLoC

Pipeline Status creates.io

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"
    }
  ]
}

尽管这两种结构以相同的方式处理,但建议使用数组来分组操作。例如,打开一个视图可能包含 scriptscomponent 在一个单独的对象中,因为它们在逻辑上是一个组,而一个 info 消息除了改变视图外,在前端还会引起其他不同的变化。

依赖关系

~17-29MB
~622K SLoC