mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 23:23:52 +01:00
Name im init.d Script angepasst
ProcimgServer.setvalue() gibt Liste als Rückgabewert mit Ergebnissen Buxfix: mkstemp Umstellung Übertragene piCtory Konfiguration auf existierende Module testen
This commit is contained in:
4
debian/revpipyload.init
vendored
4
debian/revpipyload.init
vendored
@@ -5,8 +5,8 @@
|
|||||||
# Required-Stop: $remote_fs $syslog $piControl
|
# Required-Stop: $remote_fs $syslog $piControl
|
||||||
# Default-Start: 2 3 4 5
|
# Default-Start: 2 3 4 5
|
||||||
# Default-Stop: 0 1 6
|
# Default-Stop: 0 1 6
|
||||||
# Short-Description: Start RevPiPyLoad to execute python plc program
|
# Short-Description: RevPiPyLoad to execute python plc program
|
||||||
# Description: This file starts the RevPiPyLoad on system
|
# Description: This file manages the RevPiPyLoad on system
|
||||||
# boot. The Loader starts your python plc program and
|
# boot. The Loader starts your python plc program and
|
||||||
# check whether it is running.
|
# check whether it is running.
|
||||||
### END INIT INFO
|
### END INIT INFO
|
||||||
|
|||||||
@@ -154,6 +154,11 @@ IO Name fuer neuen Wert
|
|||||||
<dd>
|
<dd>
|
||||||
Neuer Wert
|
Neuer Wert
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
list() [device, io, status, msg]
|
||||||
|
</dd>
|
||||||
</dl><a NAME="ProcimgServer.start" ID="ProcimgServer.start"></a>
|
</dl><a NAME="ProcimgServer.start" ID="ProcimgServer.start"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
ProcimgServer.start</h3>
|
ProcimgServer.start</h3>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ begrenzt werden!
|
|||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Global Attributes</h3>
|
Global Attributes</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr><td>configrsc</td></tr><tr><td>picontrolreset</td></tr><tr><td>procimg</td></tr><tr><td>pyloadverion</td></tr>
|
<tr><td>configrsc</td></tr><tr><td>picontrolreset</td></tr><tr><td>procimg</td></tr><tr><td>pyloadverion</td></tr><tr><td>rapcatalog</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Classes</h3>
|
Classes</h3>
|
||||||
@@ -92,17 +92,11 @@ Methods</h3>
|
|||||||
<td><a style="color:#0000FF" href="#LogReader.closeall">closeall</a></td>
|
<td><a style="color:#0000FF" href="#LogReader.closeall">closeall</a></td>
|
||||||
<td>Fuehrt close auf File Handler durch.</td>
|
<td>Fuehrt close auf File Handler durch.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#LogReader.get_applines">get_applines</a></td>
|
<td><a style="color:#0000FF" href="#LogReader.load_applog">load_applog</a></td>
|
||||||
<td>Gibt neue Zeilen ab letzen Aufruf zurueck.</td>
|
<td>Uebertraegt Logdaten Binaer.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#LogReader.get_applog">get_applog</a></td>
|
<td><a style="color:#0000FF" href="#LogReader.load_plclog">load_plclog</a></td>
|
||||||
<td>Gibt die gesamte Logdatei zurueck.</td>
|
<td>Uebertraegt Logdaten Binaer.</td>
|
||||||
</tr><tr>
|
|
||||||
<td><a style="color:#0000FF" href="#LogReader.get_plclines">get_plclines</a></td>
|
|
||||||
<td>Gibt neue Zeilen ab letzen Aufruf zurueck.</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td><a style="color:#0000FF" href="#LogReader.get_plclog">get_plclog</a></td>
|
|
||||||
<td>Gibt die gesamte Logdatei zurueck.</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
@@ -122,49 +116,43 @@ LogReader.closeall</h3>
|
|||||||
<b>closeall</b>(<i></i>)
|
<b>closeall</b>(<i></i>)
|
||||||
<p>
|
<p>
|
||||||
Fuehrt close auf File Handler durch.
|
Fuehrt close auf File Handler durch.
|
||||||
</p><a NAME="LogReader.get_applines" ID="LogReader.get_applines"></a>
|
</p><a NAME="LogReader.load_applog" ID="LogReader.load_applog"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
LogReader.get_applines</h3>
|
LogReader.load_applog</h3>
|
||||||
<b>get_applines</b>(<i></i>)
|
<b>load_applog</b>(<i>start, count</i>)
|
||||||
<p>
|
<p>
|
||||||
Gibt neue Zeilen ab letzen Aufruf zurueck.
|
Uebertraegt Logdaten Binaer.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt>Returns:</dt>
|
<dt><i>start:</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
list() mit neuen Zeilen
|
Startbyte
|
||||||
|
</dd><dt><i>count:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Max. Byteanzahl zum uebertragen
|
||||||
</dd>
|
</dd>
|
||||||
</dl><a NAME="LogReader.get_applog" ID="LogReader.get_applog"></a>
|
</dl><dl>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
|
||||||
LogReader.get_applog</h3>
|
|
||||||
<b>get_applog</b>(<i></i>)
|
|
||||||
<p>
|
|
||||||
Gibt die gesamte Logdatei zurueck.
|
|
||||||
</p><dl>
|
|
||||||
<dt>Returns:</dt>
|
<dt>Returns:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
str() mit Logdaten
|
Binary() der Logdatei
|
||||||
</dd>
|
</dd>
|
||||||
</dl><a NAME="LogReader.get_plclines" ID="LogReader.get_plclines"></a>
|
</dl><a NAME="LogReader.load_plclog" ID="LogReader.load_plclog"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
LogReader.get_plclines</h3>
|
LogReader.load_plclog</h3>
|
||||||
<b>get_plclines</b>(<i></i>)
|
<b>load_plclog</b>(<i>start, count</i>)
|
||||||
<p>
|
<p>
|
||||||
Gibt neue Zeilen ab letzen Aufruf zurueck.
|
Uebertraegt Logdaten Binaer.
|
||||||
</p><dl>
|
</p><dl>
|
||||||
<dt>Returns:</dt>
|
<dt><i>start:</i></dt>
|
||||||
<dd>
|
<dd>
|
||||||
list() mit neuen Zeilen
|
Startbyte
|
||||||
|
</dd><dt><i>count:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Max. Byteanzahl zum uebertragen
|
||||||
</dd>
|
</dd>
|
||||||
</dl><a NAME="LogReader.get_plclog" ID="LogReader.get_plclog"></a>
|
</dl><dl>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
|
||||||
LogReader.get_plclog</h3>
|
|
||||||
<b>get_plclog</b>(<i></i>)
|
|
||||||
<p>
|
|
||||||
Gibt die gesamte Logdatei zurueck.
|
|
||||||
</p><dl>
|
|
||||||
<dt>Returns:</dt>
|
<dt>Returns:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
str() mit Logdaten
|
Binary() der Logdatei
|
||||||
</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>
|
||||||
@@ -794,6 +782,8 @@ Statuscode:
|
|||||||
-1 Kann JSON-Datei nicht laden
|
-1 Kann JSON-Datei nicht laden
|
||||||
-2 piCtory Elemente in JSON-Datei nicht gefunden
|
-2 piCtory Elemente in JSON-Datei nicht gefunden
|
||||||
-3 Konnte Konfiguraiton nicht schreiben
|
-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
|
Positive Zahl ist exitcode von piControlReset
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|||||||
@@ -15,10 +15,8 @@ proginit.logplc?7
|
|||||||
proginit.pargs?7
|
proginit.pargs?7
|
||||||
proginit.startdir?7
|
proginit.startdir?7
|
||||||
revpipyload.LogReader.closeall?4()
|
revpipyload.LogReader.closeall?4()
|
||||||
revpipyload.LogReader.get_applines?4()
|
revpipyload.LogReader.load_applog?4(start, count)
|
||||||
revpipyload.LogReader.get_applog?4()
|
revpipyload.LogReader.load_plclog?4(start, count)
|
||||||
revpipyload.LogReader.get_plclines?4()
|
|
||||||
revpipyload.LogReader.get_plclog?4()
|
|
||||||
revpipyload.LogReader?1()
|
revpipyload.LogReader?1()
|
||||||
revpipyload.PipeLogwriter.__del__?6()
|
revpipyload.PipeLogwriter.__del__?6()
|
||||||
revpipyload.PipeLogwriter._configurefh?5()
|
revpipyload.PipeLogwriter._configurefh?5()
|
||||||
@@ -65,3 +63,4 @@ revpipyload.configrsc?7
|
|||||||
revpipyload.picontrolreset?7
|
revpipyload.picontrolreset?7
|
||||||
revpipyload.procimg?7
|
revpipyload.procimg?7
|
||||||
revpipyload.pyloadverion?7
|
revpipyload.pyloadverion?7
|
||||||
|
revpipyload.rapcatalog?7
|
||||||
|
|||||||
@@ -107,27 +107,37 @@ class ProcimgServer():
|
|||||||
@param device: Device Position oder Name
|
@param device: Device Position oder Name
|
||||||
@param io: IO Name fuer neuen Wert
|
@param io: IO Name fuer neuen Wert
|
||||||
@param value: Neuer Wert
|
@param value: Neuer Wert
|
||||||
|
@returns: list() [device, io, status, msg]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Zugriffsrechte prüfen
|
# Zugriffsrechte prüfen
|
||||||
if self.acl < 3:
|
if self.acl < 3:
|
||||||
raise PermissionError(
|
return [
|
||||||
|
device, io, False,
|
||||||
"not allowed in XML-RPC permission mode {}".format(self.acl)
|
"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)
|
self.rpi.devices.syncoutputs(device=device)
|
||||||
|
|
||||||
# Neuen Wert übernehmen
|
try:
|
||||||
if type(value) == bytes or type(value) == bool:
|
# Neuen Wert übernehmen
|
||||||
self.rpi.devices[device][io].set_value(value)
|
if type(value) == bytes or type(value) == bool:
|
||||||
else:
|
self.rpi.devices[device][io].set_value(value)
|
||||||
self.rpi.devices[device][io].set_value(
|
else:
|
||||||
value.to_bytes(
|
self.rpi.devices[device][io].set_value(
|
||||||
self.rpi.devices[device][io].length, byteorder="little"
|
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)
|
self.rpi.devices.writeprocimg(device=device)
|
||||||
|
return [device, io, True, ""]
|
||||||
|
|
||||||
def values(self):
|
def values(self):
|
||||||
"""Liefert Prozessabbild an Client.
|
"""Liefert Prozessabbild an Client.
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ configrsc = None
|
|||||||
picontrolreset = "/opt/KUNBUS/piControlReset"
|
picontrolreset = "/opt/KUNBUS/piControlReset"
|
||||||
procimg = "/dev/piControl0"
|
procimg = "/dev/piControl0"
|
||||||
pyloadverion = "0.4.1"
|
pyloadverion = "0.4.1"
|
||||||
|
rapcatalog = None
|
||||||
|
|
||||||
|
|
||||||
class LogReader():
|
class LogReader():
|
||||||
@@ -443,11 +444,8 @@ class RevPiPyLoad():
|
|||||||
"""Instantiiert RevPiPyLoad-Klasse."""
|
"""Instantiiert RevPiPyLoad-Klasse."""
|
||||||
proginit.configure()
|
proginit.configure()
|
||||||
|
|
||||||
# Globale Werte anpassen
|
|
||||||
global configrsc
|
|
||||||
global picontrolreset
|
|
||||||
|
|
||||||
# piCtory Konfiguration an bekannten Stellen prüfen
|
# piCtory Konfiguration an bekannten Stellen prüfen
|
||||||
|
global configrsc
|
||||||
lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"]
|
lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"]
|
||||||
for rscfile in lst_rsc:
|
for rscfile in lst_rsc:
|
||||||
if os.access(rscfile, os.F_OK | os.R_OK):
|
if os.access(rscfile, os.F_OK | os.R_OK):
|
||||||
@@ -459,7 +457,18 @@ class RevPiPyLoad():
|
|||||||
"".format(", ".join(lst_rsc))
|
"".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
|
# piControlReset suchen
|
||||||
|
global picontrolreset
|
||||||
if not os.access(picontrolreset, os.F_OK | os.X_OK):
|
if not os.access(picontrolreset, os.F_OK | os.X_OK):
|
||||||
picontrolreset = "/usr/bin/piTest -x"
|
picontrolreset = "/usr/bin/piTest -x"
|
||||||
|
|
||||||
@@ -668,7 +677,8 @@ class RevPiPyLoad():
|
|||||||
@returns: Dateinamen des Archivs
|
@returns: Dateinamen des Archivs
|
||||||
|
|
||||||
"""
|
"""
|
||||||
filename = mkstemp(suffix=".packed", prefix="plc")
|
tup_file = mkstemp(suffix="_packed", prefix="plc_")
|
||||||
|
filename = tup_file[1]
|
||||||
|
|
||||||
if mode == "zip":
|
if mode == "zip":
|
||||||
fh_pack = zipfile.ZipFile(filename, mode="w")
|
fh_pack = zipfile.ZipFile(filename, mode="w")
|
||||||
@@ -968,6 +978,8 @@ class RevPiPyLoad():
|
|||||||
-1 Kann JSON-Datei nicht laden
|
-1 Kann JSON-Datei nicht laden
|
||||||
-2 piCtory Elemente in JSON-Datei nicht gefunden
|
-2 piCtory Elemente in JSON-Datei nicht gefunden
|
||||||
-3 Konnte Konfiguraiton nicht schreiben
|
-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
|
Positive Zahl ist exitcode von piControlReset
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -985,7 +997,22 @@ class RevPiPyLoad():
|
|||||||
if chk not in jconfigrsc:
|
if chk not in jconfigrsc:
|
||||||
return -2
|
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:
|
try:
|
||||||
with open(configrsc, "wb") as fh:
|
with open(configrsc, "wb") as fh:
|
||||||
|
|||||||
Reference in New Issue
Block a user