MarkoprintWiFi/MkpWIFI/main.py

191 lines
6.5 KiB
Python

'''
Created on 8 apr 2019
@author: Emanuele Trabattoni
'''
import sys
import time
import datetime
import socket
import json
import PyQt5.QtWidgets
from MkpWIFI.MKPrint_GUI import Ui_MainWindow
class main(PyQt5.QtWidgets.QMainWindow):
def __init__(self):
PyQt5.QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setFixedSize(self.maximumSize())
self.setWindowTitle("Manda Etichette a Marcatrice")
self.inkStatCounter = 0
self.printer = None
self.headStatus = dict()
self.connected = False
self.sending = False
self.timer = PyQt5.QtCore.QTimer()
self.ui.btn_connect.clicked.connect(self.connetti)
self.ui.btn_upload.clicked.connect(self.upload)
self.ui.btn_upload.setEnabled(False)
self.ui.rad_dataOn.setChecked(True)
self.ui.prg_inkLevel.setTextVisible(True)
try:
self.setFile = open("conf.json", "r")
self.settings = json.load(self.setFile)
self.data = self.settings["printcmd"]
except FileNotFoundError as e:
print("Configuration file error: {}".format(e))
sys.exit(1)
pass
def connetti(self):
if not self.connected:
if self.printer is None:
try:
self.printer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.printer.connect((self.settings["ip"], self.settings["port"]))
self.printer.settimeout(0.5)
self.ui.btn_connect.setText("DISCONNETTI")
self.ui.lbl_stat.setText("Connesso")
self.ui.btn_upload.setEnabled(True)
self.connected = True
self.status()
self.timer.start(self.settings["keepalive"])
self.timer.timeout.connect(self.keepalive)
except socket.error as e :
print ("Connessione Fallita: {}".format(e))
self.printer = None
self.connected = False
pass
else:
self.disconnetti()
pass
pass
def disconnetti(self):
if self.connected:
self.timer.stop()
self.connected = False
self.ui.btn_connect.setText("CONNETTI")
self.ui.lbl_stat.setText("Disconnesso")
self.printer.close()
self.printer = None
pass
def upload(self):
self.sending=True
if self.connected:
if self.ui.rad_dataOn.isChecked():
date = datetime.datetime.now()
date = date.strftime(self.data["dateformat"])
else:
date = ""
cmdstr = "\x02TZ" + self.data["filename"] + ";" + self.data["printmode"] + "\r"
descr = str(self.ui.txt_descr.toPlainText()).capitalize()
print(bytearray(descr,"ascii"))
descr = descr.replace("\n", "\t")
datastr = str(self.ui.txt_model.text()).upper() + "\r" + \
date + descr + "\r"
outstr = cmdstr + datastr + "\03\r"
self.printer.settimeout(1.0)
try:
self.printer.send(bytearray(outstr, "ascii"))
retval = self.printer.recv(1)
print("ACK: ", retval)
if retval == b'\x06':
retval = self.printer.recv(6)
if retval == b'\x021OK\x03':
print("RESP: ", retval)
self.ui.lbl_stat.setText("Invio Riuscito!")
print("Printer OK")
else:
self.ui.lbl_stat.setText("Invio Fallito!")
print("Printer Error")
else:
print("Send Error")
self.printer.settimeout(0.5)
self.status()
if self.headStatus["ink"] == 2:
self.ui.lbl_stat.setText("CARTUCCIA ESAURITA\nSostituire!")
elif self.headStatus["ink"] == 1:
self.ui.lbl_stat.setText("Cartuccia in Esaurimento")
except socket.error as e:
print("Socket error: ", e)
self.printer.settimeout(0.5)
self.ui.lbl_stat.setText("Invio Fallito!")
self.printer.sendall(b"\r"*5)
self.printer.recv(5)
self.sending = False
pass
def keepalive(self):
if not self.sending:
print ("Keepalive")
if self.connected:
try:
self.printer.send(b"\x1B*\r")
print(str(self.printer.recv(5)))
self.ui.lbl_stat.setText("Connesso")
if self.inkStatCounter <= self.settings["inkstat"]:
self.inkStatCounter +=1
else:
self.status()
self.inkStatCounter = 0
except:
self.disconnetti()
else:
self.ui.lbl_stat.setText("Disconnesso")
pass
def status(self):
if self.connected:
try:
self.printer.send(b"\x1BS1\r")
time.sleep(1)
c = self.printer.recv(1)
inData = b""
while c != b"\r":
inData += c
if len(inData) > 200:
print("Status Message Length Error")
raise
c=self.printer.recv(1)
inData = str(inData,"ascii")
inData = inData.split(":")
for val in enumerate(self.data["headstatus"]):
if val[1] != "txt":
self.headStatus[val[1]] = int(inData[val[0]])
else:
self.headStatus[val[1]] = str(inData[val[0]])
print("Status: {}".format(self.headStatus))
self.ui.prg_inkLevel.setValue(self.headStatus["iuse"])
self.ui.lcd_printCount.display(str(self.headStatus["labelCnt"]))
except:
print("Status retreive error!")
pass
def quit(self):
pass
if __name__ == '__main__':
app = PyQt5.QtWidgets.QApplication(sys.argv)
window = main()
window.show()
sys.exit(app.exec_())
pass