家里小朋友放学会自己打开电视看,需要控制小朋友看电视时常,写一个脚本来进行监控。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import subprocess
import time
import requests
def ping_ip(ip):
try:
response = subprocess.run(['ping', '-c', '1', ip], stdout=subprocess.PIPE)
return response.returncode == 0
except Exception as e:
print(f"Error pinging {ip}: {e}")
return False
def call_api(url, data):
try:
response = requests.post(url, json=data)
print(f"API response: {response.status_code}, {response.text}")
except Exception as e:
print(f"Error calling API: {e}")
def format_duration(seconds):
hours = seconds // 3600
minutes = (seconds % 3600) // 60
return f"{hours}小时{minutes}分钟"
# 电视机的ip
ip_address = "192.168.1.200"
api_url = "https://wechat.alert.url/send_message"
ip_alive = False
start_time = None
while True:
is_up = ping_ip(ip_address)
if is_up and not ip_alive:
ip_alive = True
start_time = time.time()
call_api(api_url, {"userid": "wechatpin", "message": "电视开机了"})
elif not is_up and ip_alive:
ip_alive = False
end_time = time.time()
alive_duration = format_duration(int(end_time - start_time))
message = f"电视关机了,开机时常{alive_duration}"
call_api(api_url, {"userid": "wechatpin", "message": message})
start_time = None
time.sleep(60)
容器化部署,Dockerfile文件:
# 使用官方 Python 基础镜像
FROM python:3.9-slim
# 安装 ping 命令
RUN apt-get update && \
apt-get install -y iputils-ping && \
rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
# 将 Python 脚本复制到容器内
COPY main.py .
# 安装所需的 Python 依赖
RUN pip install --no-cache-dir requests
# 当容器启动时运行脚本
CMD ["python", "./main.py"]
家里路由器给了电视固定的IP地址,脚本逻辑是每分钟ping电视ip,如果发现能ping通,发消息通知并且开始计时,如果发现电视关机了,汇总开机时长并且报告。