WebTeil Studio Logo
  • Domov
  • Naše projekty
  • Cenník
  • Blog
  • O nás
  • Kontakt

WebTeil Studio

Postaráme sa o softvér, vy sa venujete biznisu.

@webteil.studio

+421 944 102 674

webteil.studio@gmail.com

Navigácia

  • Domov
  • Naše projekty
  • Produkty
  • Cenník
  • Blog
  • O nás
  • Kontakt
  • QR kód generátor

Copyright © 2026 WebTeil Studio

Made with by webteil-studio.sk

Používanie cookie|Ochrana údajov
Späť na články

MQTT s Node.js 20: Začiatočnícky sprievodca vytvorením jednoduchej CLI aplikácie

06.07.2024

Preskúmajte, ako použiť MQTT s Node.js na vytvorenie príkazovej aplikácie pre real‑time messaging v IoT projektoch.

MQTTNode.jsDocker
MQTT s Node.js 20: Začiatočnícky sprievodca vytvorením jednoduchej CLI aplikácie

Predpoklady

  • Node.js: Runtime prostredie potrebné na spúšťanie JavaScriptu na serveri. Stiahnete ho z oficiálnej stránky Node.js.
  • NPM: Balíčkovací manažér pre Node.js, ktorý sa používa na inštaláciu knižníc. Je súčasťou inštalácie Node.js.
  • Docker: Platforma na vývoj, distribúciu a spúšťanie aplikácií v kontajneroch. Docker stiahnete z oficiálnej stránky.
  • Zdrojový kód: Zdrojový kód k tomuto návodu nájdete na GitHube.

Úvod

MQTT je ľahký publish/subscribe messaging protokol. Je navrhnutý tak, aby sa jednoducho používal a mal minimálnu spotrebu zdrojov. Práve táto efektivita prispela k jeho širokému využitiu v IoT (Internet of Things).

Princíp MQTT je jednoduchý. Vystupujú v ňom tri základné roly: broker, publisher a subscriber.

Broker je zodpovedný za sprostredkovanie (distribúciu) dát od publishera k subscriberom.

Publisher posiela aktualizácie brokerovi. Publisherov môže byť veľa a môžu posielať rôzne typy dát.

Subscriber je klient, ktorý chce prijímať hodnoty publikované publisherom cez brokera. Publisher a subscriber o sebe nemusia nič vedieť – sú voči sebe anonymní a priamo spolu nekomunikujú.

Vo všeobecnosti broker prijme správu od publishera a okamžite ju prepošle subscriberom bez ukladania ("forward & forget"). Identifikácia správ prebieha cez odoberanie (subscribe) konkrétneho topicu.

V kontexte MQTT je topic niečo ako adresa alebo URL. Publisher publikuje dáta na konkrétny topic a subscriber sa na tento topic prihlási, aby dostával aktualizácie od brokera vždy, keď sa na ňom objavia nové dáta.

V MQTT je možné nastaviť úrovne QoS (Quality of Service). Publisher môže posielať správy na topic s inou QoS než subscriber odoberajúci ten istý topic. MQTT podporuje viacero úrovní, no vo väčšine prípadov postačí QoS 0, pri ktorom broker doručí správu raz bez potvrdenia.

Príprava MQTT brokera

Najskôr potrebujeme brokera. Mosquitto je open‑source broker, ktorý implementuje MQTT protokol. Je ľahký a vhodný na použitie na rôznych zariadeniach – od low‑power počítačov až po plnohodnotné servery.

Mosquitto sa dá veľmi jednoducho nasadiť pomocou Docker Compose:

services:
  mosquitto:
    image: eclipse-mosquitto:2.0.18
    container_name: mqtt-broker
    restart: always
    volumes:
      - ./mosquitto.conf:/mosquitto/config/mosquitto.conf
    ports:
      - "1883:1883"

V predvolenom nastavení Mosquitto kontajner používa konfiguračný súbor na ceste:

/mosquitto/config/mosquitto.conf

Konfiguračný súbor môžete upraviť priamo v bežiacom Docker kontajneri alebo ho pripojiť (mount) z hostiteľského systému – ako v našom prípade. Pre lokálnu implementáciu zmeníme nasledovné nastavenia:

listener 1883
allow_anonymous true

Implementácia publishera a subscribera v Node.js

Aby sme vedeli s brokerom komunikovať, vytvoríme nový Node.js projekt a nainštalujeme MQTT knižnicu mqtt.

npm init -y  # Automatically agree to default settings
npm install mqtt

Knižnicu použijeme na implementáciu publishera v súbore publisher.js:

const mqtt = require("mqtt");

var client;
const topic = "temperature";
const brokerUrl = `mqtt://127.0.0.1:1883`;

function connectToBroker() {
  client = mqtt.connect(brokerUrl, {
    keepalive: 60,
    clientId: "publisherId",
    protocolId: "MQTT",
    protocolVersion: 4,
    clean: true,
    reconnectPeriod: 1000,
    connectTimeout: 30 * 1000,
  });

  client.on("error", (err) => {
    console.log("Error: ", err);
    client.end();
  });

  client.on("connect", () => {
    console.log("Client connected to broker");
  });
}

function publishMessage() {
  //  Publish a message every 3 seconds
  setInterval(() => {
    const temperature = (Math.random() * 100).toFixed(2);
    client.publish(topic, temperature.toString());
    console.log();
  }, );
}

();

();

Po spustení vyššie uvedeného kódu bude publisher každé 3 sekundy v cykle publikovať náhodné číslo na topic temperature.

Na implementáciu subscribera použijeme rovnakú knižnicu a vytvoríme nový súbor subscriber.js:

const mqtt = require("mqtt");

var client;
const topic = "temperature";
const brokerUrl = `mqtt://127.0.0.1:1883`;
const clientOptions = {
  keepalive: 60,
  clientId: "subscriberUniqueClientId",
  protocolId: "MQTT",
  protocolVersion: 4,
  clean: true,
  reconnectPeriod: 1000,
  connectTimeout: 30 * 1000,
}; // Client options for connecting to the broker

function connectToBroker() {
  client = mqtt.connect(brokerUrl, clientOptions);

  client.on("error", (err) => {
    console.log("Error: ", err);
    client.end();
  });

  client.on("connect", () => {
    console.log("Client connected to broker");
  });
}

function subscribeToTopic() {
  client.subscribe(topic, (err) => {
    if (!err) {
      // Subscribe to the topic
      client.on("message", (topic, message) => {
        //  Message is of type Buffer and needs to be converted into a string
        .(
          
        );
      });
    }  {
      .();
    }
  });
}

();

();

Po spustení vyššie uvedeného kódu sa subscriber prihlási na topic temperature a pri každej aktualizácii vypíše aktuálnu hodnotu do konzoly.

Záver

MQTT je kľúčový protokol v IoT ekosystéme, ktorý umožňuje ľahkú a efektívnu publish/subscribe komunikáciu medzi zariadeniami. V tomto návode sme si prešli základné koncepty MQTT, ukázali sme si nastavenie Mosquitto brokera a implementovali jednoduchého publishera a subscribera v Node.js. Jednoduchá integrácia MQTT s Node.js z neho robí výbornú voľbu pre vývojárov, ktorí chcú posunúť svoje IoT riešenia ďalej.

Ak vám tento návod pomohol, zvážte jeho zdieľanie s ďalšími, ktorým by sa mohol hodiť. Spätná väzba a návrhy na zlepšenie sú vždy vítané – pokojne zanechajte komentár alebo napíšte, čo si o tom myslíte.

Späť na články
`Sent temperature: ${temperature} on topic: ${topic}`
3000
connectToBroker
publishMessage
console
log
`Received message: ${message.toString()} from topic: ${topic}`
else
console
log
`Error subscribing to topic: ${topic}`
connectToBroker
subscribeToTopic