通過樹莓派根據當前時間控制終端開關

樹莓派python3.7   通過串口下發數據 環境PyCharm Community Edition 2019.3.3 x64  安裝後pip3 install幾個模塊

import serial
import time
import queue
import json
import struct
from datetime import datetime

setmpctQue = queue.Queue()

command_power = {
            'switch_on': [  # 多路電源終端1-8路開
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),  # 第一路開
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),  # 第八路開
                        ],
            'switch_off': [  # 多路電源終端1-8路關
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),  # 第一路關
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
                        ('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),  # 第八路關
                        ],

                }

def sensorData():  # start those thread and and guard them
    creatCCD = threading.Thread(target=CCthreadT)  # 開啓串口收集發送線程
    creatMPCT = threading.Thread(target=SetMPCTThread)   # 設置多路電源終端線程
    creatCCD.start()
    creatMPCT.start()

def CCthreadT():
    threadCC = threading.Thread(target=colectTred)
    threadCC.start()
    while True:
        if not threadCC.is_alive():  # 如果串口採集線程卡死 隔60s再次開啓
            threadCC = threading.Thread(target=colectTred)
            threadCC.start()
        time.sleep(60)

def SetMPCTThread(): #設置多路電源終端線程
    threadPut = threading.Thread(target=setmpct)
    threadPut.start()
    while True:
        if not threadPut.is_alive():   # 如果設置多路電源終端線程卡死 隔60s再次開啓
            threadPut = threading.Thread(target=setmpct)
            threadPut.start()
        time.sleep(60)

def colectTred():  # 串口收集數據 選要改動加接口 by xxxxxxx
    # s0=serial.Serial("/dev/ttyAMA0",115200)  # 樹莓派端
    s0 = serial.Serial("COM11", 115200)  # PC端
    temp = 0
    while True:
       while s0.inWaiting():
            try:
                temp = s0.read()
            except Exception as e:
                pass
       while not setmpctQue.empty():  # 當收到數據時
            data = setmpctQue.get()
            # Hex_str = bytes.fromhex(data)  # 文本轉換Hex
            s0.write(data)
        time.sleep(0.01)  

##################################### 配置多路電源開關 ############################
def setmpct():  # 根據時間設置多路電源終端開關狀態
    print('zcollect 334 creat setmpct')
    on = '14:35:00'  # 開燈時間
    off = '14:36:00'  # 關燈時間

    on_send_num = 0
    off_send_num = 0

    while True:
       now_time = datetime.now()
       nowtime2str = now_time.strftime("%H:%M:%S")

       if nowtime2str >= on and nowtime2str <= off:  # 開燈時間
          if on_send_num < 8:
              # if on_send_num != 1 and on_send_num != 2 and on_send_num != 3:  # 不對某路進行控制
              hex = bytes.fromhex(command_power['switch_on'][on_send_num])
              setmpctQue.put(hex)  # 發送
              on_send_num += 1
              off_send_num = 0
              time.sleep(2)
       elif  off_send_num < 8:  # 關燈時間
           hex = bytes.fromhex(command_power['switch_off'][off_send_num])
           setmpctQue.put(hex)  # 發送
           off_send_num += 1
           on_send_num = 0
           time.sleep(2)


       time.sleep(2)

if __name__ == '__main__':
    sensorData()
    pass


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章