replace_io_file wird von RevPiModIO verarbeitet

Parameter kann per XML-RPC übergeben werden
Argument --test hinzugefügt um replace_io_file testen zu können
This commit is contained in:
2019-06-16 16:06:29 +02:00
parent 5661217900
commit 09cb134f31
11 changed files with 239 additions and 35 deletions

View File

@@ -140,14 +140,16 @@ class MqttServer(Thread):
autorefresh=self._send_events,
monitoring=True,
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg
procimg=proginit.pargs.procimg,
replace_io_file=self._replace_ios
)
# Schreibenen Zugriff
if self._write_outputs:
self._rpi_write = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg
procimg=proginit.pargs.procimg,
replace_io_file=self._replace_ios
)
except Exception as e:
@@ -158,18 +160,6 @@ 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

@@ -11,7 +11,6 @@ __license__ = "GPLv3"
import pickle
import proginit
import revpimodio2
from .helper import revpimodio_replaceio
from xmlrpc.client import Binary
@@ -99,7 +98,8 @@ class ProcimgServer():
try:
self.rpi = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg
procimg=proginit.pargs.procimg,
replace_io_file=self.replace_ios
)
except Exception as e:
self.rpi = None
@@ -108,14 +108,6 @@ class ProcimgServer():
)
return e
# Replace IOs of RevPiModIO
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)

View File

@@ -63,6 +63,10 @@ def configure():
"--pictory", dest="configrsc",
help="piCtory file to use"
)
parser.add_argument(
"--test", action="store_true", dest="test",
help="Test parameters of config files and print results"
)
parser.add_argument(
"-v", "--verbose", action="count", dest="verbose",
help="Switch on verbose logging: info -v debug -vv"

View File

@@ -394,11 +394,6 @@ class RevPiPyLoad():
# Erweiterte Funktionen anmelden
try:
import procimgserver
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:
self.xml_ps = None
proginit.logger.warning(
@@ -408,6 +403,15 @@ class RevPiPyLoad():
"revpimodio2: 'apt-get install python3-revpimodio2'"
"".format(min_revpimodio)
)
try:
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 as e:
self.xml_ps = None
proginit.logger.error(e)
# XML Modus 2 Einstellungen lesen und Programm herunterladen
self.xsrv.register_function(
@@ -1214,8 +1218,13 @@ if __name__ == "__main__":
# Programmeinstellungen konfigurieren
proginit.configure()
if proginit.pargs.test:
from testsystem import TestSystem
root = TestSystem()
else:
root = RevPiPyLoad()
# Programm starten
root = RevPiPyLoad()
root.start()
# Aufräumen

88
revpipyload/testsystem.py Normal file
View File

@@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
"""Test all config files and print results."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2019 Sven Sager"
__license__ = "GPLv3"
import proginit
from configparser import ConfigParser
newline = "\n------------------------------------------------------------\n"
class TestSystem:
"""Main class for test system of revpipyload."""
def __init__(self):
"""Init TestSystem class."""
self.gc = ConfigParser()
lst_file = self.gc.read(proginit.globalconffile)
if len(lst_file) <= 0:
proginit.logger.error("can not read config file")
def test_replace_io(self):
"""Test replace_io file.
@return 0 if successful testet"""
print("Test replace_io data:")
file = self.gc["DEFAULT"].get("replace_ios")
if file is None:
print("\tFile MISSING")
return 1
print("\tFile: {0}\n".format(file))
try:
import revpimodio2
except Exception as e:
print("\tERROR: {0}".format(e))
return 1
try:
rpi = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg,
monitoring=False,
debug=True,
replace_io_file=file,
)
except Exception as e:
print(e)
return 1
else:
print("\tPrinting replaced IOs:")
for io in rpi.io:
if isinstance(io, revpimodio2.io.StructIO):
print("\t\tNew io: {0}".format(io.name))
rpi.cleanup()
return 0
def test_sections(self):
"""Test config file.
@return 0 if successful testet"""
print("Parse config file:")
print("\tSection DEFAULT : {0}".format("DEFAULT" in self.gc))
print("\tSection PLCSLAVE: {0}".format("PLCSLAVE" in self.gc))
print("\tSection XMLRPC : {0}".format("XMLRPC" in self.gc))
print("\tSection MQTT : {0}".format("MQTT" in self.gc))
return 0
def start(self):
"""Start test program and run tests."""
program_ec = 0
print("--- RevPiPyLoad Testsystem ---\n")
ec = self.test_sections()
program_ec += int(ec) << 0
print(newline)
# TODO: Test Values of each section
# print()
ec = self.test_replace_io()
program_ec += (int(ec) << 7)
print(newline)
if program_ec != 0:
print("result: {0}".format(program_ec))
exit(program_ec)