''' 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