MxMessageSystem SDK v1.1

Als Beispiel für die Verwendung des MxMessageSystem SDK wurde ein kleines Beispielprogramm entwickelt, welches als Quellcode mitgeliefert wird. Mit diesem ist es möglich, MxMessage-Nachrichten zu versenden und zu empfangen. Diese README-Datei dient als Anleitung für das Kompilieren und Verwenden des Beispielprogramms.

Beispielprogramm kompilieren

Das MxMessageSystem SDK kann unter Windows, Linux x86_64 und OS X kompiliert und verwendet werden.

Kompilieren unter Ubuntu 16.4 Linux x86_64

Unter Ubuntu 16.4 Linux x86_64 sollten Sie folgende Pakete installieren:

sudo apt-get install build-essential openssl libssl-dev cmake

Stellen Sie sicher, dass die Versionen der Programme aktuell sind:

Das Programm sdk-demo wird wie folgt kompiliert:

cmake .
make

Kompilieren unter OS X

Verwenden Sie OS X 10.9 oder höher.

Das Programm sdk-demo wird wie folgt kompiliert:

cmake .
make

Es ist auch möglich, ein Xcode-Projekt zu generieren:

cmake -G Xcode .

Kompilieren unter Windows (Visual Studio 2015)

Stellen Sie sicher, dass die aktuellen Versionen der folgenden Programme installiert sind:

Das Programm sdk-demo wird wie folgt kompiliert:

cmake -G "Visual Studio 14 2015"
cmake --build . --target ALL_BUILD --config Release

Konfiguration

Das MxMessageSystem SDK hat zwei Konfigurationen, die in unserem Beispiel durch jeweils eine JSON-Datei gesteuert werden:

  1. system_config.json
  2. user_config.json

Wichtige Voraussetzungen

  1. Die Systeme müssen sich im selben Subnetz befinden. Zu Debug-Zwecken muss die Kamera auf eine statische IP-Adresse konfiguriert werden.
  2. Port und Passphrase müssen den Werten der Benutzerkonfiguration entsprechen (siehe auch broadcast.port und broadcast.passphrase unter "Benutzerkonfiguration").
  3. Die Zeit der Kamera und des Computers müssen übereinstimmen. Hier sollte für beide Systeme derselbe NTP-Server verwendet werden (siehe auch broadcast.max_time_offset unter "Benutzerkonfiguration").

1. Systemkonfiguration

Diese Konfiguration ändert sich nicht zur Laufzeit des Prozesses. Sie dient zur statischen Anpassung an unterschiedliche Plattformen. Die Systemkonfiguration des Beispielprogramms befindet sich in der Datei system_config.json.

Optionen

  1. log_list_max (Integer, optional) Max. Anzahl der Einträge in der Statusausgabe ("Publication") des Distributors.

  2. broadcast.interfaces (Array of Strings, erforderlich) Enthält die Ethernet-Schnittstellen, auf denen nach einer verwendbaren Broadcast-Adresse gesucht werden soll. Diese Schnittstellen werden in der angegebenen Reihenfolge gesucht. Die erste gefundene IPv4 Broadcast-Adresse wird verwendet. Diese Liste gibt quasi die Standardwerte für die Benutzerkonfiguration vor.

Beispiel

{
    "broadcast" : {
        "interfaces" : [
            "eth1:0",
            "eth1",
            "eth0",
            "en0"
        ]
    }
}

2. Benutzerkonfiguration

Diese Konfiguration kann zur Laufzeit des Prozesses durch den Benutzer geändert werden. Es ist in diesem Fall die Funktion DistributorBroadcastCore::init() mit der neuen Konfiguration aufzurufen. Geht bei der (Re-) Initialisierung etwas schief (es wird z. B. keine IPv4 Broadcast-Adresse gefunden) liefert die Funktion den Booleschen Wert false zurück. Der Distributor ist dann inaktiv. Die Benutzerkonfiguration des Beispielprogramms befindet sich in der Datei user_config.json.

Optionen

  1. broadcast.iface (String, optional) Name der Schnittstelle, dessen IPv4 Broadcast-Adresse verwendet werden soll.
  2. broadcast.max_time_offset (Integer, optional) Max. Differenz der Paket-Zeitstempel. Bei zu großer Differenz der Zeitstempel zur lokalen Systemzeit werden die Pakete verworfen.
  3. broadcast.passphrase (String, optional) Aus dieser Phrase wird der AES-Schlüssel erzeugt. Ist die Option nicht vorhanden oder ein leerer String eingetragen, wird die Verschlüsselung abgeschaltet! Ohne Verschlüsselung sollte nur zu Debug-Zwecken gearbeitet werden!
  4. broadcast.poll_freq (Integer, optional) Anzahl der gesendeten/empfangenen Pakete pro Sekunde. Der Wert 0 verwendet eine Abruffrequenz von 0,1 Hz. Dieser Wert ist nur zu Debug-Zwecken zu verwenden!
  5. broadcast.port (Integer, optional) Zu verwendender UDP Port.
  6. broadcast.resend (Integer, optional) Anzahl der Sendevorgänge für eine MxMessage-Nachricht.

Beispiel

{
    "broadcast" : {
        "max_time_offset" : 666,
        "passphrase" : "DiesIstMeineSpeziellePassPhrase",
        "poll_freq" : 6,
        "port" : 33566,
        "resend" : 6
    }
}

Das Beispielprogramm verwenden

Das Programm wird normalerweise folgendermaßen gestartet:

./sdk-demo -s system_config.json -u user_config.json

Parameter

  1. -d 1: Setzt den Debug-Level zwischen 0..3.
  2. -s system_config.json: Legt die JSON-Datei der Systemkonfiguration fest.
  3. -u user_config.json: Legt die JSON-Datei der Benutzerkonfiguration fest.
  4. -v: Verbose-Modus; das Beispielprogramm gibt Statusinformationen auf der Konsole aus.

MxMessage-Nachrichten senden und empfangen

Sobald das Programm ausgeführt wird, werden empfangene MxMessage-Nachrichten in folgender Form angezeigt:

messages.global.Input1=true

Nachrichten können vom Programm gesendet werden, indem z. B. zuerst der Pfad der Nachricht und danach dessen Wert angegeben wird.

Beispiel:

Enter path or '!' to exit or '?' to get statistics: messages.global.Input1
Enter value or '!' to exit or '?' to get statistics: true

Die Ausgabe zeigt dann Folgendes:

path=messages.global.Input1
value=true

Die Eingabe eines Fragezeichens gibt Statistikinformationen aus:

put_publication = {
    "peers" :
    [
        {
            "IP" : "10.12.226.182",
            "PID" : 768,
            "msg_rx" : 2,
            "msg_rx_dup" : 4,
            "msg_rx_err" : 0,
            "msg_rx_resend" : 0,
            "pkt_rx" : 4,
            "pkt_rx_err" : 0
        }
    ],
    "self" :
    {
        "IP" : "10.3.0.1",
        "PID" : 9710
    },
    "summary" :
    {
        "msg_rx" : 2,
        "msg_rx_dup" : 4,
        "msg_rx_err" : 0,
        "msg_rx_resend" : 0,
        "msg_tx" : 0,
        "pkt_rx" : 4,
        "pkt_rx_err" : 0,
        "pkt_tx" : 0,
        "pkt_tx_err" : 0
    }
}

Die Eingabe eines Ausrufezeichens beendet das Programm.

Testsystem

Für den Anfang ist zu empfehlen, ein lokales Testsystem aufzubauen. Sollte dies fehlerfrei funktionieren, kann eine Kamera hinzugefügt werden. Danach können MxBus-Module eingebunden werden.

Lokales Testsystem aufbauen

Um das MxMessageSystem auf einem Computer zu testen, kann das Beispielprogramm zweimal gestartet werden.

./sdk-demo -s system_config.json -u user_config.json

Danach einfach eine MxMessage-Nachricht verschicken:

Enter path or '!' to exit or '?' to get statistics: messages.global.Input1
Enter value or '!' to exit or '?' to get statistics: true

... und die Ausgabe des anderen Programms beobachten.

messages.global.Input1=true

Testsystem mit einer Kamera aufbauen

Um ein Testsystem mit einer MOBOTIX-Kamera aufzubauen, sollte das Dokument "Technical Note: MxMessageSystem" unter "https://www.mobotix.com/ger_DE/Support/MX-Mediathek/Wissen-kompakt" durchgearbeitet werden. Dort wird beschrieben, wie die Kamera konfiguriert werden muss, um MxMessage-Nachrichten zu empfangen und zu senden. Das Dokument enthält auch eine Einführung zu den MxBus-Modulen.