我非常討厭在手機裝上一些不怎麼常用的APP,偏偏TP-Link Tapo的監視器沒有提供webconfig,所以若是要重新啟動,只能拔監視器電源再重插,但這不是一個非常聰明的作法。
但方法是一定有的,因為群暉的Surveillance Station可以辦到。我一直以為它像FOSCAM一樣是透過HTTP POST來實現的,因此一直朝這個方向尋找,但一直沒有找到答案。後來無意間發現了pytapo這個套件,看了一下原始碼,發現它能夠做很多事情,簡直像拿破崙發現新大陸一樣驚喜!
先安裝pytapo套件(python請先裝好)
$ pip3 install pytapo
寫一個名為RebootTapoCAM.py的script,並利用argparse將host參數帶入,這樣就不需要每一台監視器寫一隻script。因每台監視器的使用者名稱與密碼都一樣,我就沒有寫成parser了。
import argparse
from pytapo import Tapo
def main():
parser = argparse.ArgumentParser(description='Reboot Tapo CAM')
parser.add_argument('--host', required=True, help='Tapo CAM host IP')
args = parser.parse_args()
user = "admin" #admin or local camera user
password = "" #TP-link account password or local camera password
host = args.host
tapo = Tapo(host, user, password)
tapo.reboot()
if __name__ == "__main__":
main()
執行RebootTapoCAM.py,並加上host參數,例如要重啟的監視器ip為192.168.1.22。
$ python3 RebootTapoCAM.py --host 192.168.1.22
若要將python script整合進入Home Assistant中,假設
- python環境在192.168.1.10的主機上,且帳號user可以透過ssh下指令到主機。
- python script放在192.168.1.10的主機上,路徑為/home/user/Python3/。
- 要重啟的監視器ip為192.168.1.22。
在Home Assistant的configuration.yaml中加入
shell_command:
camera_reboot_tapo_c310_balcony2f: "ssh -i /config/.ssh/id_rsa -o StrictHostKeyChecking=no -q user@192.168.1.10 'python3 /home/user/Python3/RebootTapoCAM.py --host 192.168.1.22'"
重新啟動Home Assistant後在服務中就找的到
再依自己的喜好整合到Home Assistant的UI中就可以收工,例如透過multiple-entity-row
type: custom:multiple-entity-row
entity: camera.tapo_c310_balcony2f
icon: mdi:cctv
name: 二樓陽台
show_state: false
state_color: true
secondary_info:
attribute: friendly_name
entities:
- icon: mdi:refresh
tap_action:
action: call-service
service: shell_command.camera_reboot_tapo_c310_balcony2f
confirmation:
text: 請確認是否要重新啟動設備
- entity: switch.tapo_c310_balcony2f_detect
toggle: true
icon: mdi:motion-sensor
state_color: true
name: false
- entity: switch.tapo_c310_balcony2f_recordings
icon: mdi:cctv
state_color: true
name: false
- entity: sensor.tapo_c310_balcony2f_camera_fps
name: CAM
unit: ' '
- entity: sensor.tapo_c310_balcony2f_process_fps
name: PRC
unit: ' '
- entity: sensor.tapo_c310_balcony2f_detection_fps
name: DET
unit: ' '
最後就像這樣,按下重新整理的圖示就可以重新啟動監視器。