GeekPad 智慧屏连接到VirtualBox的Ubuntu虚拟机上的Home-Assistant
GeekPad是新房装修时买的,用的时候才发现没法用app控制(能用语音控制,但是那效果谁用谁知道,经常说了半天,还是需要亲自下床按下开关),说是还需要小米的蓝牙网关。算了,这个智慧屏本身才100多点,再花200多买个小爱音响或小米路由那就太不划算了。本人已经有天猫精灵了。还是看看有没有其他办法,在GeekPak里找了半天,发现只有MQTT有IP和端口设置,看来似乎可以用来联网。本人要求也不高,能在局域网(也就是说,GeekPad智慧屏,手机,电脑需要连到同一个网关/路由上)里控制开关就可以了。
昨天折腾了一天,终于可以在电脑上用home assistant控制GeekPad智慧屏上面的三个开关了。现在把主要的步骤记录一下:
- 安装VirtualBox开源软件,这个不多说了,直接找官网
- 下载Ubuntu镜像文件,然后在VirtualBox里安装Ubuntu,需要安装22.04版本,老版本在驱动方面可能有问题,不建议安装(一点提示:据说虚拟机对硬盘寿命有影响,有这个担心的可以买个USB盘,把虚拟机转移到USB盘里)
- 安装后先不启动,选中Ubuntu后,点击上面的控制选项,再选中设置菜单
- 点击网络选项,选桥接网络,然后选windows下的无线网卡
- 检查从windows到Ubuntu能相互Ping通,前面在windows下进行,下面的操作都在ubuntu上进行
- 安装MQTT服务,启动服务
- sudo apt install curl
- 下载EMQX repository:curl –s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
- 安装:sudo apt-get install emqx
- 运行:sudo systemctl start emqx
- 打开网页:localhost:18083,登陆,修改密码
- 再下来安装home assistant
-
升级python版本到3.12
-
sudo apt install -y software-properties-common build-essential libbz2-dev libssl-dev libreadline-dev libsqlite3-dev libncurses5-dev libgdbm-dev libnss3-dev libatk1.0-0 libx11-xcb1 libxkbcommon0 libxrender1 libxext6 libx11-6 libxfixes3 libxdamage1 libxcomposite1 libxcursor1 libxrandr2 libpangocairo-1.0-0 libpango-1.0-0 libgtk-3-0 libdbus-1-3 libexpat1 liblzma5 zlib1g libffi-dev libdb-dev libgdbm-dev liblzma-dev tk-dev uuid-dev libnsl-dev zlib1g-dev
-
wget https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tgz
-
tar -xf Python-3.12.7.tgz(备注:如果输入一个长的文件名,文件夹里已经有了,可以在中间试着按下Tab键,如果没有重名或异议的文件名,系统会自动补全)
-
cd Python-3.12.7
-
./configure
-
make -j $(nproc)
-
sudo make altinstall
-
sudo ln -sf /usr/local/bin/python3.12 /usr/bin/python3
-
sudo ln -sf /usr/local/bin/python3.12 /usr/bin/python
-
sudo ln -sf /usr/local/bin/pip3.12 /usr/bin/pip3
-
sudo ln -sf /usr/local/bin/pip3.12 /usr/bin/pip
-
sudo apt-get install -y libcairo2-dev gir1.2-gobject-2.0 libgirepository1.0-dev
- pip3 install PyGObject
-
- 下载安装home assistant
- sudo apt install git
- git clone https://github.com/home-assistant/core (如果暂时无法访问,等会再试吧,没必要再去搞一个VPN啥的)
- cd core
- script/setup
- 运行下面2句来启动home assistant,后面启动时别忘了先进入core文件夹
- source venv/bin/activate
- hass -c config
- 浏览器访问127.0.0.1:8123
- 继续打磨:第三步执行的时候需要输入两次命令,比较麻烦,其实可以改进一下
- 改进1,该方法启动终端自动启动服务,要退出按Ctrl+C:
- nano ~/.bashrc
- 导航到最后一行,回车
- 添加三行代码
- 第一行“cd ~/Documents/core"(我的文件放在Documents下面了,请按实际情况修改,文件夹名字如果有中文字符请安装中文输入法)
- 第二行”source venv/bin/activate"(备注:用deactivate退出环境)
- 第三行"hass -c config"
- 然后按Ctrl+O加回车键保存,按Ctrl+X退出
- 这样的话,打开Terminal就会自动运行home assistant服务了
- 改进2:
- 建一个bash文件
- 将三行代码添加到bash文件
- 在终端运行bash文件启动服务
-
- 在Ubuntu中找到有线连接IPV4地址(类似192.168.0.22),把地址填写到GeekPad的MQTT网址栏,端口原来的数据不要修改,退出设置,自动重启
- home assistant启动后设置好用户名,密码,在MQTT服务开启的情况下,点击设置->设备与服务->添加集成,搜索MQTT然后添加,输入IP地址和端口
- 可以看到标签下面有一个设备和三个实体。点击设备进入可以看到设备信息,控制按钮和日志如下图。好了试下效果吧。
如果想在手机上控制,可以安装安卓版的home assistant, 当然手机上能控制的前提是电脑上的MQTT服务和home assistant服务都在运行的情况下面,另外手机,智慧屏和电脑都需要在同一个网段(连到同一个路由器上)。
最后再多说一句,MQTT是通过发布和订阅的模式来获取消息和执行相应的动作的(感兴趣的同学可以参考下Bilibili上ROS方面的介绍),因为项目都是通过下载源码后再编译的,后期如果需要修改的话也比较方便。另外home assistant里面也有开发者工具和通信的log信息,方便个人照样子修改。希望后期有人做出更好的界面或则应用。