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
plcgid = 1000
pythonversion = 3
replace_ios = /etc/revpipyload/replace_ios.conf
rtlevel = 0
zeroonerror = 0
zeroonexit = 0

View File

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

View File

@@ -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 <class 'bool'>")
if not isinstance(write_outputs, 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__()
@@ -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):

View File

@@ -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)

View File

@@ -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]",

View File

@@ -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=[