replace_io aus Datei importieren wird direkt vararbeitet

This commit is contained in:
2019-06-16 13:55:24 +02:00
parent f608d99d7d
commit 5661217900
9 changed files with 156 additions and 16 deletions

View File

@@ -31,6 +31,9 @@ Functions</h3>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#refullmatch">refullmatch</a></td> <td><a style="color:#0000FF" href="#refullmatch">refullmatch</a></td>
<td>re.fullmatch wegen alter python version aus wheezy nachgebaut.</td> <td>re.fullmatch wegen alter python version aus wheezy nachgebaut.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#revpimodio_replaceio">revpimodio_replaceio</a></td>
<td>Importiert und ersetzt IOs in RevPiModIO.</td>
</tr> </tr>
</table> </table>
<hr /><hr /> <hr /><hr />
@@ -80,5 +83,26 @@ True, wenn komplett passt sonst False
</dd> </dd>
</dl> </dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div> <div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /><hr />
<a NAME="revpimodio_replaceio" ID="revpimodio_replaceio"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">revpimodio_replaceio</h2>
<b>revpimodio_replaceio</b>(<i>revpi, filename</i>)
<p>
Importiert und ersetzt IOs in RevPiModIO.
</p><dl>
<dt><i>revpi</i></dt>
<dd>
RevPiModIO Instanz
</dd><dt><i>filename</i></dt>
<dd>
Dateiname der Ersetzungsdatei
</dd>
</dl><dl>
<dt>Returns:</dt>
<dd>
True, wenn alle IOs ersetzt werden konnten
</dd>
</dl>
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
<hr /> <hr />
</body></html> </body></html>

View File

@@ -92,7 +92,7 @@ Static Methods</h3>
<a NAME="MqttServer.__init__" ID="MqttServer.__init__"></a> <a NAME="MqttServer.__init__" ID="MqttServer.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
MqttServer (Constructor)</h3> MqttServer (Constructor)</h3>
<b>MqttServer</b>(<i>basetopic, sendinterval, broker_address, port=1883, tls_set=False, username="", password=None, client_id="", send_events=False, write_outputs=False</i>) <b>MqttServer</b>(<i>basetopic, sendinterval, broker_address, port=1883, tls_set=False, username="", password=None, client_id="", send_events=False, write_outputs=False, replace_ios=None</i>)
<p> <p>
Init MqttServer class. Init MqttServer class.
</p><dl> </p><dl>
@@ -126,6 +126,9 @@ Sendet Werte bei IO Wertaenderung
</dd><dt><i>write_outputs</i></dt> </dd><dt><i>write_outputs</i></dt>
<dd> <dd>
Per MQTT auch Outputs schreiben Per MQTT auch Outputs schreiben
</dd><dt><i>replace_ios</i></dt>
<dd>
Replace IOs of RevPiModIO
</dd> </dd>
</dl><a NAME="MqttServer._evt_io" ID="MqttServer._evt_io"></a> </dl><a NAME="MqttServer._evt_io" ID="MqttServer._evt_io"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">

View File

@@ -93,13 +93,16 @@ Static Methods</h3>
<a NAME="ProcimgServer.__init__" ID="ProcimgServer.__init__"></a> <a NAME="ProcimgServer.__init__" ID="ProcimgServer.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgServer (Constructor)</h3> ProcimgServer (Constructor)</h3>
<b>ProcimgServer</b>(<i>xmlserver</i>) <b>ProcimgServer</b>(<i>xmlserver, replace_ios=None</i>)
<p> <p>
Instantiiert RevPiCheckServer()-Klasse. Instantiiert RevPiCheckServer()-Klasse.
</p><dl> </p><dl>
<dt><i>xmlserver</i></dt> <dt><i>xmlserver</i></dt>
<dd> <dd>
XML-RPC Server XML-RPC Server
</dd><dt><i>replace_ios</i></dt>
<dd>
Replace IOs of RevPiModIO
</dd> </dd>
</dl><a NAME="ProcimgServer.devices" ID="ProcimgServer.devices"></a> </dl><a NAME="ProcimgServer.devices" ID="ProcimgServer.devices"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">

View File

@@ -4,6 +4,7 @@ helper.__license__?9
helper._setuprt?5(pid, evt_exit) helper._setuprt?5(pid, evt_exit)
helper._zeroprocimg?5() helper._zeroprocimg?5()
helper.refullmatch?4(regex, string) helper.refullmatch?4(regex, string)
helper.revpimodio_replaceio?4(revpi, filename)
logsystem.LogReader.closeall?4() logsystem.LogReader.closeall?4()
logsystem.LogReader.load_applog?4(start, count) logsystem.LogReader.load_applog?4(start, count)
logsystem.LogReader.load_plclog?4(start, count) logsystem.LogReader.load_plclog?4(start, count)
@@ -28,7 +29,7 @@ mqttserver.MqttServer.newlogfile?4()
mqttserver.MqttServer.reload_revpimodio?4() mqttserver.MqttServer.reload_revpimodio?4()
mqttserver.MqttServer.run?4() mqttserver.MqttServer.run?4()
mqttserver.MqttServer.stop?4() mqttserver.MqttServer.stop?4()
mqttserver.MqttServer?1(basetopic, sendinterval, broker_address, port=1883, tls_set=False, username="", password=None, client_id="", send_events=False, write_outputs=False) mqttserver.MqttServer?1(basetopic, sendinterval, broker_address, port=1883, tls_set=False, username="", password=None, client_id="", send_events=False, write_outputs=False, replace_ios=None)
mqttserver.__author__?9 mqttserver.__author__?9
mqttserver.__copyright__?9 mqttserver.__copyright__?9
mqttserver.__license__?9 mqttserver.__license__?9
@@ -63,7 +64,7 @@ procimgserver.ProcimgServer.setvalue?4(device, io, value)
procimgserver.ProcimgServer.start?4() procimgserver.ProcimgServer.start?4()
procimgserver.ProcimgServer.stop?4() procimgserver.ProcimgServer.stop?4()
procimgserver.ProcimgServer.values?4() procimgserver.ProcimgServer.values?4()
procimgserver.ProcimgServer?1(xmlserver) procimgserver.ProcimgServer?1(xmlserver, replace_ios=None)
procimgserver.__author__?9 procimgserver.__author__?9
procimgserver.__copyright__?9 procimgserver.__copyright__?9
procimgserver.__license__?9 procimgserver.__license__?9

View File

@@ -1,7 +1,7 @@
<?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: 2019-06-10, 16:56:33 --> <!-- Saved: 2019-06-11, 09:23:01 -->
<!-- Copyright (C) 2019 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>
@@ -9,7 +9,7 @@
<ProgLanguage mixed="0">Python3</ProgLanguage> <ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>Console</ProjectType> <ProjectType>Console</ProjectType>
<Description>Dieser Loader wird über das Init-System geladen und führt das angegebene Pythonprogramm aus. Es ist für den RevolutionPi gedacht um automatisch das SPS-Programm zu starten.</Description> <Description>Dieser Loader wird über das Init-System geladen und führt das angegebene Pythonprogramm aus. Es ist für den RevolutionPi gedacht um automatisch das SPS-Programm zu starten.</Description>
<Version>0.7.5</Version> <Version>0.7.6</Version>
<Author>Sven Sager</Author> <Author>Sven Sager</Author>
<Email>akira@narux.de</Email> <Email>akira@narux.de</Email>
<Eol index="1"/> <Eol index="1"/>

View File

@@ -5,6 +5,7 @@ __copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3" __license__ = "GPLv3"
import os import os
import proginit import proginit
from configparser import ConfigParser
from re import match as rematch from re import match as rematch
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
@@ -117,6 +118,115 @@ def _zeroprocimg():
) )
def revpimodio_replaceio(revpi, filename):
"""Importiert und ersetzt IOs in RevPiModIO.
@param revpi RevPiModIO Instanz
@param filename Dateiname der Ersetzungsdatei
@return True, wenn alle IOs ersetzt werden konnten
"""
cp = ConfigParser()
try:
with open(filename, "r") as fh:
cp.read_file(fh)
except Exception as e:
proginit.logger.error(
"could not read replace_io file '{0}' | {1}".format(filename, e)
)
return False
# Pre-check
lst_replace = []
rc = True
for io in cp:
if io == "DEFAULT":
continue
dict_replace = {
"replace": cp[io].get("replace", ""),
"frm": cp[io].get("frm"),
"bmk": cp[io].get("bmk", ""),
"byteorder": cp[io].get("byteorder", "little"),
}
if dict_replace["replace"] in revpi.io:
# Byteorder prüfen
if not (dict_replace["byteorder"] == "little" or
dict_replace["byteorder"] == "big"):
proginit.logger.error(
"byteorder of '{0}' must be 'little' or 'big'".format(io)
)
rc = False
continue
if dict_replace["frm"] == "?":
# Convert defaultvalue from config file
try:
dict_replace["default"] = cp[io].getboolean("defaultvalue")
except Exception:
proginit.logger.error(
"could not convert '{0}' defaultvalue '{1}' to boolean"
"".format(io, cp[io].get("defaultvalue"))
)
rc = False
continue
# Get bitaddress
try:
dict_replace["bitaddress"] = cp[io].getint("bitaddress", 0)
except Exception:
proginit.logger.error(
"could not convert '{0}' bitaddress '{1}' to integer"
"".format(io, cp[io].get("bitaddress"))
)
rc = False
continue
else:
# Convert defaultvalue from config file
try:
dict_replace["default"] = cp[io].getint("defaultvalue")
except Exception:
proginit.logger.error(
"could not convert '{0}' defaultvalue '{1}' to integer"
"".format(io, cp[io].get("defaultvalue"))
)
rc = False
continue
else:
proginit.logger.error(
"can not find io '{0}' to replace with '{1}'"
"".format(dict_replace["replace"], io)
)
rc = False
continue
# Replace_IO übernehmen
lst_replace.append(dict_replace)
if not rc:
# Abbrechen, wenn IO-Verarbeitung einen Fehler hatte
return False
# Replace IOs
for dict_replace in lst_replace:
# FIXME: Hier können Fehler auftreten !!!
revpi.io[dict_replace["replace"]].replace_io(
io,
frm=dict_replace["frm"],
bmk=dict_replace["bmk"],
bit=dict_replace["bitaddress"],
byteorder=dict_replace["byteorder"],
defaultvalue=dict_replace["default"]
)
def refullmatch(regex, string): def refullmatch(regex, string):
"""re.fullmatch wegen alter python version aus wheezy nachgebaut. """re.fullmatch wegen alter python version aus wheezy nachgebaut.

View File

@@ -11,6 +11,7 @@ __license__ = "GPLv3"
import pickle import pickle
import proginit import proginit
import revpimodio2 import revpimodio2
from .helper import revpimodio_replaceio
from xmlrpc.client import Binary from xmlrpc.client import Binary
@@ -108,13 +109,11 @@ class ProcimgServer():
return e return e
# Replace IOs of RevPiModIO # Replace IOs of RevPiModIO
if self.replace_ios: if self.replace_ios and \
try: not revpimodio_replaceio(self.rpi, self.replace_ios):
self.rpi.import_replaced_ios(self.replace_ios)
except Exception as e:
proginit.logger.error( proginit.logger.error(
"could not load replaced ios into RevPiModIO - using " "could not load all or some replaced ios into RevPiModIO - "
"defaults | {0}".format(e) "see log file"
) )
# NOTE: Warum das? # NOTE: Warum das?

View File

@@ -28,7 +28,7 @@ begrenzt werden!
__author__ = "Sven Sager" __author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager" __copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3" __license__ = "GPLv3"
__version__ = "0.7.5" __version__ = "0.7.6"
import gzip import gzip
import logsystem import logsystem
import picontrolserver import picontrolserver

View File

@@ -27,7 +27,7 @@ setup(
license="LGPLv3", license="LGPLv3",
name="revpipyload", name="revpipyload",
version="0.7.5", version="0.7.6",
scripts=["data/revpipyload"], scripts=["data/revpipyload"],