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

 更新时间:2023年07月15日 15:03:23   投稿: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监控声光报警器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中SyntaxError: invalid syntax报错解决

    Python中SyntaxError: invalid syntax报错解决

    在编写Python代码时,常见的SyntaxError错误通常由括号不匹配、关键字拼写错误或不正确的缩进引起,本文详细介绍了错误原因及多种解决方案,包括检查括号、关键字,以及使用IDE的语法检查功能等,感兴趣的可以了解一下
    2024-09-09
  • Python初识二叉树续之实战binarytree

    Python初识二叉树续之实战binarytree

    binarytree库是一个Python的第三方库,这个库实现了一些二叉树相关的常用方法,使用二叉树时,可以直接调用,不需要再自己实现,下面这篇文章主要给大家介绍了关于Python初识二叉树之实战binarytree的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python实现的监测服务器硬盘使用率脚本分享

    Python实现的监测服务器硬盘使用率脚本分享

    这篇文章主要介绍了Python实现的监测服务器硬盘使用率脚本分享,本文脚本适应windows和linux系统,需要的朋友可以参考下
    2014-11-11
  • Python高级编程之消息队列(Queue)与进程池(Pool)实例详解

    Python高级编程之消息队列(Queue)与进程池(Pool)实例详解

    这篇文章主要介绍了Python高级编程之消息队列(Queue)与进程池(Pool),结合实例形式详细分析了Python消息队列与进程池的相关原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2019-11-11
  • 16中Python机器学习类别特征处理方法总结

    16中Python机器学习类别特征处理方法总结

    类别型特征(categorical feature)主要是指职业,血型等在有限类别内取值的特征。在这篇文章中,小编将给大家分享一下16种类别特征处理方法,需要的可以参考一下
    2022-09-09
  • Python 计算机视觉编程进阶之OpenCV 进行霍夫变换

    Python 计算机视觉编程进阶之OpenCV 进行霍夫变换

    霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法。它通过将图像坐标空间变换到参数空间,来实现直线与曲线的拟合,通过本篇文章我们来详细了解它
    2021-11-11
  • Python文件路径名的操作方法

    Python文件路径名的操作方法

    对于文件路径名的操作在编程中是必不可少的,比如说,有时候要列举一个路径下的文件,那么首先就要获取一个路径,再就是路径名的一个拼接问题,通过字符串的拼接就可以得到一个路径名。这篇文章主要介绍了Python中文件路径名的操作,需要的朋友可以参考下
    2019-10-10
  • pytorch绘制曲线的方法

    pytorch绘制曲线的方法

    这篇文章主要为大家详细介绍了pytorch绘制曲线的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Python中模块的使用--binascii模块用法

    Python中模块的使用--binascii模块用法

    这篇文章主要介绍了Python中模块的使用--binascii模块用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 详解用Python处理Args的3种方法

    详解用Python处理Args的3种方法

    这篇文章主要介绍了用Python处理Args的3种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论