在Home Assistant SSH集成中实现Systemd服务状态监控

在Home Assistant SSH集成中实现Systemd服务状态监控

homeassistant-ssh Control and monitor devices in Home Assistant by executing commands via SSH homeassistant-ssh 项目地址: https://gitcode.com/gh_mirrors/ho/homeassistant-ssh

问题背景

在使用Home Assistant SSH集成监控Systemd服务状态时,用户发现当服务处于非活动状态时,开关会变得不可用。这是因为默认的systemctl -a命令在服务未运行时不会返回任何信息,导致集成无法正确识别服务状态。

解决方案分析

针对Systemd服务状态监控,有两种可行的实现方式:

1. 使用systemctl -a命令(局限性方案)

原始方案使用以下命令:

systemctl -a | awk '/hyperion.service|pure-ftpd.service/ {print $1 "," $4}'

局限性

  • 仅当服务处于运行状态时返回数据
  • 服务停止后开关会消失
  • 无法反映服务的真实状态

2. 推荐方案:使用systemctl is-active命令

更可靠的实现方式是直接检查服务活动状态:

- command: systemctl is-active kodi.service || true
  scan_interval: 300
  sensors:
    - type: binary
      name: Kodi
      command_on: systemctl start kodi.service
      command_off: systemctl stop kodi.service
      payload_on: active

技术要点

  1. systemctl is-active命令专门用于检查服务状态,返回"active"或"inactive"
  2. || true确保命令总是返回成功状态码,避免因服务未运行导致错误
  3. payload_on: active明确指定当返回值为"active"时表示开关开启状态
  4. 直接关联服务的启动/停止命令,实现状态控制

配置建议

对于需要监控多个Systemd服务的情况,可以采用以下模板:

switch:
  - platform: ssh
    host: your_server_ip
    username: your_username
    password: your_password
    switches:
      kodi:
        command_on: systemctl start kodi.service
        command_off: systemctl stop kodi.service
        command_state: systemctl is-active kodi.service || true
        value_template: '{{ value == "active" }}'
      hyperion:
        command_on: systemctl start hyperion.service
        command_off: systemctl stop hyperion.service
        command_state: systemctl is-active hyperion.service || true
        value_template: '{{ value == "active" }}'

技术原理

  1. 状态检测systemctl is-active是Systemd提供的专门用于查询服务状态的命令,比解析systemctl -a输出更可靠
  2. 错误处理:添加|| true确保命令总是返回0退出码,避免SSH集成因命令失败而报错
  3. 状态映射:通过value_template将"active"字符串转换为布尔值,与Home Assistant的开关状态对应

最佳实践

  1. 为每个服务创建独立的开关配置
  2. 设置合理的scan_interval(如300秒),避免频繁查询影响系统性能
  3. 对于关键服务,可考虑添加自动重启功能:
    command_off: systemctl stop kodi.service && systemctl disable kodi.service
    command_on: systemctl enable kodi.service && systemctl start kodi.service
    

通过这种配置方式,可以确保Systemd服务状态在Home Assistant中得到准确反映,无论服务处于运行还是停止状态,开关都能正常工作。

homeassistant-ssh Control and monitor devices in Home Assistant by executing commands via SSH homeassistant-ssh 项目地址: https://gitcode.com/gh_mirrors/ho/homeassistant-ssh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葛钦轲Lola

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值