diff --git a/debian/revpipyload.init b/debian/revpipyload.init
index 5d19d9c..fa2f8e0 100755
--- a/debian/revpipyload.init
+++ b/debian/revpipyload.init
@@ -5,8 +5,8 @@
# Required-Stop: $remote_fs $syslog $piControl
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
-# Short-Description: Start RevPiPyLoad to execute python plc program
-# Description: This file starts the RevPiPyLoad on system
+# Short-Description: RevPiPyLoad to execute python plc program
+# Description: This file manages the RevPiPyLoad on system
# boot. The Loader starts your python plc program and
# check whether it is running.
### END INIT INFO
diff --git a/doc/procimgserver.html b/doc/procimgserver.html
index 6057977..6b7e157 100644
--- a/doc/procimgserver.html
+++ b/doc/procimgserver.html
@@ -154,6 +154,11 @@ IO Name fuer neuen Wert
Neuer Wert
+
+- Returns:
+-
+list() [device, io, status, msg]
+
ProcimgServer.start
diff --git a/doc/revpipyload.html b/doc/revpipyload.html
index d954d32..4c67169 100644
--- a/doc/revpipyload.html
+++ b/doc/revpipyload.html
@@ -32,7 +32,7 @@ begrenzt werden!
Global Attributes
-| configrsc |
| picontrolreset |
| procimg |
| pyloadverion |
+| configrsc |
| picontrolreset |
| procimg |
| pyloadverion |
| rapcatalog |
Classes
@@ -92,17 +92,11 @@ Methods
closeall |
Fuehrt close auf File Handler durch. |
-| get_applines |
-Gibt neue Zeilen ab letzen Aufruf zurueck. |
+load_applog |
+Uebertraegt Logdaten Binaer. |
-| get_applog |
-Gibt die gesamte Logdatei zurueck. |
-
-| get_plclines |
-Gibt neue Zeilen ab letzen Aufruf zurueck. |
-
-| get_plclog |
-Gibt die gesamte Logdatei zurueck. |
+load_plclog |
+Uebertraegt Logdaten Binaer. |
@@ -122,49 +116,43 @@ LogReader.closeall
closeall()
Fuehrt close auf File Handler durch.
-
+
-LogReader.get_applines
-get_applines()
+LogReader.load_applog
+load_applog(start, count)
-Gibt neue Zeilen ab letzen Aufruf zurueck.
+Uebertraegt Logdaten Binaer.
-- Returns:
+- start:
-
-list() mit neuen Zeilen
+Startbyte
+
- count:
+-
+Max. Byteanzahl zum uebertragen
-
-
-LogReader.get_applog
-get_applog()
-
-Gibt die gesamte Logdatei zurueck.
-
+
- Returns:
-
-str() mit Logdaten
+Binary() der Logdatei
-
+
-LogReader.get_plclines
-get_plclines()
+LogReader.load_plclog
+load_plclog(start, count)
-Gibt neue Zeilen ab letzen Aufruf zurueck.
+Uebertraegt Logdaten Binaer.
-- Returns:
+- start:
-
-list() mit neuen Zeilen
+Startbyte
+
- count:
+-
+Max. Byteanzahl zum uebertragen
-
-
-LogReader.get_plclog
-get_plclog()
-
-Gibt die gesamte Logdatei zurueck.
-
+
- Returns:
-
-str() mit Logdaten
+Binary() der Logdatei
@@ -794,6 +782,8 @@ Statuscode:
-1 Kann JSON-Datei nicht laden
-2 piCtory Elemente in JSON-Datei nicht gefunden
-3 Konnte Konfiguraiton nicht schreiben
+ -4 Module in Konfiguration enthalten, die es nicht gibt
+ -5 Kein RAP Katalog zur Ueberpruefung gefunden
Positive Zahl ist exitcode von piControlReset
diff --git a/eric-revpipyload.api b/eric-revpipyload.api
index e42cade..8b39e80 100644
--- a/eric-revpipyload.api
+++ b/eric-revpipyload.api
@@ -15,10 +15,8 @@ proginit.logplc?7
proginit.pargs?7
proginit.startdir?7
revpipyload.LogReader.closeall?4()
-revpipyload.LogReader.get_applines?4()
-revpipyload.LogReader.get_applog?4()
-revpipyload.LogReader.get_plclines?4()
-revpipyload.LogReader.get_plclog?4()
+revpipyload.LogReader.load_applog?4(start, count)
+revpipyload.LogReader.load_plclog?4(start, count)
revpipyload.LogReader?1()
revpipyload.PipeLogwriter.__del__?6()
revpipyload.PipeLogwriter._configurefh?5()
@@ -65,3 +63,4 @@ revpipyload.configrsc?7
revpipyload.picontrolreset?7
revpipyload.procimg?7
revpipyload.pyloadverion?7
+revpipyload.rapcatalog?7
diff --git a/revpipyload/procimgserver.py b/revpipyload/procimgserver.py
index 9861d8f..ff19dc9 100644
--- a/revpipyload/procimgserver.py
+++ b/revpipyload/procimgserver.py
@@ -107,27 +107,37 @@ class ProcimgServer():
@param device: Device Position oder Name
@param io: IO Name fuer neuen Wert
@param value: Neuer Wert
+ @returns: list() [device, io, status, msg]
"""
# Zugriffsrechte prüfen
if self.acl < 3:
- raise PermissionError(
+ return [
+ device, io, False,
"not allowed in XML-RPC permission mode {}".format(self.acl)
- )
+ ]
+
+ # Binary() in bytes() umwandeln
+ if type(value) == Binary:
+ value = value.data
self.rpi.devices.syncoutputs(device=device)
- # Neuen Wert übernehmen
- if type(value) == bytes or type(value) == bool:
- self.rpi.devices[device][io].set_value(value)
- else:
- self.rpi.devices[device][io].set_value(
- value.to_bytes(
- self.rpi.devices[device][io].length, byteorder="little"
+ try:
+ # Neuen Wert übernehmen
+ if type(value) == bytes or type(value) == bool:
+ self.rpi.devices[device][io].set_value(value)
+ else:
+ self.rpi.devices[device][io].set_value(
+ value.to_bytes(
+ self.rpi.devices[device][io].length, byteorder="little"
+ )
)
- )
+ except Exception as e:
+ return [device, io, False, str(e)]
self.rpi.devices.writeprocimg(device=device)
+ return [device, io, True, ""]
def values(self):
"""Liefert Prozessabbild an Client.
diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py
index 6a86d1c..c0d38b9 100755
--- a/revpipyload/revpipyload.py
+++ b/revpipyload/revpipyload.py
@@ -54,6 +54,7 @@ configrsc = None
picontrolreset = "/opt/KUNBUS/piControlReset"
procimg = "/dev/piControl0"
pyloadverion = "0.4.1"
+rapcatalog = None
class LogReader():
@@ -443,11 +444,8 @@ class RevPiPyLoad():
"""Instantiiert RevPiPyLoad-Klasse."""
proginit.configure()
- # Globale Werte anpassen
- global configrsc
- global picontrolreset
-
# piCtory Konfiguration an bekannten Stellen prüfen
+ global configrsc
lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"]
for rscfile in lst_rsc:
if os.access(rscfile, os.F_OK | os.R_OK):
@@ -459,7 +457,18 @@ class RevPiPyLoad():
"".format(", ".join(lst_rsc))
)
+ # rap Katalog an bekannten Stellen prüfen und laden
+ global rapcatalog
+ lst_rap = [
+ "/opt/KUNBUS/pictory/resources/data/rap",
+ "/var/www/pictory/resources/data/rap"
+ ]
+ for rapfolder in lst_rap:
+ if os.path.isdir(rapfolder):
+ rapcatalog = os.listdir(rapfolder)
+
# piControlReset suchen
+ global picontrolreset
if not os.access(picontrolreset, os.F_OK | os.X_OK):
picontrolreset = "/usr/bin/piTest -x"
@@ -668,7 +677,8 @@ class RevPiPyLoad():
@returns: Dateinamen des Archivs
"""
- filename = mkstemp(suffix=".packed", prefix="plc")
+ tup_file = mkstemp(suffix="_packed", prefix="plc_")
+ filename = tup_file[1]
if mode == "zip":
fh_pack = zipfile.ZipFile(filename, mode="w")
@@ -968,6 +978,8 @@ class RevPiPyLoad():
-1 Kann JSON-Datei nicht laden
-2 piCtory Elemente in JSON-Datei nicht gefunden
-3 Konnte Konfiguraiton nicht schreiben
+ -4 Module in Konfiguration enthalten, die es nicht gibt
+ -5 Kein RAP Katalog zur Ueberpruefung gefunden
Positive Zahl ist exitcode von piControlReset
"""
@@ -985,7 +997,22 @@ class RevPiPyLoad():
if chk not in jconfigrsc:
return -2
- # TODO: Module prüfen, ob sie existieren
+ # Prüfen ob Modulkatalog vorhanden ist
+ if rapcatalog is None:
+ return -5
+ else:
+
+ # piCtory Device in Katalog suchen
+ for picdev in jconfigrsc["Devices"]:
+ found = False
+ picdev = picdev["id"][7:-4]
+ for rapdev in rapcatalog:
+ if rapdev.find(picdev) >= 0:
+ found = True
+
+ # Device im Katalog nicht gefunden
+ if not found:
+ return -4
try:
with open(configrsc, "wb") as fh: