声强计和录音设备 发送声强数据和录音音频到服务器

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/')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值