Dokumentation – RevPiPyLoad

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

Parameter in DEFAULT Sektion:

  • 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 gestartet
  • plcprogram_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.
Parameter in PLCSERVER Sektion:

  • 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. beginnt
    • RECHT
      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

HINWIES: Versucht eine IP-Adresse ohne Berechtigung (egal ob nur lesen oder lesen/schreiben) zuzugreifen, wird die Verbindung sofort abgelehnt!

  • 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 kann
  • watchdog=1
    Die Übertragung des Prozessabbilds wird überwacht und bei Fehlern neu verbunden. Mit 0 wird die Überwachung deaktiviert.


Parameter in XMLRPC Sektion:

  • 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. beginnt
    • RECHT
      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

HINWIES: Versucht eine IP-Adresse ohne Berechtigung (egal ob nur lesen oder lesen/schreiben) zuzugreifen, wird die Verbindung sofort abgelehnt!

  • 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.
Parameter in MQTT Sektion:

  • 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_ioname
  • sendinterval = 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 😀