from queue import Queue import time import socket import serial import requests from threading import Thread from os import mkdir from os.path import isdir import pyaudio import datetime import wave import os import json HOST = 'localhost' PORT = 9001 ADDR = ('xxxxxxxxx', 10140) ENCODING = 'utf-8' BUFFSIZE = 1024 url = 'xxxxxxxx' ser = serial.Serial( # port='COM5', port='/dev/ttysWK0', baudrate=9600, parity=serial.PARITY_NONE, # 校验位 stopbits=serial.STOPBITS_ONE, # 停止位 # bytesize=8 # 数据位 ) Arr = [] data = '' js = 0 LeqData = '' LMxData = '' LMnData = '' MN = '001A001' L5 = '' L10 = '' L50 = '' L90 = '' L95 = '' diction={} def crc16(x): a = 0xFFFF for byte in x: byte = str(byte) a = (a >> 8) ^ ord(byte) for i in range(8): last = a & 0x0001 a >>= 1 if last == 0x0001: a ^= 0xA001 s = str(hex(a).upper()) s1 = s[2:4] + s[4:6] s2 = s1.zfill(4) return s2 #传输报警通常tcp通知 def tcpClient(x, File, FormFile): # 创建客户套接字 with socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) as s: # 尝试连接服务器 s.connect(ADDR) # 通信循环 inData = x # 发送数据到服务器 s.send(inData.encode(ENCODING)) # print(inData) # print('发送成功!') # 接收返回数据 # outData = s.recv(9999) # print('返回数据信息:{!r}'.format(outData)) # print('返回数据信息:' + str(outData)) mnn = MN qn = QN FileName = File FormFile = FormFile # f = open('/home/firefly/pythonProject3/logfile.txt', 'a') # # f.writelines('\n' + inData + '\n') # f.close() http(mnn, qn, FileName, FormFile) #传输分钟噪音报警tcp通知 def tcpClientfz(x): # 创建客户套接字 with socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) as s: # 尝试连接服务器 s.connect(ADDR) # 通信循环 inData = x # 发送数据到服务器 s.send(inData.encode(ENCODING)) # print(inData) # print('发送成功!') # 接收返回数据 outData = s.recv(9999) outData = format(outData) outData = str(outData) # f = open('/home/firefly/pythonProject3/logfile.txt', 'a') # f.writelines('\n' + ('发送分钟:' + inData) + '\n') # f.writelines('\n' + ('返回应答:' + outData) + '\n') # f.close() def http(mnn, qn, FileName, FormFile): data = { 'MN': (None, mnn), 'AlarmQN': (None, qn), 'FileName': (None, FileName), 'FormFile': open(FormFile, 'rb') } r = requests.put(url, files=data) f = open('/home/firefly/pythonProject3/logfile.txt', 'a') print(r.status_code) rr = str(r.status_code) tt = time.time() ct = time.ctime(tt) if rr == '200': f.writelines(ct + '\n') f.writelines(rr + '-pass\n') else: f.writelines(ct + '\n') f.writelines(rr + '-defeated\n') f.close() def start_audio(): time = 65 while time == 65: CHUNK = 1024 FORMAT = pyaudio.paInt24 CHANNELS = 1 RATE = 48000 TimeS = datetime.datetime.now().strftime('%H%M%S%f')[0:7] nowtime = datetime.datetime.now().strftime('%Y%m%d_' + TimeS + '_' + TimeS) + '.wav' save_file = nowtime # 文件名 RECORD_SECONDS = time # 需要录制的时间 nowtimes = 'Recording equipment' if not isdir(nowtimes): mkdir(nowtimes) WAVE_OUTPUT_FILENAME = '/home/firefly/pythonProject3/' + nowtimes + '/' + save_file # 保存的文件名 p = pyaudio.PyAudio() # 初始化 stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) # 创建录音文件 frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) # 开始录音 stream.stop_stream() stream.close() p.terminate() dirToBeEmptied = '/home/firefly/pythonProject3/' + nowtimes # 需要清空的文件夹 ds = list(os.walk(dirToBeEmptied)) # 获得所有文件夹的信息列表 delta = datetime.timedelta(seconds=120) # 设定60miao的文件为过期 now = datetime.datetime.now() # 获取当前时间 wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') # 保存 wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) os.system('clear') for d in ds: # 遍历该列表 os.chdir(dirToBeEmptied) # 进入本级路径,防止找不到文件而报错 if d[2] != []: # 如果该路径下有文件 for x in d[2]: # 遍历这些文件 ctime = datetime.datetime.fromtimestamp(os.path.getctime(x)) # 获取文件创建时间 if ctime < (now - delta): # 若创建于delta天前 os.remove(x) # 则删掉 os.chdir('/home/firefly/pythonProject3/') crcdata = crc16( 'QN=' + QN + ';ST=36;CN=2090;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';Leq-Data=' + LeqData + ';LMx-Data=' + LMxData + ';LMn-Data=' + LMnData + ';L5-Data=' + L5 + ';L10-Data=' + L10 + ';L50-Data=' + L50 + ';L90-Data=' + L90 + ';L95-Data=' + L95 + ';LW=270;LD=20.6;LType=1&&') crclen = len( 'QN=' + QN + ';ST=36;CN=2090;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';Leq-Data=' + LeqData + ';LMx-Data=' + LMxData + ';LMn-Data=' + LMnData + ';L5-Data=' + L5 + ';L10-Data=' + L10 + ';L50-Data=' + L50 + ';L90-Data=' + L90 + ';L95-Data=' + L95 + ';LW=270;LD=20.6;LType=1&&') crcdatav = crc16( 'QN=' + QN + ';ST=36;CN=2100;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';LFName=' + nowtime + '&&') crclenv = len( 'QN=' + QN + ';ST=36;CN=2100;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';LFName=' + nowtime + '&&') Video = '##0' + str( crclenv) + 'QN=' + QN + ';ST=36;CN=2100;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';LFName=' + nowtime + '&&' + crcdatav + '\n' Tz = '##0' + str( crclen) + 'QN=' + QN + ';ST=36;CN=2090;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';Leq-Data=' + LeqData + ';LMx-Data=' + LMxData + ';LMn-Data=' + LMnData + ';L5-Data=' + L5 + ';L10-Data=' + L10 + ';L50-Data=' + L50 + ';L90-Data=' + L90 + ';L95-Data=' + L95 + ';LW=270;LD=20.6;LType=1&&' + crcdata + '\n' TzVideo = Tz + Video if LMxData > '45': tcpClient(TzVideo, nowtime, WAVE_OUTPUT_FILENAME) diction['new'] = nowtime diction['nowtime'] = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) json_path = "wave_name.json" with open(json_path, 'w', encoding='utf-8') as file: file.write(json.dumps(diction, indent=2, ensure_ascii=False)) continue t = Thread(target=start_audio).start() while True: # 分钟声强计数据 sendDat = b"\x01\x03\x00\x01\x00\x01\xd5\xca" da = ser.write(sendDat) # show_hex_str(sendDat) if ser.in_waiting: data = ser.read(ser.in_waiting) # show_hex_str(data) db = (int(data[3]) * 0xff + int(data[4])) / 10.0 # print("DB=", db, 'db') Arr.append(db) Arr = sorted(Arr, reverse=True) js = js + 1 time.sleep(0.5) if js >= 120: DataTime = time.strftime('%Y%m%d%H%M' + '00') QN = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')[0:17] LeqData = str('%.1f' % int(int(sum(Arr)) / int(len(Arr)))) LMxData = str('%.1f' % max(Arr)) LMnData = str('%.1f' % min(Arr)) L5 = str(Arr[6]) L10 = str(Arr[12]) L50 = str(Arr[59]) L90 = str(Arr[107]) L95 = str(Arr[113]) Arr.clear() js = 0 crcdatafz = crc16( 'QN=' + QN + ';ST=36;CN=2051;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';Leq-Data=' + LeqData + ';LMx-Data=' + LMxData + ';LMn-Data=' + LMnData + ';L5-Data=' + L5 + ';L10-Data=' + L10 + ';L50-Data=' + L50 + ';L90-Data=' + L90 + ';L95-Data=' + L95 + ';LW=270;LD=20.6;LType=1&&') crclenfz = len( 'QN=' + QN + ';ST=36;CN=2051;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';Leq-Data=' + LeqData + ';LMx-Data=' + LMxData + ';LMn-Data=' + LMnData + ';L5-Data=' + L5 + ';L10-Data=' + L10 + ';L50-Data=' + L50 + ';L90-Data=' + L90 + ';L95-Data=' + L95 + ';LW=270;LD=20.6;LType=1&&') Tzzf = '##0' + str( crclenfz) + 'QN=' + QN + ';ST=36;CN=2051;PW=123456;MN=' + MN + ';Flag=5;CP=&&DataTime=' + DataTime + ';Leq-Data=' + LeqData + ';LMx-Data=' + LMxData + ';LMn-Data=' + LMnData + ';L5-Data=' + L5 + ';L10-Data=' + L10 + ';L50-Data=' + L50 + ';L90-Data=' + L90 + ';L95-Data=' + L95 + ';LW=270;LD=20.6;LType=1&&' + crcdatafz + '\n' tcpClientfz(Tzzf) dirToBeEmptied = '/home/firefly/pythonProject3/avi' # 需要清空的文件夹 ds = list(os.walk(dirToBeEmptied)) # 获得所有文件夹的信息列表 delta = datetime.timedelta(seconds=180) # 设定60miao的文件为过期 now = datetime.datetime.now() # 获取当前时间 for d in ds: # 遍历该列表 os.chdir(dirToBeEmptied) # 进入本级路径,防止找不到文件而报错 if d[2] != []: # 如果该路径下有文件 for x in d[2]: # 遍历这些文件 ctime = datetime.datetime.fromtimestamp(os.path.getctime(x)) # 获取文件创建时间 if ctime < (now - delta): # 若创建于delta天前 os.remove(x) # 则删掉 # 回到工作目录 os.chdir('/home/firefly/pythonProject3/')
声强计和录音设备 发送声强数据和录音音频到服务器
于 2022-06-27 14:35:35 首次发布