Datenübermittlung von PoKeys via UDP

Grundsätzlich ist es mit PoKeys möglich, eine komplette Hausautomatisierung umzusetzen. Die Möglichkeiten, die PoBlocks als SPS liefert, decken wohl jeden Anwendungsfall ab. Wer jedoch die Daten an einer externen Stelle braucht oder die zentrale Intelligenz durch ein anderes Gerät dargestellt wird, benötigt dafür eine Schnittstelle. Wie man auf die Sensor- oder Schalterdaten in PoKeys zugreifen kann, zeigt dieser Beitrag.

 

Vier Methoden

Für das Abgreifen der Werte bzw. das aktive Übertragen aus PoKeys heraus bieten sich vier Möglichkeiten an:

1) Datenübermittlung via UDP pro Pin bzw. pro „Shared-Memory-Slot“

PoKeys bietet die Möglichkeit, in PoBlocks Werte von Sensoren oder Ergebnisse von Berechnungen in einen sogenannten „Shared-Memory“ zu legen. Diese Werte können periodisch via UDP an einen zuvor festgelegten Empfänger gesendet werden. Auch ohne PoBlocks können Sensorwerte oder Schaltzustände übermittelt werden.

2) Datenübermittlung via UDP in einem zusammengefassten Byte

Wenn wir mehrere digitale Werte via UDP versenden wollen, bietet sich in PoBlocks der Byte-Baustein an. Mit diesem werden bis zu acht Bit (Schalter ein/aus) zusammengefasst und als binärer Wert zur Verfügung gestellt. Dieser kann wiederum periodisch via UDP an einen festgelegten Empfänger gesendet werden.

3) Datenübermittlung via UDP und dem „UDP-Sender“-Baustein in PoBlocks

Seit der neusten Version (zur Zeit in der Beta-Phase) bietet PoBlocks den Baustein „UDP-Sender„. Über diesen können sechs voneinander unabhängige Werte an einen UDP-Empfänger gesendet werden. Eine Konfiguration in PoKeys-Konfigurationssoftware entfällt somit und Übertragungsintervalle von unter einer Sekunde werden mit diesem Baustein ermöglicht.

4) Datenbereitstellung via Modbus-TCP

PoKeys bietet die Möglichkeit, als Modus-TCP-Client zu agieren und an dieser Kommunikationsschnittstelle Daten bereitzustellen. Da der regelmäßige Abruf dieser Daten von anderen Herstellern aus fadenscheinigen Gründen kastriert wurde, werde ich diese Möglichkeit nur grob erläutern. Für meine Belange kommt diese Methode wahrscheinlich nicht zum Einsatz.

 

Datenübermittlung via UDP pro Pin bzw. pro „Shared-Memory-Slot“

Möchten wir lediglich einen einzelnen Wert via UDP übertragen, bietet sich diese Methode an. Dazu brauchen wir ggf. noch nicht einmal die SPS-Software PoBlocks, sondern widmen uns der PoKeys-Konfigurationssoftware.

In dieser öffnen wir, nachdem wir uns mit unserem PoKeys-Modul verbunden haben, das Menü „Gerät“ => „Web Interface Konfiguration„.

 

Dort legen wir mittels „Add new“ einen neuen zu übertragenden Status an. Diesem Status vergeben wir der übersichtshalber einen individuellen Namen, wählen den Pin aus an welchem unser Sensor oder Schalter hängt und aktivieren den Haken bei „Server Reports„. Der Haken bewirkt, dass dieser Status nicht nur den ausgewählten Nutzern in der Weboberfläche zur Verfügung steht, sondern via UDP übertragen wird.

 

 

Nun konfigurieren wir den UDP-Empfänger. Dazu öffnen wir die entsprechende Konfiguration mit „Open report server configuration„. Hier wählen wir den Modus „UDP mode„, konfigurieren die IP-Adresse des Empfängers und wählen einen noch freien Zielport des Empfängers. Den Sendeintervall setze ich persönlich gerne auf eine Sekunde. Die Änderungen übertragen wir mit „Send to device“ an unser PoKeys-Modul und schließen das Konfigurationsfenster mit „Close„.

 

 

Wichtig ist hierbei zu beachten, dass der Port als „ab dem Port“ zu betrachten ist. Der Wert des ersten eingerichteten und via UDP zu übertragenden Sensors wird an den konfigurierten Port gesendet (in unserem Beispiel Port 5104). Der nächste Wert wird an den nächsthöheren Port gesendet (5105). Das setzt sich mit jedem eingerichteten zu übermittelnden Wert fort.

Wer grundsätzlich nur Daten via UDP versenden will und das Webinterface nicht benötigt, kann dieses durch das Setzen des Hakens bei  „Disable web interface“ deaktivieren.

Am Empfänger können wir jetzt beobachten, wie die Daten sekündlich eintreffen.

 

 

Daten in einem Shared-Memory-Slot ablegen (PoBlocks)

Wer in PoBlocks Berechnungen durchführt oder andere Logiken konfiguriert, möchte möglicherweise die Ergebnisse via UDP übertragen. Dazu bietet PoBlocks die Möglichkeit, solche Werte in einen sogenannten „Shared-Memory-Slot“ abzulegen. Dazu öffnen wir im Menü der rechten Seite den Registerreiter „Shared data“ und wählen einen freien Slot aus. Nach einem Doppelklick auf diesen ändert sich der Mauszeiger und wir können den Slot auf unseren gewünschten Ausgang platzieren.

Als Beispiel habe ich meinen PIR-Sensor am Pin 19 als Baustein „Digitaler Eingang“ eingefügt und den Schaltwert auf den Shared-Memory-Slot 0 gelegt. Meldet der PIR-Sensor keine Bewegung, hat der Slot 0 den Wert 0

 

… und wenn der Schalter aktiv ist, also in diesem Beispiel eine Bewegung erkannt wurde, wird der Wert vom Slot 0 auf 1 gesetzt.

 

 

Wenn wir an dieser Stelle nun auf die geteilten Daten des „Shared Memory“ zugreifen wollen, wählen wir wiederum in der PoKeys-Konfiguration den Sensortyp „PoIL shared slot„. Leider weicht die Zählweise von PoBlocks von der in der PoKeys-Konfiguration ab, so dass der „PoBlocks-Shared-Memory-Slot“ 0 dem „PoIl shared slot“ 1 entspricht.

 

 

 

 

Datenübermittlung via UDP in einem zusammengefassten Byte

Nehmen wir mal an, wir verfügen nicht nur über ein PIR-Modul, dessen Status wir übermitteln wollen, sondern über acht. Mit der ersten Methode würden somit sekündlich acht UDP-Pakete über das Netzwerk hin zum Empfänger fliegen. Wenn diese acht Sensoren lediglich digitale Werte (0/1) liefern, können wir diese acht Bit zu einem Byte zusammenfassen und reduzieren den Netzwerkverkehr somit um rund ein Achtel.

Wir schließen, falls noch geöffnet, die PoKeys-Konfigurationssoftware, da immer nur ein Programm zeitgleich auf unser PoKeys-Modul zugreifen darf. Anschließend öffnen wir PoBlocks und warten, bis unser PoKey-Modul in der Liste erscheint. Mit diesem verbinden wir uns.

 

 

Nun fügen wir einen „Bit-to-Byte„-Baustein ein und verbinden die Ausgänge der einzelnen Sensoren oder Schalter mit den Eingängen dieses Bausteins. Sollten Eingänge frei bleiben, weil beispielsweise nur zwei Schaltzustände zusammengefasst werden sollen, kann mit einem rechten Mausklick auf den Eingang des Bausteins ein manueller Wert festgelegt werden, den wir auf 0 belassen.

Den Ausgang des „Bit-to-Byte„-Bausteins wiederum legen wir auf einen freien „Shared-Memory-Slot„, in unserem Beispiel den Slot 0.

 

Wenn das neue Programm automatisch gestartet werden soll, aktivieren wir noch den entsprechenden Haken in der Projektkonfiguration.

 

 

Wir übertragen das neue oder geänderte Programm mit „Check and Transfer“ und starten es mit einem Klick auf „Run„. Mit der Lupe können wir die Werte und Schaltzustände der einzelnen Bausteine live mitverfolgen.

 

 

In der PoKeys-Konfigurationssoftware stellen wir anschließend ein, dass der entsprechende „Shared-Slot“ periodisch via UDP gesendet wird. Waren alle Einstellungen erfolgreich, können wir am Empfänger die eintreffenden Bytes beobachten.

 

Am Empfänger selbst muss das Byte nur noch in acht Bit „zerlegt“ werden und uns stehen die acht ursprünglichen Schaltzustände (Bit) wieder zur Verfügung, hier beispielhaft anhand einer Loxone-Logik mithilfe des dortigen Bausteins „Binärdekoder„.

 

Datenübermittlung via UDP und dem „UDP-Sender“-Baustein in PoBlocks

Seit der neusten Version von PoBlocks steht ein neuer Baustein zur Verfügung, der „UDP-Sender„. Mit diesem Baustein können wir uns den Umweg über die PoKeys-Konfigurationssoftware sparen, um die Daten und Werte via UDP zu versenden. Dazu löschen wir ggf. eine zuvor erstellte Konfiguration in der „Web Interface Konfiguration„, schließen das Programm und wenden uns PoBlocks zu. Nachdem dieses gestartet und mit einem PoKeys-Modul verbunden wurde, fügen wir den neuen Baustein in unser Programm ein. Wir entfernen ggf. die „Shared-Memory-Slots“ von den Ausgängen unserer Ein- und Ausgänge und verbinden unsere bisherigen Ausgänge (von Sensoren oder anderen Bausteinen wie den „Bit-to-Byte„-Baustein) mit den Eingängen des „UDP-Sender„-Bausteins. Auch hier setzen wir freie Eingänge mit einem rechten Mausklick auf 0. An den Eingang „Send“ setzten wir eine „Clock„, die den Takt der Datenübertragung vorgibt. Grundsätzlich sollte hier ein Wert von 1000 ausreichen, welcher einer Sekunde entspricht.

 

In den Eigenschaften des „UDP-Sender„-Bausteins konfigurieren wir die IP-Adresse sowie einen noch nicht verwendeten UDP-Port des Empfängers. Im Feld „Packet contents“ konfigurieren wir das Format der zu übertragenden Daten. Dazu ein paar Beispiele:

In_a=%05a In_b=%05b In_c=%05c In_d=%05d In_e=%05e In_f=%05f
  • Alle sechs Werte (a-f) werden als Ganzzahl (5 Stellen) ohne Komma übertragen.

 

In_a=%02a In_b=%4.2b In_c=%2.1c
  • Der Wert von Eingang „a“ wird als 2 stellige Ganzzahl ohne Komma gesendet
  • der Wert von Eingang „b“ wird als 4 stellige Zahl mit 2 Nachkommastellen gesendet
  • der Wert von Eingang „c“ wird als 2 stellige Zahl mit 1 Nachkommastelle gesendet

 

 

 

Auch hier konnten wir mehrere Werte in einer Meldung zusammenfassen, im Gegensatz zur Methode mit dem „Bit-to-Byte„-Baustein sogar analoge Werte und Dezimalzahlen. Dennoch können wir an dieser Stelle weiter kaskadieren. Als nächsten Schritt fassen wir unsere acht beispielhaften PIR-Sensoren zu einem Byte zusammen und übergeben dieses Byte an einen Eingang eines „UDP-Sender„-Bausteins. Dieser wiederum versendet sechs solcher kaskadierten Konstellation in einem einzigen UDP-Paket an den konfigurierten Empfänger. Die Zerlegung der Informationen in Nutzdaten ist dabei Aufgabe des Empfängers.

 

 

Datenbereitstellung via Modbus-TCP

Um Daten via Modbus-TCP bereitzustellen, öffnen wir in der PoKeys-Konfiguration den Menüpunkt „Gerät“ => „Modbus-Konfiguration„.

 

Dort konfigurieren wir den Port, an welchem PoKeys die Daten bereitstellt. Zudem konfigurieren wir, welche Daten bereitgestellt werden sollen und welche Werte vom Modbus-Server gesetzt werden dürfen. Soll das externe Gerät Schaltzustände der Pins verändern dürfen, ist der eingekreiste Haken zu aktivieren. Zum Verständnis ist es wichtig zu verstehen, dass PoKeys als Modbus-Client agiert und die Instanz, die die Daten „abholt“ als Modbus-Server gilt.

 

 

 

Beim Empfänger konfigurieren wir anschließend die Modbus-TCP Verbindung, hier anhand eines beispielhaften Modbus-Servers gezeigt.

Anschließend konfigurieren wir jeden einzelnen Wert, welchen wir von PoKeys abfragen wollen. Die abzufragende Adresse spielt hierbei eine große Rolle. Die Definition wird in diesem Beitrag erläutert.

 

Endwort

Letztendlich muss jeder für sich entscheiden, welche Methode für seinen Anwendungsfall in Frage kommt. Für zeitkritische Sensoren könnte man beispielsweise ein anderes Sendeintervall konfigurieren als für die übrigen Sensoren. Auch spielt natürlich der Funktionsumfang des Empfängers eine große Rolle. Nicht jedes Gerät spricht Modbus über TCP oder kann etwas mit den eingehenden UDP-Paketen anfangen.

Grundsätzlich sollte man nur beachten, dass sich die Anzahl der UDP-Pakete in einem gesunden Rahmen bewegen und weder die Netzwerkinfrastruktur noch den Empfänger überlasten.