ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

闲置魔百盒M401A刷Armbian,零成本打造本地Home Assistant智能家居中枢

闲置魔百盒M401A刷Armbian,零成本打造本地Home Assistant智能家居中枢 家里那台魔百盒M401A在电视柜底下躺了快两年运营商宽带到期之后它就成了纯纯的电子垃圾——开机广告两分钟、系统卡到遥控器按下去要等三秒才有反应、装个第三方应用还要被各种限制。直到有天我在折腾智能家居的时候突然意识到这玩意儿的硬件配置其实并不差晶晨S905L3A的主控、2GB内存、8GB存储、自带百兆网口和双频WiFi跑一个轻量级的Linux系统加上Home Assistant完全够用。于是就有了这个项目——把它刷成Armbian再装上Home Assistant Supervised做成一个真正能用的智能家居中枢。这个方案的核心价值在于用接近零成本的方式获得一台7×24小时在线的本地化智能家居控制中心。所有自动化逻辑、设备状态、历史数据全部跑在本地不依赖任何云服务断网也能正常执行自动化。适合那些手里有闲置机顶盒、想入门智能家居但不想花大价钱买NUC或者树莓派的朋友。当然前提是你愿意花点时间折腾——整个流程从刷机到HA跑起来顺利的话一个下午能搞定不顺利的话可能要折腾两三天。下面我把整个过程中踩过的坑和验证过的方案完整梳理一遍。1. 为什么偏偏选魔百盒M401A来做这件事1.1 硬件底子与功耗的平衡点魔百盒M401A这个设备在二手市场上大概三十到五十块钱就能收到配置是晶晨S905L3A四核Cortex-A53处理器主频1.9GHz2GB DDR4内存8GB eMMC存储。这个配置放在电视盒子领域属于入门级但拿来跑Armbian和Home Assistant Supervised却刚好卡在一个很舒服的位置上。Home Assistant Supervised的官方最低要求是2GB内存和32GB存储但实际跑起来你会发现内存2GB是够的存储8GB就有点紧张了。我实测下来Armbian系统本身占掉大约2.5GBDocker引擎加HA Supervised的相关容器占掉大约3GB剩下的空间装几个常用的Add-on比如Mosquitto、Node-RED、ESPHome就差不多满了。所以如果你打算长期用建议通过USB接口外挂一个U盘或者移动硬盘来扩展存储把Docker的数据目录迁移过去。功耗方面M401A整机运行时的功耗大约在3到5瓦之间一年电费不到三十块钱。相比之下一台二手迷你主机动辄15瓦以上的功耗长期开机的成本差距还是很明显的。而且它没有风扇完全静音放在卧室或者客厅都不会有噪音干扰。1.2 晶晨芯片的刷机生态成熟度选M401A的另一个重要原因是晶晨S905系列芯片的刷机资料极其丰富。晶晨官方提供了USB Burning Tool这个刷机工具社区里针对S905L3A的Armbian镜像也有现成的构建版本。你不需要自己去编译内核或者适配设备树直接下载别人编译好的镜像写入U盘或者eMMC就能启动。相比之下海思Hi3798系列的机顶盒虽然硬件配置也不错但刷机工具和镜像资源的获取难度要大得多很多型号甚至找不到可用的Armbian镜像。瑞芯微RK3368的方案也有类似的问题。所以如果你手里有多个闲置盒子优先选晶晨芯片的型号来折腾。不过要注意的是M401A有几个不同的硬件版本主要区别在于WiFi模块和eMMC芯片的型号。有些批次的WiFi模块在Armbian下驱动不了需要额外加载固件。我手上这台是较新的批次WiFi芯片是RTL8822CS在较新的Armbian内核里已经包含了驱动开箱即用。如果你的是老批次可能需要用网线连接或者换一个USB WiFi网卡。1.3 和树莓派、NUC方案的对比很多人会问为什么不直接买个树莓派4B或者二手迷你主机我列一个简单的对比表方案硬件成本功耗性能折腾难度适合人群魔百盒M401A30-50元3-5W够用中等愿意折腾的入门玩家树莓派4B 2GB300-400元5-8W较好低不想折腾的新手二手迷你主机200-400元10-20W很好低追求性能的用户从表格里可以看出来M401A方案的核心优势就是便宜。如果你只是想入门智能家居不确定自己能不能坚持用下去花几十块钱试错成本极低。而且刷机过程中学到的Linux操作、Docker使用、网络配置等技能对你后续升级到更好的硬件也是有帮助的。2. 刷机前的准备工作与工具选型2.1 必须准备的硬件和软件清单在开始之前你需要准备以下东西硬件部分魔百盒M401A一台废话一个8GB以上的U盘用于制作启动盘一个USB转TTL串口模块CH340G或者CP2102芯片的都可以大概十块钱杜邦线若干母对母一把小十字螺丝刀拆机用一台电脑Windows系统用于运行刷机工具网线一根建议用有线连接稳定性更好软件部分Amlogic USB Burning Tool v2.2.0或更高版本适用于S905L3A的Armbian镜像推荐使用社区维护的bullseye或bookworm版本balenaEtcher或者Rufus用于写入U盘镜像SSH客户端Windows下可以用PuTTY或者Windows Terminal自带的ssh命令一个文本编辑器用来改配置文件注意USB Burning Tool的版本很重要太老的版本可能识别不了M401A的芯片。建议用v2.2.0以上的版本安装的时候会提示安装驱动一定要允许。2.2 拆机与短接点的定位M401A的拆机很简单底部四个脚垫下面各有一颗螺丝拧掉之后用塑料撬棒沿着边缘慢慢撬开就行。打开之后你会看到主板我们需要找到短接点来进入刷机模式。短接点通常在eMMC芯片附近具体位置因主板版本而异。我手上这台M401A的短接点是在eMMC芯片的右下角有两个很小的焊盘用镊子或者导线短接这两个点然后插上USB线连接电脑再通电就能进入刷机模式。如果你找不到短接点还有一个替代方案用TTL串口模块连接主板的调试接口在启动时通过串口终端中断启动流程进入U-Boot命令行然后执行update命令进入USB刷机模式。这个方法更通用但需要你会用串口终端。TTL接口的位置一般在主板边缘有三个或四个排针分别是GND、TX、RX可能还有VCC。连接的时候注意TX接RX、RX接TXGND接GNDVCC不要接。串口参数是115200-8-N-1。2.3 Armbian镜像的选择与验证Armbian镜像的选择是整个流程中最关键的一步。S905L3A这个芯片在Armbian的官方支持列表里并没有直接列出但社区里有大佬编译了适配的镜像。你可以在Armbian论坛或者相关的技术社区里找到这些镜像。选择镜像的时候要注意几点第一确认镜像的内核版本建议选5.15以上的对新硬件的支持更好第二确认镜像的桌面环境建议选Server版本无桌面因为我们要跑的是Home Assistant不需要图形界面Server版本更省资源第三确认镜像的存储类型有些镜像是为U盘启动准备的有些是为eMMC安装准备的要区分清楚。下载完镜像之后建议先验证一下文件的完整性。如果下载页面提供了SHA256校验值用certutil -hashfile 文件名 SHA256命令在Windows下校验一下。虽然这一步看起来多余但我确实遇到过下载过程中文件损坏导致刷机失败的情况排查了半天才发现是镜像本身的问题。3. 从原厂系统到Armbian的完整刷机流程3.1 制作U盘启动盘并首次引导拿到Armbian镜像之后用balenaEtcher把它写入U盘。写入完成后不要急着拔U盘打开U盘的第一个分区通常是FAT32格式的BOOT分区找到uEnv.txt或者armbianEnv.txt文件根据你的设备型号修改设备树配置。对于M401A你需要确认设备树文件是meson-g12a-s905l3a-m401a.dtb或者类似的名称。如果镜像里没有现成的设备树文件你可能需要从社区下载对应的dtb文件放到BOOT分区的dtb目录下然后在配置文件中指定。修改完配置文件后把U盘插到M401A的USB接口上。注意M401A靠近网口的那个USB接口通常是OTG接口也是刷机时用的接口另一个USB接口是普通的Host接口。U盘要插在Host接口上。接下来有两种启动方式一种是通过短接进入刷机模式后用USB Burning Tool刷入一个解锁了引导的固件然后再从U盘启动另一种是直接通过TTL串口中断启动流程手动引导U盘上的系统。第一种方式更简单适合大多数人。3.2 通过USB Burning Tool刷入过渡固件打开USB Burning Tool加载你下载的过渡固件通常是一个.img格式的文件然后点击开始。接着用镊子短接主板上的短接点插上USB线连接电脑再给盒子上电。如果一切正常USB Burning Tool会识别到设备并开始刷入。刷入过程大约需要两到三分钟进度条走到100%之后工具会提示成功。这时候拔掉USB线断开电源把U盘插上再通电。如果U盘上的Armbian镜像没有问题系统应该会从U盘启动。第一次启动会比较慢因为系统需要初始化各种服务。你可以通过HDMI连接显示器观察启动过程或者通过网线连接路由器在路由器的管理界面里找到M401A的IP地址然后用SSH连接。默认的SSH用户名和密码通常是root和1234第一次登录会强制你修改密码。登录成功之后你就进入了一个完整的Debian系统。3.3 把系统从U盘迁移到eMMCU盘启动只是临时的每次重启都要插着U盘太麻烦而且U盘的读写速度也远不如eMMC。所以下一步是把系统安装到eMMC里。Armbian提供了一个很方便的命令armbian-install。在SSH终端里执行这个命令然后按照提示选择安装到eMMC。安装过程大约需要五到十分钟取决于eMMC的写入速度。安装完成后关机拔掉U盘再通电。如果一切顺利系统会从eMMC启动。这时候你可以用df -h命令查看存储空间确认根分区已经扩展到了整个eMMC的容量。注意有些批次的M401A在安装到eMMC后会遇到启动失败的问题表现为通电后指示灯亮但没有任何输出。这通常是因为U-Boot的环境变量没有正确写入eMMC。解决办法是通过TTL串口连接在U-Boot命令行里手动执行mmc write命令写入引导程序。具体操作比较复杂建议在刷机前先备份好原厂的U-Boot。4. Home Assistant Supervised的安装与配置4.1 为什么选Supervised而不是Container或CoreHome Assistant有四种安装方式OS、Supervised、Container、Core。OS是完整系统镜像适合专用设备Supervised是在Debian系统上安装HA及其管理组件Container是纯Docker容器Core是Python虚拟环境安装。选Supervised的原因是它兼顾了灵活性和功能性。你可以用Armbian系统做其他事情比如跑个下载工具或者文件共享同时又能享受HA的完整功能包括Add-on商店、快照备份、系统更新等。Container版本虽然更轻量但没有Add-on支持很多常用的插件都要自己手动配置Docker容器对新手不太友好。不过Supervised的安装也是最容易出问题的因为它对系统的要求比较严格需要满足一系列条件才能通过安装检查。下面我会详细说明每一步的操作和可能遇到的问题。4.2 系统环境的前置配置在安装HA Supervised之前需要先对Armbian系统做一些配置更新系统并安装依赖apt update apt upgrade -y apt install -y apparmor jq wget curl udisks2 libglib2.0-bin network-manager dbus systemd-journal-remote配置网络管理器Armbian默认可能用的是systemd-networkd或者ifupdown来管理网络但HA Supervised要求用NetworkManager。你需要切换过来apt install -y network-manager systemctl disable systemd-networkd systemctl enable NetworkManager systemctl start NetworkManager切换之后用nmcli命令重新配置网络连接。如果你用的是有线连接通常会自动获取IP如果是WiFi需要用nmcli device wifi connect SSID password 密码来连接。配置AppArmorHA Supervised需要AppArmor来提供安全隔离。Armbian的内核通常已经编译了AppArmor支持但需要确认一下aa-status如果提示AppArmor没有启用需要在U-Boot的环境变量里添加apparmor1 securityapparmor然后重启。修改hostname和时区hostnamectl set-hostname homeassistant timedatectl set-timezone Asia/Shanghai4.3 安装Docker和OS-AgentHA Supervised依赖Docker来运行各个组件所以需要先安装Docker CEcurl -fsSL https://get.docker.com | sh安装完成后确认Docker服务正常运行systemctl status docker接下来安装OS-Agent这是HA Supervised用来和底层系统交互的组件。从GitHub上下载最新的OS-Agent的deb包然后用dpkg -i安装。安装完成后启动os-agent服务。注意OS-Agent的版本要和HA Supervised的版本匹配太老的版本会导致安装检查失败。建议从HA的官方GitHub仓库下载最新版本。4.4 执行Supervised安装脚本并处理常见报错一切准备就绪后执行官方安装脚本curl -fsSL https://get.home-assistant.io | sh这个脚本会下载HA Supervised的安装程序并执行。安装过程中会进行一系列检查如果任何一项不满足安装就会中止并给出错误提示。我遇到过的几个典型报错和处理方法报错一AppArmor is not enabled这个前面已经说过了需要在U-Boot环境变量里启用AppArmor。如果已经启用了但还是报错检查一下/sys/module/apparmor/parameters/enabled文件的内容是否为Y。报错二Docker version is too oldHA Supervised对Docker的版本有最低要求如果系统自带的Docker版本太老需要卸载后重新安装最新版。用docker --version查看当前版本然后对照HA的文档确认是否满足要求。报错三NetworkManager is not installed这个通常是因为网络管理器的切换没有完全生效。检查systemctl status NetworkManager是否正常运行以及nmcli general status是否显示已连接。报错四System is not supported这个报错说明你的系统不满足HA Supervised的支持条件可能是因为操作系统不是Debian或者Ubuntu的官方版本。Armbian虽然基于Debian但有些定制化的修改会导致检查失败。解决办法是修改/etc/os-release文件把ID和VERSION_ID改成Debian的对应值。不过这样做有风险可能会导致系统更新出问题建议在测试环境中先验证。安装成功后HA Supervised会启动一系列Docker容器包括homeassistant、hassio_supervisor、hassio_audio、hassio_dns等。你可以用docker ps查看容器的运行状态。5. 刷机后必须做的系统调优与稳定性加固5.1 关闭不必要的系统服务Armbian默认启动了很多服务其中大部分对于跑HA来说是不必要的。关掉这些服务可以释放内存和CPU资源让HA跑得更流畅。我通常会关掉以下服务systemctl disable bluetooth systemctl disable avahi-daemon systemctl disable ModemManager systemctl disable triggerhappy关掉蓝牙服务是因为M401A的蓝牙模块在Armbian下驱动不太稳定而且HA也不需要蓝牙如果你需要蓝牙网关功能建议用独立的ESP32模块。Avahi-daemon是用于mDNS设备发现的如果你不用.local域名访问设备也可以关掉。ModemManager是管理移动宽带设备的机顶盒上用不到。5.2 配置ZRAM和交换空间2GB的内存在跑HA Supervised加上几个Add-on之后会比较紧张尤其是在执行自动化或者处理大量设备状态更新的时候。配置ZRAM可以在物理内存不足时提供压缩的内存空间相当于变相增加了可用内存。Armbian自带armbian-config工具里面有一键启用ZRAM的选项。你也可以手动配置apt install -y zram-tools echo ALGOzstd /etc/default/zramswap echo PERCENT50 /etc/default/zramswap systemctl restart zramswap这样配置之后系统会拿出50%的物理内存约1GB作为ZRAM压缩算法用zstd压缩比通常在2:1到3:1之间相当于多了2到3GB的可用内存。另外建议在eMMC或者外挂存储上创建一个交换文件作为补充fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo /swapfile none swap sw 0 0 /etc/fstab5.3 迁移Docker数据目录到外挂存储前面提到过8GB的eMMC在安装完系统和HA之后剩余空间不多。如果你外挂了U盘或者移动硬盘可以把Docker的数据目录迁移过去这样Add-on的安装空间就充裕了。systemctl stop docker mkdir -p /mnt/usb/docker rsync -avz /var/lib/docker/ /mnt/usb/docker/然后修改Docker的配置文件/etc/docker/daemon.json添加{ data-root: /mnt/usb/docker }重启Docker服务后用docker info确认数据目录已经切换。注意外挂存储的稳定性很重要建议用质量好一点的U盘或者SSD移动硬盘。如果外挂存储掉线Docker容器会全部崩溃HA也会跟着挂掉。我试过用便宜的U盘结果运行了不到一周就出现坏块导致HA无法启动。后来换了一个三星的USB 3.0 U盘稳定运行了半年多没出过问题。5.4 设置自动备份和快照策略HA Supervised自带快照功能可以备份整个HA的配置和数据。建议设置一个自动化每周自动创建快照并保存到外挂存储或者通过网络传输到NAS上。在HA的Web界面里进入设置→系统→备份可以配置自动备份的计划。你也可以用ha命令行工具手动创建快照ha snapshots new --name weekly_backup快照文件默认保存在/usr/share/hassio/backup目录下你可以通过Samba或者SCP把快照文件传输到其他设备上保存。记住快照文件不要只保存在eMMC里万一系统崩溃了快照也跟着丢了。6. 实际使用中的性能表现与常见问题排查6.1 日常运行时的资源占用情况我在这台M401A上跑了大概三个月接入的设备有二十多个包括WiFi插座、温湿度传感器、人体传感器、窗帘电机等。自动化的数量大概有三十条左右。日常运行时的资源占用情况如下指标空闲时负载时CPU使用率5-10%30-50%内存使用1.2GB1.6GB系统负载0.31.2温度45°C60°C从数据来看M401A的性能对于中等规模的智能家居部署是足够的。CPU在大多数时候都很空闲只有在执行复杂自动化或者处理大量MQTT消息时才会飙高。内存是主要的瓶颈2GB的物理内存加上ZRAM之后勉强够用但如果你要跑很多Add-on建议还是升级到4GB内存的设备。温度方面M401A没有主动散热全靠被动散热。在夏天室温较高的时候温度可能会到65°C以上。我建议在盒子底部垫几个橡胶脚垫增加空气流通或者贴一个小散热片在芯片上。6.2 WiFi连接不稳定时的排查思路M401A的WiFi模块在Armbian下的表现不太稳定有时候会出现断流或者速度骤降的情况。如果你遇到WiFi连接问题可以按照以下步骤排查首先用dmesg | grep -i wifi查看内核日志里有没有WiFi相关的错误信息。常见的错误包括固件加载失败、驱动崩溃等。其次检查WiFi的电源管理设置。Armbian默认可能开启了WiFi的省电模式这会导致连接不稳定。用iwconfig wlan0查看Power Management是否为on如果是用iwconfig wlan0 power off关掉。如果问题依然存在建议直接用网线连接。有线连接的稳定性和速度都远好于WiFi对于HA这种需要长期在线的服务来说有线是更好的选择。6.3 eMMC空间不足的应急处理8GB的eMMC在安装完系统和HA之后剩余空间可能只有1GB左右。如果你不小心装了几个大的Add-on或者HA的数据库文件增长过快很容易就把空间占满。当eMMC空间不足时HA会出现各种奇怪的问题比如无法启动、Web界面打不开、自动化不执行等。排查方法是用df -h查看各分区的使用率如果/分区的使用率超过90%就需要清理了。清理的方法包括删除旧的Docker镜像docker image prune -a、清理HA的数据库在HA的开发者工具里执行recorder.purge服务、删除不需要的Add-on、把Docker数据目录迁移到外挂存储。如果这些方法都不够最后的办法是重新刷机把系统安装到外挂存储上而不是eMMC。Armbian支持从USB启动并直接在外挂存储上运行这样eMMC只用来存放引导程序不占用系统空间。6.4 HA Supervised更新失败的回滚方案HA Supervised的更新有时候会失败尤其是在网络环境不好的时候。更新失败后HA可能会进入恢复模式Web界面无法访问。遇到这种情况首先不要慌。通过SSH连接到系统用ha supervisor logs查看Supervisor的日志找到具体的错误信息。常见的更新失败原因包括网络超时、Docker镜像拉取失败、磁盘空间不足等。如果是网络问题可以尝试手动拉取更新镜像docker pull ghcr.io/home-assistant/amd64-hassio-supervisor:latest注意把amd64换成aarch64因为M401A是ARM架构的。如果更新后HA无法启动可以用之前创建的快照回滚。在SSH终端里执行ha snapshots list ha snapshots restore snapshot_id回滚过程需要几分钟完成后HA会恢复到快照创建时的状态。7. 这套方案还能怎么扩展7.1 接入Zigbee和蓝牙设备M401A本身没有Zigbee和蓝牙模块但你可以通过USB接口外接一个Zigbee协调器比如CC2652P或者EZSP方案的和一个USB蓝牙适配器让HA支持Zigbee和蓝牙设备。Zigbee协调器插上之后在HA里安装Zigbee2MQTT或者ZHA集成按照向导配置就能接入各种Zigbee传感器和开关。蓝牙方面安装bluez和homeassistant的蓝牙集成可以接入一些蓝牙温湿度计和体重秤。不过要注意USB接口的供电能力有限如果同时插多个USB设备可能会出现供电不足的情况。建议用一个带独立供电的USB Hub。7.2 通过MQTT桥接其他智能家居平台如果你家里还有其他智能家居平台的设备比如米家或者涂鸦的设备可以通过MQTT桥接的方式把它们接入HA。具体做法是在HA里安装Mosquitto Broker Add-on然后在其他平台上配置MQTT客户端把设备状态发布到MQTT主题上HA订阅这些主题就能获取设备状态并执行控制。这种方式的优点是兼容性好几乎任何支持MQTT的平台都能接入。缺点是需要一定的配置工作而且不同平台的MQTT主题格式不一样需要逐个适配。7.3 外网访问的安全方案如果你需要在外网访问家里的HA有几种方案可选。最简单的是用HA CloudNabu Casa每月五美元配置简单安全性由官方保证。另一种是自己搭建反向代理用Nginx或者Caddy把HA的Web界面暴露到公网配合SSL证书和强密码。如果你不想把HA暴露到公网也可以用虚拟局域网工具比如Tailscale或者ZeroTier把手机和家里的网络组建成一个虚拟局域网这样在外网也能像在家里一样访问HA。这种方案的安全性更高因为HA本身不暴露在公网上。注意无论用哪种方案都一定要设置强密码并启用双因素认证。HA的Web界面如果被未授权访问攻击者可以控制你家里所有的智能设备包括门锁和摄像头。7.4 硬件升级的路线建议如果你用了一段时间之后觉得M401A的性能不够用了可以考虑升级到以下硬件同系列升级换一个4GB内存的晶晨S905X3或者S905X4盒子性能提升明显刷机方法类似。迷你主机二手市场上有很多N100或者J4125的迷你主机功耗在10-15瓦性能是M401A的好几倍适合设备数量多、自动化复杂的场景。NAS方案如果你已经有NAS可以在NAS上跑HA的Docker容器省去单独一台设备的功耗和维护成本。升级的时候HA的快照可以直接迁移过去恢复之后所有设备和自动化配置都在不需要重新配置。这也是我建议定期创建快照的原因之一。我在实际使用中最大的体会是这套方案的门槛主要在刷机环节一旦Armbian跑起来后面的HA安装和配置反而相对简单。刷机过程中最耗时的部分是找对镜像和解决启动问题建议在动手之前先花时间在社区里搜一下同型号设备的成功案例看看别人用的是哪个版本的镜像、遇到了什么问题、怎么解决的。另外一定要有耐心刷机失败是常态多试几次总能成功。最后分享一个小技巧如果你在安装HA Supervised的时候反复卡在系统检查这一步可以试试用一个干净的Debian系统先跑一遍安装流程确认没问题之后再迁移到Armbian上这样能排除掉很多系统定制化带来的干扰。
返回列表