Diese Komponente wird auf dem Revolution Pi Core installiert.
- Startet und überwacht euer, mit RevPiModIO geschriebenes, Python Steuerungsprogramm.
- Stellt das Prozessabbild für RevPiNetIO zur Verfügung
- Stellt die Schnittstelle für die grafische Konfiguration zur Verfügung, mit der der Dienst konfiguriert und das Steuerungsprogramm hochgeladen / kontrolliert wird
- Kann alle IO Werte per MQTT übertragen
Durch die Installation durch dpkg oder apt-get wird der Daemon automatisch in das init / systemd System von Linux eingebunden und startet mit dem Systemstart automatisch mit.
In der Standardkonfiguration wird versucht ein Python3 Programm mit dem Namen „program.py“ im Verzeichnis /var/lib/revpipyload zu starten.
Der XML-RPC-Server ist deaktiviert (HINWEIS AM ENDE DER SEITE BEACHTEN!!!).
Daemon neu starten / Stoppen / Einstellungen laden
Wenn Änderungen (wie unten beschrieben) vorgenommen werden, müssen diese vom RevPiPyLoad übernommen werden. Dies kann ganz einfach über die Shell gemacht werden:
# Daemon starten pi@RevPi ~ $ sudo service revpipyload start # Daemon stoppen pi@RevPi ~ $ sudo service revpipyload stop # Einstellungen neu laden pi@RevPi ~ $ sudo service revpipyload reload # Daemon neu starten pi@RevPi ~ $ sudo service revpipyload restart
Einstellungen ändern
Alle Einstellungen werden in der Datei /etc/revpipyload/revpipyload.conf vorgenommen. Zum bearbeiten kann man diese einfach in einem Editor öffnen, z.B.:
pi@RevPi ~ $ sudo nano /etc/revpipyload/revpipyload.conf
HINWIES: Versucht eine IP-Adresse ohne Berechtigung (egal ob nur lesen oder lesen/schreiben) zuzugreifen, wird die Verbindung sofort abgelehnt! HINWIES: Versucht eine IP-Adresse ohne Berechtigung (egal ob nur lesen oder lesen/schreiben) zuzugreifen, wird die Verbindung sofort abgelehnt!
autoreload=1
Startet das Python Programm automatisch neu, wenn es beendet wird, ob durch einen Absturz oder weil es durchgelaufen ist.
HINWEIS: Python Programme sollten durchgehend laufen und nicht eine Aufgabe erledigen, sich beenden und dann durch RevPiPyLoad neu gestartet werden!autoreloaddelay=5
Zeitverzögerung, bevor PLC Programm neu gestartet wird.autostart=1
Startet das Python Programm automatisch, wenn das RevPi-Core System startet.plcworkdir=/var/lib/revpipyload
Basisverzeichnis für das Python Programm. Hier muss das Programm und alle dazugehörigen Dateien und Unterordner abgelegt werden.plcworkdir_set_uid=0
Setzt, wenn =1, die Berechtigungen vom ausführenden Benutzer auf das plcworkdir. Damit kann das Steuerungsprogramm in diesen Ordner schreiben!plcprogram=program.py
Dieses Python Programm wird durch RevPiPyLoad gestartetplcprogram_watchdog=0
Aktiviert den Softwarewatchdog. Der Zahlenwert gibt das Timeout in Sekunden an, in dem ein Bitwechsel erkannt werden muss. Diesen macht das Steuerungsprogramm z.B. über .core.wd_toggle()
. Sollte das Timeout ablaufen, wird das Steuerungsprogramm neu gestartet.plcarguments=
Argumente, die dem PLC Programm beim Starten übergeben werden.plcuid=1000
Benutzer ID für Berechtigung des Python Programms. Der Benutzer pi hat die UID 1000 und normalerweise genug Berechtigungen um das Programm auszuführen. Sollten root Berechtigungen erforderlich sein, kann hier der Wert 0 angegeben werden.plcgid=1000
Gruppen ID für Berechtigung des Python Programms. Der Benutzer pi hat die GID 1000. Sollten root Berechtigungen erforderlich sein, kann hier der Wert 0 angegeben werden.pythonversion=3
Python Version, mit der das PLC Programm gestartet wird (mögliche Werte 2 / 3).replace_ios=/etc/revpipyload/replace_ios.conf
Dieser Wert setzt die Datei fest, welche für ersetzte IOs geladen werden soll. Erzeugt das Steuerungsprogramm diese Datei im plcworkdir, sollte der Wert auf „/var/lib/revpipyload/replace_ios.conf“ gesetzt werden und plcworkdir_set_uid=1
.reset_driver_action=2
Steht dieser Wert auf „2“, wird bei jedem Klick in piCtory auf „Reset Driver“ das Steuerungsprogramm neu gestartet. Wird hier „1“ angegeben, wird das Programm nur nach einer Änderung der Konfiguration neu gestartet.
Mit „0“ wird die Funktion deaktiviert.zeroonerror=0
Wenn 1 wird das Prozessabbild bei Python Programmabsturz mit \x00 Bytes überschrieben um alle Ausgänge auf NULL zu setzen.
HINWEIS: Wir empfehlen diesen Parameter auf 1 zu setzen!zeroonexit=0
Wenn 1 wird das Prozessabbild beim sauberen Beenden des Python Programms (exitcode = 0) mit \x00 Bytes überschrieben um alle Ausgänge auf NULL zu setzen.
plcserver=0
Dieser Parameter bestimmt, ob der Prozessabbildserver für RevPiModIO (RevPiNetIO(...)
, RevPiNetIOSelected(...)
, RevPiNetIODriver(...)
) aktiviert wird. Durch setzen auf 1 ist eine Verbindung von anderen Rechnern per RevPiModIO2 möglich (Datei aclplcserver.conf
beachten!)aclfile=/etc/revpipyload/aclplcserver.conf
Gibt den Dateinamen an, aus der die Berechtigungen für IP-Adressen gelesen werden sollen.
Über diese Berechtigungen wird der Zugriff auf das Prozessabbild gesteuert.
In der Datei wird EINE Berechtigung PRO ZEILE definiert: IPADRESSE,RECHT
IPADRESSE
Einzelne IP-Adresse oder mit Platzhalter definierte Gruppen:
192.168.178.10 -> Nur der eine Rechner
192.168.178.* -> Alle Rechner, bei denen die IP mit 192.168.178. beginntRECHT
0 = Nur lesen
1 = Lesen und schreiben# PLC-SERVER Access Control List (acl)
# One entry per Line IPADRESS,LEVEL
#
# Alle Rechner aus dem 192.168.178.0/24 Netz können IOs nur lesen
192.168.178.*,0
# Der Rechner 192.168.178.10 darf IOs lesen und schreiben
192.168.1.20,1
bindip=*
Gibt die IP an, an die der Prozessabbildserver gebunden werden soll. Dies kann nützlich sein, wenn der RevPi mehrere IPs besitzt und das Prozessabbild nur aus einem Netzwerk erreicht werden soll.
Möchten Sie den Prozessabbildserver an alle IPs binden, geben sie ein *
an.port=55234
Gibt den Port an, über den der Prozessabbildserver erreicht werden kannwatchdog=1
Die Übertragung des Prozessabbilds wird überwacht und bei Fehlern neu verbunden. Mit 0 wird die Überwachung deaktiviert.
xmlrpc=0
Aktiviert 1 oder deaktiviert 0 den XML-RPC Server. Dieser wird benötigt, wenn RevPiPyLoad über das grafische Tool RevPiPiControl gesteuert werden soll.
Zum Aktivieren setzt man ihn auf 1 (Datei aclxmlrpc.conf
beachten)aclfile=/etc/revpipyload/aclxmlrpc.conf
Gibt den Dateinamen an, aus der die Berechtigungen für IP-Adressen gelesen werden sollen.
Über diese Berechtigungen wird der Zugriff auf RevPiPyLoad gesteuert.
In der Datei wird EINE Berechtigung PRO ZEILE definiert: IPADRESSE,RECHT
IPADRESSE
Einzelne IP-Adresse oder mit Platzhalter definierte Gruppen:
192.168.178.10 -> Nur der eine Rechner
192.168.178.* -> Alle Rechner, bei denen die IP mit 192.168.178. beginntRECHT
0: PLC Programm starten/stoppen und Logs lesen
1: alles von 0 + IOs in ‚Watch modus‘ lesen
2: alles von 1 + Einstellungen lesen und PLC Programm herunterladen
3: alles von 2 + PLC Programm hochladen und IOs in ‚Watch modus‘ schreiben
4: alles von 3 + Einstellungen von RevPiPyLoad ändern# XML-RPC Access Control List (acl)
# One entry per Line IPADRESS,LEVEL
#
# Alle Rechner aus dem 192.168.1.0/24 Netz können nur Logs lesen und das Programm starten/stoppen
192.168.1.*,0
# Der Rechner 192.168.1.20 darf alle Einstellungen und Funktionen verwenden
192.168.1.20,4
bindip=*
Gibt die IP an, an die der XMLRPC-Server gebunden werden soll. Dies kann nützlich sein, wenn der RevPi mehrere IPs besitzt und RevPiPyLoad nur aus einem Netzwerk erreicht werden soll.
Möchten Sie den XMLRPC-Server an alle IPs binden, geben sie ein *
an.
mqtt = 0
Wenn MQTT verwendet werden soll, muss dieser Parameter auf 1 gesetzt werden. Dies aktiviert die grundlegenden Funktionen.basetopic = revpi0000
Der Basetopic wird bei allen MQTT Nachrichten als erster Teil im Topic vorangestellt. Wird der Basetopic z.B. auf myrevpis/revpi3444 gesetzt, lautet der Topic bei einer Zyklischen Übertragung myrevpis/revpi3444/io/pictory_ionamesendinterval = 15
Zeitintervall, in dem alle Werte übertragen werden sollen. Die Nachrichten werden mit dem Topic basetopic/io/pictory_ioname übertragen und enthalten als Payload die aktuellen IO Werte.
Mit 0 kann diese Funktion deaktiviert werden, dann sollte send_on_events
auf 1 gesetzt werden, da sonst keine Nachrichten per MQTT übertragen werden.send_on_event = 0
Werte sofort senden, wenn der IO Wert sich ändert. Die Nachricht wird mit dem Topic basetopic/event/pictory_ioname übertragen und hat als Payload den neuen Wert.write_outputs = 0
RevPiPyLoad kann übertragene Werte in die Ausgänge vom Revolution Pi schreiben. Wenn ein anderer MQTT Client eine Nachricht an den Broker sendet, kann der Revolution Pi diese empfangen und den neuen Wert aus dem Payload setzen.
Werte die gesetzt werden sollen, müssen mit dem Topic basetopic/set/pictory_outputname und dem neuen Wert im Payload gesendet werden.broker_address = localhost
Dies ist der Hostname oder die IP Adresse vom Broker, mit dem sich der Revolution Pi verbinden soll. Ist auf dem Revolution Pi ein Broker installiert (z.B. mosquitto) wird localhost verwendet.
Installation von Mosquitto einfach über: sudo apt-get install mosquitto
port = 1883
Port vom MQTT Broker. Dieser ist für nicht verschlüsselte Verbindungen 1883. Ist der Broker für verschlüsselte Verbindungen eingerichtet MUSS der Parameter tls_set
auf 1 gesetzt werden. Der Standardport für verschlüsselte Verbindungen ist 8883.tls_set = 0
Wird dieser Wert auf 1 gesetzt, wird für die Verbindung zum Broker eine verschlüsselte Verbindung verwendet. Für diese Verbindung sollte der Port standardmäßig auf 8883 (sicheres MQTT) gesetzt werden!username =
Benutzername für die Anmeldung am MQTT Broker.password =
Passwort für die Anmeldung am MQTT Broker.client_id =
MQTT Client ID, die der Revolution Pi für den Broker verwendet. Bleibt dieser Wert leer, wird automatisch eine eindeutige Client ID generiert.
Protokollierung
Neben der Logdatei für das Python Programm, erzeugt RevPiPyLoad eine Eigene. In ihr können Ausgaben vom Daemon überwacht werden. Der Grad der Protokollierung kann über die Datei /etc/default/revpipyload geändert werden.
pi@RevPi ~ $ sudo nano /etc/default/revpipyload
Durch hinzufügen von -v kann die Logausgabe erhöht werden:
DAEMON_ARGS="" # ändern in DAEMON_ARGS="-v"
HINWEIS: Die XML-RPC-Schnittstelle ist nur für das lokale Netzwerk gedacht! Sie darf NIEMALS über das Internet verwendet werden, da jegliche Übertragungen UNVERSCHLÜSSELT stattfinden. Außerdem gibt es noch keine Authentifizierungsmöglichkeiten, außer Zugriffsrechte per IP zu steuern.
Je nach Feedback der Community, werden wir solche Funktionen aber gerne noch einbauen 😀