Home Assistant + Wake-on-LAN 实现远程唤醒群晖 NAS

0
153

🟢唤醒:远程唤醒群晖(Wake-on-LAN)

🔴关机:远程关机群晖(SSH)
📋 Dashboard 卡片操作界面(Lovelace)

✅ 一、远程唤醒群晖

1. 群晖 NAS 支持 并启用WOL

群晖 NAS 的网卡通常支持 WOL,但需要手动启用:

  • 登录群晖 DSM
    • 打开浏览器,进入群晖 DSM 管理界面。
  • 启用 WOL
    • 进入 控制面板 > 硬件和电源 > 常规
    • 勾选 启用 WOL(局域网唤醒)
    • 如果有多个网口,确保启用了连接到网络的网口的 WOL 功能。
  • 获取 MAC 地址
    • 控制面板 > 信息中心 > 网络 中,找到使用的网卡,记录其 MAC 地址(格式如 AA:BB:CC:DD:EE:FF)。
    • 同时记录群晖的 固定 IP 地址(如 10.10.10.167),以便后续配置。
  • 2. 确保网络环境支持 WOL

    • 路由器配置

      • 确保路由器支持 WOL 数据包的广播。大多数路由器默认支持,但某些高级路由器可能需要启用 IP Helper广播转发 功能。
      • 如果群晖和 Home Assistant 不在同一子网,可能需要配置路由器以转发 WOL 的魔法数据包(Magic Packet)。
    • 网络连接

      • 群晖 NAS 必须通过有线网络(以太网)连接到路由器,因为 WOL 通常不支持 Wi-Fi。
    • 测试 WOL 功能

      • 使用其他 WOL 工具(如istoreos openwrt 网络唤醒 应)测试群晖是否能被唤醒。
      • 如果无法唤醒,检查群晖的 BIOS 或网卡设置,确保 WOL 功能已正确启用。

    3. 配置 Home Assistant

    在 Home Assistant 中配置 WOL 集成,以通过界面或自动化唤醒群晖 NAS。

    1. 编辑 Home Assistant 配置文件**

    • 访问 configuration.yaml

      • 登录 Home Assistant,打开 文件编辑器(需安装 File Editor 插件,或通过 SSH 访问 /config/configuration.yaml)。
    • 添加 WOL 配置

      • 在 configuration.yaml 文件中添加以下内容,替换 mac 和 host 为群晖的实际 MAC 地址和 IP 地址:
    单个项目switch:
    
    switch:
      - platform: wake_on_lan
        name: "唤醒我的电脑"                # ← name:开关的显示名称,可自定义
        mac_address: "AA:BB:CC:DD:EE:FF"  # ← 替换为群晖设备的 MAC 地址
        host: 10.10.10.167               # ← 可选,用于检测设备是否在线(ping)
        broadcast_address: "10.10.10.255" # ← 网络广播地址,通常为子网的广播地址(例如,子网 10.10.10.0/24 的广播地址为 10.10.10.255)
        broadcast_port: 9                 # ← WOL 默认端口为 9,通常无需修改。
    多个项合并到一个 switch 块下:
    
    switch:
      - platform: wake_on_lan
        name: "唤醒我的电脑"
        mac: "AA:BB:CC:DD:EE:FF"
        host: 10.10.10.100
    
      - platform: wake_on_lan
        name: "唤醒群晖"
        mac: "11:22:33:44:55:66"
        host: 10.10.10.167
    • 保存并检查配置:
    • 保存文件后,在 Home Assistant 的 开发者工具 > 检查配置 中验证 YAML 配置是否正确。
    • 重启 Home Assistant:
    • 设置 > 系统 > 重启 中重启 Home Assistant,以应用配置。

    2. 添加到 Home Assistant 仪表板,重启 Home Assistant 并测试

    1. 保存配置后,点击 设置 → 系统 → 检查配置
    2. 无误后,点击 重启
    3. 回到仪表板,添加实体卡片 switch.唤醒我的电脑
    4. 点击“开”即可发送 WoL 魔术包唤醒设备。

    ✅ 二、远程关机群晖

    DSM 默认不允许外部关机,但可以用 SSH + 命令远程实现。

    1. .ssh 密钥生成脚本(用于宿主机或 Home Assistant 容器)

    在终端运行以下命令生成 SSH 密钥:

    # 切换到 Home Assistant 配置目录
    cd /path/to/homeassistant/config
    
    # 创建 .ssh 文件夹(如果不存在)
    mkdir -p .ssh
    chmod 700 .ssh
    
    # 生成 RSA 密钥对(不要设置密码)
    ssh-keygen -t rsa -b 2048 -f .ssh/id_rsa -N ""

    公钥保存在:/config/.ssh/id_rsa.pub
    私钥保存在:/config/.ssh/id_rsa

    2. 将公钥配置到群晖 DSM

    手动配置 SSH 公钥(适用于 DSM 7)

    假设你在群晖上启用了 SSH,接下来操作如下:

    • 打开终端,复制公钥到群晖
    # 进入 Home Assistant 配置目录(你有 id_rsa.pub)
    cat /config/.ssh/id_rsa.pub

    复制输出的整行内容,例如:

    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAz... yourname@host
    • 使用密码登录群晖,把公钥写入用户 .ssh/authorized_keys
    ssh your_admin_user@10.10.10.167 -p 50022

    一旦登录成功,执行:

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
    echo "(粘贴你刚复制的公钥)" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

    也可以用 SCP 拷贝:

    scp -P 50022 /config/.ssh/id_rsa.pub admin@192.168.1.10:/tmp/
    # 然后登录群晖,把它追加进 ~/.ssh/authorized_keys
    • 验证是否免密成功

    回到 Home Assistant 宿主机或终端中执行:

    ssh -i /config/.ssh/id_rsa -p 50022 admin@10.10.10.167

    如果可以不输入密码就登录成功,说明配置成功 ✅

    3. 配置免密码执行关机

    群晖 DSM 支持在 /etc/sudoers.d/ 目录下添加用户特定的 sudo 配置文件,不使用 visudo,避免直接编辑主 sudoers 文件的风险。步骤如下:

    1. 使用 SSH 登录群晖 NAS
      使用您的管理员账户通过 SSH 登录到群晖 NAS。
    2. 创建 sudoers 配置文件
      执行以下命令创建一个新的 sudoers 配置文件(以 myhome 用户为例):表示用户 myhome 可以在不输入密码的情况下执行 /sbin/poweroff 命令
    echo 'myhome ALL=(ALL) NOPASSWD: /sbin/poweroff' | sudo tee /etc/sudoers.d/myhome_shutdown

    如果您的系统未安装 sudo,可以使用 su 切换到 root 用户后执行:

    sudo -i
    echo 'myhome ALL=(ALL) NOPASSWD: /sbin/poweroff' > /etc/sudoers.d/myhome_shutdown
    1. 设置正确的权限
      确保新创建的文件权限为 0440,以防止未经授权的修改:
    chmod 0440 /etc/sudoers.d/myhome_shutdown
    1. 验证配置是否生效
      尝试使用以下命令测试免密码关机是否成功:
    sudo /sbin/poweroff

    如果系统未提示输入密码并成功执行关机,说明配置已生效。

    4. configuration.yaml 内容整合

    wake_on_lan:
    
    switch:
      - platform: wake_on_lan
        name: "唤醒群晖"
        mac: "00:11:22:33:44:55"
        host: 10.10.10.167
    
    shell_command:
      shutdown_nas: "ssh -i /config/.ssh/id_rsa admin@10.10.10.167 'sudo /sbin/poweroff'"

    5. Lovelace Dashboard 按钮配置

    type: vertical-stack
    cards:
      - type: button
        name: 唤醒群晖
        icon: mdi:power
        tap_action:
          action: toggle
        entity: switch.唤醒群晖
    
      - type: button
        name: 关闭群晖
        icon: mdi:power-off
        tap_action:
          action: call-service
          service: shell_command.shutdown_nas

    6. 状态传感器显示群晖是否在线(基于 ping)

    binary_sensor:
      - platform: ping
        name: 群晖在线状态
        host: 10.10.10.167
        count: 2
        scan_interval: 30

    然后你可以在 Dashboard 中添加一个实体状态卡片,显示是否在线。

    ✅ 示例:两台群晖配置完整写法

    configuration.yaml 配置

    wake_on_lan:
    
    switch:
      - platform: wake_on_lan
        name: "唤醒群晖1号"
        mac: "00:11:22:33:44:55"
        host: 10.10.10.167
    
      - platform: wake_on_lan
        name: "唤醒群晖2号"
        mac: "66:77:88:99:AA:BB"
        host: 10.10.10.168
    
    shell_command:
      shutdown_nas_1: "ssh -i /config/.ssh/id_rsa admin@10.10.10.167 'sudo /sbin/poweroff'"
      shutdown_nas_2: "ssh -i /config/.ssh/id_rsa admin@10.10.10.168 'sudo /sbin/poweroff'"

    ⚠️ 注意:如果两台群晖使用不同用户,请复制密钥到每台设备的对应用户并更改 admin@IP

    Dashboard 按钮卡片

    type: vertical-stack
    cards:
      - type: button
        name: 唤醒群晖 1
        icon: mdi:nas
        tap_action:
          action: toggle
        entity: switch.唤醒群晖1号
    
      - type: button
        name: 关闭群晖 1
        icon: mdi:power-off
        tap_action:
          action: call-service
          service: shell_command.shutdown_nas_1
    
      - type: button
        name: 唤醒群晖 2
        icon: mdi:nas
        tap_action:
          action: toggle
        entity: switch.唤醒群晖2号
    
      - type: button
        name: 关闭群晖 2
        icon: mdi:power-off
        tap_action:
          action: call-service
          service: shell_command.shutdown_nas_2

    群晖在线状态检测(可选)

    binary_sensor:
      - platform: ping
        name: 群晖1在线
        host: 10.10.10.167
        count: 2
        scan_interval: 30
    
      - platform: ping
        name: 群晖2在线
        host: 10.10.10.168
        count: 2
        scan_interval: 30

    自动化

    如,只要有人回家就唤醒两台群晖

    automation:
      - alias: 回家自动唤醒群晖
        trigger:
          - platform: state
            entity_id: person.your_name
            to: 'home'
        action:
          - service: switch.turn_on
            entity_id: switch.唤醒群晖1号
          - service: switch.turn_on
            entity_id: switch.唤醒群晖2号

    发布回复

    请输入评论!
    请输入你的名字