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 实现新颖的功能,欢迎留言分享与讨论。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 TeX_baitu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~