20221224-HomeAssistant树莓派-高德地图篇

Home assistant 就目前来说,本地化的工作还不到位

这一次的教程呢 就先聚焦一下地图 吧,我们知道 ha 默认的地图面板 使用的是 openstreet 地图,社区内大部分的组件也是基于google map 开发优化的,必须全部替换掉

至于替换后所考虑的国内地图服务商,我这里还是推荐高德,众所周知,由于特别的保密政策及地图法,我国的地图坐标系都是加密后的数据,在这种情况下,大家常用的百度地图使用的是百度特有的BD09 坐标系,在我们实际接入中会产生较大的地图偏移,所以弃用之

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

面板

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

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

首先 打开地图页面的源文件,如果你是通过虚拟环境安装ha 的,那么源文件路径在

/srv/homeassistant/homeassistant_venv/lib/python3.4/site-packages/homeassistant/components/frontend/www_static/panels

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

1
2
3
4
5
6
7
8
9
10
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 替换为高德地图 http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z},之后保存文件;

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

再次使用md5指令获取html 文件的md5值,打开上上级文件夹内的 version.py 文件,替换 “panels/ha-panel-map.html”的值;

最后,大功告成,重启ha 即可,你可以看到 map 页面的地图已经变为了高德地图

卡片

使用卡片 将高德地图 接入 ha ,我们需要利用 genric 这个组件,将地图转化为摄像头画面

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

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

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

1
2
3
4
5
6
#高德地图
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 后,你想要显示的地图区域就会以卡片的形式展现在前端中了

到这里,相信大家可以自如地在 HA 中使用高德地图了,配合 device_tracker 组件,能更好地掌握接入设备的地理位置信息。

20221224-HomeAssistant树莓派-动态平面图

平面图设计

Floorplan 是由底层 的平面设计图加上顶层 的矢量图交互元素部分组成,对于底图的格式并没有硬核的规定,但需要以方便导入为前提,底图可随意发挥,或2D或3D,甚至是简单的一个交互面板都可以,不必拘泥于 房屋平面图 这个概念,这也是floorp-lan 的魅力所在

最终的成图必须为svg 的矢量图格式,视频中使用的是inkscape ,软件较为轻量,当然 illustrator 更是没有问题,其他的矢量图绘图工具也可以使用

这里提供几个交互元素图标的下载地址:

Find Icons with the…
Used by millions of designers…
fontawesome.io

Millions of images …
Download Free Icons and Stick…
flaticon.com

绘图工具

绘制平面图,除了高大上的3dmax 其实有很多亲民的apps 可供选择,这里推荐几个

20221224-HomeAssistant树莓派-维护答疑

求人不如求己

官网

Home Assistant
Github

Homebridge
Home Assistant
Homebridge-homeassistant
Homebridge-mi-aqara
Hassio 第三方源
HA-floorplan

社群&论坛

个人主导的文档翻译 home assistant 中文文档 中文

个人相关 专题 slack 中文

ha 官方论坛

瀚思彼岸论坛 (中文)
HA 汉化参考文档(非官方,我参与部分翻译工作)

系统更新

home assistant

ha 的更新方法跟随安装方法各不相同,我在安装篇中均有涉及,这里特别提取出来,方便大家参考

注意,为了保证国内用户的更新速度,我特别在更新指令中明确了pypi 源,海外的派友可以忽略,此外的以下命令均使用sudo 权限

All-in-One
sudo systemctl stop home-assistant.service
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/homeassistant_venv/bin/activate
pip3 install –upgrade homeassistant -i https://pypi.doubanio.com/simple/
exit
sudo system start home-assistant.service
Hassbian
sudo systemctl stop home-assistant@homeassistant.service
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/bin/activate
pip3 install –upgrade homeassistant -i https://pypi.doubanio.com/simple/
exit
sudo systemctl start home-assistant@homeassistant.service

homebridge

hb 及其组件的更新是在node.js 框架内进行的,使用sudo npm upgrade -g 包名 相关命令即可完成,常用的包有

homebridge
homebridge-yeelight
homebridge-mi-aqara
homebridge-homeassistant
homebridge-mi-acpartner
homebridge-mi-airpurifier
homebridge-mi-philips-light

具体的配置方法可在github 里直接搜索插件名获取

国内派友可以转用淘宝镜像源

npm config set registry https://registry.npm.taobao.org

日志监测

系统日志是debug 的核心参考文件,希望大家遇到问题学会第一时间查看log ,定位问题,同时在向人提问时,附上相关的log ,也是良好的提问习惯

当我们把 HB&HA 添加进系统后台自启项目后,便可以直接通过systemctl 命令进行打开,关闭,重启、查询系统服务日志等一系列操作,常见的命令有

启动 systemctl start 服务名
终止:systemctl stop 服务名
重启:systemctl restart 服务名
查询服务状态:systemctl status 服务名 -l
查询日志:journalctl -u 服务名
列出所有服务:systemctl list-unit-files –type=service

经常使用的服务有

homebridge
home-assistant.service (Raspbian)
home-assistant@homeassistant.service (Hassbian)
appdaemon@appdaemon.service (HADashborad)
samba (SMB)

另外还可以使用下述指令追踪所有服务日志,tail -F /var/log/daemon.log

除了通过systemctl 查询日志,ha 查看日志的方法比较锁阳,最直观的就是在系统前端的dev-info 面板查看,日志文件放在配置文件所在的文件夹中,home-assistant.log 文件便是,HB 如若手动开启,默认在终端中滚动显示实时日志

Q&A
HB 端口被占用

events.js:160 throw er; // Unhandled ‘error’ event ^ Error: listen EADDRINUSE :::51826 at Object.exports._errnoException

出现上述错误的原因是用户在添加 HB 为自启任务的情况下,手动开启 HB。通俗来说就是你在同一端口试图开启 2 个 HB,因此显示端口被占用。

解决办法就是无需重复开启 HB,直接使用上面提及的指令重启已开启的 HB 服务即可;或者关闭已开启的 HB,再使用 homebridge 手动开启新的 HB 服务。

成功安装 HB + HA 并在家庭 app 添加“桥”后,显示无设备

这是由于 HB-HA 插件更新导致的,最新的插件中,HB 的 config.json配置文件增加了一项设置 “default_visibility”:”visible”,在 2.3.1 版本前默认是隐藏的,因此就出现了所有设备被隐藏的情况。解决方法非常简单,将 HB-HA 插件更新到最新版本即可,默认会自动添加以上指令,大家也可以手动添加。

HA 配置文件格式错误

需要再次提醒的是,yaml文档非常强调代码的格式,因此请大家额外重视空格、换行、-号的使用。一般来说,在最新 HA 系统中,如果配置文件格式出现错误,首页中会出现如下提示:

null
同时结合 Log,可以快速定位出错的位置。

格式正确,无法添加小米网关

很多情况下,这表明你的格式并不正确 :( ,常见的错误有:

key 大小写问题
mac 的 : 号问题

另,小米平台在 0.53 之后的更新中统一为 2 个 接入方式:Zigbee 设备统一使用 xiaomi_aqara;WiFi 设备统一使用 xiaomi_miio,请注意区别。

设备在家庭 app 中重复出现

出现此错误的原因是用户将同一设备同时接入了 HA 和 HB,那么 Homekit 就会通过 HB-HA 插件识别一次设备,后再通过 HB 的其他相关插件识别一次设备,最终导致重复识别添加。

解决方法就是在 HA 配置文件 configuration.yaml的 customize模块中找到对应设备,添加 homebridge_hidden: true 设置,之后重启 HA、HB 服务即可。如果仍未生效,请清除 HB 缓存后重试。 更具体的设置方法,欢迎参考系列的”个性化配置篇”

平面图在 iOS 及 macOS 中显示 script error

由于之前代码未跟进 Polymer 2.0 框架,导致 Apple Webkit 载入错误。目前作者已经修复了这个问题,请大家前往 Github 下载最新的源码。

HA 或者 HB 配置文件进行改动后,没有生效
如果你在 HA 进行了有关 HB 的配置变更,如设置 homebridge_hidden 等属性或者对 HB 的 config.json 文件进行了修改。修改后首先需要做的是重启 HB,清除 iOS 家庭 app 的后台。重新打开 app,如若发现配置尚未生效,就需要考虑清除 HB 的缓存:

sudo rm -rf /home/pi/.homebridge/persist/
需要注意的是清除缓存将导致先前所有在家庭 app 内的分组命名等操作失效。
之后重启 HB,配置应该就如期生效了。

在 HB 中删除“桥”后无法再添加或嗅探到
发生此问题的原因是,系统已经对你的设备和配置有了记忆,因此需要删除有关缓存。
首先,使用和 『问题7』同样的操作,清理 HB 缓存,重开 APP,确认是否可以添加。
如果该方法依旧不能解决问题,则打开 HB 的配置文件 config.json,将开头的 username 项类似 mac 地址的字符串更改几个数字,之后同样清除缓存,重启 HB,重开 app。

Apple Home 可以实现外网控制吗?
可以,实现外网控制需要一台处于内网环境下的 Apple TV (3代及以上)或者 iPad 当做『家庭中枢』。如果需要使用 家庭 App 自带的『自动化设置』功能,则只有 第 4 代 Apple TV 支持。

安装不完整导致 dns 服务器错误
如果启动 HB 后遇到如下错误:

module.js:328
throw err;
^

Error: Cannot find module ‘../build/Release/dns_sd_bindings’
at Function.Module._resolveFilename (module.js:326:15)
at Function.Module._load (module.js:277:25)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object. (/usr/local/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:32:22)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
请操作如下指令:

cd /usr/local/lib/node_modules/homebridge
sudo npm install –unsafe-perm mdns
sudo npm rebuild –unsafe-perm
以上是比较普遍出现在派友中的问题,我也将不断更新,大家亦可通过评论及其他渠道反映个人遇到的困难。

20221222-python:PIL库中getpixel方法的使用

python pil 库中getpixel 方法的使用

getpixel 函数是用来获取图像中某一点的像素的RGB颜色值,getpixel的参数是一个像素点的坐标,对于图像的不同的模式,getpixel 函数返回的值不同

RGB 模式 RED GREEN BLUE

1
2
3
4
from PIL import Image
im=Image.open('1.tif')#文件的路径
print(im.mode)
print(im.getpixel((30,25)))#(0,0)表示像素点的坐标

结果为

1
2
RGB
(8, 8, 8)

返回的坐标点 30 35 处的red green blue 的数值

  1. P 模式,模式P 为8位彩色图像,它的每个像素用8个bit 表示,其对应的彩色值是按照调色板查询出来的
1
2
3
4
5
from PIL import Image
im=Image.open('1.tif')
im2=im.convert("P")
print(im2.mode)
print(im2.getpixel((30,25)))

结果为 P 46

转化为P 模式之后,坐标点 30 25 处的值有所变化

1 模式 模式1 为二值图像,非黑即白,但是它每个像素用8个bit 表示,0表示黑,255 表示白

1
2
3
4
5
from PIL import Image
im=Image.open('1.tif')
im2=im.convert("1")
print(im2.mode)
print(im2.getpixel((30,25)))

结果为 1 0

PIL中有九种不同模式,分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F,详情见博客:https://editor.csdn.net/md?not_checkout=1&articleId=114289398,其他的模式在此不再一一进行实验。在对图像进行处理的时候,如果是用Image.open()打开一个图像,该图像一定会变成RGB模式,如果想要利用getpixel的返回的函数值,三元组的数值不太好处理,就可以把图像模式转变为“P”模式,“L”模式等,方便利用getpixel返回值。

20221222-HomeAssistant树莓派-Haio篇

简单比较一下安装hass 的三种方法,hassbian 和all-in-one 所安装的hass 都是基于本身的系统框架化运行的,因此拥有原生系统的功能、参考文档等一切,你可以理解为买了一栋公寓里的一套房间,而hass.io 则是独立的系统,一切全部依靠图形界面操作,你所能接触的文档权限非常有限,就像你虽然拥有一幢楼,但是装修得按着别人的规划走。特别是出现问题时,只能从 Hass 官网和社群寻找支持。

安装

hass.io 是ha 官方与reinos 合作推出的系统

使用 Etcher 等应用将系统烧录至内存卡,将卡插入树莓派中,保证树莓派处于联网状态。
由于安装资源需要全程连接 外网下载,

如要设置 wifi 连接,请打开存储卡目录下system-connections/resin-sample 文件,使用编译器编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[connection]
id=resin-wifi
type=wifi

[wifi]
hidden=true
mode=infrastructure
ssid=你的WIFI SSID

[ipv4]
method=auto

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=你的 WIFI 密码

附加功能

hass.io 的核心就在于高度简化配置过程,尽量使用全图形化操作,插件的安装也是如此

点击左侧栏 hass.io 我们便进入了附加功能安装面板,HA 老用户发现对比其他版本HA 增加了自动化 和hass.io 面板,而后者就是hass.io 的插件管理界面,你可以在此安装官方提供的插件,也可以添加插件源安装其他用户分享或自己制作的插件,十分便捷方便

下面我们使用操作面板安装 samba 功能,实现hass 和电脑的文件共享

SMB 如此重要,自然 hass.io 原生内置了安装入口,在插件安装面板下拉找到 samba share ,点击进入安装界面,而后再点击 install ,等到小圈不转了,一切就大功告成了,

安装完成后,便会出现info 和options 卡片

首先,建议在info 中打开自动更新,接着我们来详细看看options 中的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"workgroup": "WORKGROUP",
"name": "hassio",
"guest": true,
"map": {
"config": true,
"addons": true,
"ssl": false,
"share": true,
"backup": true
},
"username": "",
"password": "",
"interface": "eth0"
}

变量说明 汉化官方文档,原文地址

name (可选): 用户名,默认值 hassio。
workgroup (可选): 用户组,默认值 WORKGROUP。
guest (可选): 是否允许客人用户(无用户名无密码)默认值 true。
map (可选): 开放文件夹,默认值 all,即全部开放。可选有 config,addons,share,backup,ssl。
username (可选): 登录用户名。
password (可选): 登录密码。
interface (可选): 开放接口,有线网连接使用 eth0,无线网连接使用 wlan0。

按需更改配置后,点击save 保存,再点击start,你的SMB 服务就启动了,并且自动加入了自启服务

通过SMB 的设置,相信你对在hass.io 中安装附加功能 add-on 有了一定了解,官方提供的插件列表见此,大家可以根据说明按需安装

这里推荐安装SMB SSH 及Bluetooth BCM43xx 可以使你更安逸地使用hass.io

使用apple 终端,对使用homekit 控制智能家居设备有需求的朋友不少,因此接下来特别介绍一下 homebridge 插件 的安装方法,希望大家可以借此掌握安装第三方源插件的方法

homebridge

最早提供hb 安装的源已经不再维护,我已替换为其他保持更新的第三方源,

安装附加功能后,你的HA 环境就和其他方法安装的ha 基本一致了,有关设备的接入、个性化配置等,欢迎参考系列的其他文章,老用户可以直接复制粘贴原 configuration.yaml 配置文件,但需特别注意添加 Discovery: 服务。

20221220-HomeAssistant树莓派-个性化配置

yaml 特别重视语法格式,之前很多派友出错也是因为格式不正确,请大家在配置时务必额外注意缩进、冒号、横短线的使用

页面结构

开始具体配置教程前,我们需要先了解一下ha 主页的页面构成,方便之后更快理解配置指向对象,

这里使用HA 公开的参考配置图作说明

由图可知,HA 主页的左侧栏集中了所有面板的入口,默认主页即state 面板
该面板中由上至下依次包括 工具栏,标签栏,徽章栏及由设备卡片及灰色空白区组成的主区域

当我们新接入一个设备,如果是带有开关属性可控制的、监控摄像头、媒体播放器等设备,HA 会自动为其生成一张卡片,而其他仅有信息展示属性的设备,比如温度、适度、人体传感器、设备在线状态等)则会生成徽章集中在头部

HA 提供了以上所有元素的个性化配置,本篇教程将重点讲述设备、组群、主题三项配置方法,能满足大部分的用户浅层的配置需求

设备自定义

本文开头提到的那些看起来乱码的名称,其实是HA 中的entity ID 该ID 具有唯一性,是HA 系统区别设备的代号,点击侧边栏 下<> 进入开发者states 面板,便可以获得所有接入设备的entity id

当然,代号是给计算机读的,并不适合展示于人,接下来我们就来学习如何对设备进行基本配置,解决乱糟糟的界面

对设备进行自定义设置,请在homeassistant 下新增 customize 块,请特别注意代码的层级

以上设备所需最常见的属性设置,更多设置请参考官方文档

初步设置后,相信你的界面已经有了不少改变

组群管理

随着更多的设备接入,我们不难发现主页面开始渐失逻辑性和层次性,这时候就需要引入组群管理

顾名思义,组群管理就是将一系列的设备,场景等组合在一起形成组群 group 比如,可将卧室内的所有设备集中为卧室群组,或者将所有灯集中为 灯 群组,通过配置组群,可以让我们的ha 界面清晰明了,方便操作

同样我们在configuration.yaml 文件中添加如下配置,主义与homeassistant 平级

homeassistant: #此项为展示平级用,勿照搬
name: Home
unit_system: metric
group:
default_view: #群组名称,必须为英文,空格使用 _ 代替
name: Climate #昵称,可中文
view: yes #是否以标签页形式展示,默认为是
icon: mdi:home #图标
entities: #组内设备
- group.kitchen
- group.awesome_people
- group.climate
control: #当群组内有多个可控制设备时,是否显示总控制开关

我们通过群组管理,可以将非控制类设备由徽章转化为卡片内项,避免了主页面一排徽章的窘境

代码整洁

我们在进行个性化配置中,满足了界面的简洁需求,但是同时也应该注意到随着设置的不断增多,configuration.yaml的内容也不断增加,整个文件显得十分臃肿。这时候我们需要内外兼修,将设备个性化等较长的配置独立出来,形成文件,再接入 configuration.yaml。

比如,我们在 HA 配置文件夹内新建 customize.yaml 和 group.yaml 文件,把对应内容复制进去:

customize.yaml:
thermostat.family_room: #entity_ID
entity_picture: https://example.com/images/nest.jpg #图片
icon: mdi:kettle #图标,来自 https://materialdesignicons.com/
#图标和图片只能选择一个配置
friendly_name: Nest #昵称,显示在主页面
hidden: true #是否隐藏
homebridge_hidden: true #是否在 Homebridge中隐藏,避免 HB 重复添加设备
group.yaml:
default_view: #群组名称,必须为英文,空格使用 _ 代替
name: Climate #昵称,可中文
view: yes #是否以标签页形式展示,默认为是
icon: mdi:home #图标
entities: #组内设备
- group.kitchen
- group.awesome_people
- group.climate
control: #当群组内有多个可控制设备时,是否显示总控制开关
注意直接复制内容,无须 group 或 customize 前缀,顶格写起。

之后在configuration.yaml 使用!include xxxx.yaml 进行调用

homeassistant:
customize: !include customize.yaml
group: !include group.yaml

这样我们就能保持配置文件的整洁和逻辑性

主题

主题是HA 在0.49.2 更新中加入的功能,支持配置大部分ui 中的字体,颜色等css 值,
。最新 0.51.2 版本中已经添加对背景色替换的支持,也意味着黑暗模式终于得以实现。

配置主题需要两个步骤,一为添加配置文件,二为调用主题。

首先是添加配置文件,主题应在 frontend块内进行配置:

frontend:
themes:
night: #主题名称,英文
# 主界面 #
primary-color: “#1DE9B6” # 主 UI 字体颜色
primary-background-color: “#303030” # 其他部件背景色 (dialogs, e.t.c)
secondary-background-color: “#303030” # 主 UI 背景颜色
paper-card-background-color: “#424242” # 卡片背景颜色
paper-item-icon-color: “#1DE9B6” # Icon colour
primary-text-color: “#FFFFFF” # 首选字体颜色
secondary-text-color: “rgba(255, 255, 255, 0.7)” # 次字体颜色
disabled-text-color: “rgba(255, 255, 255, 0.5)” # Disabled text colour
divider-color: “rgba(255, 255, 255, 0.12)” # Divider colour
paper-card-header-color: “#FFFFFF” # 卡片标题颜色

  # 侧边栏 #
  paper-listbox-background-color: "#424242" # 背景色
  paper-listbox-color: "#FFFFFF" # 字体色
  paper-grey-200: "#616161" # 选中项背景色

  # 开关 #
  paper-toggle-button-checked-ink-color: "#1DE9B6"
  paper-toggle-button-checked-button-color: "#1DE9B6"
  paper-toggle-button-checked-bar-color: "#1DE9B6"

  # Sliders #
  paper-slider-knob-color: "#1DE9B6"
  paper-slider-knob-start-color: "#1DE9B6"
  paper-slider-pin-color: "#1DE9B6"
  paper-slider-active-color: "#1DE9B6"
  paper-slider-secondary-color: "#33F2D8"

具体可设置的对象有数十个,

以上主题摘自 ha 官方论坛的网友分享

主题配置后就是调用了,这里有3种方法

手动调用,打开左下角service 面板,由上至下依次选择
frontend - set_theme,之后填入{“name”:”主题名称”},最后点击 call_service。

在这里,我们也可以进行 home assistant 的重启

手动调用 ,打开左侧面板 选择configuration

右侧点击configuration.yaml按钮 - 下方 Set A theme 选择你要的主题 - 即时生效

自动调用,这里预习一下将学习的自动化知识吧

在 configuration.yaml 文件中添加如下配置,注意与 homeassistant平级:

automation:

  • alias: ‘Set theme at startup’
    initial_state: ‘on’
    trigger:

    • platform: homeassistant
      event: start
      action:
      service: frontend.set_theme

    data:
    name: happy #主题名称

相信到这里,大家的ha 界面已经楚楚动人了,

HA 除了预设的个性化配置甚至还提供了自定义卡片,自定义面板 等等接口,你可以在卡片中显示徽章,可以使用全文字面板控制设备甚至可以修改硬核代码实现各种动态效果,简直是促使程序员们脑洞大开

20221220-HomeAssistant树莓派-高级篇一

本篇简短教程姑且一步登天,和各位程序员 讨论如何活用HA 中强大的command line 组件以快速实现期望的功能

初学乍练

HA 之中接入一个设备往往需要经由 平台 组件,这一流程,过程十分繁琐,有时我们只是想运行一些简单的python代码,或者只是想测试一下效果,因此完全没有必要特别去创建平台

HA 为此特别提供了名为command line 的传感器组件,这个强无敌的组件能让你在ha 中运行任何支持该平台的命令,还可以显示输出结果

同其他传感器一样,使用command line 只需在configuration.yaml 中添加如下配置

sensor:

  • platform: command_line
    command: SENSOR_COMMAND
    HA 官方给出了一些简单的应用例子,我们不妨来看一下:

显示CPU温度

我们知道在树莓派终端中输入 cat /sys/class/thermal/thermal_zone0/temp 指令便可以获取 CPU 温度的千倍值,想让 HA 运行指令只需将其写入配置文件中。

1
2
3
4
5
6
sensor:
- platform: command_line
name: CPU Temperature
command: "cat /sys/class/thermal/thermal_zone0/temp"
unit_of_measurement: "°C"
value_template: '{{ value | multiply(0.001) }}'

重启HA 后,ha 便会添加一个sensor.CPU_Temperature的传感器,之后就和其他组件一样,可以对其随意个性化配置

抓取HA 最新版本信息

HA 的包上传在 PyPI 上,自然版本信息也包括在内,通过抓取便可轻易获得。

sensor:

同理,HA 内会生成名为sensor.HA_release 的传感器组件,该例中,我们简单涉及了一些数据抓取的技巧,在ha 内其实提供了一个特别的用于数据抓取的组件,Scrape Sensor 这里也简单介绍一下

渐入佳境

Scrape Sensor 组件顾名思义是用来抓取(刮削)数据的,但是实测下来,效果有限。

基本配置如下:

sensor:

稍有前端基础的朋友应该很快就可以明白其意思,最后的select 可以设定需要抓取的类或者是对象

比如你是IFTTT 的重度患者,想要在ha 前端显示所用的applets 的情况,就可以这样配置

sensor:

摸清楚原理,我们很快就会意识到 scrape 只能用来刮削结构简单的静态网页,一旦网页稍微复杂一些,数据根本无法被 select 出。

小试牛刀

说了那么多官方示例,现在轮到我们自己动手实践了

command line 的本质还是辅助性组件,想要指望其运行复杂的代码显然是不切实际的,个人认为该组件的重点在于信息展示上,因此也不难理解官方给出的例子都与数据抓取多多少少有一些关系

HA 是建立在python之上的,配合各类库的使用,python的数据抓取能力十分强大

Command line 既然是HA 里的小中断,那么自然支持运行外置代码文件

作为长在海边的孩子,自己对潮汐情况比较关注。HA 的部分天气组件提供了潮汐数据,但涉及汉化、挑选和适配传感器,操作起来十分麻烦。于是我想到直接写一小段 Python 代码抓取潮汐数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from bs4 import BeautifulSoup
import requests
import time

#日期格式化
d = time.strftime("%Y-%m-%d", time.localtime())

#港口代码,前往 http://www.chinaports.com/chaoxi/ 取得
port_code = 122
port_code = str(port_code)

#获取数据
html = requests.get("http://www.chinaports.com/chaoxi/" + d + "/" + port_code).content
soup = BeautifulSoup(html, "html5lib", from_encoding="utf-8")
result = soup.find("table", class_="tidaltable")
detail = result("td")

#打印数据
count = len(detail)
if count == 8:
first_height = int(detail[5].string)
second_height = int(detail[6].string)
if first_height > second_height:
print ("涨潮:" + detail[1].string + " " + detail[3].string + ";退潮:" + detail[2].string)
else:
print ("涨潮:" + detail[2].string + " " + ";退潮: " + detail[1].string + " " + detail[3].string)
else:
first_height = int(detail[6].string)
second_height = int(detail[7].string)
if first_height > second_height:
print ("涨潮:" + detail[2].string + " " + detail[4].string + ";退潮:" + detail[1].string + " " + detail[3].string)
else:
print ("涨潮:" + detail[1].string + " " + detail[3].string + ";退潮:" + detail[2].string + " " + detail[4].string)

这段代码使用了beautifulsoup4 库,比起scrape senso 抓取、整理数据的能力自然强了

看过这个小例子,相信各位程序员已经摩拳擦掌了。除了 Sensor 以外,Command-Line 还支持 Switch,Cover 等等 platform,详见组件页。由于精力有限,我没有测试其他语言的代码在 Command Line Sensor 中的运行情况,其它 platform 也还未认真钻研。可以肯定的是,该组件大大提升了 HA 的广度和深度,令人不禁想好好玩弄一番呢~

期待各位派友运用 Command Line 实现新颖的功能,欢迎留言分享与讨论。

20221220-HomeAssistant树莓派-小米篇

想要一统江湖,我们只需关心设备的传输协议即可

目前有一个简单粗暴的标准,即如果一个设备需要小米多功能网关才可以使用,一般来说它采用的是zigbee协议,那么只要网关接入了HA 就可以完美适配,而如果一个设备是独立接入网络的,比如米家的wifi 插座,扫地机器人,yeelight 灯具等等,我们则需要单独在hass 里接入它们

本篇教程将介绍将小米接入HA 的方法,如果你打算通过HB直连,请参考渣渣米大大的教程

表格使用 Google SpreadSheet 编辑,将会不断更新。国内朋友可访问『坚果云』获取。在此欢迎各位派友向我提供支持信息或内容纠正,直接在表格内评论即可。

下面我们以传输协议为划分标准,分别介绍小米设备接入智能家居系统的方法,详细完整的全系接入方法
Home Assistant 中文文档

需要提点的是,今后只要是Wifi的设备,都将通过 xiaomi_miio接入,Zigbee 设备则统一是 xiaomi_aqara。

ZigBee 设备 网关类设备

以小米多功能网关第二代 为代表的网关类设备是大部分 米家 及 绿米 aqara zigbee 设备的联动基础,也是整个米家智能家居系统的核心,除多功能网关外,空调伴侣和Aqara 监控摄像头都具备网关功能

打开米家 app,连接设置多功能网关,点击进入网关页面,点击右上角「…」,进入「设置」。点击第二行「关于」,狂点空白处,便会跳出「局域网通信协议」以及「网关信息」。进入「局域网通信协议」,打开开关,记录下密码,这就是之后待填的「key」。回到上级页面,进入「网关信息」,记录下 mac 地址,这就是之后待填的「sid 或 mac」。

HA 0.50.0 及之后版本已经添加对米家平台的官方支持,我们只需要直接配置即可,如果之前有复制 custom_components 文件夹的同学,升级后请删除该文件夹

此设置适用于 HA 0.54.0版及之后

xiaomi_aqara:
gateways:
- mac: MAC 地址 (地址不带 “-“ 或 “:” ,行首的「-」必须保留)
key: 通讯密码
如果你有多个网关,则按以下格式设定:

xiaomi_aqara:
gateways:
- mac: xxxxxxxxxxxx
key: xxxxxxxxxxxxxxxx
- mac: xxxxxxxxxxxx
key: xxxxxxxxxxxxxxxx
重启后,HA 主界面将会自动识别网关及捆绑的所有设备。

Yeelight 灯具

yeelight 目前已经从小米独立出来,运作良好,原生支持google assistant 等平台, yeelight 在ha 中支持色温,色彩、亮度等控制,基本实现全品支持

配置前请先在yeelight app 中打开 局域网控制 LAN Control 服务器选择中国大陆,新加坡皆可,注意如果所选服务器与米家app 中不同,则设备无法接入米家app,但不影响在yeelight app 及ha 中的控制

之后重启HA 重启前请打开灯具,稍等积分中,确认一下设备是否已经被HA 自动识别添加,如果是的话,皆大欢喜,什么都无需再做了;如果没有,请打开configuration.yaml文件,在合适位置添加如下字段:

light:

  • platform: yeelight
    devices:
    192.168.1.25: #Yeelight灯具ip
    name: Living Room #昵称
    transition: 1000
    use_music_mode: True #音乐随动模式,默认关闭
    以上 2 个是最常见的具有统一平台的设备适配,下面是使用 WiFi 传输协议设备的具体配置方法:

获取 token

所有的小米wifi 设备都必须先取得设备的token 方可接入HA ,以下简要介绍获取token 的方法之一,

首先在安装有node js 的电脑上安装miio 库

sudo npm install miio

之后,重置 待连小米设备的网络,使其产生wifi 热点,将电脑连接至该热点上,之后输入

miio –discover

即获取设备的token, 请集中保存,获取token 后,如需绑定米家 app 请直接在qpp 中添加设备,切勿继续重置设备,否则token 将重新生成,原有token 将失效

米家扫地机器人

HA 原生支持米家 和石头扫地机器人2nd 使用专门的类vacuum

按照上方教程获取扫地机的 token,之后在 configuration.yaml 中填入以下配置:

vacuum:

  • platform: xiaomi_miio
    name: ‘***’ #昵称
    host: 192.168.1.2 #ip
    token: R@#RT$TFEW #token

空气净化器

HA 目前原生支持2代空气净化器,暂不支持pro 版

按照上方教程获取空气净化器的 token,之后在 configuration.yaml 中填入以下配置:

fan:

  • platform: xiaomi_miio
    name: Xiaomi Air Purifier 2
    host: 192.168.130.66
    token: YOUR_TOKEN

空调伴侣

米家和aqarq 均发布了自己品牌的空调伴侣,除外观差异外,内核并无不同,,小米已于今日固件更新中开发空调伴侣的 局域网通信协议,空调控制和网关功能请分别使用各自插件接入,

另,目前插件仅支持部分空调品牌的部分预设模式,详见插件说明页,未支持的型号请自行抓包空调码。

Home Assistant 中空调伴侣以自定义组件的方式加入,此组件为爱好者 Mac_zhou 制作,欢迎大家前往 项目地址 点赞。

插件使用前需获取设备的 token:进入『米家』应用,点击空调伴侣,选择右上角『•••』—— 『关于』—— 狂点空白区域 —— 网关信息 “token=xxxxxxx”即是 。

将 Github 中的对应文件放入文件夹,层级与 Github 中展示一致,之后在配置文件中增加以下配置:

climate:
- platform: mi_acpartner
name: mi_acpartner
host: 10.0.0.234 #ip地址
token: ****** #token
target_sensor: sensor.temperature_158d00015aefc4 #温度传感器 ID
target_temp: 26 #目标温度

组件由国人制作,readme 文件以中文书写,这里我就不再作变量说明了

wifi 插座及智能插线板

0.56.0的更新带来了插座的支持,接入前先获取设备的token
具体方法见前文。之后,在 configuraiton.yaml 添加如下设置:

switch:

  • platform: xiaomi_miio
    name: Original Xiaomi Mi Smart WiFi Socket
    host: 192.168.130.59
    token: YOUR_TOKEN
    这英文简单得不能再简单了,我就不做变量说明了。

净水器

小米净水器插件由 bit3725 制作,欢迎前往 项目 点赞~
使用方法:从 Github 下载 mi_water_purifier.py,放入 custom_components/sensor/ 文件夹内(文件层级项目本身已经很清晰地给出了),在 configuration.yaml 添加如下设置:

sensor:

  • platform: mi_water_purifier
    host: YOUR_SENSOR_IP
    token: YOUR_SENSOR_TOKEN
    name: YOUT_SENSOR_NAME
    接入后自动会生成几项相关的传感器数值,如果需要集中查看,请使用群组:

group:

  • xiaomi_water_purifier:
    name: Xiaomi Water Purifier
    icon: mdi:water
    entities:
    • sensor.tap_water
    • sensor.filtered_water
    • sensor.pp_cotton_filter
    • sensor.front_active_carbon_filter
    • sensor.ro_filter
    • sensor.rear_active_carbon_filter
      PM 2.5 监测仪
      PM 2.5 监测仪插件由 bit3725 制作,欢迎前往 项目 点赞~

使用方法:从 Github 下载 mi_air_quality_monitor.py,放入 custom_components/sensor/ 文件夹内(文件层级项目本身已经很清晰地给出了),在 configuration.yaml 添加如下设置:

sensor:

  • platform: mi_air_quality_monitor
    host: YOUR_SENSOR_IP
    token: YOUR_SENSOR_TOKEN
    name: YOUT_SENSOR_NAME

20221220-HomeAssistant树莓派-设备接入篇

在开始配置教程前,我先帮助大家捋一捋HASS 的配置框架

HASS配置框架

HASS的核心配置围绕configuration.yaml 文件展开,在这里你可以进行时区、度量单位、开发者模式、主题选择等等基础配置,淡然,最为重要的,你将在该文件内完成所有设备的接入 这也是本篇教程的重点

HASS 的运行以来一个个相对独立的功能组件,比如小米米家平台就可以视作一个组件,有些时候,部分设备或者功能仍未得到hass 的官方支持,你必须在主目录下新建自定义组件custom_components 文件夹,添加相关的设备支持文件

完成上述的文件修改,加上HB 的配置,你就可以自如控制所有智能家居设备了

然而,使用一段时间后,你可能觉得设备太多显示凌乱,想给界面换个风格,或者configuration.yaml 文件
看起来要炸了,此时,你会考虑把部分配置剥离出去形成独立的文件,
例如你开启了设备追踪功能,Device Tracker 那么HASS 将在主文件下自动生成known_devices.yaml 文件,你将在这里设置需要追踪的设备,

主文件设置

上一篇教程中我们已经打开了树莓派的 SMB 服务,现在我们通过 SMB 打开 HASS 主目录。
(macOS 在 FInder 左侧栏“共享的”接入,Windows 在 计算机-地址栏 里直接输入 //树莓派地址 即可跳转)
打开configuration.yaml,文件默认包含如下内容,我们按需修改:

homeassistant:
#经纬度
latitude: 32.87336
longitude: 117.22743
#海拔
elevation: 430
#度量单位,默认米
unit_system: metric
#时区
time_zone:Asia/Shanghai
#系统昵称,显示在主界面顶部
name: Home

正常情况下,剩下的部分便无须变动了,现在添加雅虎天气服务

weather:

  • platform: yweather
    woeid:2151849

其中,woeid是城市代码,打开雅虎天气官网输入城市后搜索,url的最后几位数字便是

保存 重启 hass

homebridge 设置

注意,如果添加了开机自启任务,勿重复运行homebridge 否则会出现端口占用错误

homebridge-homeassistant 插件版本为2.3.0 以上的,特别注意添加最后一行配置,否则家庭app 内设备为空

cd /home/pi/.homebridge
sudo nano config.json
{
“bridge”: {
“name”: “Homebridge”,
“username”: “CC:22:3D:E3:CE:30”, //树莓派 mac 地址
“port”: 51826, //运行端口
“pin”: “123-45-678” //连接密码,自行设定
},
“platforms”: [
{
“platform”: “HomeAssistant”,
“name”: “HomeAssistant”,
“host”: “http://127.0.0.1:8123", //HA 运行的网址,可以是 ip 也可以是域名
“password”: “raspberry”, //HA 的 api_password,及密码,如有设置请添加
“supported_types”: [“automation”, “binary_sensor”, “climate”, “cover”, “device_tracker”, “fan”, “group”, “input_boolean”, “light”, “lock”, “media_player”, “remote”, “scene”, “sensor”, “switch”],
“default_visibility”: “visible” //特别注意此项
}
]
}

ctrl+x,y,回车。之后清除 Homebridge 的缓存:

sudo rm -rf /home/pi/.homebridge/persist/
请大家记住此步指令,今后若出现重新配置 HA、HB 导致 iOS 设备无法识别新设备或树莓派的,大部分情况均可以使用此指令解决。

这样我们就完成了 Homebridge 的设置,重启Homebridge:

sudo systemctl restart homebridge

经过上述设置,我相信你的智能家居设备已经在ha 和hb 里稳定运转了,

首先,这个问题只存在 iOS 以及未来的 macOS 用户身上,因为只有你们可以使用 Siri,才可以痛并快乐着。 对于其他终端系统的用户而言,要么和设备厂家的 app 斗智斗勇,要么享受 HA 网页操控的快感,至于语音控制,就还需等待了。

其次,以米家设备为例,同是网关,HA 可以控制夜灯功能,获取光感数据,Homekit 则不能;而针对扫地机器人,HASS 的接入方法十分复杂,且现阶段只能实现开关功能,HB 的插件安装配置更为容易,且可以控制吸力……可以说两个平台之间没有绝对的胜者,都需要具体情况具体分析。个人认为大多数情况下,HA 对设备的支持更好,并且基于社群支持,跟进速度也更快。

设备追踪设置

HA 可以追踪同一路由器内网设备联网状态,我们转换一下思路,便可以利用这个系统判断家人是否在家等,非常方便

1
2
3
4
5
6
device_tracker:
- platform: asuswrt (按需填写,小米为“xiaomi”,Netgear为“netgear”,TP-LINK为“tplink”)
host: 192.168.xx.1 #路由器Ip
username: ***** #管理员账号
password: ****** #管理员密码
track_new_devices: no #是否自动添加新设备

不出意外,重启 HASS 后,主文件夹下便会自动生成 known_devices.yaml 文件,打开之后你会发现,系统已经自动为嗅探到的连接到路由器的设备添加了默认配置:

1
2
3
4
5
6
devicename: 
name: Friendly Name #昵称
mac: EA:AA:55:E7:C6:94 #mac地址
picture: https://home-assistant.io/images/favicon-192x192.png #图片icon: mdi:human-female #图标,和图片取一个设置
track: yes #是否追踪
hide_if_away: no #离开后是否自动隐藏

在接下来的教程中,我将指导大家如何进行自动化配置,真正实现人工智能,摆脱遥控的束缚,更换主题,展现个性,设置简洁大方的控制面板等等

20221220-树莓派魔镜

材料准备

树莓派3 魔镜的神经中枢

usb麦克风

显示屏 不论通过什么渠道取得的显示屏,在这里都建议自带hdmi 接口并侧面出口,剩下转接头的钱和空间,也方便未来背面走线

如果考虑入触摸屏建议一步到位,目前面向树莓派生产的触控屏最大能到10寸左右,价格在400至500元。加装触摸屏,务必要考虑好触摸类型,因为最上面还需要覆盖一块单透镜。建议优先使用红外触摸,有能力在外框安置感应条即可;其次压敏,但是要考虑镜子的导电性;压感在覆盖镜子的前提下,基本不可能实现。

驱动板+喇叭, LCD 屏需要加配高压条,一般来说近几年的屏幕都是LED 了,但还是要具体问题具体分析

单向透视镜

俗称原子镜,就是大家看的美剧里审讯室用的镜子,魔镜的“大脸”。目前,适配屏幕尺寸的单透镜需定制,价格较昂贵。定制时建议优先选择厚度较薄、透光率较强的镜面,否则会影响日间魔镜的展示效果。

囊中羞涩的派友也可使用镜面贴膜曲线救国,效果参考汽车车窗贴膜,但透视效果较差。

镜框

电源

整套魔镜系统需要电源驱动的部件有树莓派,驱动板和显示屏,后两者并一体讨论,驱动板在外接喇叭的前提下,usb 供电接口无法为树莓派供电,因此必须独立供电树莓派,显示屏所需电源为12V5A 大家在购入电源适配器是务必看准电压电流、并兼顾走线,
有能力者,可手动并线

可选材料

智能插座

超短HDMI 线

工具 螺丝刀 电工胶布,泡棉胶

显然,大部分的工作都集中在底层,我们需要把树莓派、驱动板等等部件合理安置在显示屏背部

喇叭布置于头部,直立后出声位置位于上方,更具现实感。树莓派布置在底端,保证USB麦克风的收音效果,且方便拿取。中部安放驱动板,方便走线。
这里省略了一步操作,建议先将驱动板随附的控制板连接至驱动板,选定输入源、调整好音量后拔下,以节约背板空间。

上述工作完成后,依次将单透镜和显示屏置入镜框内,扣入夹片固定好,避免松动。

  • Copyrights © 2015-2024 TeX_baitu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~