first commit
This commit is contained in:
119
timer_chine.py
Normal file
119
timer_chine.py
Normal file
@@ -0,0 +1,119 @@
|
||||
import serial
|
||||
from serial import SerialException
|
||||
import datetime
|
||||
import binascii
|
||||
import logging
|
||||
import time
|
||||
import json
|
||||
|
||||
import re
|
||||
|
||||
# Configuration Data (later to be put in Panel2Net.conf)
|
||||
# SerialPort: Name of RPi serial port receiving the panel data
|
||||
# SerialPort = "COM1"
|
||||
SerialPort = "COM1"
|
||||
# BaudRate: Serial port speed (Baud, Default will be adjusted later)
|
||||
BaudRate = 19200
|
||||
# PackageByTime: Time Duration until a package is closed
|
||||
# and sent off (seconds)
|
||||
PackageByTime = 0.1
|
||||
# PackageByLength* Length (in bytes) of data input
|
||||
# until a package is closed and sent off
|
||||
PackageByLength = 128
|
||||
# PackageByLength = 256 #попробовать нужно !!!!!!!!!!!!!!!!!!!!
|
||||
# PackageByLength = 256
|
||||
|
||||
# MaxBuffer before flushing (in order to avoid buffer overflow)
|
||||
BufferMax = 2000
|
||||
|
||||
|
||||
# LogFileName: Name of LogFile
|
||||
current_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
||||
LogFileName = f"timer_megasport5_{current_time}.log"
|
||||
# LogFileSize Maximum Size of LogFile (in Mbytes)
|
||||
LogFileSize = 10
|
||||
# LogLevel Minimum Severity Level to be logged (see severity in Logs)
|
||||
LogLevel = "E"
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s %(levelname)s %(message)s",
|
||||
filename=LogFileName,
|
||||
filemode="w",
|
||||
)
|
||||
|
||||
def hexspace(string, length):
|
||||
return ' '.join(string[i:i+length] for i in range(0,len(string),length))
|
||||
|
||||
ser = serial.Serial()
|
||||
ser.port = SerialPort
|
||||
ser.baudrate = BaudRate
|
||||
ser.bytesize = serial.EIGHTBITS # number of bits per bytes
|
||||
ser.parity = serial.PARITY_NONE # PARITY_NONE # set parity check: no parity
|
||||
ser.stopbits = serial.STOPBITS_ONE # number of stop bits
|
||||
ser.timeout = PackageByTime # non-block read
|
||||
ser.xonxoff = False # disable software flow control
|
||||
ser.rtscts = False # disable hardware (RTS/CTS) flow control
|
||||
ser.dsrdtr = False # disable hardware (DSR/DTR) flow control
|
||||
ser.writeTimeout = 0 # timeout for write
|
||||
|
||||
while True:
|
||||
try:
|
||||
print("Initializing")
|
||||
ser.close()
|
||||
ser.open()
|
||||
if ser.is_open:
|
||||
try:
|
||||
ser.reset_input_buffer()
|
||||
# flush input buffer, discarding all its contents
|
||||
ser.reset_output_buffer()
|
||||
# flush output buffer, aborting current output
|
||||
# and discard all that is in buffer
|
||||
RequestCount = 0
|
||||
print("Port Opening")
|
||||
# Initialise RetryCounter
|
||||
RetryCount = 0
|
||||
# Initialise Variable to take remainder string
|
||||
remainder_hex = b""
|
||||
|
||||
while True:
|
||||
# Read from Serial Interface
|
||||
response = ser.read(PackageByLength)
|
||||
# print(response)
|
||||
if len(response) > 0:
|
||||
# In case there is something coming down the serial path
|
||||
logging.debug(response)
|
||||
|
||||
if response != b"":
|
||||
cdata = binascii.hexlify(response)
|
||||
ddata = cdata.decode("utf-8").upper()
|
||||
edata = hexspace(ddata, 2)
|
||||
temp_data = edata.split()
|
||||
temp_new = [int(t, 16) for t in temp_data]
|
||||
timer = f"{temp_new[3]}:{temp_new[2]}"
|
||||
seconds = temp_new[5]
|
||||
# milliseconds = str(temp_new[6])[0]
|
||||
print(len(temp_new), edata, temp_new, timer, seconds)
|
||||
|
||||
|
||||
else:
|
||||
# In case nothing is coming down the serial interface
|
||||
print(
|
||||
"\rWaiting for serial input...",
|
||||
end=" ",
|
||||
flush=True,
|
||||
)
|
||||
|
||||
# in case that the Serial Read or HTTP request fails
|
||||
except Exception as e1:
|
||||
print("error communicating...: " + str(e1))
|
||||
logging.error("error communicating...: " + str(e1))
|
||||
|
||||
else:
|
||||
print("Port Opening Failed... trying again in 5 seconds")
|
||||
time.sleep(0.1)
|
||||
ser.close()
|
||||
|
||||
except SerialException:
|
||||
print("No port connected... trying again in 5 seconds")
|
||||
time.sleep(0.1)
|
||||
Reference in New Issue
Block a user