python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python监控声光报警器

Python3开发监控自动化触发声光报警

投稿:yin

使用python制作一个自动监控并触发声光报警是不是感觉很高端,很多人都会认为只是一件很难的事情,但实际很简单就能实现。

使用python制作一个自动监控并触发声光报警是不是感觉很高端,很多人都会认为只是一件很难的事情,但实际很简单就能实现。

代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import serial
import time
import urllib3
import json
import tkinter as tk
import tkinter.messagebox
from tkinter import *
#发送
d11=bytes.fromhex('7E FF 06 3A 00 01 00 EF')   #开灯  播放 1 次第 1 首
d12=bytes.fromhex('7E FF 06 3A 00 01 01 EF')   #关灯  播放 1 次第 1 首
d21=bytes.fromhex('7E FF 06 3A 00 02 00 EF')   #开灯  播放 1 次第 2 首
d22=bytes.fromhex('7E FF 06 3A 00 02 01 EF')   #关灯  播放 1 次第 2 首
d31=bytes.fromhex('7E FF 06 3A 00 81 00 EF')   #开灯  循环播放第 1 首
d32=bytes.fromhex('7E FF 06 3A 00 81 01 EF')   #关灯  循环播放第 1 首
d41=bytes.fromhex('7E FF 06 3A 00 82 00 EF')   #开灯  循环播放第 2 首
d42=bytes.fromhex('7E FF 06 3A 00 82 01 EF')   #关灯  循环播放第 2 首
d51=bytes.fromhex('7E FF 06 06 00 00 1E EF')   #单量级别调节  30 级音量可调(当前指令为最大音量)
d52=bytes.fromhex('7E FF 06 04 00 00 00 EF')   #音量加  当前音量+1 级,共 30 级
d53=bytes.fromhex('7E FF 06 05 00 00 00 EF')   #音量减  当前音量-1 级,共 30 级
d54=bytes.fromhex('7E FF 06 3A 00 00 00 EF')   #闪灯开  单独打开闪灯,不影响当前播放状态
d55=bytes.fromhex('7E FF 06 3A 00 00 01 EF')   #闪灯关  单独关闭闪灯,不影响当前播放状态
d56=bytes.fromhex('7E FF 06 0C 00 00 00 EF')   #设备复位 恢复设备的初始状态
d57=bytes.fromhex('7E FF 06 16 00 00 00 EF')   #全部停止 停止报警并关闭闪灯
# ser = serial.Serial('COM3', 9600, timeout=0.1)
# ser.write(d54)
# # ser.write(d52)
# time.sleep(1)
# ser.write(d57)
# ser.close()
# 延时自动关闭提示弹框
def countdown(time):
    if time == -1:
     root.destroy()
     ser.write(d57)
     ser.close()
    else:
     label.configure(text=content+"报警")
     root.after(1000, countdown, time-1)
# 手动关闭
def handstop():
    countdown(-1)
    # 在这执行关闭操作
    http = urllib3.PoolManager()
    url = 'http://flxt.xxx.com/api/alarm/scanning_stop?school=' + schoolid
    http.request('GET', url)
    scanning()
# 触发报警
def shout():
    global ser
    global root
    global label
    ser = serial.Serial(com, 9600, timeout=0.1)
    ser.write(d31)   #循环播放第一首
    # ser.write(d54)  # 循环播放闪光
    root = tk.Tk()
    label = tk.Label(root, width=20)
    label.pack(padx=20, pady=20)
    countdown(continued_time)  #10秒关闭
    btn = Button(root, text="关闭报警", command=handstop)
    btn.pack()
    btn.mainloop()
# 定时请求脚本
def pushdata():
    http = urllib3.PoolManager()
    url = 'http://flxt.xxx.com/api/alarm/scanning?school='+schoolid
    retdata=http.request('GET', url)
    if retdata.status==200 :
      print('响应成功')
      retjsondata = json.loads(retdata.data.decode())
      if retjsondata['code']==1:
        global content
        content = retjsondata['data'][0]['content']
        print('有动作,开干,触发报警器')
        print(retjsondata['msg'])
        shout()  #执行播放事件
        return 2
      else:
        print(retjsondata['msg'])
        return 1
    else:
      print('响应失败')
#循环学校进行报警
def scanning(str='3'):
  print('开始循环搞事情')
  while 1 <= 2:
      if str==3:
          pushdata()
          time.sleep(3)
      else:
          type = pushdata()
          if type == 2:  # 延时播放
              time.sleep(delayed_time)
          else:
              time.sleep(3)
              print('监控中...')
          scanning('2')
# 登录执行报警逻辑
def login():
    global com
    global schoolid
    global continued_time  #持续时间
    global delayed_time    #报警间隔时间
    continued_time=60
    delayed_time=1200
    schoolid = entryName.get()
    com = entryPwd.get()
    if schoolid=='':
        tk.messagebox.showinfo('提示', '学校ID不能为空')
        return
    if com=='':
        tk.messagebox.showinfo('提示', '串口不能为空')
        return
    root.destroy()
    scanning()   #执行监控
# 测试报警按钮
def textalarm():
    com = entryPwd.get()
    if com=='':
        tk.messagebox.showinfo('提示', '串口不能为空,请打开设备管理器检查端口,查看串口号。示例:COM3(字母大写)')
        return
    testshout(com)
    print('测试完成')
# 测试报警执行
def testshout(com):
    ser = serial.Serial(com, 9600, timeout=0.1)
    # ser = serial.Serial('COM3', 9600, timeout=0.1)
    ser.write(d31)   #循环播放第一首
    time.sleep(3)    #播放时长3秒
    ser.write(d57)   #全部停止
    ser.close()      #结束
    print('播放完成')
#
root = tk.Tk()
varName = tk.StringVar(value='')
varPwd = tk.StringVar(value='COM3')
labelName = tk.Label(root, text='学校ID:', justify=tk.RIGHT, width=80)
labelName.place(x=10, y=5, width=80, height=20)
entryName = tk.Entry(root, width=80, textvariable=varName)
entryName.place(x=100, y=5, width=80, height=20)
labelPwd = tk.Label(root, text='串口:', justify=tk.RIGHT, width=80)
labelPwd.place(x=10, y=30, width=80, height=20)
entryPwd = tk.Entry(root,  width=80, textvariable=varPwd)
entryPwd.place(x=100, y=30, width=80, height=20)
buttonOk = tk.Button(root, text='测试报警', command=textalarm)
buttonOk.place(x=30, y=70, width=70, height=20)
buttonOk = tk.Button(root, text='登录', command=login)
buttonOk.place(x=120, y=70, width=50, height=20)
root.mainloop()

到此这篇关于Python3开发监控自动化触发声光报警的文章就介绍到这了,更多相关Python监控声光报警器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文