Unser Funkmodul für Messuhren und andere Handmessmittel wie Bügelmessschraube oder Messschieber kann mit dem Funkmodul M8 für Verbindungen über WebSockets verwendet werden.

Dieses Praxisbeispiel soll zeigen, wie eine WebSocket-Verbindung zum Messgerät hergestellt werden kann.

Das Beispiel besteht aus einer einfachen Webseite / Webanwendung in HTML und Javascript. Über diese einfachen Techniken ist es möglich, direkt auf das Funkmodul zuzugreifen und den aktuellen Messwert sowie Statusinformationen aus der Funk-Messuhr auszulesen. Dies ist im Vergleich zu MQTT ohne zusätzliche Infrastruktur eines Brokers möglich und somit vor allem für kleine, lokale Anwendungen eventuell einfacher umzusetzen als eine MQTT Abfrage.

Web-Oberfläche der Beispielanwendung

Der Quelltext der einfachen Anwendung:

<!DOCTYPE HTML>
<html>
<head>
  <meta name="websocket_test">
  <meta charset="UTF-8"/>
  <style>button{width:140px;height:50px}body{background: #f48f0d;}</style>
  <style>table, th, td { border-collapse: collapse;}</style>
<title>websocket to iot test</title>
</head>
<body style="font-family: arial, sans-serif;">
    <div style="width:500px;border:1px solid black;align:left">
        <form onsubmit="return false">
            Client name (informal): <input type="text" id="txtName" value="Client_1"><br>
            Server: <input type="text" id="txtServer" value="192.168.1.119">
        </form>
        <form onsubmit="return false">
            <button type="submit" id="btnConnect">Connect to IoT device</button>
            <input type="checkbox" id="cbxSsl" name="ssl" checked>
            <label for="cbxSsl">SSL</label>
            <input type="checkbox" id="cbxRaw" name="raw" checked>
            <label for="cbxRaw">Raw</label>
        </form>
        <form onsubmit="return false">
            <button type="submit" id="btnConfigSet" disabled>Set configuration</button>
        </form>
        <form onsubmit="return false">
        <table>
        <tr><td>
            <button type="submit" id="btnRequestMeas" disabled>Request measurements</button>
            </td><td>
            Repeat count:<input style="width:80px;" size="3" type="number" id="txtRepCnt" value="3"><br>
            Interval:<input style="width:80px;" size="6" type="number" id="txtRepMs" value="200">
            </td>
        </tr></table>
        </form>
        <form onsubmit="return false">
            <button type="submit" id="btnRequestMeta" disabled>Request device info</button>
        </form>
        <!-- output form -->
        <form onsubmit="return false">
            <div style="overflow:scroll;height:400px;word-break:break-all" id="divOut">Not connected...</div>
        </form>
        <!-- clear -->
        <form onsubmit="return false">
            <button type="submit" id="btnClear">Clear</button>
        </form>
    </div>
    <script type="text/javascript">
        const elem = id => document.getElementById(id);
        const txtName = elem("txtName");
        const txtServer = elem("txtServer");
        const txtRepCnt = elem("txtRepCnt");
        const txtRepMs = elem("txtRepMs");
        const btnConnect = elem("btnConnect");
        const cbxSsl = elem("cbxSsl");
        const cbxRaw = elem("cbxRaw");
        const btnConfigSet = elem("btnConfigSet");
        const btnRequestMeas = elem("btnRequestMeas");
        const btnRequestMeta = elem("btnRequestMeta");
        const btnClear = elem("btnClear");
        const divOut = elem("divOut");

        class Mdevice {
            constructor() {
                this.connecting = false;
                this.connected = false;
                this.name = "";
                this.ws = null;
            }
            connect() {
                if (this.ws === null) {
                    this.connecting = true;
                    txtName.disabled = true;
                    this.name = txtName.value;
                    btnConnect.innerHTML = "Connecting...<br>"+txtServer.value+"<br>ssl "+
                      cbxSsl.value+": "+(cbxSsl.checked?"on":"off");
                    this.ws = new WebSocket("ws"+(cbxSsl.checked?"s":"")+"://"+txtServer.value+"/"+(cbxRaw.checked?"raw1":"dev1"));
//                    this.ws = new WebSocket("wss://192.168.1.119/dev1");
                    this.ws.onopen = e => {
                        this.connecting = false;
                        this.connected = true;
                        divOut.innerHTML += "<br><p>Connected.</p>";
                        btnConnect.innerHTML = "Disconnect";
                        btnConfigSet.disabled=false;
                        btnRequestMeas.disabled=false;
                        btnRequestMeta.disabled=false;
                        // optional: send something through the websocket 
                        // this.ws.send(this.name + " connected!");
                    };
                    this.ws.onmessage = e => {
                        divOut.innerHTML+="<p>"+e.data+"</p>";
                        divOut.scrollTo(0,divOut.scrollHeight);
                    }
                    this.ws.onclose = e => {
                        this.disconnect();
                    }
                }
            }
            disconnect() {
                if (this.ws !== null) {
                    // optional: send something through the websocket 
                    // this.ws.send(this.name + " disconnect!");
                    this.ws.close();
                    this.ws = null;
                }
                if (this.connected) {
                    this.connected = false;
                    btnConfigSet.disabled=true;
                    btnRequestMeas.disabled=true;
                    btnRequestMeta.disabled=true;
                    txtName.disabled = false;
                    divOut.innerHTML+="<p>Disconnected.</p>";
                    btnConnect.innerHTML = "Connect";
                }
            }
            sendMessage(msg) {
                if (this.ws !== null) {
                    this.ws.send(msg);
                }
            }
        };
        let mdevice = new Mdevice();
        btnClear.onclick = () => {
            divOut.innerHTML ="";
        }
        btnConnect.onclick = () => {
            if (mdevice.connected) {
                mdevice.disconnect();
            } else if (!mdevice.connected && !mdevice.connecting) {
                mdevice.connect();
            }
        }
        btnConfigSet.onclick = () => {
            mdevice.sendMessage("{\"cmd\":\"config\",\"sleep_sec\":13698,\"display_text\":\"MESSAGE\"}");
            divOut.focus();
        }
        btnRequestMeas.onclick = () => {
            if (cbxRaw.checked) {
               mdevice.sendMessage("meas"); // -- opt: csv instead json
            } else {
              mdevice.sendMessage("{\"client\":\""+this.name+"\",\"cmd\":\"meas\",\"rep_cnt\":"+
                txtRepCnt.value+",\"rep_ms\":"+txtRepMs.value+"}");
            }
            divOut.focus();
        }
        btnRequestMeta.onclick = () => {
            // mdevice.sendMessage("1|info|*");
            mdevice.sendMessage("{\"client\":\""+this.name+"\",\"cmd\":\"info\"}");
            divOut.focus();
        }
    </script>
</body>
</html>

Der Quellcode dieses Programmbeispiels kann hier heruntergeladen werden.

Unsere Messablauf Software Newim dient zur Verwaltung von Prüfplänen und zum Abarbeiten von Messabläufen in einer Industrie 4.0 Infrastruktur. Die Messmittel können über Module angebunden werden. Werte noch nicht digitalisierter Messmittel können als Handeingabe hinzugefügt werden.

Die Software richtet sich an professionelle Benutzer.

Features

  • Skalierbare Mehrbenutzer Anwendung in einer Client-/Server Architektur.
  • Serverseitige Cloud-Option.
  • MQTT Client zur Ankopplung an MQTT fähige Messgeräte.
  • REST Client zur Automatisierung über ein MES System.
  • Datenhaltung in einer SQL Datenbank.
  • Rich Client auf Windows Betriebssystem.
  • Prüfplanverwaltung mit Import-/Export zu QStat/QDas.
  • Visuelle Prüfablaufmodellierung.
  • Werkerführung zur Prüfplan-Abarbeitung.
  • Stammdatenverwaltung aller relevanter Stammdaten.
  • Schnittstelle zu SAP Stücklisten.
  • Internationalisierte Oberfläche für unterschiedliche Landessprachen und Zahlenformaten.
  • Optionale Versionierung von Prüfplänen.
Beispiel einer visuellen Modellierung eines Prüfablaufs

Die Software mqtt2file ist die Basissoftware zum Betrieb unserer Funkmodule.

Die Software soll 2 Aufgaben erfüllen:

  • Das MQTT Funkmodul bei der ersten Inbetriebnahme zu konfigurieren.
  • Messwerte welche über das WLAN Funkmodul gesendet wurden anzuzeigen und bei Bedarf in eine Datei zu schreiben.

Diese beiden Aufgaben decken den Mindestbedarf an Software ab, um mit einem MQTT Modul zu arbeiten.

Die beiden Aufgaben sind prinzipiell unabhängig. Da MQTT Funkmodule oft in einer übergeordneten und externen MQTT Infrastruktur betrieben werden, wird die Software häufig nur dazu verwendet um die MQTT Module zu konfigurieren und Tests für den Datenempfang mit den Modulen durchzuführen.

Die Software ist kostenlos und lauffähig unter MS Windows und Android. Das Installationspaket bzw. die ausführbare Datei kann auf unserer Service/Downloadseite heruntergeladen werden.

Nach dem Start der Sofware wird die Hauptauswahl zur Konfiguration angezeigt.

Wenn beim Start der Anwendung bereits eine gültige Konfiguration gefunden wird, wird nach einer kurzen Pause direkt in den Mess-Modus geschaltet. Ist noch kein Modul konfiguriert bleibt der Startbildschirm stehen. Die einzelnen Menüpunkt zeigen durch einen grünen Haken dass dieser Punkt bereits konfiguriert und betriebsbereit ist.

Durch Klick auf ein Menüpunkt wird dieser Bereich geöffnet und die darunter enthaltenen Einstellungspunkte werden sichtbar.

Der Menüpunkt „MQTT“

Im Menüpunkt MQTT kann die Verbindung zu einem MQTT Broker eingestellt werden. MQTT kommuniziert über das Internet. Entsprechend wird unter „Server“ die IP Adresse des MQTT Servers eingetragen. Der verwendete Port ist normalerweise 1883. Optional können zur Absicherung der Verbindung die im MQTT Broker vergebenen Zugangsdaten (Benutzername und Passwort) eingegeben werden. In optionalen Firmware-Varianten ist eine zusätzliche Absicherung durch SSL möglich.

Basis Topic definiert den Basis-MQTT-Topic welcher für die Erfassung von Messwerten verwendet wird. Dies ist normalerweise der Topic einer zuvor konfigurierten Messuhr oder anderen IoT-Device.

Der Abschnitt „Messuhr Einrichten“

Eine fabrikneue Messuhr oder anderes MQTT-Funkmodul muss vor der ersten Verwendung dahingehend konfiguriert werden, dass es sich mit einem vorhandenen WLAN Netzwerk und einem vorhandenen MQTT Broker verbinden kann.

Ist diese Verbindung einmal hergestellt, kann jeder Client in dieser MQTT Infrastruktur – auch gleichzeitig – auf die Ergebnisse und Messwerte des Messgerätes zugreifen.

Ebenso über MQTT werden Konfigurationsparameter wie Standby-Zeit oder die Warnmeldung bei niedrigem Batteriestand eingestellt.

Das Handbuch zum Betrieb und zur Konfiguration der MQTT Funkmodule kann hier als PDF Datei heruntergeladen werden.

Problemlösungen

Android: WLAN Verbindung mit dem Modul kann nicht hergestellt werden

Problem: Ein rAAAreware MQTT Modul soll mit dem Programm mqtt2file neu konfiguriert werden. Das Modul wurde bereits in den Konfigurationsmodus versetzt und öffnet nach dem Einschalten einen Access-Point.
Im Programm mqtt2file erscheint die SSID des Netzwerkes nicht in der Liste der erkannten zu konfigurierenden Devices. In der Statusleiste des Smartphones erscheint eine Meldung „Android-System:“ „In WLAN-Netzwerk anmelden“, gefolgt von der SSID der Device zu der verbunden werden soll.

Situation: Das Android Betriebssystem ist schon mit dem WLAN Netzwerk des IoT Device verbunden, jedoch kann das Programm mqtt2file das verbundene Netzwerk nicht abrufen. Damit das Programm die Netzwerke abrufen kann müssen dem Programm die notwendigen Rechte gegeben werden.

Lösung: Gehen Sie im Android System zu „Einstellungen“ > „Apps“ > „mqtt2file“ > „Berechtigungen“. Die vom System gewährten und verweigerten Funktionen werden in einer Liste angezeigt. Erscheinen in der Liste „Zugriff abgelehnt“ Einträge: Tippen Sie auf diese Einträge und wählen Sie für den Eintrag „Immer zulassen“.

Starten Sie das Programm mqtt2file neu. Das verbundene Netzwerk sollte nun in der Konfiguration angezeigt werden, so dass die neue Konfiguration zur Device gesendet werden kann.

Android Installation

Detailinformationen zur Installation auf Android Systemen finden Sie hier.

Einleitung

Das Programm mqtt2key (für „MQTT to Keyboard“ oder „MQTT zu Tastatur“) dient zur Datenübertragung von MQTT Messwerten in eine beliebige Anwendung.
Werte, welche über MQTT empfangen werden können damit direkt über die Tastaturschnittstelle an ein beliebiges Programm weitergegeben werden. Damit eignet sich das Programm zur Übertragung von Messwerten oder Eingabedaten an praktisch jede Anwendung zur Messdatenverarbeitung.

In IIoT Anwendungen, also industriellen Anwendungen für IoT, wird bevorzugt das MQTT Protokoll eingesetzt. Normalerweise „sprechen“ dann alle verbundenen Programme MQTT. Die Werte können von jedem Programm direkt und einfach verarbeitet werden.

Es sind verschiedene Szenarien denkbar und in unserer Erfahrung schon aufgetreten, in welchen ein Programm MQTT Messwerte verarbeiten soll, jedoch nicht direkt auf einen MQTT Server zugreifen kann.

MS Excel

In sehr einfachen Szenarien kann es sein, dass der Messwert nur in einem Tabellenkalkulationsprogramm wie LibreOffice oder Excel gespeichert werden soll. Zwar wäre es prinzipiell sicherlich möglich, auch hier eine MQTT Ankopplung zu realisieren – ein sehr einfacher Weg ist es jedoch, einfach die Werte direkt in eine Tabellenzelle einzutragen.
Der Vorteil gegenüber einer manuellen Eingabe liegt auf der Hand: Durch die automatisierte Übertragung ist sichergestellt, dass der Wert auch korrekt übernommen wurde. Die Prozesssicherheit und Qualität der Messwerte steigt, da ein Ablesefehler oder Eintragefehler (z.B. Zahlendreher) sicher vermieden wird.

Ein weiterer Vorteil ist, dass die Übertragung deutlich schneller geht, als den Wert manuell abzulesen und einzutippen.

WEB Anwendungen

Eine weitere Anwendung ist die Verarbeitung der Daten durch ein Programm welches in einem Web-Browser betrieben wird.

Zwar kann ein Web-Browser einfach und direkt über eine Ajax-Web-Schnittstelle auf einen MQTT Broker zugreifen, jedoch ist es nicht immer möglich, das verwendete Programm dahingehend zu erweitern oder zu verändern, dass die Messwerte direkt eingetragen werden.

Auch hier kann über das einschleusen der MQTT Werte in die Tastaturschnittstelle einfach eine automatische Übernahme der Messwerte umgesetzt werden.

Sonstige Anwendungsbereiche

Weitere Anwendungsfälle sind unendlich verfügbar. Jedes Programm, egal ob Konsolenprogramm, Browserprogramm oder Windows-Programm, welches Tastatureingaben entgegennimmt kann mit dem MQTT Hilfsprogramm mqtt2file als Empfänger von MQTT Messwerten verwendet werden.

Die weitere Verwendung von MQTT ist hierbei nicht relevant. Es ist gut vorstellbar, über das Programm schlicht und einfach eine Messuhr, ein Messschieber oder eine Bügelmessschraube per WLAN drahtlos mit dem Computer zu verbinden um die Werte dann direkt in einem beliebigen Programm weiter zu verarbeiten.

Das Programm ist vorkonfiguriert um MQTT Messwerte unserer WLAN Funkmodule zu empfangen und als Tastenfolge weiterzugeben. Kontaktieren Sie uns wenn Sie andere MQTT Werte verarbeiten möchten: Durch entsprechende Anpassungen kann das Programm auf beliebige MQTT Botschaften konfiguriert werden.

Funktionsweise

Das Programm läuft normalerweise im Hintergrund. Es verbindet sich mit dem konfigurierten MQTT Broker und nimmt die Messwerte des konfigurierten Messmittels entgegen. Diese Werte werden dann direkt an die Tastaturschnittstelle weitergegeben.

Optional kann ein systemweiter Hotkey oder Shortcut („Direkttaste“) definiert werden: Über diesen lässt sich dann eine Messung oder ein Messwert direkt vom PC aus über MQTT anfordern.

Konfiguration

Das Programm muss nicht installiert werden. Es wird einfach an einem beliebigen Ort auf der Festplatte (oder auch einem USB-Stick) abgelegt und kann direkt ausgeführt werden.

Der Hauptbildschirm der Anwendung

Nach dem Start des Programms erscheint der Hauptbildschirm der Anwendung.

Die Einstellungen sind selbsterklärend und werden beim Beenden des Programms gespeichert.

Die Messwerte werden wie von z.B. der Messuhr geliefert weitergegeben. Z.B. „-12.34“. Wenn ein Programm die Werte in einer anderen numerischen Notation erwartet kann der Wert in die Notation des Landes anpassen, auf welchem das Programm aktuell ausgeführt wird. Auf einem Computer mit deutschem Gebietsschema würde dann z.B. „-12,34“ an die Tasttatur ausgegeben werden.

Beim schließen des Programms wird das Programm lediglich in die TNA (Taskbar Notification Area) minimiert. Dort ist es dann weiter als kleines Symbol sichtbar und läuft im Hintergrund.

Wenn ein Messwert übertragen wird blinkt dieses Symbol kurz auf.

Durch klick auf das Symbol wird der Hauptbildschirm wieder dargestellt.

Durch klick mit der rechten Maustaste kann das Programm endgültig geschlossen werden.

Auf der 2. Registerseite der Anwendung sind Details zu MQTT zu sehen.

Die Einstellungen des Programms werden in der Datei
C:\Users\Public\Documents\rAAAreware\mqtt2key\mqtt2key.ini
gespeichert und können auch direkt mit einem Texteditor geändert werden.

Download und Installation

Das Programm ist Freeware und kann kostenlos hier heruntergeladen werden. Das Programm sollte auf jedem neueren Windows Rechner problemlos laufen. Wir übernehmen hierbei keine Garantie für die Funktion – siehe auch unten unter „Rechtliches“. Das Programm muss nicht installiert werden. Entpacken Sie die Dateien einfach in ein beliebiges Verzeichnis. Zum Starten rufen Sie das Programm „mqtt2key.exe“ auf.

Versionshistorie / Changelog

V1001
Bugfix für „Disconnected. Unexpectedly.“: Bei mehreren Instanzen der Software kann es vorkommen, dass der MQTT Broker dieselbe ClientID erneut registriert und den ursprünglichen Client entfernt. Durch eine bessere Vergabe der ClientID wird dieses Problem behoben.

V1000 Initiale Version.

Rechtliches

© rAAAreware GmbH

Diese Software wird zur Verfügung gestellt, so wie sie ist, ohne ausdrückliche oder implizite Garantie.
Keinesfalls ist der Autor verantwortlich für etwaigen Schaden, der durch die Verwendung dieser Software auftritt.

Es wird allen Nutzern des Programms bewilligt, diese Software für jeden möglichen Zweck einzusetzen, kommerzielle Nutzung inbegriffen, solange folgende Bedingungen erfüllt werden:

  1. Jegliche Weitergabe des Pakets muss alle Angaben obiger Copyright Nennung und die Webadresse beinhalten.
  2. Die Herkunft der Software darf nicht falsch dargestellt werden, es darf also nicht fälschlicherweise behauptet werden, der Autor dieser Software zu sein.
  3. Veränderte Versionen müssen als solche deklariert und nicht als Originalsoftware dargestellt werden.
  4. Jegliche Weitergabe des Pakets hat unentgeltlich zu erfolgen. Eine kommerzielle Weitergabe ist nicht ausgeschlossen, bedarf jedoch einer Rückfrage bei uns.