From f608d99d7d7da6c7f6509fa4f8cb6d30b192ad55 Mon Sep 17 00:00:00 2001 From: NaruX Date: Mon, 10 Jun 2019 22:49:23 +0200 Subject: [PATCH] =?UTF-8?q?Replace=20IOs=20aus=20Configfile=20=C3=BCberneh?= =?UTF-8?q?men?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/etc/revpipyload/replace_ios.conf | 7 +++++++ data/etc/revpipyload/revpipyload.conf | 1 + revpipyload.e4p | 4 ++-- revpipyload/mqttserver.py | 18 +++++++++++++++++- revpipyload/procimgserver.py | 16 ++++++++++++++-- revpipyload/revpipyload.py | 13 +++++++++++-- setup.py | 2 +- 7 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 data/etc/revpipyload/replace_ios.conf diff --git a/data/etc/revpipyload/replace_ios.conf b/data/etc/revpipyload/replace_ios.conf new file mode 100644 index 0000000..c5b331c --- /dev/null +++ b/data/etc/revpipyload/replace_ios.conf @@ -0,0 +1,7 @@ +# Replace IO + +# [NewIoName] +# parentio_name = OldIoName +# frm = StructFormat +# bitaddress = 0-7 (Only with '?' struct) +# byteorder = little/big diff --git a/data/etc/revpipyload/revpipyload.conf b/data/etc/revpipyload/revpipyload.conf index 0573bf6..3f346fe 100644 --- a/data/etc/revpipyload/revpipyload.conf +++ b/data/etc/revpipyload/revpipyload.conf @@ -8,6 +8,7 @@ plcarguments = plcuid = 1000 plcgid = 1000 pythonversion = 3 +replace_ios = /etc/revpipyload/replace_ios.conf rtlevel = 0 zeroonerror = 0 zeroonexit = 0 diff --git a/revpipyload.e4p b/revpipyload.e4p index a099a48..50c279a 100644 --- a/revpipyload.e4p +++ b/revpipyload.e4p @@ -1,8 +1,8 @@ - - + + en_US 89ddb4e70b339f832ee277085202b38acc6a125c diff --git a/revpipyload/mqttserver.py b/revpipyload/mqttserver.py index e95d047..5ef06ef 100644 --- a/revpipyload/mqttserver.py +++ b/revpipyload/mqttserver.py @@ -18,7 +18,7 @@ class MqttServer(Thread): def __init__( self, basetopic, sendinterval, broker_address, port=1883, tls_set=False, username="", password=None, client_id="", - send_events=False, write_outputs=False): + send_events=False, write_outputs=False, replace_ios=None): """Init MqttServer class. @param basetopic Basis-Topic fuer Datenaustausch @@ -31,6 +31,7 @@ class MqttServer(Thread): @param client_id MQTT ClientID, wenn leer automatisch random erzeugung @param send_events Sendet Werte bei IO Wertaenderung @param write_outputs Per MQTT auch Outputs schreiben + @param replace_ios Replace IOs of RevPiModIO """ if not isinstance(basetopic, str): @@ -59,6 +60,8 @@ class MqttServer(Thread): raise ValueError("parameter send_events must be ") if not isinstance(write_outputs, bool): raise ValueError("parameter write_outputs must be ") + if not (replace_ios is None or isinstance(replace_ios, str)): + raise ValueError("parameter replace_ios must be ") super().__init__() @@ -69,6 +72,7 @@ class MqttServer(Thread): self._broker_address = broker_address self._port = port self._reloadmodio = False + self._replace_ios = replace_ios self._rpi = None self._rpi_write = None self._send_events = send_events @@ -154,6 +158,18 @@ class MqttServer(Thread): ) raise e + # Replace IOs of RevPiModIO + if self._replace_ios: + try: + self._rpi.import_replaced_ios(self._replace_ios) + if self._write_outputs: + self._rpi_write.import_replaced_ios(self._replace_ios) + except Exception as e: + proginit.logger.error( + "could not load replaced ios into RevPiModIO - using " + "defaults | {0}".format(e) + ) + # Exportierte IOs laden for dev in self._rpi.device: for io in dev.get_allios(export=True): diff --git a/revpipyload/procimgserver.py b/revpipyload/procimgserver.py index 2029a80..ad55575 100644 --- a/revpipyload/procimgserver.py +++ b/revpipyload/procimgserver.py @@ -25,13 +25,15 @@ class ProcimgServer(): """ - def __init__(self, xmlserver): + def __init__(self, xmlserver, replace_ios=None): """Instantiiert RevPiCheckServer()-Klasse. - @param xmlserver XML-RPC Server""" + @param xmlserver XML-RPC Server + @param replace_ios Replace IOs of RevPiModIO""" # Logger übernehmen proginit.logger.debug("enter ProcimgServer.__init__()") self.rpi = None + self.replace_ios = replace_ios # XML-Server übernehmen self.xmlsrv = xmlserver @@ -105,6 +107,16 @@ class ProcimgServer(): ) return e + # Replace IOs of RevPiModIO + if self.replace_ios: + try: + self.rpi.import_replaced_ios(self.replace_ios) + except Exception as e: + proginit.logger.error( + "could not load replaced ios into RevPiModIO - using " + "defaults | {0}".format(e) + ) + # NOTE: Warum das? self.rpi.syncoutputs(device=0) diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py index d35438f..33fe736 100755 --- a/revpipyload/revpipyload.py +++ b/revpipyload/revpipyload.py @@ -49,7 +49,7 @@ from time import asctime from xmlrpc.client import Binary from xrpcserver import SaveXMLRPCServer -min_revpimodio = "2.5.0" +min_revpimodio = "2.3.3" class RevPiPyLoad(): @@ -107,6 +107,8 @@ class RevPiPyLoad(): return True else: return ( + self.replace_ios_config != + self.globalconfig["DEFAULT"].get("replace_ios", "") or self.mqtt != self.globalconfig["MQTT"].getboolean("mqtt", False) or self.mqttbasetopic != @@ -219,6 +221,8 @@ class RevPiPyLoad(): self.globalconfig["DEFAULT"].getint("plcgid", 65534) self.pythonversion = \ self.globalconfig["DEFAULT"].getint("pythonversion", 3) + self.replace_ios_config = \ + self.globalconfig["DEFAULT"].get("replace_ios", "") self.rtlevel = \ self.globalconfig["DEFAULT"].getint("rtlevel", 0) self.zeroonerror = \ @@ -390,7 +394,9 @@ class RevPiPyLoad(): # Erweiterte Funktionen anmelden try: import procimgserver - self.xml_ps = procimgserver.ProcimgServer(self.xsrv) + self.xml_ps = procimgserver.ProcimgServer( + self.xsrv, self.replace_ios_config + ) self.xsrv.register_function(1, self.xml_psstart, "psstart") self.xsrv.register_function(1, self.xml_psstop, "psstop") except Exception: @@ -482,6 +488,7 @@ class RevPiPyLoad(): self.mqttclient_id, self.mqttsend_on_event, self.mqttwrite_outputs, + self.replace_ios_config, ) except Exception as e: proginit.logger.error(e) @@ -761,6 +768,7 @@ class RevPiPyLoad(): dc["plcuid"] = self.plcuid dc["plcgid"] = self.plcgid dc["pythonversion"] = self.pythonversion + dc["replace_ios"] = self.replace_ios_config dc["rtlevel"] = self.rtlevel dc["zeroonerror"] = int(self.zeroonerror) dc["zeroonexit"] = int(self.zeroonexit) @@ -996,6 +1004,7 @@ class RevPiPyLoad(): # "plcuid": "[0-9]{,5}", # "plcgid": "[0-9]{,5}", "pythonversion": "[23]", + "replace_ios": ".*", "rtlevel": "[0-1]", "zeroonerror": "[01]", "zeroonexit": "[01]", diff --git a/setup.py b/setup.py index f9566b7..3e5a623 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ setup( scripts=["data/revpipyload"], - install_requires=["revpimodio2 >= 2.3.1"], + install_requires=["revpimodio2 >= 2.3.3"], python_requires=">=3.2", data_files=[