如何在ESXI中安装Home Assistant


家里有个ESXI虚拟化平台的确是方便,除了可以使用软路由,很多系统都可以安装进去,这里简单说下如何在ESXI中跑Home Assistant,网上大部分教程都是在Linux中的docker里跑HA。



首先到官网下载HA的虚拟机文件


如何在ESXI中安装Home Assistant


将解压缩出来的文件上传到esxi,打开esxi的SSH权限,进入后台,使用下面的命令将vmdk文件转换为esxi可以使用的文件。

vmkfstools -i hassxxx.vmdk 1.vmdk

随后创建虚拟机


如何在ESXI中安装Home Assistant


如何在ESXI中安装Home Assistant

然后下一步,下一步。建立好虚拟机后,开始调整虚拟机配置。调整配置很重要。

  1. 删除CD/DVD驱动器,然后添加硬盘,添加现有硬盘,选择上面转换好的1.vmdk文件。删除默认分配的硬盘

  2. 点击硬盘左侧的三角,控制器位置选择IDE控制器0,右侧选择主要

  3. 虚拟机选项下面的引导选项,选择EFI。

  4. 记得调整cpu和内存数量。

完成上述的配置调整后,就可以给虚拟机通电了,随后访问hassio.local:8123就能打开HA的首页了。如果访问hassio.local:8123无法打开这个页面,等待5-10分钟再访问

如何在ESXI中安装Home Assistant


如何在ESXI中安装Home Assistant


在首页等待一会儿之后,就会自动跳转到管理员设置页面. 

以上就是安装的粗略过程。

Home Assistant系列 — nmap 扫描小米路由器

1.什么是nmap ?

nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。nmap 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作。其基本功能有三个:

  1. 探测一组主机是否在线;

  2. 扫描 主机端口,嗅探所提供的网络服务;

  3. 推断主机所用的操作系统 。

Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。

2.在树莓派上安装nmap网络扫描器

在树莓派终端,使用以下命令安装:

sudo apt-getinstall net-tools nmap

安装完成后使用 man  nmap 命令查看一下nmap 的帮助文档。运行nmap可以探测树莓派上开放的端口和网络。

3.HA配置

在HA中配置nmap可以探测指定网络中存在哪些设备,打开HA的主配置文件configuration.yaml,在其中加入以下配置:

device_tracker:

 - platform: nmap_tracker

  hosts: 192.168.31.0/24

exclude:

- 192.168.31.1

192.168.31.1 这个IP是无线路由器的,所有要排除在外。添加完成以后,重启HA系统,就可以在界面中观察了。如果你熟悉nmap 也可以在配置文件中指定扫描参数。针对局域网中的设备,最方便与准确的方式是直接到无线路由器上获得它连接的设备的列表。在小米路由器中可用如下配置:

device_tracker:

 - platform: xiaomi

  host: xxx.xxx.xx.x

password: xxxxxxxx

consider_home: 10

host为小米路由器的ip地址,password为它的登录密码。配置完以后重启HA 系统,这时 你就可以在界面上看到所有连接设备。HA还支持其他厂商的路由器设备,需要的同学可以去HA的官网查询。

 

关注一下,

👇👇👇

Home Assistant系列 -- nmap 扫描小米路由器


成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。

成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。


今天学了些入门的Nodedred相关的东西,对我来说,不好懂,但是感觉确实好用,只能从零开始慢慢来了,着急也没用。


还是要声明一下:有时候我的文章会有很多废话,我知道自己有啰嗦的毛病,抱歉。当然,还有个重要的原因是原创文章有300字的要求,既然写了,那就尽量满足原创要求吧,可以直接拉到后面看效果图片的,下面开始正文。


——————————————————————————————


这篇给大家展示下我自己的家庭APP相关的内容和控制效果,Homekit这个组件基本上是个开源的智能家居平台都有可以用的插件,接入也很简单。家庭APP从操作和界面上来说也很简单、粗暴、好用,搭配上Siri控制调戏一下自己家的设备也很有感觉,只有要你个基于Linux的服务器,想怎么装就怎么装,开源智能家居本身就具备安装灵活的特点,你可以单独安装homebridge只用家庭APP控制,也可以安装这些平台用的插件。。。什么,你没有设备?没关系,你基本可以在任何一个支持Docker的平台下安装;可以跑在路由器上(需要固件支持);可以安装在Debian服务器上(Debian、Ubuntu、OMV等等);CentOS服务器上;arm(树莓派、香橙派)平台;Arm64平台(主要就是N1了);你有NAS?群晖和威联通都可以;想虚拟机安装?可以;虚拟化平台?没问题,PVE、Esxi、OMV、Unraid。。。太多了,回头再写软、硬件篇吧。


——————————————————————————————


好了,先来几张iPad上的效果:


主页:


成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。


可以按照房间名称分类,比如:


客厅:


成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。


主卧:


成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。


次卧:


成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。


再来一些具体设备的控制效果,用手机录几个视频展示一下,


灯光、插座控制:



窗帘控制:



空调控制:



Siri控制:

。。。。


等了半天转码、审核,居然只能发3个视频,只能下次了。


语音控制本来也是智能家居很重要的一环,Siri只是一个最傻瓜(最昂贵)的方案罢了,现在的年轻人,谁家里还没有个智能音箱呐,国内的天猫精灵、小爱同学、小度音箱、若琪音箱、叮咚。。。玩法太多了,想要国外的?亚马逊的alexa、Google的Google Home系列(强大的Google Assistant),你可以跟它们飙英文,唯一本地化的就只有HomePod(Siri)了,都很好玩,以后再写吧。


今天写的仓促,错误不少,废话很多,有时间了再修饰下吧,再见咯。


成果展示:基于HomeAssistant——Apple家庭APP(HomeKit)界面。




Home Assistant系列 — 设备定位与追踪

HA 做为智能家居系统,也可以针对设备进行定位与追踪,并且可以通过ping 获得某个IP设备的在线与离线状态。

HA中 的定位方法分为两大类,一类基于通讯网络,一类基于GPS。下给出常见的位置追踪方法:


Home Assistant系列 -- 设备定位与追踪


前面三种都是基于通讯网络探测某个设备是否存在的方法。

  1. 第一种是登录到路由器上,通过路由器提供的信息确定设备是否在本局域网中。

  2. 第二种是直接扫描设备的IP地址,我们一般都是在树莓派上运行,可以直接在树莓派上进行扫描,从而获得设备是在线还是离线的信息。

  3. 第三种是通过蓝牙扫描,获得蓝牙设备是否在树莓派附近的信息,一旦发现设备存在,我们就可以认为设备的经纬度信息与HA是一致的,就可以定位设备。


后面三种都是基于GPS定位,能够准确定位设备的经纬度信息。


在HA中所有需要探测位置的设备,其信息都回保存在配置文件known_devices.yaml中,这个文件和主配置文件configuration.yaml 在相同目录,如果你没有,请自行创建,新建一个文本然后修改名称和后缀即可,先设置一个ping 组件,用于探测我正在运行的Windows 电脑是否在线,Windows电脑要被ping通,首先得打开它的防火墙设置,设置如下:

Home Assistant系列 -- 设备定位与追踪

找到这两个入站规则,然后点击右边的 启用规则。接下来我们编辑HA的configuration.yaml配置文件,在其中空白处添加如下配置:

device_tracker:

 - platform: ping

  hosts:

    desktop: xxx.xxx.x.xxx

上面的XXX 为你电脑的ip 地址,不知道怎么查IP的,可以百度IP,就会显示你当前电脑的ip,或者win+R  输入cmd 回车,在弹出的窗口中输入 ipconfig 就会显示当前电脑的IP。设置完HA配置后,启动HA系统,在界面中就会显示desktop 这个设备 同时显示其状态为 home。

Home Assistant系列 -- 设备定位与追踪

再打开 known_devices.yaml 这个文件,我们就可以看到这个设备的信息自动被添加到文件中。

Home Assistant系列 -- 设备定位与追踪

下面对这个配置进行修改,首先我们编辑它的name 属性,此处我们可以使用中文。


desktop:

 hide_if_away: false

 icon:

mac:

name: 我的电脑

picture:

track: true

consider_home: 10

这里增加了一项属性consider_home 此属性表示多少秒后不能ping通,就修改设备的状态为not home,保存配置文件,重启HA系统,就可以看到界面上显示的名称发送了改变。

Home Assistant系列 -- 设备定位与追踪

我们可以通过Windows防火墙规则,来模拟设备的在线和离线,通过之前的 入站规则,点击右边的 启用规则 / 禁用规则  这时观察HA 界面 我的电脑 状态的变化。

如果要删除一个被位置追踪的设备,需要删除HA的configuration.yaml配置文件中之前的配置,还需要将 known_devices.yaml 文件中 对应设备的 track 设置为 no 或者整个删除 即可。

注意:演示的配置在实际使用中一定要注意缩进,因为手机显示的原因可能没有对齐。


关注一下,

👇👇👇

Home Assistant系列 -- 设备定位与追踪




Home Assistant系列 — 界面优化

大家是否发现,当你接入各种组件、实体以后,前端界面是否显示的非常凌乱丑陋,就和下图一样


Home Assistant系列 -- 界面优化


今天带给大家如何根据组件进行 分组与分页。如果你希望把每次启动后都会出现的 welcome home 通知去掉,我们可以直接点击下面的忽略按钮,这样虽然去掉这个通知,但是重启后还是会再次出现。如果想永久去掉,可以打开 configuration.yaml 配置文件,注释掉其中的 introduction ,这样即使重启这个通知也不会再显示了。


Home Assistant系列 -- 界面优化

要对首页进行整理排布,我们使用 group 分组配置。我们先看一下group的配置文件 groups.yaml,这个文件放在和主配置文件相同的目录下。打开这个文件会发现是空白的,我们先编辑一个 bitcoin 的分组,配置如下:

bitconin:

  name: 比特币

  entities:

     sensor.exchange_rate_1_btc,sensor.trade_volume  

这里把比特币行情和交易量2个实体 放到了比特币这个分组中。配置文件注意缩进,这里重点说下,必须严格进行缩进。编辑好以后,保存配置文件,然后在界面 选择  配置菜单 选择重置分组 就可以了。

Home Assistant系列 -- 界面优化

然后现在 概览 就可以在界面上看到刚刚配置的信息了。

Home Assistant系列 -- 界面优化

如果我们想以一个分签页的方式显示,只需在刚刚的配置中加一个配置项

bitconin:

  name: 比特币

  entities:

     sensor.exchange_rate_1_btc,sensor.trade_volume

  view:yes  

然后重载分组,就可以看到一个tab页。

Home Assistant系列 -- 界面优化

如果我们还是想让这些信息排布在一起,我们可以更改以上配置,去掉 view 项,然后增加一个分组。


bitconin:

  name: 比特币

  entities:

     sensor.exchange_rate_1_btc,sensor.trade_volume 


bitconint_view:

   name: 比特币

   entities:

      group.bitconin

   view: yes   

 

保存以后,重置分组,就可以看到这个tab页上的变化了

Home Assistant系列 -- 界面优化

这样是不是看起来就比之前要舒服很多呢,当前还有很多实体 就需要你们自己去动手配置了,如果想更改主见面的显示可以定义一个 default_view 的分组

default_view:

  name: XXX

  entities:

     xxx,xxx,xxx ....

像这样的方式自行进行选择。


有不清楚属性的同学 可以在这里找到。

Home Assistant系列 -- 界面优化

这些就是拿来进行分组的实体。


关注一下,

👇👇👇

Home Assistant系列 -- 界面优化


Home Assistant系列 — 移动端访问

大家是否想过当你配置好实体设备以后,如何控制呢,在电脑上操作,是否又很不方便呢,当你睡觉的时候还要在电脑上控制关灯,当你感觉热的时候,想开空调,又不想起床,又不想一堆遥控器堆在身旁,这时候咋办呢?

今天就带大家如何在手机上或其他移动设备上操作控制Home Assistant 系统。首先要有一台设备长期运行Home Assistant系统,树莓派或者闲置电脑都行,然后要有局域网,这里大家又会有疑问,这样也只能在局域网内控制啊,如果离开了局域网,如何通过手机控制呢,又没有公网IP,这部分呢,我会在后期的教程中讲到,先买个关子。

Android 系统的手机,有任意浏览器即可,在浏览器中输入Home Assistant系统的 ip+端口 访问,然后添加到桌面快捷方式,如果不行,应该是没有权限,给浏览器设置一下权限就好了。

IOS 手机 可以使用内置的浏览器 以同样的方式进行访问,当然 IOS 手机还有一款Home Assistant的app  在应用商店中就可以找到,Android 的app 视乎没有,我目前还没找到,可惜。。(心疼Android童鞋一秒),这个app 还能在Home Assistant系统中增加手机的定位信息(麻麻再也不用担心我走丢了…),此app 还能通过苹果手机的消息通道及时的发生消息给苹果手机。目前还没研究透,能研究好了,后面会详细的介绍这个app 的其它功能。



关注一下,

👇👇👇

Home Assistant系列 -- 移动端访问


Home Assistant系列 — 自定义实体

实体是由组件程序生成的,同时组件程序会决定实体在前端的显示特性(是否可见、图标、名称等)。但我们也可以事后对实体的特性进行自定义,这些自定义属性会覆盖实体生成时的属性,从而改变其(显示)特性。
实体自定义往往用于前端更人性化的显示,例如,将程序定义的实体英文名改为看了就明白的中文名。


自定义实体属性在基础信息配置(home assistant)中,通过customize进行定义。


属性 描述
friendly_name 前端显示的名称,可以是中文
homebridge_name 在HomeBridge中显示的名称
hidden 如果设置为true,前端将隐藏此实体(不显示)
homebridge_hidden 如果设置为true,HomeBridge将不显示此实体
emulated_hue_hidden 如果设置为true,emulated_hue将不显示此实体
entity_picture 实体图片的URL
icon 实体的图标,可以在公众号内回复 HA实体图标 得到,然后在其中查找需要的图标,以mdi:xxx格式设置,例如:mdi:home
assumed_state 对于灯与开关这类实体,在一些情况下系统可能并不能准确获知其开关状态。当此值为true时,前端将显示打开和关闭两个按钮,而此值为false时,将显示为一个开关。
device_class 设置设备的种类,改变前端状态与icon的显示。目前仅支持Binary_Sensor和Cover两种组件下的平台设备。
initial_state 设置自动化规则的初始状态,on或者off
unit_of_measurement 定义状态值的单位

 

配置文件configuration.yaml中,定义了customize: !inclue customize.yaml,因此,我们可以编辑customize.yaml进行自定义。

# customize.yaml文件,

# 对实体的自定义,格式为:

#实体ID:

#  属性名1: 属性值

#  属性名2: 属性值

light.reading_room:

  friendly_name: 我的书房灯

 

zone.beach

  friendly_name: 马尔代夫

  icon: mdi:beach

自定义实体属性,也可以在前端“配置”菜单中的“自定义”中进行,如下:

Home Assistant系列 -- 自定义实体

重启系统让编辑的自定义实体生效,然后在前端界面就可以看到 自定义的实体了。

关注一下,

👇👇👇

Home Assistant系列 -- 自定义实体



Home Assistant系列 — 高德地图接入

我们知道 HA 默认的地图面板使用的是 OpenStreet 地图,社区内大部分的组件也是基于 Google Map 开发优化的。这可苦了我们墙内的小伙伴,必须全部替换掉。至于替换后所考虑使用的国内地图服务商,我这里还是推荐『高德』。众所周知,由于特别的保密政策及『地图法』,我国的地图坐标系都是加密后的数据,在这种情况下,大家常用的百度地图使用的是百度特有的 BA09 坐标系,在我们实际接入中会产生较大的地图偏移,所以弃用之。那剩下的就只有高德、腾讯这么 2 个选择了,摸摸良心也知道选高德是没错的。

在 HA 上显示地图,一种方法呢是通过 Panel 面板,另外一种是通过 Card 卡片,两种方法我一并介绍。

面板

使用面板将『高德地图』接入 HA,一种方法是直接替换掉原有地图面板的底层地图,另一种方法是接入自定义面板。前者需要在 HA 每次更新后替换源文件,后者则要忍受左侧栏有 2 个地图面板入口,可以说都不是那么完美。权衡再三我还是选择直接替换源文件,毕竟 HA 更新没有那么的频繁。

打开默认的『Map』页面,我们不难从右下角标注部分发现其使用的是『leaflet』框架,有关该框架的具体介绍我就不展开了。简单来说,它的运行原理就是提供一张底图图层,之后在上面增加标记图层。因此,我们只需要把底图替换为『高德地图』就 OK 了。

注意:该步操作涉及源文件修改,有一定风险,请谨慎操作,我不承担任何责任。

首先,打开『地图』页面的源文件,如果你是通过虚拟环境安装 HA 的,并且使用 ES6 版前端,那么源文件路径在:

/srv/homeassistant/homeassistant_venv/lib/python3.5/site-packages/hass_frontend/panels

如果保持使用 ES5 版前端,那么源文件路径在:

/srv/homeassistant/homeassistant_venv/lib/python3.5/site-packages/hass_frontend_es5/panels

先使用格式化工具进行格式化,找到图层相关的语句:

attached: function() {

var t = this._map = window.L.map(this.$.map);

t.setView([51.505, -.09], 13),

window.L.tileLayer("https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png").addTo(t),

  this.drawEntities(this.hass),

this.async(function() {

t.invalidateSize(),

this.fitMap()

}.bind(this), 1)

},

将 window.L.tileLayer 中图层路径部分 https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png 替换为高德地图 URL,之后保存文件;

接着,在终端内使用 gzip 指令压缩 html 文件,替换源 html 与 html.gz 文件;

再次,使用 md5 指令获取 html 文件的 md5 值,打开上上级文件夹内的 __init__.py文件,替换 "map"的值;

最后,大功告成,重启 HA 即可,你可以看到『Map』页面的地图已经变为了高德地图。

最后的最后,我知道你们很懒又迷茫,给你们提供了现成的文件,直接进行替换即可。文件地址在:https://github.com/cxlwill/HA_GaodeMap

卡片

使用卡片将『高德地图』接入 HA,我们这里需要利用『Genric』这个组件,将地图转化为摄像头画面。

首先,申请高德开发者账户,新建应用,获取 API 接口秘钥『key』。

接着,仔细阅读该份静态地图 技术文档,了解各项值代表的意义和表示方法。

最后,打开 configuration.yaml 添加 Generic 组件:

    

#高德地图

camera:

 name: Home

platform: generic

still_image_url: http://restapi.amap.com/v3/staticmap?location=地图中心经度,地图中心纬度&zoom=14&scale=2&size=305*185&traffic=1&&labels=家,0,0,35,0xFFFFFF,0x5288d8:标记经度,标记纬度&key=秘钥

limit_refetch_to_url_change: false

    

  重启 HA 后,你想要显示的地图区域就会以『卡片』的形式展现在前端中了。

  配置示例:https://github.com/cxlwill/HA_config


关注一下,

👇👇👇

Home Assistant系列 --  高德地图接入

  

        

       

       

    


Home Assistant系列 — 设置界面语言与地理位置

Home Assistant 安装的时候会自动根据你的系统语言设置默认语言,安装完成以后也可以根据需要自己设置选择语言。启动 Home Assistant ,浏览器打开web 界面,点击左上角的用户图标,选择你需要的语言即可。

Home Assistant系列 --  设置界面语言与地理位置


界面中有一个地图的菜单,地图是用来显示你的地理位置,这个地理位置是根据你的配置来显示的,初次安装无法显示地理位置的,这是因为你还没有配置位置信息。

打开 www.openstreetmap.org 网站找到当前你所在的位置,点击右键选择 “显示地址” ,屏幕左边会显示两个数字,这就是你当前位置的坐标,经度和纬度。

Home Assistant系列 --  设置界面语言与地理位置

我们需要将这个经度和纬度信息配置到 Home Assistant 中去。打开 configuration.yaml配置文件,在配置文件中找到 latitude 和 longitude 配置,修改对应的值。同时修改时区为 亚洲/上海

latitude: 22.57
longitude: 113.94915
time_zone: Asia/Shanghai

设置完以后保存,重启 Home Assistant ,重新点击地图菜单这时就会在界面上显示你配置的位置信息,默认半径为100米。

Home Assistant系列 --  设置界面语言与地理位置


时你还可以配置多个位置信息,下面我们再配置一个school的位置。在空白出添加如下配置即可。


zone:   - name: school
   
latitude: 22.5352
   longitude
: 113.9313
   icon
: mdi:school
   radius
: 250

icon 配置显示图标,radius 配置显示半径。

Home Assistant系列 --  设置界面语言与地理位置


这些设置的区域会在设备定位和自动化时用到,关于设备定位和自动化会在后面的文章中进行介绍。



关注一下,

👇👇👇

Home Assistant系列 --  设置界面语言与地理位置



Home Assistant系列 — 接入小米多功能网关

小米多功能网关可以连接小米的温湿度计、开关、人体感应器等多种设备。在Home Assistant 中接入小米多功能网关,以使多功能网关连接的各种设备进入Home Assistant 系统。


1.配置米家

打开米家app,选择我们要接入的多功能网关,点击右上角 关于,然后连续点击下方的插件版本位置5次,此时会打开开发者模式。点击打开 局域网通信协议,然后会显示密码,记住这个密码,这个密码需要配置在Home Assistant 系统中。

Home Assistant系列 --  接入小米多功能网关

Home Assistant系列 --  接入小米多功能网关

2.配置Home Assistant

打开 Home Assistant 的配置文件  configuration.yaml   在其中添加如下配置:

xiaomi_aqara:
 
gateways:
   -
mac: xxxxxxxxxxxx
     
key: xxxxxxxxxxxx
   
- mac: xxxxxxxxxxxx
     
key: xxxxxxxxxxxx

mac 就是设备的mac 地址。key 就是刚刚米家app 中的密码。这里可以配置多个。

然后保存配置文件 退出,重启 Home Assistant 。


打开web 界面 就可以看到 小米设备了。

Home Assistant系列 --  接入小米多功能网关



Home Assistant 有自动发现 功能,在同一网关内,有其他智能设备,Home Assistant可以自动加入到系统中。如果不想发现,可以在配置文件中 找到 discovery  前面加上#  ,重启Home Assistant  就好了。


关注一下,

👇👇👇

Home Assistant系列 --  接入小米多功能网关