MQTT-Daten werden über WebSocket in eine HTML-Seite eingebunden. WebSocket ist ein Netzwerkprotokoll für eine Full-Duplex-Kommunikation über eine einzige TCP-Verbindung.
Mit Websocket können MQTT-Daten in Echtzeit auf einer Webseite angezeigt werden.
let onConnect = () => { console.log("connected!"); //Abbonieren mqtt.subscribe("klasse/messwerte/#"); }; //Verbindungsdaten //console.log("hello world"); let host = "broker.hivemq.com"; let port = 8000; let mqtt = new Paho.MQTT.Client(host, port, "clientjs"); let options = { timeout: 3, onSuccess: onConnect }; //Senden mit Button let button = document.querySelector(".btn-websocket"); button.onclick = () => { let jsonMessage = { temperatur: 23.2, luftfeuchte: 29.4 } let message = new Paho.MQTT.Message(JSON.stringify(jsonMessage)); message.destinationName = "klasse/messwerte/myname"; mqtt.send(message); }; //Empfangen mqtt.onMessageArrived = (msg) => { console.log(msg.destinationName); console.log(msg.payloadString); writeTableRow(msg.payloadString); }; //write payload in table let writeTableRow = (payloadString) => { console.log(payloadString); let payload = JSON.parse(payloadString); let table = document.querySelector(".table-websocket tbody"); let tr = document.createElement("tr"); let temperature = document.createElement("td"); temperature.textContent = payload.temperatur; console.log(temperature); tr.appendChild(temperature); let humidity = document.createElement("td"); humidity.textContent = payload.luftfeuchte; tr.appendChild(humidity); table.appendChild(tr); }; //Verbindungsaufbau mqtt.connect(options);
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> </head> <body> <div class="py-5" style="background-color: #E1E1E1; color:#000000;"> <div class="container"> <button type="button" class="btn btn-primary btn-websocket">Primary</button> </div> </div> <div class="py-5" style="background-color: #FFFFFF; color: black;"> <div class="container"> <table class="table table-striped table-websocket"> <tr> <td>Temperatur in °C</td> <td>Luftfeuchte in %</td> </tr> </table> </div> </div> <!--websocket js--> <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script> <script src="websocket.js"></script> <!-- Option 1: Bootstrap Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> </body> </html>