基于微服务架构的家庭自动化中枢搭建与实战指南
2026/5/15 16:43:42 网站建设 项目流程

1. 项目概述:一个家庭自动化中枢的诞生

最近在折腾一个挺有意思的项目,叫keugenek/clawhome。乍一看这个名字,可能有点摸不着头脑,但如果你对家庭自动化、智能家居或者自托管服务有点兴趣,那这个项目绝对值得你花时间了解一下。简单来说,clawhome是一个旨在将你的个人服务器(比如一台闲置的旧电脑、树莓派,或者一台NAS)转变为一个功能强大、高度可定制且完全由你掌控的家庭自动化中枢的软件栈。

为什么我们需要另一个家庭自动化平台?市面上不是已经有 Home Assistant、OpenHAB 这些成熟方案了吗?这正是clawhome的出发点。它不是一个试图“大而全”的通用平台,更像是一个“乐高积木”式的框架。它的核心思想是“模块化”和“可编程性”。你可以把它想象成一个操作系统内核,而具体的自动化功能、设备接入、用户界面,都是你可以自由安装、卸载甚至自己编写的“应用程序”或“驱动”。这种设计带来的最大好处是极致的灵活性和控制力。你不再被某个平台预设的集成或逻辑所限制,可以根据自己家庭的独特需求,从零开始搭建一个完全贴合你生活习惯的智能家居系统。

这个项目适合谁呢?首先,它适合那些对技术有热情,不满足于“开箱即用”但功能受限的商业产品的极客和 DIY 爱好者。其次,它也适合那些对数据隐私和安全有极高要求的用户,因为所有数据都运行在你自己的硬件上,与云端完全隔离。最后,对于开发者来说,clawhome提供了一个清晰的架构和 API,让你可以轻松地为其开发新的插件或集成,将任何奇思妙想变成现实。接下来,我将深入拆解这个项目的设计思路、核心组件以及如何从零开始搭建属于你自己的clawhome实例。

2. 核心架构与设计哲学解析

要理解clawhome,必须先理解它的架构。它不是一个大一统的单一应用,而是一个由多个独立服务(微服务)协同工作的系统。这种微服务架构是它灵活性的基石。

2.1 微服务架构的优势与考量

传统的单体应用,如早期的 Home Assistant,将所有功能(设备通信、自动化引擎、用户界面、数据存储)打包在一起。优点是部署简单,但缺点也很明显:扩展性差,更新一个功能可能影响全局,资源占用不灵活。clawhome采用了相反的思路。它将系统拆分为几个核心服务:

  1. 核心总线服务:这是整个系统的“神经系统”。它负责所有微服务之间的消息路由和通信。当一个传感器检测到动作,或者一个定时器触发时,它们会向总线发送一条消息。自动化规则引擎监听这些消息,并决定触发哪些动作(如开灯、播放音乐)。这种基于消息的架构,使得服务之间高度解耦,你可以随时重启或更新某个服务而不影响其他部分。
  2. 设备集成服务:这类服务专门负责与具体的硬件或协议打交道。例如,可以有一个服务专门通过 MQTT 协议与 ESPHome 设备通信,另一个服务通过 HTTP API 与某品牌的智能空调对话,再一个服务通过蓝牙连接传感器。每个集成服务独立运行,只通过核心总线与其他部分交互。
  3. 自动化引擎服务:这是大脑。它允许你定义复杂的规则(“如果客厅运动传感器触发时间是晚上7点后室内光线暗于50勒克斯,则打开客厅主灯并调至70%亮度”)。clawhome的引擎设计强调可编程性,可能支持类似 YAML 配置、图形化流程(类似 Node-RED)甚至直接编写脚本(Python/JavaScript)来定义逻辑。
  4. 用户界面服务:提供 Web 或移动端界面,用于状态监控、设备控制和规则编辑。由于是独立服务,你可以选择使用官方提供的 UI,也可以自己用任何前端框架(如 Vue, React)重新打造一个完全符合你审美的控制面板。
  5. 数据持久化服务:负责将设备状态、历史记录、自动化日志等数据存储到数据库(如 SQLite, PostgreSQL, InfluxDB)。同样,这个服务也是可替换的。

注意:采用微服务架构也带来了复杂性。你需要管理多个服务的生命周期、它们之间的网络通信、以及可能出现的服务依赖问题。clawhome通常会使用 Docker 或 Docker Compose 来简化部署,但理解其内部通信原理对于故障排查至关重要。

2.2 可编程性与插件生态

clawhome的另一个核心设计哲学是“一切皆可编程”。这不仅体现在自动化规则上,更体现在整个系统的扩展层面。项目很可能定义了一套清晰的插件(或模块)开发规范。

  • 设备驱动插件:如果你想接入一个全新的、官方尚未支持的设备,你不必等待项目更新。你可以查阅开发文档,按照规范编写一个驱动插件。这个插件本质上就是一个独立的微服务,实现了与特定设备的通信协议,并将设备事件和状态转换为clawhome总线能理解的标准消息格式。
  • 动作服务插件:除了控制设备,自动化还可以触发更复杂的动作。比如,你可以编写一个插件,当有人按门铃时,它不仅会亮灯,还会调用一个服务插件,该插件通过 TTS(文字转语音)在家庭音响上播报,并抓拍门口摄像头的画面发送到你的手机。
  • 界面部件插件:在控制面板上,你可以为特殊的设备(比如一个自制的环境监测站,同时显示温湿度、PM2.5、噪音等级)开发一个专属的UI显示部件。

这种设计使得clawhome的生态可以像滚雪球一样增长,社区贡献的插件能极大地丰富其功能。对于用户而言,你几乎可以无限定制你的系统。

2.3 数据流与状态管理

理解数据如何在系统中流动是进行有效配置和调试的关键。一个典型的数据流如下:

  1. 事件产生:门窗传感器(通过 Zigbee 集成服务)检测到“打开”状态。
  2. 消息发布:Zigbee 集成服务将这一变化封装成一个标准格式的消息(例如:topic: “sensor/living_room_door/contact”, payload: {“state”: “open”, “timestamp”: 1234567890}),并将其发布到核心消息总线上。
  3. 规则触发:自动化引擎服务订阅了所有传感器消息。它内部运行着一条你预先定义的规则:“如果living_room_door状态变为open,则触发警报”。
  4. 动作执行:规则被触发后,自动化引擎向总线发布一个新的动作消息(例如:topic: “action/alert/trigger”, payload: {“level”: “warning”, “message”: “客厅门被打开”})。
  5. 服务响应:警报服务插件监听着动作消息。它收到消息后,执行具体的报警逻辑,比如让全屋的智能灯闪烁红色,并在你的手机App上推送一条紧急通知。

整个过程中,所有服务的交互都通过总线完成,彼此不知晓对方的存在,实现了高度的隔离和灵活性。

3. 从零开始:环境准备与部署实战

理论讲得再多,不如动手做一遍。下面我将以最常见的场景——在一台运行 Ubuntu Server 的旧电脑或小型服务器上部署clawhome——为例,详细演示部署过程。假设你已经具备基本的 Linux 命令行操作知识。

3.1 基础系统环境准备

首先,我们需要一个干净、稳定的操作系统环境。我推荐使用 Ubuntu Server 22.04 LTS,因为它拥有长期支持和完善的社区资源。

# 1. 更新系统包列表并升级现有软件 sudo apt update && sudo apt upgrade -y # 2. 安装一些必要的工具 sudo apt install -y curl wget git vim net-tools # 3. 设置时区(非常重要,自动化规则依赖准确时间) sudo timedatectl set-timezone Asia/Shanghai # 检查时间同步状态 sudo timedatectl status

确保你的服务器有一个固定的局域网 IP 地址,这通常可以在你的路由器后台进行 DHCP 静态分配。记下这个 IP,例如192.168.1.100

3.2 核心依赖安装:Docker 与 Docker Compose

clawhome强烈依赖容器化技术来管理其多个微服务。Docker 能保证每个服务运行在独立、一致的环境中,避免“在我的机器上能运行”的问题。

# 1. 卸载可能存在的旧版本 Docker sudo apt remove docker docker-engine docker.io containerd runc -y # 2. 安装 Docker 官方 GPG 密钥和仓库 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 3. 安装 Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 4. 将当前用户加入 docker 组,避免每次使用 sudo sudo usermod -aG docker $USER # **重要**:执行此命令后,你需要完全退出当前终端会话并重新登录,或者重启系统,才能使组权限生效。 # 5. 验证安装 docker --version docker compose version

安装完成后,运行docker run hello-world测试 Docker 是否能正常工作。

3.3 获取与配置clawhome

clawhome项目通常会将所有服务的 Docker 配置打包在一个docker-compose.yml文件中,这是部署的蓝图。

# 1. 创建一个专门的工作目录 mkdir -p ~/clawhome && cd ~/clawhome # 2. 从官方仓库获取配置文件 # 假设官方配置仓库地址为 git@github.com:keugenek/clawhome.git # 如果仓库是公开的,可以直接克隆 git clone https://github.com/keugenek/clawhome.git . # 如果仓库不存在或为示例,我们可能需要手动创建。这里假设我们拿到了一个标准的 compose 文件。 # 我们创建一个示例的 docker-compose.yml 文件进行演示。

由于keugenek/clawhome是一个假设的项目,我将创建一个典型的、结构清晰的docker-compose.yml示例文件。这个文件定义了核心总线、一个示例设备集成、自动化引擎、Web UI 和数据库。

# ~/clawhome/docker-compose.yml version: '3.8' services: # 1. 核心消息总线 - 使用 RabbitMQ,一个高性能、开源的消息队列 message-bus: image: rabbitmq:3-management-alpine container_name: clawhome-bus restart: unless-stopped environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: your_secure_password_here # 务必修改! ports: - "5672:5672" # AMQP 协议端口,供内部服务通信 - "15672:15672" # 管理界面端口,可用于监控消息流(生产环境可关闭) volumes: - ./data/rabbitmq:/var/lib/rabbitmq networks: - clawhome-net # 2. 数据持久化 - 使用 PostgreSQL 存储状态和历史 database: image: postgres:15-alpine container_name: clawhome-db restart: unless-stopped environment: POSTGRES_USER: clawhome POSTGRES_PASSWORD: your_db_password_here # 务必修改! POSTGRES_DB: clawhome volumes: - ./data/postgres:/var/lib/postgresql/data networks: - clawhome-net # 3. 自动化引擎服务 - 假设官方提供了此镜像 automation-engine: image: keugenek/clawhome-engine:latest # 假设的镜像名 container_name: clawhome-engine restart: unless-stopped depends_on: - message-bus - database environment: MQTT_BROKER_URL: amqp://admin:your_secure_password_here@message-bus:5672 DATABASE_URL: postgresql://clawhome:your_db_password_here@database:5432/clawhome # 规则配置文件挂载路径 RULES_PATH: /config/rules volumes: - ./config/automation:/config/rules - ./config/scripts:/config/scripts # 用于存放自定义脚本 networks: - clawhome-net # 4. Web 用户界面服务 web-ui: image: keugenek/clawhome-ui:latest # 假设的镜像名 container_name: clawhome-ui restart: unless-stopped depends_on: - message-bus - automation-engine ports: - "8123:8080" # 将容器的8080端口映射到主机的8123端口 environment: API_BASE_URL: http://automation-engine:3000/api # 假设引擎API端口3000 volumes: - ./config/ui:/app/config networks: - clawhome-net # 5. 示例设备集成服务 - MQTT 客户端(用于连接 ESPHome、Tasmota等) mqtt-integration: image: eclipse-mosquitto:2.0 container_name: clawhome-mqtt restart: unless-stopped ports: - "1883:1883" # MQTT 协议端口 - "9001:9001" # WebSocket 端口,用于一些前端直接连接 volumes: - ./config/mosquitto.conf:/mosquitto/config/mosquitto.conf - ./data/mqtt:/mosquitto/data networks: - clawhome-net # 定义自定义网络,让所有服务在同一个隔离网络内通信 networks: clawhome-net: driver: bridge

关键配置解析与修改点:

  1. 密码:文件中所有your_secure_password_hereyour_db_password_here都必须替换为你自己生成的强密码。可以使用openssl rand -base64 12命令快速生成。
  2. 端口web-ui服务的8123:8080表示你通过浏览器访问http://你的服务器IP:8123就能打开控制界面。确保服务器防火墙开放了此端口(sudo ufw allow 8123)。
  3. 卷映射:所有./data/./config/开头的路径,会将容器内的数据持久化到宿主机的~/clawhome目录下。这样即使容器删除,你的配置和历史数据也不会丢失。
  4. 网络clawhome-net是一个自定义的 Docker 网络,所有服务加入其中,可以通过服务名(如message-bus,database)直接相互访问,无需知道IP。

创建好docker-compose.yml后,还需要创建对应的配置目录和文件:

mkdir -p ./config/automation ./config/scripts ./config/ui ./data # 创建 MQTT 基础配置文件 cat > ./config/mosquitto.conf << EOF persistence true persistence_location /mosquitto/data/ log_dest file /mosquitto/log/mosquitto.log allow_anonymous true # 生产环境建议设置为 false 并配置密码 EOF

3.4 启动与验证

一切就绪后,在~/clawhome目录下,运行以下命令启动所有服务:

# 使用 Docker Compose 启动所有服务(-d 表示后台运行) docker compose up -d

使用docker compose logs -f可以实时查看所有容器的日志,观察启动过程是否有错误。使用docker compose ps查看所有服务状态,确保都是Up

如果一切正常,打开浏览器,访问http://<你的服务器IP>:8123,你应该能看到clawhome的 Web 用户界面。首次访问可能需要初始化设置,如创建管理员账户、配置时区等。

实操心得:在首次启动后,不要急于添加设备。先花点时间熟悉界面,查看各个服务的日志,确保核心组件(消息总线、数据库、引擎)通信正常。一个常见的排查命令是docker compose logs service_name,例如docker compose logs automation-engine可以只看引擎的日志。

4. 核心功能实现:设备接入与自动化编排

系统跑起来只是第一步,让它真正“智能”起来,需要接入设备并编写自动化规则。

4.1 设备接入实战:以 MQTT 为例

MQTT 是物联网领域最流行的轻量级消息协议,无数开源固件(如 ESPHome, Tasmota)都原生支持。我们上面已经部署了 Mosquitto 作为 MQTT 代理(Broker)。

步骤一:配置设备端假设你有一个用 ESP8266 和 ESPHome 固件制作的温湿度传感器。在 ESPHome 的配置文件中,你需要指定 MQTT 服务器地址。

# ESPHome 设备配置文件示例 esphome: name: living-room-sensor wifi: ssid: "Your_WiFi_SSID" password: "Your_WiFi_Password" mqtt: broker: "192.168.1.100" # 你的 clawhome 服务器 IP port: 1883 # 如果 Mosquitto 配置了密码,需要添加 username 和 password sensor: - platform: dht pin: D2 temperature: name: "Living Room Temperature" humidity: name: "Living Room Humidity" update_interval: 30s

将设备刷入此配置并连接网络后,它会自动连接到你的clawhomeMQTT Broker,并定期发布温湿度数据到类似living-room-sensor/sensor/living_room_temperature/state这样的主题。

步骤二:在clawhome中创建集成现在需要在clawhome中创建一个“MQTT 集成服务”(这可能需要通过插件或配置实现)。这个服务会订阅#(通配符所有主题),监听来自设备的消息。

假设clawhome的配置方式是在./config/automation下放置一个integrations.yaml

# ./config/automation/integrations.yaml mqtt: broker: "mqtt-integration" # 使用 Docker 服务名,因为它们在同一个网络 port: 1883 discovery: true # 自动发现并注册设备 discovery_prefix: "homeassistant" # 许多设备遵循此发现协议

重启automation-engine服务后,它应该能自动发现并添加你的 ESPHome 传感器。在 Web UI 中,你应该能看到名为 “Living Room Temperature” 和 “Living Room Humidity” 的实体(Entity)。

4.2 自动化规则编写:从简单到复杂

设备接入后,就可以创建自动化规则了。clawhome的规则引擎是其灵魂。规则可能支持多种格式,这里以假设的 YAML 格式为例。

示例一:简单的定时任务每天下午6点,自动打开客厅灯。

# ./config/automation/sunset_light.yaml automation: - alias: "Turn on living room light at sunset" trigger: platform: time at: "18:00:00" action: - service: light.turn_on target: entity_id: light.living_room_main

示例二:带条件的复杂自动化晚上7点后,如果客厅有人移动且光线较暗,则打开灯,并在有人离开5分钟后关灯。

automation: - alias: "Smart living room lighting" trigger: - platform: state entity_id: binary_sensor.living_room_motion to: "on" # 运动触发 condition: - condition: time after: "19:00:00" before: "06:00:00" # 仅在晚上7点到早上6点间生效 - condition: numeric_state entity_id: sensor.living_room_lux below: 50 # 光线低于50勒克斯 action: - service: light.turn_on target: entity_id: light.living_room_main data: brightness_pct: 70 # 第二个触发序列:用于关灯 - alias: "Turn off light after no motion" trigger: - platform: state entity_id: binary_sensor.living_room_motion to: "off" # 运动停止 for: minutes: 5 # 持续5分钟无运动 condition: - condition: state entity_id: light.living_room_main state: "on" action: - service: light.turn_off target: entity_id: light.living_room_main

示例三:使用脚本(Script)封装复杂逻辑对于更复杂的逻辑,可以编写脚本。脚本是一系列可重用的动作序列。

# ./config/automation/scripts/good_morning.yaml script: good_morning_sequence: sequence: - service: light.turn_on target: area_id: bedroom data: brightness_pct: 30 kelvin: 2700 # 暖色调 - delay: minutes: 5 - service: media_player.play_announcement data: message: "早上好,今天是{{ now().strftime('%Y年%m月%d日') }},室外温度{{ states(‘sensor.outside_temp’) }}度。" - service: curtain.open target: entity_id: curtain.bedroom

然后,在自动化中触发这个脚本:

automation: - alias: "Weekday Morning Wake-up" trigger: platform: time at: "07:30:00" condition: - condition: time weekday: - mon - tue - wed - thu - fri action: - service: script.good_morning_sequence

注意事项:自动化规则的调试是关键。一个好的习惯是,在编写复杂规则时,先使用 Web UI 提供的“手动触发”功能测试单个动作是否有效。然后,使用日志记录功能,在规则触发时打印关键变量(如触发时间、实体状态),这能极大帮助你定位逻辑错误。另外,注意规则的“唯一标识”(如alias),避免重复或冲突。

5. 高级主题与系统优化

当基础功能稳定运行后,你可以探索更高级的用法来提升系统的可靠性、性能和体验。

5.1 高可用与备份策略

家庭自动化中枢一旦成为依赖,宕机就会很麻烦。可以考虑以下策略:

  • 硬件冗余:对于核心服务器,使用像 Raspberry Pi 这样的低功耗设备时,可以准备一个备用机。使用 Docker 镜像和配置备份,可以在硬件故障时快速迁移。
  • 数据备份:定期备份~/clawhome/data~/clawhome/config目录。你可以写一个简单的脚本,用rsyncborg备份到另一台机器或 NAS。
    # 示例备份脚本 /usr/local/bin/backup-clawhome.sh #!/bin/bash BACKUP_DIR="/mnt/nas/backups/clawhome" SOURCE_DIR="/home/youruser/clawhome" TIMESTAMP=$(date +%Y%m%d_%H%M%S) tar -czf "$BACKUP_DIR/clawhome_backup_$TIMESTAMP.tar.gz" -C "$SOURCE_DIR" . # 保留最近7天的备份 find "$BACKUP_DIR" -name "clawhome_backup_*.tar.gz" -mtime +7 -delete
    然后通过crontab -e添加定时任务:0 2 * * * /usr/local/bin/backup-clawhome.sh(每天凌晨2点备份)。
  • 服务健康检查:在 Docker Compose 文件中,可以为关键服务添加healthcheck指令,确保服务崩溃后能自动重启,或者被监控系统发现。

5.2 性能监控与日志管理

随着设备增多,监控系统健康度很重要。

  • 资源监控:使用docker stats命令可以实时查看各容器的 CPU、内存占用。对于长期监控,可以集成 Prometheus 和 Grafana。clawhome的各个服务如果暴露了 Prometheus 格式的指标端点,就可以被收集和可视化。
  • 集中式日志:所有容器的日志默认输出到 Docker 守护进程。可以使用docker compose logs查看,但不利于长期检索。可以考虑部署 ELK Stack(Elasticsearch, Logstash, Kibana)或更轻量的 Grafana Loki,将日志集中存储和展示。在docker-compose.yml中,可以通过配置日志驱动将日志发送到这些系统。
  • 网络优化:确保你的 MQTT Broker 和核心消息总线有足够的连接数。对于 Mosquitto,可以在mosquitto.conf中调整max_connections。对于 RabbitMQ,需要监控队列深度和消息堆积情况。

5.3 安全加固

自托管意味着安全责任自负。

  1. 修改默认密码:这是最重要的一步!确保docker-compose.yml和环境变量文件中的所有密码都已更改。
  2. 网络隔离:将clawhome的 Docker 网络与主机其他网络隔离。考虑将 IoT 设备放在一个独立的 VLAN 中,并通过防火墙规则严格控制其与clawhome服务器的通信,只开放必要的端口(如 MQTT 的 1883)。
  3. 服务暴露最小化:如非必要,不要将管理界面端口(如 RabbitMQ 的 15672)暴露在公网。如果需要远程访问 Web UI,强烈建议通过 VPN 连接回家中网络,或者使用反向代理(如 Nginx Proxy Manager)并配置 HTTPS 和强密码认证。
  4. 定期更新:定期执行docker compose pulldocker compose up -d来更新服务镜像,以获取安全补丁和新功能。关注项目 GitHub 仓库的发布和安全公告。

6. 故障排查与常见问题实录

在实际操作中,你一定会遇到各种问题。这里记录一些典型场景和排查思路。

6.1 服务启动失败

  • 现象docker compose up -d后,某个服务状态一直是RestartingExited
  • 排查
    1. 查看日志docker compose logs <service_name>。这是最直接的错误信息来源。常见原因包括:配置文件语法错误、环境变量未设置、依赖的服务(如数据库)未就绪、端口冲突。
    2. 检查端口占用:使用sudo netstat -tulpn | grep :端口号检查docker-compose.yml中映射的宿主机端口是否被其他进程占用。
    3. 检查卷权限:如果日志显示“Permission denied”错误,可能是 Docker 容器内用户无法写入挂载的宿主机目录。尝试修改目录权限:sudo chown -R 1000:1000 ./data(假设容器内用户UID是1000)。

6.2 设备无法连接或状态不更新

  • 现象:ESPHome 设备显示已连接 WiFi,但在clawhomeUI 中看不到或状态不更新。
  • 排查
    1. 检查 MQTT 连接:在服务器上,使用mosquitto_sub工具订阅所有主题:docker exec clawhome-mqtt mosquitto_sub -v -t "#"。然后触发你的设备(如用手温加热传感器),观察是否有消息发布出来。如果没有,问题在设备端(WiFi、配置)。
    2. 检查集成服务:查看automation-engine或专门的 MQTT 集成服务的日志,看它是否成功连接到了 Broker 并订阅了主题。
    3. 检查网络:确保设备与服务器在同一个局域网段,且防火墙没有阻止 MQTT 端口(1883)。

6.3 自动化规则不触发

  • 现象:条件似乎都满足,但规则毫无反应。
  • 排查
    1. 确认触发器实体状态:在 UI 中确认触发自动化所用的实体(如传感器)的状态是否如你预期发生了变化。有时传感器上报的数据格式可能不符合触发条件。
    2. 启用调试日志:如果clawhome支持,在自动化规则配置或引擎设置中打开更详细的调试日志。查看日志中是否有该规则被评估的记录,以及条件判断的结果。
    3. 手动触发测试:在 UI 中找到该自动化规则,尝试“手动触发”其动作部分。如果动作能执行,说明问题在触发器或条件;如果不能,说明动作配置有误。
    4. 检查时间条件:涉及时间的条件要特别注意服务器时区设置是否正确。使用date命令在服务器上确认。

6.4 Web UI 无法访问

  • 现象:浏览器显示无法连接。
  • 排查
    1. 检查服务状态docker compose ps确认web-ui服务是Up状态。
    2. 检查端口映射docker compose port web-ui 8080确认映射的宿主机端口是否正确。
    3. 检查防火墙:确保服务器防火墙(如ufw)允许了该端口的入站连接:sudo ufw status
    4. 查看容器日志docker compose logs web-ui查看是否有启动错误,例如前端资源加载失败、无法连接到后端 API(automation-engine)等。

6.5 数据库空间增长过快

  • 现象:服务器磁盘空间告警,发现./data/postgres目录异常庞大。
  • 处理
    1. 清理历史数据:家庭自动化会产生大量历史记录(每秒钟的温度记录等)。需要在clawhome的配置或数据库中设置历史数据的保留策略,例如只保留7天或30天的详细数据,更早的数据可以聚合或删除。这通常通过自动化引擎或数据库的作业来完成。
    2. 检查日志级别:确保没有将日志级别设置为过于详细的DEBUG并持久化到数据库。
    3. 定期维护:对于 PostgreSQL,可以定期执行VACUUM操作来回收空间。

通过以上步骤,你应该能够搭建并维护一个稳定、强大且完全符合个人需求的clawhome家庭自动化系统。这个过程的魅力在于,你不仅是在配置一个工具,更是在设计和建造一个专属于你家庭数字生活的“神经系统”。每一个自动化规则的生效,都让这个家更懂你一分。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询