Alle revpimodio verwenden nun direct_write

This commit is contained in:
2019-08-07 12:51:50 +02:00
parent a7f7d48b93
commit 2bf3dce42e
5 changed files with 18 additions and 42 deletions

View File

@@ -74,7 +74,6 @@ class MqttServer(Thread):
self._reloadmodio = False self._reloadmodio = False
self._replace_ios = replace_ios self._replace_ios = replace_ios
self._rpi = None self._rpi = None
self._rpi_write = None
self._send_events = send_events self._send_events = send_events
self._sendinterval = sendinterval self._sendinterval = sendinterval
self._write_outputs = write_outputs self._write_outputs = write_outputs
@@ -130,26 +129,18 @@ class MqttServer(Thread):
# RevPiModIO-Modul Instantiieren # RevPiModIO-Modul Instantiieren
if self._rpi is not None: if self._rpi is not None:
self._rpi.cleanup() self._rpi.cleanup()
if self._rpi_write is not None:
self._rpi_write.cleanup()
proginit.logger.debug("create revpimodio2 object for MQTT") proginit.logger.debug("create revpimodio2 object for MQTT")
try: try:
# Lesend und Eventüberwachung # Vollzugriff und Eventüberwachung
self._rpi = revpimodio2.RevPiModIO( self._rpi = revpimodio2.RevPiModIO(
autorefresh=self._send_events, autorefresh=self._send_events,
monitoring=True, monitoring=not self._write_outputs,
configrsc=proginit.pargs.configrsc, configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg, procimg=proginit.pargs.procimg,
replace_io_file=self._replace_ios replace_io_file=self._replace_ios,
direct_output=True,
) )
# Schreibenen Zugriff
if self._write_outputs:
self._rpi_write = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg,
replace_io_file=self._replace_ios
)
if self._replace_ios: if self._replace_ios:
proginit.logger.info("loaded replace_ios to MQTT") proginit.logger.info("loaded replace_ios to MQTT")
@@ -159,16 +150,11 @@ class MqttServer(Thread):
# Lesend und Eventüberwachung # Lesend und Eventüberwachung
self._rpi = revpimodio2.RevPiModIO( self._rpi = revpimodio2.RevPiModIO(
autorefresh=self._send_events, autorefresh=self._send_events,
monitoring=True, monitoring=not self._write_outputs,
configrsc=proginit.pargs.configrsc, configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg procimg=proginit.pargs.procimg,
direct_output=True,
) )
# Schreibenen Zugriff
if self._write_outputs:
self._rpi_write = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg
)
proginit.logger.warning( proginit.logger.warning(
"replace_ios_file not loadable for MQTT - using " "replace_ios_file not loadable for MQTT - using "
"defaults now | {0}".format(e) "defaults now | {0}".format(e)
@@ -176,7 +162,6 @@ class MqttServer(Thread):
except Exception: except Exception:
self._rpi = None self._rpi = None
self._rpi_write = None
proginit.logger.error( proginit.logger.error(
"piCtory configuration not loadable for MQTT" "piCtory configuration not loadable for MQTT"
) )
@@ -280,11 +265,11 @@ class MqttServer(Thread):
# IO holen # IO holen
if coreio: if coreio:
coreio = ioname.split(".")[-1] coreio = ioname.split(".")[-1]
io = getattr(self._rpi_write.core, coreio) io = getattr(self._rpi.core, coreio)
if not isinstance(io, revpimodio2.io.IOBase): if not isinstance(io, revpimodio2.io.IOBase):
raise RuntimeError() raise RuntimeError()
else: else:
io = self._rpi_write.io[ioname] io = self._rpi.io[ioname]
io_needbytes = type(io.value) == bytes io_needbytes = type(io.value) == bytes
except Exception: except Exception:
proginit.logger.error( proginit.logger.error(
@@ -300,10 +285,8 @@ class MqttServer(Thread):
) )
elif ioget: elif ioget:
# Daten je nach IO Type aus Prozessabbild laden # Werte laden, wenn nicht autorefresh
if io.type == revpimodio2.OUT: if not self._send_events:
io._parentdevice.syncoutputs()
else:
io._parentdevice.readprocimg() io._parentdevice.readprocimg()
# Publish Wert von IO # Publish Wert von IO
@@ -344,7 +327,6 @@ class MqttServer(Thread):
return return
# Write Value to RevPi # Write Value to RevPi
io._parentdevice.syncoutputs()
try: try:
io.value = value io.value = value
except Exception: except Exception:
@@ -352,8 +334,6 @@ class MqttServer(Thread):
"could not write '{0}' to Output '{1}'" "could not write '{0}' to Output '{1}'"
"".format(value, ioname) "".format(value, ioname)
) )
else:
io._parentdevice.writeprocimg()
elif ioreset: elif ioreset:
# Counter zurücksetzen # Counter zurücksetzen

View File

@@ -99,7 +99,8 @@ class ProcimgServer():
self.rpi = revpimodio2.RevPiModIO( self.rpi = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc, configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg, procimg=proginit.pargs.procimg,
replace_io_file=self.replace_ios replace_io_file=self.replace_ios,
direct_output=True,
) )
if self.replace_ios: if self.replace_ios:
@@ -110,6 +111,7 @@ class ProcimgServer():
self.rpi = revpimodio2.RevPiModIO( self.rpi = revpimodio2.RevPiModIO(
configrsc=proginit.pargs.configrsc, configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg, procimg=proginit.pargs.procimg,
direct_output=True,
) )
proginit.logger.warning( proginit.logger.warning(
"replace_ios_file not loadable for ProcimgServer - using " "replace_ios_file not loadable for ProcimgServer - using "
@@ -122,9 +124,6 @@ class ProcimgServer():
) )
return e return e
# NOTE: Warum das?
self.rpi.syncoutputs(device=0)
proginit.logger.debug("created revpimodio2 object") proginit.logger.debug("created revpimodio2 object")
def setvalue(self, device, io, value): def setvalue(self, device, io, value):
@@ -140,8 +139,6 @@ class ProcimgServer():
if type(value) == Binary: if type(value) == Binary:
value = value.data value = value.data
self.rpi.syncoutputs(device=device)
try: try:
# Neuen Wert übernehmen # Neuen Wert übernehmen
if type(value) == bytes or type(value) == bool: if type(value) == bytes or type(value) == bool:
@@ -156,13 +153,12 @@ class ProcimgServer():
except Exception as e: except Exception as e:
return [device, io, False, str(e)] return [device, io, False, str(e)]
self.rpi.writeprocimg(device=device)
return [device, io, True, ""] return [device, io, True, ""]
def values(self): def values(self):
"""Liefert Prozessabbild an Client. """Liefert Prozessabbild an Client.
@return Binary() bytes or None""" @return Binary() bytes or None"""
if self.rpi.readprocimg() and self.rpi.syncoutputs(): if self.rpi.readprocimg():
bytebuff = bytearray() bytebuff = bytearray()
for dev in self.rpi.device: for dev in self.rpi.device:
bytebuff += bytes(dev) bytebuff += bytes(dev)

View File

@@ -49,7 +49,7 @@ from time import asctime
from xmlrpc.client import Binary from xmlrpc.client import Binary
from xrpcserver import SaveXMLRPCServer from xrpcserver import SaveXMLRPCServer
min_revpimodio = "2.3.3" min_revpimodio = "2.4.0"
class RevPiPyLoad(): class RevPiPyLoad():

View File

@@ -31,7 +31,7 @@ setup(
scripts=["data/revpipyload"], scripts=["data/revpipyload"],
install_requires=["revpimodio2 >= 2.3.3"], install_requires=["revpimodio2 >= 2.4.0"],
python_requires=">=3.2", python_requires=">=3.2",
data_files=[ data_files=[

View File

@@ -1,5 +1,5 @@
[DEFAULT] [DEFAULT]
Debian-Version: 1 Debian-Version: 1
Depends3: python3-revpimodio2 (>= 2.2.5) Depends3: python3-revpimodio2 (>= 2.4.0)
Package: revpipyload Package: revpipyload
Suite: stable Suite: stable