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>Gibt die Rohdaten aus piControl0 zurueck.</td>
|
||||
</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>Uebertraegt ein Archiv vom plcworkdir.</td>
|
||||
</tr><tr>
|
||||
@@ -373,6 +382,42 @@ Gibt die Rohdaten aus piControl0 zurueck.
|
||||
<dd>
|
||||
xmlrpc.client.Binary()
|
||||
</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>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
RevPiPyLoad.xml_plcdownload</h3>
|
||||
|
||||
@@ -77,6 +77,9 @@ revpipyload.RevPiPyLoad.xml_getconfig?4()
|
||||
revpipyload.RevPiPyLoad.xml_getfilelist?4()
|
||||
revpipyload.RevPiPyLoad.xml_getpictoryrsc?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_plcexitcode?4()
|
||||
revpipyload.RevPiPyLoad.xml_plcrunning?4()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
|
||||
<!-- 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 -->
|
||||
<Project version="5.1">
|
||||
<Language>en_US</Language>
|
||||
@@ -9,7 +9,7 @@
|
||||
<ProgLanguage mixed="0">Python3</ProgLanguage>
|
||||
<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>
|
||||
<Version>0.6.5</Version>
|
||||
<Version>0.7.0</Version>
|
||||
<Author>Sven Sager</Author>
|
||||
<Email>akira@narux.de</Email>
|
||||
<Eol index="1"/>
|
||||
|
||||
@@ -60,7 +60,6 @@ class MqttServer(Thread):
|
||||
# Handler konfigurieren
|
||||
self._mq.on_connect = self._on_connect
|
||||
self._mq.on_message = self._on_message
|
||||
# TODO: self._mq.on_disconnect = self._on_disconnect
|
||||
|
||||
def _get_procimglength(self):
|
||||
"""Ermittelt aus piCtory Konfiguraiton die laenge.
|
||||
@@ -69,7 +68,7 @@ class MqttServer(Thread):
|
||||
with open(proginit.pargs.configrsc, "r") as fh:
|
||||
rsc = jload(fh)
|
||||
except:
|
||||
return 0
|
||||
return 4096
|
||||
|
||||
length = 0
|
||||
|
||||
@@ -105,6 +104,9 @@ class MqttServer(Thread):
|
||||
self.__mqttend = True
|
||||
raise RuntimeError("can not connect to mqtt server")
|
||||
|
||||
# piCtory übertragen um alle RevPiMqttIO zu benachrichtigen
|
||||
self._on_message(client, userdata, None)
|
||||
|
||||
# Subscribe piCtory Anforderung
|
||||
client.subscribe(self._mqtt_sendpictory)
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ from time import asctime
|
||||
from xmlrpc.client import Binary
|
||||
from xrpcserver import SaveXMLRPCServer
|
||||
|
||||
pyloadversion = "0.6.5"
|
||||
pyloadversion = "0.7.0"
|
||||
|
||||
|
||||
class RevPiPyLoad():
|
||||
@@ -81,6 +81,7 @@ class RevPiPyLoad():
|
||||
self.xmlrpcacl = IpAclManager(minlevel=0, maxlevel=4)
|
||||
|
||||
# Threads/Prozesse
|
||||
self.th_mqtt = None
|
||||
self.th_plcslave = None
|
||||
self.plc = None
|
||||
|
||||
@@ -147,6 +148,7 @@ class RevPiPyLoad():
|
||||
proginit.logger.debug("enter RevPiPyLoad._loadconfig()")
|
||||
|
||||
# Subsysteme herunterfahren
|
||||
self.stop_plcmqtt()
|
||||
self.stop_xmlrpcserver()
|
||||
|
||||
# Konfigurationsdatei laden
|
||||
@@ -330,6 +332,8 @@ class RevPiPyLoad():
|
||||
0, self.xml_plcstop, "plcstop")
|
||||
self.xsrv.register_function(
|
||||
0, self.xml_reload, "reload")
|
||||
self.xsrv.register_function(
|
||||
0, self.xml_mqttrunning, "mqttrunning")
|
||||
self.xsrv.register_function(
|
||||
0, self.xml_plcslaverunning, "plcslaverunning")
|
||||
|
||||
@@ -370,6 +374,10 @@ class RevPiPyLoad():
|
||||
lambda: os.system(proginit.picontrolreset),
|
||||
"resetpicontrol"
|
||||
)
|
||||
self.xsrv.register_function(
|
||||
3, self.xml_mqttstart, "mqttstart")
|
||||
self.xsrv.register_function(
|
||||
3, self.xml_mqttstop, "mqttstop")
|
||||
self.xsrv.register_function(
|
||||
3, self.xml_plcslavestart, "plcslavestart")
|
||||
self.xsrv.register_function(
|
||||
@@ -555,11 +563,11 @@ class RevPiPyLoad():
|
||||
self.xsrv.start()
|
||||
|
||||
# MQTT Uebertragung starten
|
||||
if self.mqtt and self.th_mqtt is not None:
|
||||
if self.th_mqtt is not None:
|
||||
self.th_mqtt.start()
|
||||
|
||||
if self.plcslave:
|
||||
# Slaveausfuehrung übergeben
|
||||
if self.th_plcslave is not None:
|
||||
self.th_plcslave.start()
|
||||
|
||||
# PLC Programm automatisch starten
|
||||
@@ -682,6 +690,17 @@ class RevPiPyLoad():
|
||||
dc["zeroonerror"] = self.zeroonerror
|
||||
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
|
||||
dc["plcslave"] = self.plcslave
|
||||
dc["plcslaveacl"] = self.plcslaveacl.acl
|
||||
@@ -722,6 +741,42 @@ class RevPiPyLoad():
|
||||
buff = fh.read()
|
||||
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):
|
||||
"""Uebertraegt ein Archiv vom plcworkdir.
|
||||
|
||||
@@ -868,6 +923,17 @@ class RevPiPyLoad():
|
||||
"zeroonerror": "[01]",
|
||||
"zeroonexit": "[01]",
|
||||
},
|
||||
"MQTT": {
|
||||
"mqtt": "[01]",
|
||||
"mqttbasetopic": ".*",
|
||||
"mqttsendinterval": "[0-9]+",
|
||||
"mqtthost": ".+",
|
||||
"mqttport": "[0-9]+",
|
||||
"mqtttls_set": "[01]",
|
||||
"mqttusername": ".*",
|
||||
"mqttpassword": ".*",
|
||||
"mqttclient_id": ".+",
|
||||
},
|
||||
"PLCSLAVE": {
|
||||
"plcslave": "[01]",
|
||||
"plcslaveacl": self.plcslaveacl.regex_acl,
|
||||
|
||||
Reference in New Issue
Block a user