『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 28213|回复: 21

[基础教程] 【HASS初级教程】2-初探工作原理并编写配置文件

  [复制链接]

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

发表于 2018-9-3 13:14:24 | 显示全部楼层 |阅读模式
本帖最后由 Mirukuteii 于 2018-9-5 14:45 编辑

【HASS初级教程】2-初探工作原理并编写配置文件

-----编辑中,内容感觉还是不够简明精炼,格式也有点乱,请大家多批评,慢慢修改-------

前言

上篇教程,我们初识了HASS的前端UI,并了解了HASS的配置文件基本情况。
本篇教程,我们将继续学习HASS运行的基本原理,了解核心和组件的概念,并以此来帮助我们理解配置文件的编写方式。

一、HASS的工作原理(简略版)

新手不用担心,虽然标题很抽象,但是本章实际上不会涉及太难理解的知识点。只需要熟读本章内容,确保在脑海中建立组件核心的初步概念。

1. 核心和组件在哪里

HASS是用Python语言编写的程序,这个程序由诸多包含源代码的源文件组成(源代码是程序的原始代码,Python程序的运行直接依靠对源文件的解释和编译,通常不需要生成可执行文件)。这些源文件,分门别类的归档存放在我们的计算机中的,他们按照功能不同,构成了HASS程序中的各个部件,我们把每个这样相对独立部件称为HASS的组件。其中,最原始、最重要、最必须的那个部件,我们叫做核心

代码库.png

上图是HASS的代码库,橙色部分都属于组成核心的源文件,而紫色部分虽然只有一个文件夹,里面包含了很多的组件的源文件哦。

组件库.png

核心其实比一般的组件要复杂一些,核心还可以细分为很多模块,但是本文只需要你把它们看作一个整体就好了。

2. 核心和组件如何工作

我们把核心看作是一个特殊的组件,是HASS启动后自动加载运行、并贯穿全程的程序代码段。它实现了事件总线、状态机、服务注册等基础性的服务。并且,核心是调用其它组件的基础和前提。其它组件都要通过核心来调用,除了一部分特定的系统组件外,普通组件并不会被核心自动加载和配置。
HASS的核心启动后,会自动在配置文件根目录下,寻找并读取配置文件,并根据文件内容去调用相应的组件,并配置组件。若文件的编写和配置不当,组件的调用就会出问题,轻则功能缺失,重则打断核心的运行,造成HASS当机。

HASS运行原理2.png

HASS的工作过程,就好比一个团队在领导的带领下协同工作,共同完成某项任务,举个栗子:
核心=组织者和管理者,简称领导。协同合作工作的第一步,就是建立组织、明确领导,没有一个主心骨和牵头人,工作没法顺利的开展和进行,而领导的主要才能,就是拥有一套组织管理的套路手段;
组件=某项分工的具体实施者,简称人才。即某个领域的专职人员,比如秘书、司机、保安、厨师、医生、电工、律师、程序员、平面设计师、编辑、播音员、翻译...
配置文件=工作方案。在工作方案中,我们决定任用哪些人才并为他们准备好工作的前提条件,以使得工作得以顺利进行,比如,给司机一把车钥匙,并告诉他车子停在哪里;告诉厨师需要准备几个人的菜,以及有什么忌口和要求。

工作方案确定后,领导就按照工作方案中指定的要求,来到人才库,挑选天命之人,并为他们提供工作的条件,然后这些人才就各自开展工作,并在领导的带领和管理下,收集和分析各类资源信息、接入和掌控外部设施设备、向领导汇报情况并接受领导下达的指令、向其他人才提供帮助和支持......

在人才库中,有些人才是辅助领导和支持团队的,比如秘书。这些人才就好比HASS的系统组件。有的时候,我们在工作方案中没有要求秘书到场,但是领导也不是傻的,他会自动带上秘书,并且提供他默认的工作条件。虽然有时我们没有在配置文件中调用某个组件,但是实际上,它可能已经被其它组件调用并完成了默认的初始化。这种情况是存在的。这显然并不是什么典型的情况,而且只是组件之间的问题,通常也仅存在于核心系统组件之间,所以我们暂时不需要研究这些,只需要按自己的需求,写好配置文件即可。

HASS运行原理.png

补充:

组件本身只是个程序逻辑,并不是一个可操作的对象。当组件加载成功后,核心才会根据组件的要求生成相关的实体及状态、服务、事件等等。它们才是我们在HASS中具体操作的对象。所以,理解这些对象的概念,对于我们学习HASS的配置来说,同样具有有重要意义,系列教程后面将介绍实体状态等概念。

二、加载和配置组件(基础版)

通过上面的啰嗦,我们初步了解到核心、组件,以及与配置文件的关系。
下面我们试试看,自己编写配置文件,从而让HASS的核心调用组件并实现简单的功能。
转到配置文件根目录,将原来的configuration.yaml重命名为configuration.yaml.bak,然后新建一个空白的configuration.yaml文件(需要使用原来的配置文件的时候,只需删除此配置文件,并把备份文件的.bak去掉)。没错,让我们从零开始。

1. 如何在配置文件中,调用组件:

例子:
在空白的配置文件中,输入以下内容:

frontend:

注意:

  1. YAML文件中的英文和符号必须使用半角字符。
  2. HASS中的YAML文件,编码方式必须为UTF-8。
    然后重启HASS服务(这里恕不叙述重启服务的方法了,不会的话直接重启设备或者容器吧)。现在,打开你的浏览器,输入http://HASS主机IP:8123,你就可以登录到HASS的WEB前端,是不是很简单。
    没错,只要这么1行,9个字符,你就可以获得1个支持WEB前端UI的HASS实例。这一行代码的作用,可以让核心调用前端组件,从而为HASS提供一个WEB前端UI。

写法:(顶格) 组件名:
说明:顶格书写组件名+冒号,前后都不用加任何符号。
用途:例子中调用了frontend(前端)组件,从而为我们的HASS提供了前端服务。
讲解:

  1. 核心读取配置文件中顶格书写的组件名,调用对应的组件
  2. 在HASS的组件库中,常用的组件有很多,frontend组件只是其中之一,其它还有比如homeassistant(核心)组件、http(网络)组件、group(群组)组件等。
  3. 没有在配置文件中写入的组件,不一定没有被核心调用。特别是系统组件,比如logger(日志)组件,即使没有在配置文件中调用,也会自行被核心加载并进行默认的配置。

2. 如何在配置文件中,配置组件:

例子:
下面,我们再把配置文件修改如下:

homeassistant:                # 调用核心组件
  name: Hello                   # 配置该组件的name项,值为Hello
  latitude: 30                  # 配置该组件的latitude项,值为30
  longitude: 120                # 配置该组件的logitude项,值为120
  elevation: 0                  # 配置该组件的elevation项,值为0
  time_zone: Asia/Shanghai      # 配置该组件的time_zone项,值为Asia/Shanghai
frontend:                     # 调用前端组件

注意:

  1. name:latutude:等内容,前面用2个空格缩进,:后面要加至少1个空格
  2. 绝对不要在YAML的编辑中使用TAB键,确保文本编辑器不会在换行时自动使用TAB
  3. #以及之后的内容属于单行注释文本,不用写进配置文件。
    然后,我们重启HASS服务,登录前端注意到左上角显示的名字变成Hello,说明组件配置成功。

写法:(换行) (缩进2个空格) 配置项: (空格)
说明:配置某组件,就是在对应的组件名:下方,另起一行并缩进2个空格,填写配置项和值。
用途:例子中调用了homeassistant(核心)组件和frontend(前端)组件,并为核心组件的几个配置项,配置了相应的值,使得核心组件按我们的配置来启动HASS。
分析:

  1. 核心读取配置文件中组件名对应下方缩进书写的配置项及其值,对已调用的组件进行配置。
  2. 一般来讲,配置项是组件固有的属性。比如上面代码中的name,指的是前端左上角显示的名字;latitudelongitudeelevation则是指HASS所在位置的经纬度高程信息;time_zone则是指HASS所在的时区信息。除非组件允许,我们不可以随意的指定一个配置项,并赋予值。比如在核心中配置:city: wuxi核心不存在这种属性,也不允许我们自定义属性,所以这样的配置会引发系统报错:"city不是一个有效的配置项!"
  3. 配置项一般可以分为必须可选必选配置项。必需配置项必须在配置文件中写清楚并给出配置的值;可选配置项则可根据实际情况选择是否填写;必选配置项,则需要在若干个配置项中选择特定的某些项填写,比如,某个组件需要对SSH的登录信息进行配置,而SSH又可以使用用户名密码或者证书2种方式来登录,那么用户名、密码、证书路径这3个配置项中,用户要么选择配置用户名和密码2项,要么选择配置证书路径1项,必须做出选择,不能3项都不选。
  4. 组件没有配置项或者配置项不全,并不能代表组件没有进行配置或者配置不完整,因为组件内部是允许使用一些默认值的,如果我们不对可选的配置项进行配置,组件一样可以给这些配置项赋予默认的值。比如文中的frontend组件,并非没有配置项,也并非没有进行配置,而是启用了默认的配置。

3. 如何了解组件具体的配置方法

组件的配置项和配置方法,一般可以通过查看其文档来了解,对于官方组件,查看以下网址找到对应组件的说明文档从而完成组件的加载和配置,是新手必须掌握的贯穿整个HASS学习过程中的必备技能:

官方教学文档官方组件文档

如:
配置核心的基础信息:https://www.home-assistant.io/docs/configuration/basic/
配置核心的自定义实体属性:https://www.home-assistant.io/docs/configuration/customizing-devices/
配置frontend-组件https://www.home-assistant.io/components/frontend/
配置http-组件https://www.home-assistant.io/components/http











评分

参与人数 3金钱 +48 收起 理由
iHass + 8
咸味土豆 + 10 哪怕看不懂我也要加分。
+ 30 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2018-9-3 13:50:51 | 显示全部楼层
M大辛苦了!系列基础教程的节奏!严重支持!
回复

使用道具 举报

2

主题

174

帖子

766

积分

高级会员

Rank: 4

积分
766
金钱
592
HASS币
0
发表于 2018-9-3 13:58:25 | 显示全部楼层
感谢楼主深入浅出的讲解!
回复

使用道具 举报

35

主题

533

帖子

2895

积分

金牌会员

Rank: 6Rank: 6

积分
2895
金钱
2362
HASS币
0
发表于 2018-9-3 15:40:26 | 显示全部楼层
讲得通俗易懂,非常感谢!
回复

使用道具 举报

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

 楼主| 发表于 2018-9-3 16:37:26 | 显示全部楼层
Jones 发表于 2018-9-3 13:50
M大辛苦了!系列基础教程的节奏!严重支持!

谢谢囧帅支持,写的不好,请批评指示,目的只有一个,让更多的坛友,踏入初级的门槛。有大神说咱们论坛里面的太多复制粘贴,回复一律都是谢谢,缺乏技术层面交流和探讨,所以我想尽自己的一点力,多少可以带动论坛的发展,改变这样的局面。
回复

使用道具 举报

0

主题

17

帖子

96

积分

注册会员

Rank: 2

积分
96
金钱
79
HASS币
0
发表于 2018-9-3 21:20:09 | 显示全部楼层
感谢大佬,目前正一步一步学习中!
回复

使用道具 举报

1

主题

137

帖子

453

积分

中级会员

Rank: 3Rank: 3

积分
453
金钱
316
HASS币
0
发表于 2018-9-3 21:26:47 | 显示全部楼层
感谢大佬
回复

使用道具 举报

0

主题

17

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
金钱
327
HASS币
0
发表于 2018-9-4 02:26:56 | 显示全部楼层
这个一直想研究但是英语渣一直没太搞懂
回复

使用道具 举报

1

主题

29

帖子

130

积分

注册会员

Rank: 2

积分
130
金钱
101
HASS币
0
发表于 2019-1-26 11:22:48 | 显示全部楼层
从零开始的教程确实很棒,思路清楚了很多
回复

使用道具 举报

0

主题

19

帖子

58

积分

注册会员

Rank: 2

积分
58
金钱
39
HASS币
0
发表于 2019-1-27 00:12:54 | 显示全部楼层
先把基礎研究好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 03:22 , Processed in 0.068679 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表