双十一前的折腾:某讯遗产加装无线网卡搞homeassistant网关

近期科研划水严重。一天收拾宿舍发现,年初300+买的带斐某讯标的J1800小主机在桌上吃灰已久,遂拿出来上电开机,这才想起这小破主机里插了专门买的msata固态+128G的microSD卡。当时没想好咋用,但也开机运行着了——买都买了。。。后来看见衣柜里的小米蓝牙温湿度传感器,便有了此文的工作。其实之前已经用树莓派搭过HA网关并且运行了几个月的温湿度记录,不过后来树莓派的存储卡坏掉,温湿度传感器也就闲置了。

正文:

J1800小主机买来相当于准系统,是没有硬盘、无线网卡的。为了增加蓝牙功能,我考虑过买专门的USB蓝牙适配器,不过感觉质量不行,也担心Ubuntu驱动有问题,最后选择了mpcie的无线网卡——2.4G/5G WiFi + 蓝牙4.2都有了,很方便。

吃灰半年多的小主机
49元到手的无线网卡

系统用的是Ubuntu 18.04 LTS,关掉了图形界面,4G内存绰绰有余。HA提供了多种安装方式,包括Docker、刷hass.io/hassbian镜像、Python虚拟环境等等。这里我选择了Python虚拟环境的方式,主要是稍微熟悉一点。参考官方教程,首先安装依赖:

sudo apt-get install python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev

需要注意的是,当前(2019年11月8日)Ubuntu默认的python3是3.6的版本,而一些HA的插件推荐使用python3.7,所以上面涉及python3的地方可以修改为python3.7,安装好后在重新设置系统中python3的符号链接到python3.7(默认指向是3.6)

然后新建名为homeassistant的用户用于HA的运行。其中-rm用于设置home目录的生成。

sudo useradd -rm homeassistant

然后建立目录用于HA的安装。实例的位置是在/srv/homeassistant处,这里由于我们还没有切换到homeassistant的用户,所以还需要chown来修改文件夹的所有者。

cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant

然后切换到homeassistant用户,启动python虚拟环境

sudo -u homeassistant -H -s
cd /srv/homeassistant
python3 -m venv .
source bin/activate

进入虚拟环境后,bash的命令提示符前会增加”(homeassistant)”字样——代表我们此时处于python虚拟环境中。此时使用pip依次安装wheel、homeassistant以及

(homeassistant) homeassistant@$USERNAME:/srv/homeassistant $ python3 -m pip install wheel
(homeassistant) homeassistant@$USERNAME:/srv/homeassistant $ python3 -m pip install homeassistant

理论上讲,安装至此就结束了。在虚拟环境内输入hass命令就可以启动HA了。首次启动HA时还会安装一些包,耗时会稍长一点。由于众所周知的原因,一些包的安装过程中可能遇到网络中断的问题,如果条件允许请采用科学上网方式安装。

(homeassistant) homeassistant@$USERNAME:/srv/homeassistant $ hass

然而实际的情况总会有些变化——hass命令输入后,HA启动过程中报错,错误的信息为:

...
    import hass_frontend
ModuleNotFoundError: No module named 'hass_frontend'
...

此时HA默认的http://localhost:8123管理页面打开是直接提示404的。查HA的GitHub页面发现此bug可通过手动安装HA前端的方式解决:

(homeassistant) homeassistant@$USERNAME:/srv/homeassistant $ pip install home-assistant-frontend

之后就可以正常打开HA的管理页面了。

现在小米蓝牙温湿度计已经被HA官方支持,添加设备十分方便,参照官方教程即可添加。其实主要就是在HA安装目录的configuration.yaml文件里添加这样一段内容:

# Example configuration.yaml entry
sensor:
  - platform: mitemp_bt
    mac: 'xx:xx:xx:xx:xx:xx'
    name: Kids Room Temp
    force_update: true
    median: 3
    monitored_conditions:
      - temperature
      - humidity
      - battery

由于室内温度变化不会十分剧烈,所以默认的刷新时间是5分钟。HA支持对读书值进行平滑来消除探测器的偶然误差——median的值和取滑动窗口中位数的窗口宽度。也就是说,可能需要最长10分钟,我们才能够取得蓝牙温湿度计的读数(median设为3时)。久久没有读数可检查mac地址是否抄对了,然后耐心等待即可。

最终效果:

发表评论

邮箱地址不会被公开。 必填项已用*标注