189 lines
6.5 KiB
Python
189 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
|