无垠的广袤 · 1 天前 · 上海

【“星睿O6”AI PC开发套件评测】Docker本地部署EMQX和Home Assistant平台

【“星睿O6”AI PC开发套件评测】Docker本地部署EMQX和Home Assistant平台

本文介绍了瑞莎星睿 O6 (Radxa Orion O6) 开发板通过 Docker 容器实现 EMQX 和 Home Assistant 的本地部署。

项目介绍

  • Docker 安装:网络加速、安装脚本、更换软件源、相关指令和版本检测等;
  • EMQX 部署:镜像获取、容器启动、创建用户以及参数配置等;
  • Home Assistant 部署:镜像拉取、容器启动、参数配置等。

hardware_connection.jpg

Docker

介绍 O6 实现 Docker 部署的主要流程,包括安装脚本的获取与执行、版本检测等。

安装脚本

更换国内软件源

# 添加 Docker 官方 GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加仓库到 Apt 源:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker_aliyun.list > /dev/null
sudo apt-get update
  • 使用官方脚本安装,终端执行指令
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
  • 安装完成后,查询 Docker 版本号
docker -v

docker_install_sh.jpg

软件源

终端执行如下代码,添加镜像源,加速拉取镜像

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com",
        "https://docker.1ms.run",
        "https://func.ink",
        "https://lispy.org",
        "https://docker.xiaogenban1993.com"
    ]
}
EOF

重启 Docker

sudo systemctl daemon-reload
sudo systemctl restart docker

EMQX

EMQX 是全球领先的开源分布式云原生 MQTT 物联网接入平台,支持单机千万级并发、毫秒级延迟,为万物互联提供高可靠、高可用的消息总线底座。

介绍了部署 EMQX 容器的主要流程,包括增加软件源、镜像拉取、容器启动、个性化配置等。

部署方案

在添加软件镜像源的基础上,终端执行如下指令,拉取最新版 emqx 镜像

sudo docker pull emqx/emqx:latest

docker_pull_emqx.jpg

启动容器

终端执行如下指令,启动 EMQX 容器

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

docker_run_emqx.jpg

  • 浏览器输入网址 http://<IP>:18083 ,如 http://192.168.1.107:18083
  • 进入 EMQX 界面,初始账号 admin 密码 public
  • 首次登录会提示更新密码并进入概览界面

docker_emqx_cover.jpg

  • 若要停止/启动/重启 EMQX,则执行指令
sudo docker stop emqx       # STOP
sudo docker start emqx      # RUN
sudo docker restart emqx    # Restart

创建用户

创建客户端

  • 依次打开 访问控制 - 客户端认证 - 创建 - Password-Based - 内置数据库 - (默认配置)- 创建

创建用户

  • 用户管理 - 新建用户 - 自定义用户名和密码 - 保存.

docker_emqx_client_create.jpg

Home Assistant

镜像获取

拉取 HA 镜像,终端执行

sudo docker pull homeassistant/home-assistant:stable

docker_pull_ha.jpg

启动容器

HA 镜像拉取完成后,终端执行如下代码,启动容器

docker run -d \
--restart always \
--name homeassistant  \
-v /data/homeassistant/config:/config \
-e TZ=Asia/Shanghai   \
-p 8123:8123   \
homeassistant/home-assistant:latest

docker_run_ha.jpg

参数配置

  • 浏览器输入网址 http://<IP>:8123,如 192.168.1.107:8123
  • 进入 HA 主界面(首次打开需进行注册),输入用户名、密码等信息;
  • 配置完成后进入 HA 概览 标签页;

docker_ha_cover.jpg

工程测试

将 SoC 温度通过 MQTT 协议上传至 HomeAssistant 平台,实现物联网 SoC 温度实时监测。

安装软件包

sudo apt install python3-paho-mqtt

流程图

flowchart_ha_soc_temp.png

代码

终端执行指令 touch soc_temp_mqtt_ha.py 新建文件,添加如下代码

#!/usr/bin/env python3
import time, json
import paho.mqtt.client as mqtt

# ----------- parameters -----------
MQTT_HOST = "localhost"
MQTT_PORT = 1883
MQTT_USER = "xxx"
MQTT_PASS = "xxx"
CLIENT_ID = "o6_soc_temp"
DISCOVERY_PREFIX = "homeassistant"
NODE_ID = "O6"
OBJECT_ID = "soc_temp"
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, *_):
    config = {
        "name": "SoC Temp",
        "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": "O6",
            "model": "Orion O6",
            "manufacturer": "Radxa"
        }
    }
    cli.publish(CONFIG_TOPIC, json.dumps(config), retain=True)
    print("MQTT Connected")

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()
            client.publish(STATE_TOPIC, json.dumps({"temperature": temp}), qos=1)
            print(f"Send temperature: {temp}   C")
        except Exception as e:
            print("Read/send failed:", e)
        time.sleep(SEND_INTERVAL)

if __name__ == "__main__":
    main()

保存代码。

效果

  • 终端执行指令 python3 soc_temp_mqtt_ha.py 运行程序,终端打印 SoC 温度

    o6_soc_temp_ha_print.jpg

  • HA 概览界面自动加载 MQTT 传感器设备

    o6_soc_temp_card.jpg

总结

本文介绍了瑞莎星睿 O6 开发板通过 Docker 容器实现 EMQX 平台和 Home Assistant 的本地部署,包括软件源加速、Docker 安装、EMQX 部署、Home Assistant 镜像拉取、容器启动和参数配置等流程,为相关产品在物联网 IoT 领域的快速开发和应用设计提供了参考。

推荐阅读
关注数
2
文章数
15
MCU 开发者和爱好者
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息