Python3開發(fā)監(jiān)控自動化觸發(fā)聲光報警
使用python制作一個自動監(jiān)控并觸發(fā)聲光報警是不是感覺很高端,很多人都會認(rèn)為只是一件很難的事情,但實(shí)際很簡單就能實(shí)現(xiàn)。
代碼如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import serial import time import urllib3 import json import tkinter as tk import tkinter.messagebox from tkinter import * #發(fā)送 d11=bytes.fromhex('7E FF 06 3A 00 01 00 EF') #開燈 播放 1 次第 1 首 d12=bytes.fromhex('7E FF 06 3A 00 01 01 EF') #關(guān)燈 播放 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') #關(guān)燈 播放 1 次第 2 首 d31=bytes.fromhex('7E FF 06 3A 00 81 00 EF') #開燈 循環(huán)播放第 1 首 d32=bytes.fromhex('7E FF 06 3A 00 81 01 EF') #關(guān)燈 循環(huán)播放第 1 首 d41=bytes.fromhex('7E FF 06 3A 00 82 00 EF') #開燈 循環(huán)播放第 2 首 d42=bytes.fromhex('7E FF 06 3A 00 82 01 EF') #關(guān)燈 循環(huán)播放第 2 首 d51=bytes.fromhex('7E FF 06 06 00 00 1E EF') #單量級別調(diào)節(jié) 30 級音量可調(diào)(當(dāng)前指令為最大音量) d52=bytes.fromhex('7E FF 06 04 00 00 00 EF') #音量加 當(dāng)前音量+1 級,共 30 級 d53=bytes.fromhex('7E FF 06 05 00 00 00 EF') #音量減 當(dāng)前音量-1 級,共 30 級 d54=bytes.fromhex('7E FF 06 3A 00 00 00 EF') #閃燈開 單獨(dú)打開閃燈,不影響當(dāng)前播放狀態(tài) d55=bytes.fromhex('7E FF 06 3A 00 00 01 EF') #閃燈關(guān) 單獨(dú)關(guān)閉閃燈,不影響當(dāng)前播放狀態(tài) d56=bytes.fromhex('7E FF 06 0C 00 00 00 EF') #設(shè)備復(fù)位 恢復(fù)設(shè)備的初始狀態(tài) d57=bytes.fromhex('7E FF 06 16 00 00 00 EF') #全部停止 停止報警并關(guān)閉閃燈 # ser = serial.Serial('COM3', 9600, timeout=0.1) # ser.write(d54) # # ser.write(d52) # time.sleep(1) # ser.write(d57) # ser.close() # 延時自動關(guān)閉提示彈框 def countdown(time): if time == -1: root.destroy() ser.write(d57) ser.close() else: label.configure(text=content+"報警") root.after(1000, countdown, time-1) # 手動關(guān)閉 def handstop(): countdown(-1) # 在這執(zhí)行關(guān)閉操作 http = urllib3.PoolManager() url = 'http://flxt.xxx.com/api/alarm/scanning_stop?school=' + schoolid http.request('GET', url) scanning() # 觸發(fā)報警 def shout(): global ser global root global label ser = serial.Serial(com, 9600, timeout=0.1) ser.write(d31) #循環(huán)播放第一首 # ser.write(d54) # 循環(huán)播放閃光 root = tk.Tk() label = tk.Label(root, width=20) label.pack(padx=20, pady=20) countdown(continued_time) #10秒關(guān)閉 btn = Button(root, text="關(guān)閉報警", 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('響應(yīng)成功') retjsondata = json.loads(retdata.data.decode()) if retjsondata['code']==1: global content content = retjsondata['data'][0]['content'] print('有動作,開干,觸發(fā)報警器') print(retjsondata['msg']) shout() #執(zhí)行播放事件 return 2 else: print(retjsondata['msg']) return 1 else: print('響應(yīng)失敗') #循環(huán)學(xué)校進(jìn)行報警 def scanning(str='3'): print('開始循環(huán)搞事情') 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('監(jiān)控中...') scanning('2') # 登錄執(zhí)行報警邏輯 def login(): global com global schoolid global continued_time #持續(xù)時間 global delayed_time #報警間隔時間 continued_time=60 delayed_time=1200 schoolid = entryName.get() com = entryPwd.get() if schoolid=='': tk.messagebox.showinfo('提示', '學(xué)校ID不能為空') return if com=='': tk.messagebox.showinfo('提示', '串口不能為空') return root.destroy() scanning() #執(zhí)行監(jiān)控 # 測試報警按鈕 def textalarm(): com = entryPwd.get() if com=='': tk.messagebox.showinfo('提示', '串口不能為空,請打開設(shè)備管理器檢查端口,查看串口號。示例:COM3(字母大寫)') return testshout(com) print('測試完成') # 測試報警執(zhí)行 def testshout(com): ser = serial.Serial(com, 9600, timeout=0.1) # ser = serial.Serial('COM3', 9600, timeout=0.1) ser.write(d31) #循環(huán)播放第一首 time.sleep(3) #播放時長3秒 ser.write(d57) #全部停止 ser.close() #結(jié)束 print('播放完成') # root = tk.Tk() varName = tk.StringVar(value='') varPwd = tk.StringVar(value='COM3') labelName = tk.Label(root, text='學(xué)校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()
到此這篇關(guān)于Python3開發(fā)監(jiān)控自動化觸發(fā)聲光報警的文章就介紹到這了,更多相關(guān)Python監(jiān)控聲光報警器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
wxpython實(shí)現(xiàn)圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了wxpython實(shí)現(xiàn)圖書管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03pytorch中transform.Compose()用法詳解
PyTorch是一個開源的Python機(jī)器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序,這篇文章主要介紹了pytorch中transform.Compose()用法,需要的朋友可以參考下2023-10-10django中賬號密碼驗(yàn)證登陸功能的實(shí)現(xiàn)方法
這篇文章主要介紹了django中賬號密碼驗(yàn)證登陸功能的實(shí)現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07python批量修改圖片后綴的方法(png到j(luò)pg)
今天小編就為大家分享一篇python批量修改圖片后綴(png到j(luò)pg),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python入門學(xué)習(xí)之類的相關(guān)知識總結(jié)
今天帶大家復(fù)習(xí)python的基礎(chǔ)知識,文中對類的相關(guān)知識作了非常詳細(xì)的介紹,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05在python中實(shí)現(xiàn)將一張圖片剪切成四份的方法
今天小編就為大家分享一篇在python中實(shí)現(xiàn)將一張圖片剪切成四份的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12