【问题标题】:Control TP-Link Kasa local switches with Bash使用 Bash 控制 TP-Link Kasa 本地交换机
【发布时间】:2025-12-31 00:35:10
【问题描述】:

我安装了python-kasa 库来从我的本地服务器控制 TPLink 智能家居设备。虽然从命令行发出命令很简单,但我试图根据查询结果在 Bash 中执行它们。我的困境纯粹是我的编码能力,我正在寻找正确的方向。我想做的是按照以下语法错误的混乱:

   if kasa --host 127.0.0.2 status on; then
        echo "already its on"
    else
        kasa --host 127.0.0.2 on
        echo "now its on"
    fi 

当您发出命令“kasa --host Device_IP state”时,您会得到以下结果。

No --strip nor --bulb nor --plug given, discovering..
== Red light - HS210(US) ==
    Host: 127.0.0.2
    Device state: OFF

    == Generic information ==
    Time:         2021-05-23 21:16:31
    Hardware:     2.0
    Software:     1.1.4 Build 200821 Rel.092912
    MAC (rssi):   XX:XX:XX:XX:XX:XX (-33)
    Location:     {'latitude': XXXXXX, 'longitude': -XXXXXX}

    == Device specific information ==
    LED state: True
    On since: None

驱使我需要一个 bash 脚本来控制设备的核心原因是因为我住在一个有线互联网服务很糟糕的地区,通常需要重新启动调制解调器,这在家里很简单,但在异地时就没有那么多了。我想创建一个脚本,cron 将每十分钟左右运行一次,并检查是否可以访问互联网和/或电缆调制解调器的电源是否打开。基本上,如果电源关闭,则将其打开,如果互联网关闭,则关闭电源并重新打开以使其再次运行。

【问题讨论】:

    标签: python bash automation cron-task


    【解决方案1】:

    可能是这样的吗?

    #!/usr/bin/env bash
    
    if kasa --host Device_IP state 2>&1 | grep -Fq 'Device state: OFF'; then
      : restart or start the device here
    elif kasa --host Device_IP state 2>&1 | grep -Fq 'Device state: ON'; then
      : device is already on
    fi
    

    【讨论】: