Table of Contents

Glomus MQTT integration

Plan

Platforms for tests

Kilo

https://app.kiloiot.io

User: kalaschnikow@mail.ru

Pass: kiloYA…“6

OpenRemote

OpenRemote

https://docs.openremote.io/docs/user-guide/domains/fleet-management/

Thinger.io

https://docs.thinger.io/mqtt

ThingsBoard

https://demo.thingsboard.io

User: blubbsik@gmx.de

Pass: thingsYA…

A small “How To” by RouterOS: https://help.mikrotik.com/docs/spaces/ROS/pages/166920428/GPS-tracking+using+MQTT+and+ThingsBoard

Clients for tests

Certificates / SSL etc

Certificates are in /mnt/sda4/development/_projects/fleet-management/

A forum post (with example code?) that seems to be interesting: https://community.hivemq.com/t/hivemq-client-mtls-is-failing/1548/2

Example code from google:

import com.hivemq.client.mqtt.MqttClient;
import com.hivemq.client.mqtt.mqtt5.Mqtt5BlockingClient;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.KeyStore;

public class MqttSslExample {

    public static void main(String[] args) {
        try {
            // 1. Pfade und Passwörter definieren
            String truststorePath = "pfad/zu/client-truststore.jks";
            String truststorePassword = "truststore_passwort";

            String keystorePath = "pfad/zu/client-keystore.p12"; // Oft PKCS12 (.p12/.pfx)
            String keystorePassword = "keystore_passwort";

            // 2. TrustManagerFactory initialisieren (Zertifikat des Brokers validieren)
            KeyStore trustStore = KeyStore.getInstance("JKS"); // oder "PKCS12"
            try (InputStream tsIn = new FileInputStream(truststorePath)) {
                trustStore.load(tsIn, truststorePassword.toCharArray());
            }
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(trustStore);

            // 3. KeyManagerFactory initialisieren (Eigenes Client-Zertifikat für mTLS - Optional)
            KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
            try (InputStream ksIn = new FileInputStream(keystorePath)) {
                keyStore.load(ksIn, keystorePassword.toCharArray());
            }
            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            keyManagerFactory.init(keyStore, keystorePassword.toCharArray());

            // 4. HiveMQ MQTT Client mit SSL-Konfiguration bauen
            Mqtt5BlockingClient client = MqttClient.builder()
                    .useMqttVersion5()
                    .serverHost("ihr-secure-broker.de")
                    .serverPort(8883)
                    .sslConfig()
                        .trustManagerFactory(trustManagerFactory) // Broker-Zertifikat prüfen
                        .keyManagerFactory(keyManagerFactory)     // Client-Zertifikat mitsenden (mTLS)
                    .applySslConfig()
                    .buildBlocking();

            // Client verbinden
            client.connect();
            System.out.println("Erfolgreich über TLS verbunden!");
            
            client.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Also interesting :

MQTT

MQTT Libraries

Android GPS Tracking Apps with MQTT support