mirror of
https://github.com/naruxde/revpipyload.git
synced 2025-11-08 23:23:52 +01:00
MQTT sendet beim Start piCtory und Daten um laufende RevPiMqttIO zu informieren
MQTT in XML-RPC eingebaut MQTT in XML Settings übernommen
This commit is contained in:
@@ -138,6 +138,15 @@ Methods</h3>
|
|||||||
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_getprocimg">xml_getprocimg</a></td>
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_getprocimg">xml_getprocimg</a></td>
|
||||||
<td>Gibt die Rohdaten aus piControl0 zurueck.</td>
|
<td>Gibt die Rohdaten aus piControl0 zurueck.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_mqttrunning">xml_mqttrunning</a></td>
|
||||||
|
<td>Prueft ob MQTT Uebertragung noch lauft.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_mqttstart">xml_mqttstart</a></td>
|
||||||
|
<td>Startet die MQTT Uebertragung.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_mqttstop">xml_mqttstop</a></td>
|
||||||
|
<td>Stoppt die MQTT Uebertragung.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_plcdownload">xml_plcdownload</a></td>
|
<td><a style="color:#0000FF" href="#RevPiPyLoad.xml_plcdownload">xml_plcdownload</a></td>
|
||||||
<td>Uebertraegt ein Archiv vom plcworkdir.</td>
|
<td>Uebertraegt ein Archiv vom plcworkdir.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -373,6 +382,42 @@ Gibt die Rohdaten aus piControl0 zurueck.
|
|||||||
<dd>
|
<dd>
|
||||||
xmlrpc.client.Binary()
|
xmlrpc.client.Binary()
|
||||||
</dd>
|
</dd>
|
||||||
|
</dl><a NAME="RevPiPyLoad.xml_mqttrunning" ID="RevPiPyLoad.xml_mqttrunning"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiPyLoad.xml_mqttrunning</h3>
|
||||||
|
<b>xml_mqttrunning</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Prueft ob MQTT Uebertragung noch lauft.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn MQTT Uebertragung noch lauft
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="RevPiPyLoad.xml_mqttstart" ID="RevPiPyLoad.xml_mqttstart"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiPyLoad.xml_mqttstart</h3>
|
||||||
|
<b>xml_mqttstart</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Startet die MQTT Uebertragung.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
Statuscode:
|
||||||
|
0: erfolgreich gestartet
|
||||||
|
-1: Nicht aktiv in Konfiguration
|
||||||
|
-2: Laeuft bereits
|
||||||
|
</dd>
|
||||||
|
</dl><a NAME="RevPiPyLoad.xml_mqttstop" ID="RevPiPyLoad.xml_mqttstop"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
RevPiPyLoad.xml_mqttstop</h3>
|
||||||
|
<b>xml_mqttstop</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Stoppt die MQTT Uebertragung.
|
||||||
|
</p><dl>
|
||||||
|
<dt>Returns:</dt>
|
||||||
|
<dd>
|
||||||
|
True, wenn stop erfolgreich
|
||||||
|
</dd>
|
||||||
</dl><a NAME="RevPiPyLoad.xml_plcdownload" ID="RevPiPyLoad.xml_plcdownload"></a>
|
</dl><a NAME="RevPiPyLoad.xml_plcdownload" ID="RevPiPyLoad.xml_plcdownload"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
RevPiPyLoad.xml_plcdownload</h3>
|
RevPiPyLoad.xml_plcdownload</h3>
|
||||||
|
|||||||
@@ -77,6 +77,9 @@ revpipyload.RevPiPyLoad.xml_getconfig?4()
|
|||||||
revpipyload.RevPiPyLoad.xml_getfilelist?4()
|
revpipyload.RevPiPyLoad.xml_getfilelist?4()
|
||||||
revpipyload.RevPiPyLoad.xml_getpictoryrsc?4()
|
revpipyload.RevPiPyLoad.xml_getpictoryrsc?4()
|
||||||
revpipyload.RevPiPyLoad.xml_getprocimg?4()
|
revpipyload.RevPiPyLoad.xml_getprocimg?4()
|
||||||
|
revpipyload.RevPiPyLoad.xml_mqttrunning?4()
|
||||||
|
revpipyload.RevPiPyLoad.xml_mqttstart?4()
|
||||||
|
revpipyload.RevPiPyLoad.xml_mqttstop?4()
|
||||||
revpipyload.RevPiPyLoad.xml_plcdownload?4(mode="tar", pictory=False)
|
revpipyload.RevPiPyLoad.xml_plcdownload?4(mode="tar", pictory=False)
|
||||||
revpipyload.RevPiPyLoad.xml_plcexitcode?4()
|
revpipyload.RevPiPyLoad.xml_plcexitcode?4()
|
||||||
revpipyload.RevPiPyLoad.xml_plcrunning?4()
|
revpipyload.RevPiPyLoad.xml_plcrunning?4()
|
||||||
|
|||||||
@@ -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: 2018-04-09, 11:54:43 -->
|
<!-- Saved: 2018-04-11, 12:27:50 -->
|
||||||
<!-- Copyright (C) 2018 Sven Sager, akira@narux.de -->
|
<!-- Copyright (C) 2018 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.6.5</Version>
|
<Version>0.7.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"/>
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ class MqttServer(Thread):
|
|||||||
# Handler konfigurieren
|
# Handler konfigurieren
|
||||||
self._mq.on_connect = self._on_connect
|
self._mq.on_connect = self._on_connect
|
||||||
self._mq.on_message = self._on_message
|
self._mq.on_message = self._on_message
|
||||||
# TODO: self._mq.on_disconnect = self._on_disconnect
|
|
||||||
|
|
||||||
def _get_procimglength(self):
|
def _get_procimglength(self):
|
||||||
"""Ermittelt aus piCtory Konfiguraiton die laenge.
|
"""Ermittelt aus piCtory Konfiguraiton die laenge.
|
||||||
@@ -69,7 +68,7 @@ class MqttServer(Thread):
|
|||||||
with open(proginit.pargs.configrsc, "r") as fh:
|
with open(proginit.pargs.configrsc, "r") as fh:
|
||||||
rsc = jload(fh)
|
rsc = jload(fh)
|
||||||
except:
|
except:
|
||||||
return 0
|
return 4096
|
||||||
|
|
||||||
length = 0
|
length = 0
|
||||||
|
|
||||||
@@ -105,6 +104,9 @@ class MqttServer(Thread):
|
|||||||
self.__mqttend = True
|
self.__mqttend = True
|
||||||
raise RuntimeError("can not connect to mqtt server")
|
raise RuntimeError("can not connect to mqtt server")
|
||||||
|
|
||||||
|
# piCtory übertragen um alle RevPiMqttIO zu benachrichtigen
|
||||||
|
self._on_message(client, userdata, None)
|
||||||
|
|
||||||
# Subscribe piCtory Anforderung
|
# Subscribe piCtory Anforderung
|
||||||
client.subscribe(self._mqtt_sendpictory)
|
client.subscribe(self._mqtt_sendpictory)
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ from time import asctime
|
|||||||
from xmlrpc.client import Binary
|
from xmlrpc.client import Binary
|
||||||
from xrpcserver import SaveXMLRPCServer
|
from xrpcserver import SaveXMLRPCServer
|
||||||
|
|
||||||
pyloadversion = "0.6.5"
|
pyloadversion = "0.7.0"
|
||||||
|
|
||||||
|
|
||||||
class RevPiPyLoad():
|
class RevPiPyLoad():
|
||||||
@@ -81,6 +81,7 @@ class RevPiPyLoad():
|
|||||||
self.xmlrpcacl = IpAclManager(minlevel=0, maxlevel=4)
|
self.xmlrpcacl = IpAclManager(minlevel=0, maxlevel=4)
|
||||||
|
|
||||||
# Threads/Prozesse
|
# Threads/Prozesse
|
||||||
|
self.th_mqtt = None
|
||||||
self.th_plcslave = None
|
self.th_plcslave = None
|
||||||
self.plc = None
|
self.plc = None
|
||||||
|
|
||||||
@@ -147,6 +148,7 @@ class RevPiPyLoad():
|
|||||||
proginit.logger.debug("enter RevPiPyLoad._loadconfig()")
|
proginit.logger.debug("enter RevPiPyLoad._loadconfig()")
|
||||||
|
|
||||||
# Subsysteme herunterfahren
|
# Subsysteme herunterfahren
|
||||||
|
self.stop_plcmqtt()
|
||||||
self.stop_xmlrpcserver()
|
self.stop_xmlrpcserver()
|
||||||
|
|
||||||
# Konfigurationsdatei laden
|
# Konfigurationsdatei laden
|
||||||
@@ -330,6 +332,8 @@ class RevPiPyLoad():
|
|||||||
0, self.xml_plcstop, "plcstop")
|
0, self.xml_plcstop, "plcstop")
|
||||||
self.xsrv.register_function(
|
self.xsrv.register_function(
|
||||||
0, self.xml_reload, "reload")
|
0, self.xml_reload, "reload")
|
||||||
|
self.xsrv.register_function(
|
||||||
|
0, self.xml_mqttrunning, "mqttrunning")
|
||||||
self.xsrv.register_function(
|
self.xsrv.register_function(
|
||||||
0, self.xml_plcslaverunning, "plcslaverunning")
|
0, self.xml_plcslaverunning, "plcslaverunning")
|
||||||
|
|
||||||
@@ -370,6 +374,10 @@ class RevPiPyLoad():
|
|||||||
lambda: os.system(proginit.picontrolreset),
|
lambda: os.system(proginit.picontrolreset),
|
||||||
"resetpicontrol"
|
"resetpicontrol"
|
||||||
)
|
)
|
||||||
|
self.xsrv.register_function(
|
||||||
|
3, self.xml_mqttstart, "mqttstart")
|
||||||
|
self.xsrv.register_function(
|
||||||
|
3, self.xml_mqttstop, "mqttstop")
|
||||||
self.xsrv.register_function(
|
self.xsrv.register_function(
|
||||||
3, self.xml_plcslavestart, "plcslavestart")
|
3, self.xml_plcslavestart, "plcslavestart")
|
||||||
self.xsrv.register_function(
|
self.xsrv.register_function(
|
||||||
@@ -555,11 +563,11 @@ class RevPiPyLoad():
|
|||||||
self.xsrv.start()
|
self.xsrv.start()
|
||||||
|
|
||||||
# MQTT Uebertragung starten
|
# MQTT Uebertragung starten
|
||||||
if self.mqtt and self.th_mqtt is not None:
|
if self.th_mqtt is not None:
|
||||||
self.th_mqtt.start()
|
self.th_mqtt.start()
|
||||||
|
|
||||||
if self.plcslave:
|
# Slaveausfuehrung übergeben
|
||||||
# Slaveausfuehrung übergeben
|
if self.th_plcslave is not None:
|
||||||
self.th_plcslave.start()
|
self.th_plcslave.start()
|
||||||
|
|
||||||
# PLC Programm automatisch starten
|
# PLC Programm automatisch starten
|
||||||
@@ -682,6 +690,17 @@ class RevPiPyLoad():
|
|||||||
dc["zeroonerror"] = self.zeroonerror
|
dc["zeroonerror"] = self.zeroonerror
|
||||||
dc["zeroonexit"] = self.zeroonexit
|
dc["zeroonexit"] = self.zeroonexit
|
||||||
|
|
||||||
|
# MQTT Sektion
|
||||||
|
dc["mqtt"] = self.mqtt
|
||||||
|
dc["basetopic"] = self.mqttbasetopic
|
||||||
|
dc["sendinterval"] = self.mqttsendinterval
|
||||||
|
dc["host"] = self.mqtthost
|
||||||
|
dc["port"] = self.mqttport
|
||||||
|
dc["tls_set"] = self.mqtttls_set
|
||||||
|
dc["username"] = self.mqttusername
|
||||||
|
dc["password"] = self.mqttpassword
|
||||||
|
dc["client_id"] = self.mqttclient_id
|
||||||
|
|
||||||
# PLCSLAVE Sektion
|
# PLCSLAVE Sektion
|
||||||
dc["plcslave"] = self.plcslave
|
dc["plcslave"] = self.plcslave
|
||||||
dc["plcslaveacl"] = self.plcslaveacl.acl
|
dc["plcslaveacl"] = self.plcslaveacl.acl
|
||||||
@@ -722,6 +741,42 @@ class RevPiPyLoad():
|
|||||||
buff = fh.read()
|
buff = fh.read()
|
||||||
return Binary(buff)
|
return Binary(buff)
|
||||||
|
|
||||||
|
def xml_mqttrunning(self):
|
||||||
|
"""Prueft ob MQTT Uebertragung noch lauft.
|
||||||
|
@return True, wenn MQTT Uebertragung noch lauft"""
|
||||||
|
proginit.logger.debug("xmlrpc call mqttrunning")
|
||||||
|
return False if self.th_mqtt is None \
|
||||||
|
else self.th_mqtt.is_alive()
|
||||||
|
|
||||||
|
def xml_mqttstart(self):
|
||||||
|
"""Startet die MQTT Uebertragung.
|
||||||
|
|
||||||
|
@return Statuscode:
|
||||||
|
0: erfolgreich gestartet
|
||||||
|
-1: Nicht aktiv in Konfiguration
|
||||||
|
-2: Laeuft bereits
|
||||||
|
|
||||||
|
"""
|
||||||
|
if self.th_mqtt is not None and self.th_mqtt.is_alive():
|
||||||
|
return -2
|
||||||
|
else:
|
||||||
|
self.th_mqtt = self._plcmqtt()
|
||||||
|
if self.th_mqtt is None:
|
||||||
|
return -1
|
||||||
|
else:
|
||||||
|
self.th_mqtt.start()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def xml_mqttstop(self):
|
||||||
|
"""Stoppt die MQTT Uebertragung.
|
||||||
|
@return True, wenn stop erfolgreich"""
|
||||||
|
if self.th_mqtt is not None:
|
||||||
|
self.stop_plcmqtt()
|
||||||
|
self.th_mqtt = None
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def xml_plcdownload(self, mode="tar", pictory=False):
|
def xml_plcdownload(self, mode="tar", pictory=False):
|
||||||
"""Uebertraegt ein Archiv vom plcworkdir.
|
"""Uebertraegt ein Archiv vom plcworkdir.
|
||||||
|
|
||||||
@@ -868,6 +923,17 @@ class RevPiPyLoad():
|
|||||||
"zeroonerror": "[01]",
|
"zeroonerror": "[01]",
|
||||||
"zeroonexit": "[01]",
|
"zeroonexit": "[01]",
|
||||||
},
|
},
|
||||||
|
"MQTT": {
|
||||||
|
"mqtt": "[01]",
|
||||||
|
"mqttbasetopic": ".*",
|
||||||
|
"mqttsendinterval": "[0-9]+",
|
||||||
|
"mqtthost": ".+",
|
||||||
|
"mqttport": "[0-9]+",
|
||||||
|
"mqtttls_set": "[01]",
|
||||||
|
"mqttusername": ".*",
|
||||||
|
"mqttpassword": ".*",
|
||||||
|
"mqttclient_id": ".+",
|
||||||
|
},
|
||||||
"PLCSLAVE": {
|
"PLCSLAVE": {
|
||||||
"plcslave": "[01]",
|
"plcslave": "[01]",
|
||||||
"plcslaveacl": self.plcslaveacl.regex_acl,
|
"plcslaveacl": self.plcslaveacl.regex_acl,
|
||||||
|
|||||||
Reference in New Issue
Block a user