mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 15:13:52 +01:00
mktemp gegen mkstemp getauscht
procimgserver hinzugefügt XML-RPC Aufruffunktionen für ProcimgServer hinzugefügt
This commit is contained in:
183
doc/procimgserver.html
Normal file
183
doc/procimgserver.html
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<title>procimgserver</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="background-color:#FFFFFF;color:#000000"><a NAME="top" ID="top"></a>
|
||||||
|
<h1 style="background-color:#FFFFFF;color:#0000FF">
|
||||||
|
procimgserver</h1>
|
||||||
|
<p>
|
||||||
|
Stellt Funktionen bereit um das Prozessabbild zu ueberwachen.
|
||||||
|
</p><p>
|
||||||
|
Bei ausreichend Rechten koennen Ausgaenge auch gesetzt werden um einen
|
||||||
|
IO-Check bei Inbetriebname durchzufuehren.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Global Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Classes</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer">ProcimgServer</a></td>
|
||||||
|
<td>Serverkomponente fuer zusaetzliche XML-RPC Funktionen.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Functions</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="ProcimgServer" ID="ProcimgServer"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">ProcimgServer</h2>
|
||||||
|
<p>
|
||||||
|
Serverkomponente fuer zusaetzliche XML-RPC Funktionen.
|
||||||
|
</p><p>
|
||||||
|
Diese Klasse registriert zusaetzliche Funktionen an einem besthenden
|
||||||
|
XML-RPC-Server. Der Funktionsumfang wird erweitert um zyklisch das
|
||||||
|
Prozessabbild zu empfangen und bei ausreichend Rechten Ausgaenge zu
|
||||||
|
setzen.
|
||||||
|
</p><p>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
None
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.__init__">ProcimgServer</a></td>
|
||||||
|
<td>Instantiiert RevPiCheckServer()-Klasse.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.devices">devices</a></td>
|
||||||
|
<td>Generiert Deviceliste mit Position und Namen.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.ios">ios</a></td>
|
||||||
|
<td>Generiert ein dict() der Devices und IOs.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.setvalue">setvalue</a></td>
|
||||||
|
<td>Setzt einen Wert auf dem RevPi.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.start">start</a></td>
|
||||||
|
<td>Registriert XML Funktionen.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.stop">stop</a></td>
|
||||||
|
<td>Entfernt XML-Funktionen.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#ProcimgServer.values">values</a></td>
|
||||||
|
<td>Liefert Prozessabbild an Client.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<a NAME="ProcimgServer.__init__" ID="ProcimgServer.__init__"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer (Constructor)</h3>
|
||||||
|
<b>ProcimgServer</b>(<i>logger, xmlserver, configrsc, procimg, aclmode</i>)
|
||||||
|
<p>
|
||||||
|
Instantiiert RevPiCheckServer()-Klasse.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>xmlserver:</i></dt>
|
||||||
|
<dd>
|
||||||
|
XML-RPC Server
|
||||||
|
</dd><dt><i>procimg:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Pfad zum Prozessabbild
|
||||||
|
</dd><dt><i>configrsc:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Pfad zur piCtory Konfigurationsdatei
|
||||||
|
</dd><dt><i>logger:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Loggerinstanz
|
||||||
|
</dd><dt><i>aclmode:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Zugriffsrechte
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="ProcimgServer.devices" ID="ProcimgServer.devices"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer.devices</h3>
|
||||||
|
<b>devices</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Generiert Deviceliste mit Position und Namen.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
list() mit Tuple (pos, name)
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="ProcimgServer.ios" ID="ProcimgServer.ios"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer.ios</h3>
|
||||||
|
<b>ios</b>(<i>type</i>)
|
||||||
|
<p>
|
||||||
|
Generiert ein dict() der Devices und IOs.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>type:</i></dt>
|
||||||
|
<dd>
|
||||||
|
IO Typ inp/out
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
pickled dict()
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="ProcimgServer.setvalue" ID="ProcimgServer.setvalue"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer.setvalue</h3>
|
||||||
|
<b>setvalue</b>(<i>device, io, value</i>)
|
||||||
|
<p>
|
||||||
|
Setzt einen Wert auf dem RevPi.
|
||||||
|
</p><dl>
|
||||||
|
<dt><i>device:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Device Position oder Name
|
||||||
|
</dd><dt><i>io:</i></dt>
|
||||||
|
<dd>
|
||||||
|
IO Name fuer neuen Wert
|
||||||
|
</dd><dt><i>value:</i></dt>
|
||||||
|
<dd>
|
||||||
|
Neuer Wert
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="ProcimgServer.start" ID="ProcimgServer.start"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer.start</h3>
|
||||||
|
<b>start</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Registriert XML Funktionen.
|
||||||
|
</p><a NAME="ProcimgServer.stop" ID="ProcimgServer.stop"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer.stop</h3>
|
||||||
|
<b>stop</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Entfernt XML-Funktionen.
|
||||||
|
</p><a NAME="ProcimgServer.values" ID="ProcimgServer.values"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
ProcimgServer.values</h3>
|
||||||
|
<b>values</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Liefert Prozessabbild an Client.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
Binary() bytes or None
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr />
|
||||||
|
</body></html>
|
||||||
@@ -497,6 +497,12 @@ Methods</h3>
|
|||||||
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_plcuploadclean">xml_plcuploadclean</a></td>
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_plcuploadclean">xml_plcuploadclean</a></td>
|
||||||
<td>Loescht das gesamte plcworkdir Verzeichnis.</td>
|
<td>Loescht das gesamte plcworkdir Verzeichnis.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_psstart">xml_psstart</a></td>
|
||||||
|
<td>Starten den Prozessabbildserver.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_psstop">xml_psstop</a></td>
|
||||||
|
<td>Stoppt den Prozessabbildserver.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_reload">xml_reload</a></td>
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_reload">xml_reload</a></td>
|
||||||
<td>Startet RevPiPyLoad neu und verwendet neue Konfiguraiton.</td>
|
<td>Startet RevPiPyLoad neu und verwendet neue Konfiguraiton.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -727,6 +733,28 @@ Loescht das gesamte plcworkdir Verzeichnis.
|
|||||||
<dd>
|
<dd>
|
||||||
True, wenn erfolgreich
|
True, wenn erfolgreich
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><a NAME="RevPiPyLoad.xml_psstart" ID="RevPiPyLoad.xml_psstart"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiPyLoad.xml_psstart</h3>
|
||||||
|
<b>xml_psstart</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Starten den Prozessabbildserver.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn start erfolgreich
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="RevPiPyLoad.xml_psstop" ID="RevPiPyLoad.xml_psstop"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiPyLoad.xml_psstop</h3>
|
||||||
|
<b>xml_psstop</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Stoppt den Prozessabbildserver.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn stop erfolgreich
|
||||||
|
</dd>
|
||||||
</dl><a NAME="RevPiPyLoad.xml_reload" ID="RevPiPyLoad.xml_reload"></a>
|
</dl><a NAME="RevPiPyLoad.xml_reload" ID="RevPiPyLoad.xml_reload"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
RevPiPyLoad.xml_reload</h3>
|
RevPiPyLoad.xml_reload</h3>
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
procimgserver.ProcimgServer.devices?4()
|
||||||
|
procimgserver.ProcimgServer.ios?4(type)
|
||||||
|
procimgserver.ProcimgServer.setvalue?4(device, io, value)
|
||||||
|
procimgserver.ProcimgServer.start?4()
|
||||||
|
procimgserver.ProcimgServer.stop?4()
|
||||||
|
procimgserver.ProcimgServer.values?4()
|
||||||
|
procimgserver.ProcimgServer?1(logger, xmlserver, configrsc, procimg, aclmode)
|
||||||
proginit.cleanup?4()
|
proginit.cleanup?4()
|
||||||
proginit.configure?4()
|
proginit.configure?4()
|
||||||
proginit.forked?7
|
proginit.forked?7
|
||||||
@@ -48,6 +55,8 @@ revpipyload.RevPiPyLoad.xml_plcstart?4()
|
|||||||
revpipyload.RevPiPyLoad.xml_plcstop?4()
|
revpipyload.RevPiPyLoad.xml_plcstop?4()
|
||||||
revpipyload.RevPiPyLoad.xml_plcupload?4(filedata, filename)
|
revpipyload.RevPiPyLoad.xml_plcupload?4(filedata, filename)
|
||||||
revpipyload.RevPiPyLoad.xml_plcuploadclean?4()
|
revpipyload.RevPiPyLoad.xml_plcuploadclean?4()
|
||||||
|
revpipyload.RevPiPyLoad.xml_psstart?4()
|
||||||
|
revpipyload.RevPiPyLoad.xml_psstop?4()
|
||||||
revpipyload.RevPiPyLoad.xml_reload?4()
|
revpipyload.RevPiPyLoad.xml_reload?4()
|
||||||
revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False)
|
revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False)
|
||||||
revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False)
|
revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||||
<!-- eric project file for project revpipyload -->
|
<!-- eric project file for project revpipyload -->
|
||||||
<!-- Saved: 2017-05-31, 15:02:13 -->
|
<!-- Saved: 2017-06-27, 12:47:26 -->
|
||||||
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
|
||||||
<Project version="5.1">
|
<Project version="5.1">
|
||||||
<Language>en_US</Language>
|
<Language>en_US</Language>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||||
<ProjectType>Console</ProjectType>
|
<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>
|
<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.3.0</Version>
|
<Version>0.4.0</Version>
|
||||||
<Author>Sven Sager</Author>
|
<Author>Sven Sager</Author>
|
||||||
<Email>akira@narux.de</Email>
|
<Email>akira@narux.de</Email>
|
||||||
<Eol index="-1"/>
|
<Eol index="-1"/>
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
<Source>revpipyload/proginit.py</Source>
|
<Source>revpipyload/proginit.py</Source>
|
||||||
<Source>setup.py</Source>
|
<Source>setup.py</Source>
|
||||||
<Source>revpipyload/revpipyload.py</Source>
|
<Source>revpipyload/revpipyload.py</Source>
|
||||||
|
<Source>revpipyload/procimgserver.py</Source>
|
||||||
</Sources>
|
</Sources>
|
||||||
<Forms/>
|
<Forms/>
|
||||||
<Translations/>
|
<Translations/>
|
||||||
@@ -28,7 +29,9 @@
|
|||||||
<Other>doc</Other>
|
<Other>doc</Other>
|
||||||
<Other>debian</Other>
|
<Other>debian</Other>
|
||||||
<Other>eric-revpipyload.api</Other>
|
<Other>eric-revpipyload.api</Other>
|
||||||
|
<Other>stdeb.cfg</Other>
|
||||||
</Others>
|
</Others>
|
||||||
|
<MainScript>revpipyload/revpipyload.py</MainScript>
|
||||||
<Vcs>
|
<Vcs>
|
||||||
<VcsType>Mercurial</VcsType>
|
<VcsType>Mercurial</VcsType>
|
||||||
<VcsOptions>
|
<VcsOptions>
|
||||||
|
|||||||
169
revpipyload/procimgserver.py
Normal file
169
revpipyload/procimgserver.py
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
#
|
||||||
|
# RevPiPyLoad
|
||||||
|
#
|
||||||
|
# Webpage: https://revpimodio.org/revpipyplc/
|
||||||
|
# (c) Sven Sager, License: LGPLv3
|
||||||
|
#
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Stellt Funktionen bereit um das Prozessabbild zu ueberwachen.
|
||||||
|
|
||||||
|
Bei ausreichend Rechten koennen Ausgaenge auch gesetzt werden um einen
|
||||||
|
IO-Check bei Inbetriebname durchzufuehren.
|
||||||
|
|
||||||
|
"""
|
||||||
|
import pickle
|
||||||
|
import revpimodio
|
||||||
|
from xmlrpc.client import Binary
|
||||||
|
|
||||||
|
|
||||||
|
class ProcimgServer():
|
||||||
|
|
||||||
|
"""Serverkomponente fuer zusaetzliche XML-RPC Funktionen.
|
||||||
|
|
||||||
|
Diese Klasse registriert zusaetzliche Funktionen an einem besthenden
|
||||||
|
XML-RPC-Server. Der Funktionsumfang wird erweitert um zyklisch das
|
||||||
|
Prozessabbild zu empfangen und bei ausreichend Rechten Ausgaenge zu
|
||||||
|
setzen.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, logger, xmlserver, configrsc, procimg, aclmode):
|
||||||
|
"""Instantiiert RevPiCheckServer()-Klasse.
|
||||||
|
|
||||||
|
@param xmlserver: XML-RPC Server
|
||||||
|
@param procimg: Pfad zum Prozessabbild
|
||||||
|
@param configrsc: Pfad zur piCtory Konfigurationsdatei
|
||||||
|
@param logger: Loggerinstanz
|
||||||
|
@param aclmode: Zugriffsrechte
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Logger übernehmen
|
||||||
|
self.logger = logger
|
||||||
|
self.logger.debug("enter ProcimgServer.__init__()")
|
||||||
|
self.acl = aclmode
|
||||||
|
|
||||||
|
# XML-Server übernehmen
|
||||||
|
self.xmlsrv = xmlserver
|
||||||
|
self.xmlreadfuncs = {
|
||||||
|
"ps_devices": self.devices,
|
||||||
|
"ps_inps": lambda: self.ios("inp"),
|
||||||
|
"ps_outs": lambda: self.ios("out"),
|
||||||
|
"ps_mems": lambda: self.ios("mem"),
|
||||||
|
"ps_values": self.values,
|
||||||
|
}
|
||||||
|
self.xmlwritefuncs = {
|
||||||
|
"ps_setvalue": self.setvalue,
|
||||||
|
}
|
||||||
|
|
||||||
|
# RevPiModIO-Modul Instantiieren
|
||||||
|
self.logger.debug("create revpimodio class")
|
||||||
|
self.rpi = revpimodio.RevPiModIO(
|
||||||
|
configrsc=configrsc,
|
||||||
|
procimg=procimg,
|
||||||
|
)
|
||||||
|
self.rpi.devices.syncoutputs(device=0)
|
||||||
|
self.logger.debug("created revpimodio class")
|
||||||
|
|
||||||
|
self.logger.debug("leave ProcimgServer.__init__()")
|
||||||
|
|
||||||
|
def devices(self):
|
||||||
|
"""Generiert Deviceliste mit Position und Namen.
|
||||||
|
@returns: list() mit Tuple (pos, name)"""
|
||||||
|
return [
|
||||||
|
(dev.position, dev.name) for dev in self.rpi.devices
|
||||||
|
]
|
||||||
|
|
||||||
|
def ios(self, type):
|
||||||
|
"""Generiert ein dict() der Devices und IOs.
|
||||||
|
@param type: IO Typ inp/out
|
||||||
|
@returns: pickled dict()"""
|
||||||
|
dict_ios = {}
|
||||||
|
for dev in self.rpi.devices:
|
||||||
|
dict_ios[dev.position] = []
|
||||||
|
|
||||||
|
# IO Typen auswerten
|
||||||
|
if type == "inp":
|
||||||
|
lst_io = dev.get_inps()
|
||||||
|
elif type == "out":
|
||||||
|
lst_io = dev.get_outs()
|
||||||
|
elif type == "mem":
|
||||||
|
lst_io = dev.get_mems()
|
||||||
|
else:
|
||||||
|
lst_io = []
|
||||||
|
|
||||||
|
for io in lst_io:
|
||||||
|
dict_ios[dev.position].append([
|
||||||
|
io.name,
|
||||||
|
1 if io._bitlength == 1 else int(io._bitlength / 8),
|
||||||
|
io.slc_address.start + dev.offset,
|
||||||
|
io.bmk,
|
||||||
|
io._bitaddress,
|
||||||
|
])
|
||||||
|
return Binary(pickle.dumps(dict_ios))
|
||||||
|
|
||||||
|
def setvalue(self, device, io, value):
|
||||||
|
"""Setzt einen Wert auf dem RevPi.
|
||||||
|
|
||||||
|
@param device: Device Position oder Name
|
||||||
|
@param io: IO Name fuer neuen Wert
|
||||||
|
@param value: Neuer Wert
|
||||||
|
|
||||||
|
"""
|
||||||
|
# Zugriffsrechte prüfen
|
||||||
|
if self.acl < 3:
|
||||||
|
raise PermissionError(
|
||||||
|
"not allowed in XML-RPC permission mode {}".format(self.acl)
|
||||||
|
)
|
||||||
|
|
||||||
|
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].value = value.to_bytes(
|
||||||
|
self.rpi.devices[device][io].length, byteorder="little"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.rpi.devices.writeprocimg(device=device)
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
"""Liefert Prozessabbild an Client.
|
||||||
|
@returns: Binary() bytes or None"""
|
||||||
|
if self.rpi.devices.readprocimg() and self.rpi.devices.syncoutputs():
|
||||||
|
bytebuff = b''
|
||||||
|
for dev in self.rpi.devices:
|
||||||
|
bytebuff += bytes(dev)
|
||||||
|
return Binary(bytebuff)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
"""Registriert XML Funktionen."""
|
||||||
|
self.logger.debug("enter ProcimgServer.start()")
|
||||||
|
|
||||||
|
# Registriere Funktionen
|
||||||
|
for xmlfunc in self.xmlreadfuncs:
|
||||||
|
self.xmlsrv.register_function(self.xmlreadfuncs[xmlfunc], xmlfunc)
|
||||||
|
if self.acl >= 3:
|
||||||
|
for xmlfunc in self.xmlwritefuncs:
|
||||||
|
self.xmlsrv.register_function(
|
||||||
|
self.xmlwritefuncs[xmlfunc], xmlfunc
|
||||||
|
)
|
||||||
|
|
||||||
|
self.logger.debug("leave ProcimgServer.start()")
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
"""Entfernt XML-Funktionen."""
|
||||||
|
self.logger.debug("enter ProcimgServer.stop()")
|
||||||
|
|
||||||
|
# Entferne Funktionen
|
||||||
|
for xmlfunc in self.xmlreadfuncs:
|
||||||
|
if xmlfunc in self.xmlsrv.funcs:
|
||||||
|
del self.xmlsrv.funcs[xmlfunc]
|
||||||
|
if self.acl >= 3:
|
||||||
|
for xmlfunc in self.xmlwritefuncs:
|
||||||
|
if xmlfunc in self.xmlsrv.funcs:
|
||||||
|
del self.xmlsrv.funcs[xmlfunc]
|
||||||
|
|
||||||
|
self.logger.debug("leave ProcimgServer.stop()")
|
||||||
@@ -45,7 +45,7 @@ from json import loads as jloads
|
|||||||
from re import match as rematch
|
from re import match as rematch
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
from sys import stdout as sysstdout
|
from sys import stdout as sysstdout
|
||||||
from tempfile import mktemp
|
from tempfile import mkstemp
|
||||||
from threading import Thread, Event, Lock
|
from threading import Thread, Event, Lock
|
||||||
from time import sleep, asctime
|
from time import sleep, asctime
|
||||||
from xmlrpc.client import Binary
|
from xmlrpc.client import Binary
|
||||||
@@ -54,7 +54,7 @@ from xmlrpc.server import SimpleXMLRPCServer
|
|||||||
configrsc = None
|
configrsc = None
|
||||||
picontrolreset = "/opt/KUNBUS/piControlReset"
|
picontrolreset = "/opt/KUNBUS/piControlReset"
|
||||||
procimg = "/dev/piControl0"
|
procimg = "/dev/piControl0"
|
||||||
pyloadverion = "0.3.0"
|
pyloadverion = "0.4.0"
|
||||||
|
|
||||||
|
|
||||||
class LogReader():
|
class LogReader():
|
||||||
@@ -512,6 +512,7 @@ class RevPiPyLoad():
|
|||||||
self.tfile = {}
|
self.tfile = {}
|
||||||
self.tpe = None
|
self.tpe = None
|
||||||
self.xsrv = None
|
self.xsrv = None
|
||||||
|
self.xml_ps = None
|
||||||
|
|
||||||
# Load config
|
# Load config
|
||||||
self._loadconfig()
|
self._loadconfig()
|
||||||
@@ -592,6 +593,23 @@ class RevPiPyLoad():
|
|||||||
self.xsrv.register_function(self.xml_plcstop, "plcstop")
|
self.xsrv.register_function(self.xml_plcstop, "plcstop")
|
||||||
self.xsrv.register_function(self.xml_reload, "reload")
|
self.xsrv.register_function(self.xml_reload, "reload")
|
||||||
|
|
||||||
|
# Erweiterte Funktionen anmelden
|
||||||
|
try:
|
||||||
|
import procimgserver
|
||||||
|
self.xml_ps = procimgserver.ProcimgServer(
|
||||||
|
proginit.logger, self.xsrv, configrsc, procimg, self.xmlrpc
|
||||||
|
)
|
||||||
|
self.xsrv.register_function(self.xml_psstart, "psstart")
|
||||||
|
self.xsrv.register_function(self.xml_psstop, "psstop")
|
||||||
|
except:
|
||||||
|
self.xml_ps = None
|
||||||
|
proginit.logger.warning(
|
||||||
|
"can not load revpimodio module. maybe its not installed "
|
||||||
|
"or an old version (required at least 0.11.0). if you "
|
||||||
|
"like to use the process monitor feature, update/install "
|
||||||
|
"revpimodio: 'apt-get install python3-revpimodio'"
|
||||||
|
)
|
||||||
|
|
||||||
# XML Modus 2 Einstellungen lesen und Programm herunterladen
|
# XML Modus 2 Einstellungen lesen und Programm herunterladen
|
||||||
if self.xmlrpc >= 2:
|
if self.xmlrpc >= 2:
|
||||||
self.xsrv.register_function(
|
self.xsrv.register_function(
|
||||||
@@ -691,7 +709,7 @@ class RevPiPyLoad():
|
|||||||
@returns: Dateinamen des Archivs
|
@returns: Dateinamen des Archivs
|
||||||
|
|
||||||
"""
|
"""
|
||||||
filename = mktemp(suffix=".packed", prefix="plc")
|
filename = mkstemp(suffix=".packed", prefix="plc")
|
||||||
|
|
||||||
if mode == "zip":
|
if mode == "zip":
|
||||||
fh_pack = zipfile.ZipFile(filename, mode="w")
|
fh_pack = zipfile.ZipFile(filename, mode="w")
|
||||||
@@ -1008,6 +1026,8 @@ class RevPiPyLoad():
|
|||||||
if chk not in jconfigrsc:
|
if chk not in jconfigrsc:
|
||||||
return -2
|
return -2
|
||||||
|
|
||||||
|
# TODO: Module prüfen, ob sie existieren
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(configrsc, "wb") as fh:
|
with open(configrsc, "wb") as fh:
|
||||||
fh.write(filebytes.data)
|
fh.write(filebytes.data)
|
||||||
@@ -1019,6 +1039,24 @@ class RevPiPyLoad():
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def xml_psstart(self):
|
||||||
|
"""Starten den Prozessabbildserver.
|
||||||
|
@returns: True, wenn start erfolgreich"""
|
||||||
|
if self.xml_ps is not None:
|
||||||
|
self.xml_ps.start()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def xml_psstop(self):
|
||||||
|
"""Stoppt den Prozessabbildserver.
|
||||||
|
@returns: True, wenn stop erfolgreich"""
|
||||||
|
if self.xml_ps is not None:
|
||||||
|
self.xml_ps.stop()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
root = RevPiPyLoad()
|
root = RevPiPyLoad()
|
||||||
|
|||||||
4
setup.py
4
setup.py
@@ -27,10 +27,12 @@ setup(
|
|||||||
|
|
||||||
license="LGPLv3",
|
license="LGPLv3",
|
||||||
name="revpipyload",
|
name="revpipyload",
|
||||||
version="0.3.0",
|
version="0.4.0",
|
||||||
|
|
||||||
scripts=["data/revpipyload"],
|
scripts=["data/revpipyload"],
|
||||||
|
|
||||||
|
install_requires=["revpimodio"],
|
||||||
|
|
||||||
data_files=[
|
data_files=[
|
||||||
("/etc/default", ["data/etc/default/revpipyload"]),
|
("/etc/default", ["data/etc/default/revpipyload"]),
|
||||||
("/etc/revpipyload", ["data/etc/revpipyload/revpipyload.conf"]),
|
("/etc/revpipyload", ["data/etc/revpipyload/revpipyload.conf"]),
|
||||||
|
|||||||
Reference in New Issue
Block a user