mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 15:13:52 +01:00
replace_io aus Datei importieren wird direkt vararbeitet
This commit is contained in:
@@ -31,6 +31,9 @@ Functions</h3>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#refullmatch">refullmatch</a></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>
|
||||
</table>
|
||||
<hr /><hr />
|
||||
@@ -80,5 +83,26 @@ True, wenn komplett passt sonst False
|
||||
</dd>
|
||||
</dl>
|
||||
<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 />
|
||||
</body></html>
|
||||
@@ -92,7 +92,7 @@ Static Methods</h3>
|
||||
<a NAME="MqttServer.__init__" ID="MqttServer.__init__"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
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>
|
||||
Init MqttServer class.
|
||||
</p><dl>
|
||||
@@ -126,6 +126,9 @@ Sendet Werte bei IO Wertaenderung
|
||||
</dd><dt><i>write_outputs</i></dt>
|
||||
<dd>
|
||||
Per MQTT auch Outputs schreiben
|
||||
</dd><dt><i>replace_ios</i></dt>
|
||||
<dd>
|
||||
Replace IOs of RevPiModIO
|
||||
</dd>
|
||||
</dl><a NAME="MqttServer._evt_io" ID="MqttServer._evt_io"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
|
||||
@@ -93,13 +93,16 @@ Static Methods</h3>
|
||||
<a NAME="ProcimgServer.__init__" ID="ProcimgServer.__init__"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
ProcimgServer (Constructor)</h3>
|
||||
<b>ProcimgServer</b>(<i>xmlserver</i>)
|
||||
<b>ProcimgServer</b>(<i>xmlserver, replace_ios=None</i>)
|
||||
<p>
|
||||
Instantiiert RevPiCheckServer()-Klasse.
|
||||
</p><dl>
|
||||
<dt><i>xmlserver</i></dt>
|
||||
<dd>
|
||||
XML-RPC Server
|
||||
</dd><dt><i>replace_ios</i></dt>
|
||||
<dd>
|
||||
Replace IOs of RevPiModIO
|
||||
</dd>
|
||||
</dl><a NAME="ProcimgServer.devices" ID="ProcimgServer.devices"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
|
||||
@@ -4,6 +4,7 @@ helper.__license__?9
|
||||
helper._setuprt?5(pid, evt_exit)
|
||||
helper._zeroprocimg?5()
|
||||
helper.refullmatch?4(regex, string)
|
||||
helper.revpimodio_replaceio?4(revpi, filename)
|
||||
logsystem.LogReader.closeall?4()
|
||||
logsystem.LogReader.load_applog?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.run?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.__copyright__?9
|
||||
mqttserver.__license__?9
|
||||
@@ -63,7 +64,7 @@ procimgserver.ProcimgServer.setvalue?4(device, io, value)
|
||||
procimgserver.ProcimgServer.start?4()
|
||||
procimgserver.ProcimgServer.stop?4()
|
||||
procimgserver.ProcimgServer.values?4()
|
||||
procimgserver.ProcimgServer?1(xmlserver)
|
||||
procimgserver.ProcimgServer?1(xmlserver, replace_ios=None)
|
||||
procimgserver.__author__?9
|
||||
procimgserver.__copyright__?9
|
||||
procimgserver.__license__?9
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||
<!-- 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 -->
|
||||
<Project version="5.1">
|
||||
<Language>en_US</Language>
|
||||
@@ -9,7 +9,7 @@
|
||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||
<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>
|
||||
<Version>0.7.5</Version>
|
||||
<Version>0.7.6</Version>
|
||||
<Author>Sven Sager</Author>
|
||||
<Email>akira@narux.de</Email>
|
||||
<Eol index="1"/>
|
||||
|
||||
@@ -5,6 +5,7 @@ __copyright__ = "Copyright (C) 2018 Sven Sager"
|
||||
__license__ = "GPLv3"
|
||||
import os
|
||||
import proginit
|
||||
from configparser import ConfigParser
|
||||
from re import match as rematch
|
||||
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):
|
||||
"""re.fullmatch wegen alter python version aus wheezy nachgebaut.
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ __license__ = "GPLv3"
|
||||
import pickle
|
||||
import proginit
|
||||
import revpimodio2
|
||||
from .helper import revpimodio_replaceio
|
||||
from xmlrpc.client import Binary
|
||||
|
||||
|
||||
@@ -108,14 +109,12 @@ 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)
|
||||
)
|
||||
if self.replace_ios and \
|
||||
not revpimodio_replaceio(self.rpi, self.replace_ios):
|
||||
proginit.logger.error(
|
||||
"could not load all or some replaced ios into RevPiModIO - "
|
||||
"see log file"
|
||||
)
|
||||
|
||||
# NOTE: Warum das?
|
||||
self.rpi.syncoutputs(device=0)
|
||||
|
||||
@@ -28,7 +28,7 @@ begrenzt werden!
|
||||
__author__ = "Sven Sager"
|
||||
__copyright__ = "Copyright (C) 2018 Sven Sager"
|
||||
__license__ = "GPLv3"
|
||||
__version__ = "0.7.5"
|
||||
__version__ = "0.7.6"
|
||||
import gzip
|
||||
import logsystem
|
||||
import picontrolserver
|
||||
|
||||
Reference in New Issue
Block a user