插件配置
每个插件都存储在一个文件夹中。文件结构如下:
addon_name/
Dockerfile
config.json
run.sh
插件脚本
与每个Docker容器一样,你需要一个在容器启动时运行的脚本。用户可能会运行许多插件,所以如果只是做简单的事情,建议尽量使用Bash脚本。
在开发脚本时:
/data是用于持久存储的卷。/data/options.json包含用户配置。你可以在你的shell脚本中使用jq来解析此数据。但是你可能需要在容器中作为单独的包安装jq(见下面的Dockerfile)。
CONFIG_PATH=/data/options.json
TARGET=$(jq --raw-output ".target" $CONFIG_PATH)
所以如果你的options包含
{ "target": "beer" }
那么在你的bash文件的环境中将会有一个包含beer的变量TARGET。
插件Docker文件
所有插件都基于Alpine Linux 3.6。Hass.io将根据机器架构自动替换正确的基础镜像。如果你需要在正确的时区运行,可以添加tzdata,但我们的基础镜像中已经包含了它。
FROM %%BASE_IMAGE%%
ENV LANG C.UTF-8
# 安装插件所需的内容
RUN apk add --no-cache jq
# 复制插件数据
COPY run.sh /
RUN chmod a+x /run.sh
CMD [ "/run.sh" ]
如果你不使用设备上的本地构建或我们的构建脚本,请确保Dockerfile也有一组标签,包括:
LABEL io.hass.version="VERSION" io.hass.type="addon" io.hass.arch="armhf|aarch64|i386|amd64"
可以使用以下模式使用自己的基础镜像:
#amd64:FROM...
#i386:FROM...
#armhf:FROM...
#aarch64:FROM...
或者如果你不想进行多架构构建/支持,也可以使用简单的FROM。
插件配置文件
插件的配置存储在config.json中。
{
"name": "xy",
"version": "1.2",
"slug": "folder",
"description": "长描述",
"arch": ["amd64"],
"url": "有关插件的更多信息的网站(例如支持论坛线程)",
"startup": "application",
"boot": "auto",
"ports": {
"123/tcp": 123
},
"map": ["config:rw", "ssl"],
"options": {},
"schema": {},
"image": "repo/{arch}-my-custom-addon"
}
| 键 | 必需 | 描述 |
|---|---|---|
| name | 是 | 插件名称 |
| version | 是 | 插件版本 |
| slug | 是 | 插件标识符 |
| description | 是 | 插件描述 |
| arch | 否 | 支持的架构列表:armhf,aarch64,amd64,i386。默认全部。 |
| url | 否 | 插件主页。在这里你可以解释插件和选项。 |
| startup | 是 | initialize将在Hassio设置时启动插件。system用于像数据库和基础组件等不依赖其他东西的情况。services将在Home Assistant之前启动。application在Home Assistant启动之后启动,或者once用于不作为守护进程运行的应用程序。 |
| webui | 否 | 此插件的Web界面的URL。例如http://[HOST]:[PORT:2839]/dashboard,端口需要内部端口,我们稍后将用实际端口替换它。 |
| boot | 是 | auto由系统自动启动,manual手动启动或仅manual。 |
| ports | 否 | 要从容器暴露的网络端口。格式为"container-port/type": host-port。 |
| host_network | 否 | 如果为True,插件在主机网络上运行。 |
| devices | 否 | 要映射到插件的设备列表。格式为:<path_on_host>:<path_in_container>:<cgroup_permissions>。例如/dev/ttyAMA0:/dev/ttyAMA0:rwm。 |
| hassio_api | 否 | 此插件可以访问Hass.io REST API。它设置主机别名为hassio。 |
| privileged | 否 | 访问硬件/系统的权限。可用访问权限:NET_ADMIN,SYS_ADMIN,SYS_RAWIO。 |
| map | 否 | 用于额外Hass.io文件夹的映射列表。可能的值:config,ssl,addons,backup,share。默认以ro(只读)映射,如果你在名称末尾添加:rw,可以更改此设置。 |
| environment | 否 | 运行插件的环境变量字典。 |
| audio | 否 | 标记此插件使用内部音频系统。环境变量为ALSA_INPUT和ALSA_OUTPUT以访问alsa的内部信息。 |
| options | 是 | 插件的默认选项值。 |
| schema | 是 | 插件选项值的模式。可以设置为False以禁用模式验证并使用自定义选项。 |
| image | 否 | 用于Docker Hub。 |
| timeout | 否 | 默认10(秒)。等待Docker完成或被终止的超时时间。 |
| tmpfs | 否 | 在/tmpfs挂载一个tmpfs文件系统。此选项的有效格式为:size=XXXu,uid=N,rw。大小是必需的,有效单位(u)为k,m和g,XXX必须替换为数字。uid=N(N为用户ID号)和rw是可选的。 |
选项/模式
options字典包含所有可用选项及其默认值。如果在插件启动前用户必须提供该值,则将默认值设置为null。仅支持非嵌套数组和字典。
{
"message": "自定义内容",
"logins": [
{"username": "beer", "password": "123456"},
{"username": "cheep", "password": "654321"}
],
"random": ["haha", "hihi", "huhu", "hghg"],
"link": "http://blebla.com/"
}
schema看起来像options,但描述了我们应该如何验证用户输入。例如:
{
"message": "str",
"logins": [
{"username": "str", "password": "str"}
],
"random": ["str"],
"link": "url"
}
我们支持:
str(字符串)bool(布尔值)int/int(min,)/int(,max)/int(min,max)(整数及整数范围)float/float(min,)/float(,max)/float(min,max)(浮点数及浮点数范围)email(电子邮件地址)url(网址)port(端口号)match(REGEX)(正则表达式匹配)
1万+

被折叠的 条评论
为什么被折叠?



