MQTT

V Mervis IDE je protokol MQTT technicky implementován jako klientský driver. Protože však Mervis RT dokáže data jak publikovat (poskytovat), tak i odebírat (přijímat), funguje efektivně oběma směry. Do sekce serverových protokolů je zařazen proto, že prostřednictvím centrálního Brokeru funguje jako poskytovatel dat pro ostatní systémy.

Data jsou organizována pomocí „Topics“, což jsou hierarchické struktury fungující jako cesty, kam jsou data publikována. Například základní složka může být building/hvac, se podsložkami jako building/hvac/temp.

(Poznámka k organizaci: Mervis podporuje Prototypy, které pomáhají systematicky organizovat pojmenování v rozsáhlých projektech. Nebudeme se jim zde detailně věnovat, ale jejich použití je velmi doporučeno pro udržení přehlednosti proměnných.)

Nejprve je potřeba vytvořit komunikační spojení mezi vaším Mervis zařízením a MQTT brokerem.

Nastavení TCP a MQTT parametrů zařízení

  • Pro testování: Můžete použít veřejný broker jako broker.emqx.io na portu 1883. Pozor: Toto je pouze pro testování a nikdy by nemělo být použito pro produkční data.
  • Pro produkci (KRITICKÉ): Použijte šifrovanou a autentizovanou komunikaci. Nastavte adresu vašeho privátního brokeru, povolte TLS/SSL a použijte port 8883.
  • Ujistěte se, že máte zvolenou správnou verzi MQTT pro vaši aplikaci (např. MQTT v5.0).
  • Definujte vaše Client ID (např. MervisClient). Obvykle je k dispozici API přístup pro přihlašovací údaje, pokud broker vyžaduje autentizaci.
  • Nastavte Base Topic (hlavní datovou složku) na building/hvac.

Užitečné makra Při nastavování Client ID nebo Topics můžete použít makra (nerozlišují velikost písmen), která automaticky doplní systémová data. Tím zajistíte plný kontext bez nutnosti opakovaného psaní.

Makro Popis
ClientId Vloží definované MQTT Client ID.
PlcName Vloží přiřazený název PLC.
system.rtc Vloží systémový reálný čas (lokální čas).
system.rtcutc Vloží systémový čas v UTC (Coordinated Universal Time).
  • Výchozí hodnota intervalu Read/Write může být nastavena na 0 ms.
  • Je nutné ji změnit na rozumnou hodnotu (např. 1m nebo 2m).
  • Pokud zůstane 0 ms, dojde k zahlcení brokeru a neustálým komunikačním chybám.

Mervis RT organizuje komunikaci oddělením příchozích a odchozích dat.

Prohlížeč proměnných s přehledně oddělenými Read_Group a Write_Group

Mervis RT používá Read Group pro odběr topicu, parsování dokumentu a aktualizaci hodnot v programu.

Vlastnosti Read Group

  • Vytvořte skupinu s názvem Read_Group.
  • Nastavte formát payloadu podle toho, co broker odesílá.
  • Pro čtení a odběr Mervis nativně podporuje JSON, CSV a prostý text.

Mervis RT používá tuto skupinu pro vytvoření dokumentu a jeho odeslání do brokeru.

Vlastnosti Write Group

  • Vytvořte skupinu s názvem Write_Group.
  • Zde definujete Publish Template, který přesně určuje strukturu odchozích dat.
  • Do této šablony můžete psát libovolný formát—JSON, CSV, XML apod.
  • Řídicí blok foreach je velmi užitečný pro iteraci přes více proměnných, ale není povinný. Šablonu lze vytvořit i kompletně ručně.

(Poznámka pro nové uživatele: Mapování datových bodů a práce s Enumy je obecná vlastnost klientských kanálů v Mervis. Pokud jste již používali Modbus nebo jiné protokoly v Mervis, bude vám tento proces velmi povědomý.)

Uvnitř Read_Group vytvořte datový bod pro vstup.

Mapování příchozích MQTT dat na interní proměnnou

  • Mapování na interní proměnnou: Nastavte IO ⇒ ST na cílovou proměnnou.
  • Data Locator: Použijte Value Path (např. $.temp pro JSON), aby Mervis přesně věděl, kde hledat hodnotu v příchozím payloadu. Pro CSV použijte vlastnost Index k určení přesné pozice hodnoty (indexování od 1).
  • Přeskočení chybějících dat: Nastavte Ignore Missing Data na True. Pokud hodnota v payloadu chybí, systém ji přeskočí bez vyvolání komunikační chyby.

Uvnitř Write_Group vytvořte datový bod pro výstup (např. Total).

Mapování vypočtené interní proměnné do MQTT brokeru

  • Mapování na výstup: Namapujte interně vypočtenou proměnnou na výstup pomocí ST ⇒ IO.
  • Je důležité zdůraznit, že tato proměnná musí být globální, aby správně fungovala.

Po namapování komunikačních proměnných je můžete použít ve standardní logice IEC 61131-3.

Jednoduchý FBD program sčítající vstupy logického bloku

V praktické aplikaci můžete například mapovat dva MQTT vstupy (např. Power_Zone_1 a Power_Zone_2) a sečíst je pro výpočet celkové spotřeby energie objektu. Matematický blok vypočítá součet a výsledek se zapíše přímo do globální MQTT výstupní proměnné (Calculated_Total).

Pro ověření správné funkčnosti použijte desktopového klienta, jako je MQTTX, který simuluje reálný datový provoz. Umožní vám vidět výsledky Publish Templates vytvořených v Kroku 2.

Simulace senzorických dat v MQTTX

  • 1. Připojení: Připojte MQTTX k brokeru (broker.emqx.io:1883).
  • 2. Odběr (Subscribe): Přihlaste odběr building/hvac/#, abyste mohli sledovat veškerá data v rámci base topicu.
  • 3. Simulace vstupu: Publikujte payload na building/hvac/temp. Použijte nastavený formát (např. JSON: {„temp“:5,„humidity“:50} nebo standardní CSV řádek).
  • 4. Ověření výstupu: Sledujte příchozí zprávy v MQTTX. Měli byste vidět, že Mervis okamžitě publikuje novou zprávu obsahující vypočtenou hodnotu přesně ve formátu definovaném vaší šablonou.
  • © Energocentrum Plus, s.r.o. 2017 - 2026