From e49b48c36e5d3ecdce53cde26c2af7854f4b0711 Mon Sep 17 00:00:00 2001 From: NaruX Date: Sun, 26 Feb 2017 12:47:51 +0100 Subject: [PATCH] first checkin --- .hgignore | 0 revpipycontrol.e4p | 35 ++++++++++++ revpipycontrol/__init__.py | 0 revpipycontrol/revpipycontrol.py | 96 ++++++++++++++++++++++++++++++++ 4 files changed, 131 insertions(+) create mode 100644 .hgignore create mode 100644 revpipycontrol.e4p create mode 100644 revpipycontrol/__init__.py create mode 100644 revpipycontrol/revpipycontrol.py diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..e69de29 diff --git a/revpipycontrol.e4p b/revpipycontrol.e4p new file mode 100644 index 0000000..0820acc --- /dev/null +++ b/revpipycontrol.e4p @@ -0,0 +1,35 @@ + + + + + + + en_US + 66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275 + Python3 + Console + + 0.1.0 + Sven Sager + akira@narux.de + + + revpipycontrol/__init__.py + revpipycontrol/revpipycontrol.py + + + + + + + + None + + + + + + + + + diff --git a/revpipycontrol/__init__.py b/revpipycontrol/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/revpipycontrol/revpipycontrol.py b/revpipycontrol/revpipycontrol.py new file mode 100644 index 0000000..f8a7d8c --- /dev/null +++ b/revpipycontrol/revpipycontrol.py @@ -0,0 +1,96 @@ +#!/usr/bin/python3 +# +# (c) Sven Sager, License: GPLv3 +# +# -*- coding: utf-8 -*- +import tkinter +from argparse import ArgumentParser +from concurrent.futures import ThreadPoolExecutor +from xmlrpc.client import ServerProxy, Binary + +class RevPiPyControl(tkinter.Frame): + + def __init__(self, master=None): + super().__init__(master) + self.pack(fill="both", expand=True) + + # Command arguments + parser = ArgumentParser( + description="Revolution Pi IO-Client" + ) + parser.add_argument( + "-a", "--address", dest="address", default="127.0.0.1", + help="Server address (Default: 127.0.0.1)" + ) + parser.add_argument( + "-p", "--port", dest="port", type=int, default=55123, + help="Use port to connect to server (Default: 55074)" + ) + self.pargs = parser.parse_args() + + self.cli = ServerProxy( + "http://{}:{}".format(self.pargs.address, self.pargs.port) + ) + + # Fenster aufbauen + self._createwidgets() + + # Daten aktualisieren + self.plcrunning() + + def _createwidgets(self): + """Erstellt den Fensterinhalt.""" + # Hauptfenster + self.master.wm_title("RevPi Python PLC Loader") + + self.var_status = tkinter.StringVar() + self.txt_status = tkinter.Entry() + self.txt_status["textvariable"] = self.var_status + self.txt_status.pack(fill="x") + + self.btn_plcrunning = tkinter.Button(self) + self.btn_plcrunning["text"] = "PLC Status" + self.btn_plcrunning["command"] = self.plcrunning + self.btn_plcrunning.pack(fill="x") + + self.btn_plcstart = tkinter.Button(self) + self.btn_plcstart["text"] = "PLC Start" + self.btn_plcstart["command"] = self.plcstart + self.btn_plcstart.pack(fill="x") + + self.btn_plcstop = tkinter.Button(self) + self.btn_plcstop["text"] = "PLC Stop" + self.btn_plcstop["command"] = self.plcstop + self.btn_plcstop.pack(fill="x") + + self.btn_plcrestart = tkinter.Button(self) + self.btn_plcrestart["text"] = "PLC Restart" + self.btn_plcrestart["command"] = self.plcrestart + self.btn_plcrestart.pack(fill="x") + + def plcstart(self): + self.cli.plcstart() + self.plcrunning() + + def plcstop(self): + self.cli.plcstop() + self.plcrunning() + + def plcrestart(self): + self.cli.plcrestart() + self.plcrunning() + + def plcrunning(self): + if self.cli.plcrunning(): + self.btn_plcrunning["activebackground"] = "green" + self.btn_plcrunning["bg"] = "green" + else: + self.btn_plcrunning["activebackground"] = "red" + self.btn_plcrunning["bg"] = "red" + self.var_status.set(self.cli.plcexitcode()) + + +if __name__ == "__main__": + root = tkinter.Tk() + myapp = RevPiPyControl(root) + myapp.mainloop()