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
Up
@@ -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: