```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()
```
- 支付寶身份驗證接口踩坑實錄-PHP(基于ThinkPHP5)(第二版更新中)
- 抖音小程序開發之授權登錄+支付寶支付+微信支付(ThinkPHP5-第三版修訂中)
- TP5小知識點錦集(長期更新)
- PHP 二維碼生成+識別
- 高德地圖點聚合點擊事件以及內容渲染
- ThinkPhP5使用phpexcle 導出數據(復制粘貼就可使用)
- Fastadmin微信小程序授權登錄+獲取手機號插件
- PHP -AES-128-CBC位加密解密
- PHP-Rsa分段加密解密(ThinkPHP5)
- PHP大轉盤抽獎代碼片段
- Fastadmin 項目上線關閉調試模式注意事項(記一次require-table.js修改事件)
- ThinkPHP5條件查詢FIND_IN_SET正反使用
- ThinkPhP5整合微信小程序訂閱消息
- think-queue處理延時任務事件
- ThinkPHP5 生成二維碼
- Python3定時監控指定文件內容變換-(增加多行,遍歷每行進行邏輯分析處理)
- Python3開發聲光報警器監控觸發報警
- ThinkPHP5下載文件流到本地
- 百度鷹眼抽軌跡集合稀算法&縮放比例調整顯示靜態圖(ThinkPHP5)
- PHP 導出Excle
- Fastadmin 自定義Tab選項卡(B表的條件查詢A表的數據,在A表里面加B表的參數作為選項卡)
- Fastadmin 修改url組件跳轉為復制功能
- 微信H5分享好友跟朋友圈-基于Easywechat
- Python3抓取監控日志文件關鍵詞跟內容變化修正版
- ThinkPHP5上傳圖片壓縮處理-(解決IOS拍照上傳旋轉90度問題)最近更新2021年12月9日11:35:07
- 二維數組根據‘key’分組為新的三維數組
- ThinkPHP5 成功部署Workerman 運行示例
- Fastadmin框架TOKEN的使用
- ThinkPHP5 -微信小程序訂閱消息開發-插件(插件基于fastadmin開發)
- ThinkPHP5-文本轉義emoji表情
- ThinkPHP5 自定義命令行處理 監聽Redis key失效觸發回調事件,實現延遲任務 實現自動取消訂單,自動完成訂單
- Fastadmin插件Shopro商城里面短信插件修改為騰訊云短信插件步驟
- Fastadmin框架自定義搜索操作流程
- ThinkPHP5 處理 微信小程序內容安全審核
- Fastadmin自定義快捷搜索之模糊搜索關聯他表
- php根據年月獲取指定月份天數及日期數組的方法
- PHP構造函數使用校驗token
- 基于ThinkPHP5&Redis騰訊云短信驗證碼注冊登錄基礎業務邏輯代碼整合
- ThinkPHP 解決跨域問題
- 支付寶沙箱環境測試支付(好久沒做都忘了,寫個博客比較省事)
- ThinkPHP5生成抖音小程序帶參數二維碼
- ThinkPHP5導入Excle-簡單絲滑
- PHP生成帶參數的小程序二維碼
- ThinkPHP5成功調通IOS蘋果支付
- swoole寫聊天室,簡單粗暴
- 微信小程序內容安全鑒別的時候,不成功因為沒有轉碼
- Fastadmin 后臺Excle文件上傳(更新新增功能)
- Lnmp 配置thinkphp5 Nginx基礎設置,包含http+https配置
- 通過經緯度獲取數據庫信息自動計算地址距離遠近
- 二維數組根據某個字段排序
- PHP二維數組去重,最簡單的方法
- TP5微信redis列隊群發模板消息Sendmsg
- PHP檢測是否關注公眾號,親測可用
- 小程序推廣分享帶參數二維碼生成
- 基于ThinkPHP5微信H5授權登錄獲取用戶信息(改進版)
- php過濾微信昵稱中的表情
- Socket.io