Replace IOs aus Configfile übernehmen

This commit is contained in:
2019-06-10 22:49:23 +02:00
parent bf9eb5ea04
commit f608d99d7d
7 changed files with 53 additions and 8 deletions

View File

@@ -0,0 +1,7 @@
# Replace IO
# [NewIoName]
# parentio_name = OldIoName
# frm = StructFormat
# bitaddress = 0-7 (Only with '?' struct)
# byteorder = little/big

View File

@@ -8,6 +8,7 @@ plcarguments =
plcuid = 1000 plcuid = 1000
plcgid = 1000 plcgid = 1000
pythonversion = 3 pythonversion = 3
replace_ios = /etc/revpipyload/replace_ios.conf
rtlevel = 0 rtlevel = 0
zeroonerror = 0 zeroonerror = 0
zeroonexit = 0 zeroonexit = 0

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd"> <!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project revpipyload --> <!-- eric project file for project revpipyload -->
<!-- Saved: 2018-12-21, 12:21:56 --> <!-- Saved: 2019-06-10, 16:56:33 -->
<!-- Copyright (C) 2018 Sven Sager, akira@narux.de --> <!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
<Project version="5.1"> <Project version="5.1">
<Language>en_US</Language> <Language>en_US</Language>
<Hash>89ddb4e70b339f832ee277085202b38acc6a125c</Hash> <Hash>89ddb4e70b339f832ee277085202b38acc6a125c</Hash>

View File

@@ -18,7 +18,7 @@ class MqttServer(Thread):
def __init__( def __init__(
self, basetopic, sendinterval, broker_address, port=1883, self, basetopic, sendinterval, broker_address, port=1883,
tls_set=False, username="", password=None, client_id="", 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. """Init MqttServer class.
@param basetopic Basis-Topic fuer Datenaustausch @param basetopic Basis-Topic fuer Datenaustausch
@@ -31,6 +31,7 @@ class MqttServer(Thread):
@param client_id MQTT ClientID, wenn leer automatisch random erzeugung @param client_id MQTT ClientID, wenn leer automatisch random erzeugung
@param send_events Sendet Werte bei IO Wertaenderung @param send_events Sendet Werte bei IO Wertaenderung
@param write_outputs Per MQTT auch Outputs schreiben @param write_outputs Per MQTT auch Outputs schreiben
@param replace_ios Replace IOs of RevPiModIO
""" """
if not isinstance(basetopic, str): if not isinstance(basetopic, str):
@@ -59,6 +60,8 @@ class MqttServer(Thread):
raise ValueError("parameter send_events must be <class 'bool'>") raise ValueError("parameter send_events must be <class 'bool'>")
if not isinstance(write_outputs, bool): if not isinstance(write_outputs, bool):
raise ValueError("parameter write_outputs must be <class 'bool'>") raise ValueError("parameter write_outputs must be <class 'bool'>")
if not (replace_ios is None or isinstance(replace_ios, str)):
raise ValueError("parameter replace_ios must be <class 'str'>")
super().__init__() super().__init__()
@@ -69,6 +72,7 @@ class MqttServer(Thread):
self._broker_address = broker_address self._broker_address = broker_address
self._port = port self._port = port
self._reloadmodio = False self._reloadmodio = False
self._replace_ios = replace_ios
self._rpi = None self._rpi = None
self._rpi_write = None self._rpi_write = None
self._send_events = send_events self._send_events = send_events
@@ -154,6 +158,18 @@ class MqttServer(Thread):
) )
raise e 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 # Exportierte IOs laden
for dev in self._rpi.device: for dev in self._rpi.device:
for io in dev.get_allios(export=True): for io in dev.get_allios(export=True):

View File

@@ -25,13 +25,15 @@ class ProcimgServer():
""" """
def __init__(self, xmlserver): def __init__(self, xmlserver, replace_ios=None):
"""Instantiiert RevPiCheckServer()-Klasse. """Instantiiert RevPiCheckServer()-Klasse.
@param xmlserver XML-RPC Server""" @param xmlserver XML-RPC Server
@param replace_ios Replace IOs of RevPiModIO"""
# Logger übernehmen # Logger übernehmen
proginit.logger.debug("enter ProcimgServer.__init__()") proginit.logger.debug("enter ProcimgServer.__init__()")
self.rpi = None self.rpi = None
self.replace_ios = replace_ios
# XML-Server übernehmen # XML-Server übernehmen
self.xmlsrv = xmlserver self.xmlsrv = xmlserver
@@ -105,6 +107,16 @@ class ProcimgServer():
) )
return e 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? # NOTE: Warum das?
self.rpi.syncoutputs(device=0) self.rpi.syncoutputs(device=0)

View File

@@ -49,7 +49,7 @@ from time import asctime
from xmlrpc.client import Binary from xmlrpc.client import Binary
from xrpcserver import SaveXMLRPCServer from xrpcserver import SaveXMLRPCServer
min_revpimodio = "2.5.0" min_revpimodio = "2.3.3"
class RevPiPyLoad(): class RevPiPyLoad():
@@ -107,6 +107,8 @@ class RevPiPyLoad():
return True return True
else: else:
return ( return (
self.replace_ios_config !=
self.globalconfig["DEFAULT"].get("replace_ios", "") or
self.mqtt != self.mqtt !=
self.globalconfig["MQTT"].getboolean("mqtt", False) or self.globalconfig["MQTT"].getboolean("mqtt", False) or
self.mqttbasetopic != self.mqttbasetopic !=
@@ -219,6 +221,8 @@ class RevPiPyLoad():
self.globalconfig["DEFAULT"].getint("plcgid", 65534) self.globalconfig["DEFAULT"].getint("plcgid", 65534)
self.pythonversion = \ self.pythonversion = \
self.globalconfig["DEFAULT"].getint("pythonversion", 3) self.globalconfig["DEFAULT"].getint("pythonversion", 3)
self.replace_ios_config = \
self.globalconfig["DEFAULT"].get("replace_ios", "")
self.rtlevel = \ self.rtlevel = \
self.globalconfig["DEFAULT"].getint("rtlevel", 0) self.globalconfig["DEFAULT"].getint("rtlevel", 0)
self.zeroonerror = \ self.zeroonerror = \
@@ -390,7 +394,9 @@ class RevPiPyLoad():
# Erweiterte Funktionen anmelden # Erweiterte Funktionen anmelden
try: try:
import procimgserver 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_psstart, "psstart")
self.xsrv.register_function(1, self.xml_psstop, "psstop") self.xsrv.register_function(1, self.xml_psstop, "psstop")
except Exception: except Exception:
@@ -482,6 +488,7 @@ class RevPiPyLoad():
self.mqttclient_id, self.mqttclient_id,
self.mqttsend_on_event, self.mqttsend_on_event,
self.mqttwrite_outputs, self.mqttwrite_outputs,
self.replace_ios_config,
) )
except Exception as e: except Exception as e:
proginit.logger.error(e) proginit.logger.error(e)
@@ -761,6 +768,7 @@ class RevPiPyLoad():
dc["plcuid"] = self.plcuid dc["plcuid"] = self.plcuid
dc["plcgid"] = self.plcgid dc["plcgid"] = self.plcgid
dc["pythonversion"] = self.pythonversion dc["pythonversion"] = self.pythonversion
dc["replace_ios"] = self.replace_ios_config
dc["rtlevel"] = self.rtlevel dc["rtlevel"] = self.rtlevel
dc["zeroonerror"] = int(self.zeroonerror) dc["zeroonerror"] = int(self.zeroonerror)
dc["zeroonexit"] = int(self.zeroonexit) dc["zeroonexit"] = int(self.zeroonexit)
@@ -996,6 +1004,7 @@ class RevPiPyLoad():
# "plcuid": "[0-9]{,5}", # "plcuid": "[0-9]{,5}",
# "plcgid": "[0-9]{,5}", # "plcgid": "[0-9]{,5}",
"pythonversion": "[23]", "pythonversion": "[23]",
"replace_ios": ".*",
"rtlevel": "[0-1]", "rtlevel": "[0-1]",
"zeroonerror": "[01]", "zeroonerror": "[01]",
"zeroonexit": "[01]", "zeroonexit": "[01]",

View File

@@ -31,7 +31,7 @@ setup(
scripts=["data/revpipyload"], scripts=["data/revpipyload"],
install_requires=["revpimodio2 >= 2.3.1"], install_requires=["revpimodio2 >= 2.3.3"],
python_requires=">=3.2", python_requires=">=3.2",
data_files=[ data_files=[