【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

流程图

开始

初始化

连接EMQX

主循环

读取温度

构建JSON报文

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 平台的相关流程,包括流程图、代码、效果演示等。

流程图

开始

初始化

创建MQTT客户端

连接EMQX

触发HA配置

主循环

读取温度

构建JSON报文

发布主题

终端打印

延时

代码

终端执行 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 温度的物联网实时监测的项目设计,为相关产品在工业物联网、智能家居、消费电子等领域的快速开发和产品应用提供了参考。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐