【VisionFive 2 Lite 单板计算机】SoC 温度的 Home Assistant 物联网终端显示

【VisionFive 2 Lite 单板计算机】SoC 温度的 Home Assistant 物联网终端显示

本文介绍了昉·星光 VisionFive2 Lite 单板计算机结合芯片内置温度传感器获取 SoC 温度数据,并通过 MQTT 协议完成温度的云端上传,以及接入 Home Assistant 智能家居平台,实现 SoC 温度的物联网实时监测的项目设计。

项目介绍

通过 Python 编程和芯片内部传感器获取 SoC 温度,并通过 MQTT 协议上传至 Home Assistant 平台,实现物联网远程实时温度监测。

  • 准备工作:硬件连接、Docker、HA、EMQX部署等;

  • SoC 温度:获取芯片内部温度并终端打印;

  • MQTT 上传:将 芯片温度数据由 MQTT 协议上传至 EMQX 服务器并远程访问;

  • Home Assistant 连接:将芯片温度通过 MQTT 协议上传至 HA 智能家居平台。

准备工作

包括硬件连接、Docker安装、HA 和 EMQX 部署等。

硬件连接

系统安装

安装和烧录 VisionFive2 Lite 官方 Ubuntu 操作系统。

详见:VF2 Lite 系统安装 .

Docker

电脑主机或服务器安装 Docker 软件。

Home Assistant

通过 Docker 拉取 Home Assistant 镜像文件;

 docker pull homeassistant/home-assistant:latest
  • 启动容器
 docker run -d \
  --name hass \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -v /data/homeassistant/config:/config \
  --network=host \
  homeassistant/home-assistant:latest
  • 浏览器访问 http://<服务器IP>:8123/ 进入 HA 主页;

  • 配置用户信息,添加 MQTT 集成。

EMQX

通过 Docker 拉取 EMQX 镜像文件;

 docker pull emqx/emqx:latest
  • 启动容器
 docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest
  • 浏览器访问 http://<服务器IP>:18083/ 进入 EMQX 主页;

  • 配置账户信息,添加客户端及 MQTT 用户。

详见:EMQX添加MQTT客户端 .

SoC 温度

VisionFive2 Lite 内核驱动里,温度传感器挂在 hwmon (hardware monitoring) 子系统。

终端执行如下指令,获取 hwmon 所在路径

 for f in /sys/class/hwmon/hwmon*/name; do
     echo "$f -> $(cat $f)"
 done

回复 /sys/class/hwmon/hwmon0/name -> sfctemp

可知节点为 sfctemp,对应文件路径 /sys/class/hwmon/hwmon0/temp1_input

代码

执行指令 touch chip_temp.py 新建文件并添加如下代码

 #!/usr/bin/env python3
 import time
 ​
 PATH = '/sys/class/hwmon/hwmon0/temp1_input'
 ​
 while True:
     with open(PATH) as f:
         print(f'SoC 温度: {int(f.read()) / 1000:.1f} °C')
     time.sleep(1)

保存代码;

效果

  • 终端执行 python3 chip_temp.py 指令;

  • 连续打印实时 SoC 温度数据

MQTT 上传

消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)是一种基于发布/订阅范式的轻量级消息协议。广泛应用于物联网(IoT)、机器与机器(M2M)通信、智能家居、医疗设备等领域。

下面介绍将获取到的芯片温度数据通过 MQTT 协议上传至云端 MQTT Broker 服务器的相关流程。

准备工作

安装 paho-mqtt 库

 sudo apt install python3-paho-mqtt

流程图

代码

终端执行 touch chip_temp_mqtt.py 新建文件并添加如下代码

 #!/usr/bin/env python3
 import paho.mqtt.client as mqtt
 import time
 import json
 ​
 # ---------------- 参数 ----------------
 HOST  = "192.168.31.116"
 PORT  = 1883
 USER  = "xxx"
 PASS  = "xxx"
 TOPIC = "vf2/temp"
 INTERVAL = 2          # 秒
 TEMP_FILE = "/sys/class/hwmon/hwmon0/temp1_input"
 # -----------------------------------------
 ​
 def read_temp():
     """从 hwmon 读取 SoC 温度,返回浮点摄氏度"""
     with open(TEMP_FILE, "r") as f:
         millideg = int(f.read().strip())
     return round(millideg / 1000.0, 1)
 ​
 ​
 def main():
     client = mqtt.Client()
     client.username_pw_set(USER, PASS)
     client.connect(HOST, PORT, 60)
     client.loop_start()
 ​
     while True:
         temp = read_temp()          # 温度定义
         payload = json.dumps({"temperature": temp})
         client.publish(TOPIC, payload)
         print(payload)              # 终端回显报文
         time.sleep(INTERVAL)
 ​
 ​
 if __name__ == "__main__":
     main()
 ​

保存代码。

效果

终端执行 python3 chip_temp_mqtt.py 运行程序;

终端

  • 程序运行后,终端打印 SoC 温度数据的 JSON 报文;

消息订阅

浏览器访问 http://192.168.31.116:18083 进入 EMQX 控制终端;

左侧工具栏 - 诊断工具 - WebSocket 客户端

  • 填写 ip 地址、端口、用户名、密码,点击 连接 按钮;

  • 订阅 面板中填写主题 vf2/temp

  • 在下方消息框立刻收到 SoC 温度消息;

Home Assistant 连接

Home Assistant 是一个开源的智能家居平台,旨在通过集成各种智能设备和服务,提供一个统一的、可自定义的家庭自动化解决方案。它允许用户监控、控制和自动化家中的各种设备,包括灯光、温度、安全系统、多媒体设备等。

下面介绍芯片温度数据通过 MQTT 协议上传至 Home Assistant 平台的相关流程,包括流程图、代码、效果演示等。

流程图

代码

终端执行 touch chip_temp_mqtt_ha.py 新建文件并添加如下代码

 #!/usr/bin/env python3
 import time, json, os
 import paho.mqtt.client as mqtt
 ​
 # ----------- 可调参数 -----------
 MQTT_HOST = "192.168.31.116"
 MQTT_PORT = 1883
 MQTT_USER = "xxx"
 MQTT_PASS = "xxx"
 CLIENT_ID = "vf2lite-temp"
 DISCOVERY_PREFIX = "homeassistant"   # HA 默认发现前缀
 NODE_ID = "visionfive2lite"              # 设备层节点 ID
 OBJECT_ID = "soc_temp"               # 实体层对象 ID
 TEMP_PATH = "/sys/class/hwmon/hwmon0/temp1_input"
 SEND_INTERVAL = 2                    # 秒
 # -----------------------------------
 ​
 STATE_TOPIC = f"{DISCOVERY_PREFIX}/sensor/{NODE_ID}/{OBJECT_ID}/state"
 CONFIG_TOPIC = f"{DISCOVERY_PREFIX}/sensor/{NODE_ID}/{OBJECT_ID}/config"
 ​
 def read_temp():
     with open(TEMP_PATH) as f:
         return round(int(f.read()) / 1000, 1)
 ​
 def on_connect(cli, _ud, _flags, rc):
     if rc == 0:
         print("MQTT 已连接")
         # 发送自动发现配置
         config = {
             "name": "SoC 温度",
             "state_topic": STATE_TOPIC,
             "unit_of_measurement": "°C",
             "device_class": "temperature",
             "value_template": "{{ value_json.temperature }}",
             "unique_id": f"{NODE_ID}_{OBJECT_ID}",
             "device": {
                 "identifiers": [NODE_ID],
                 "name": "VisionFive2 Lite",
                 "model": "VisionFive2 Lite",
                 "manufacturer": "StarFive"
             }
         }
         cli.publish(CONFIG_TOPIC, json.dumps(config), retain=True)
     else:
         print(f"MQTT 连接失败,返回码 {rc}")
 ​
 def main():
     client = mqtt.Client(client_id=CLIENT_ID)
     client.username_pw_set(MQTT_USER, MQTT_PASS)
     client.on_connect = on_connect
     client.connect(MQTT_HOST, MQTT_PORT, keepalive=60)
     client.loop_start()
 ​
     while True:
         try:
             temp = read_temp()
             payload = json.dumps({"temperature": temp})
             client.publish(STATE_TOPIC, payload, qos=1)
             print(f"已推送温度: {temp} °C")
         except Exception as e:
             print("读取/推送失败:", e)
         time.sleep(SEND_INTERVAL)
 ​
 if __name__ == "__main__":
     main()

保存代码。

效果

终端执行 python3 chip_temp_mqtt_ha.py 运行程序;

终端

  • 程序运行后,终端打印温度数据,以及实时消息推送状态;

卡片

  • 进入 Home Assistant 主界面;

  • 自动加载目标设备,显示 SoC 实时温度信息;

历史曲线

  • 点击卡片,可进一步获取历史演化曲线;

  • 在显示更多链接中,可调整目标查看时间段,以获取更多细节;

此外,可访问 Home Assistant 移动端 APP 获取实时芯片温度信息。

总结

本文介绍了昉·星光 VisionFive2 Lite 单板计算机结合芯片内置温度传感器获取 SoC 温度数据,并通过 MQTT 协议完成温度的云端上传,以及接入 Home Assistant 智能家居平台,实现 SoC 温度的物联网实时监测的项目设计,为相关产品在工业物联网、智能家居、消费电子等领域的快速开发和产品应用提供了参考。

2 Likes