MQTT
Model „Ústředny“
Abychom pochopili, jak MQTT funguje v systému Mervis, představme si spíše ústřednu než přímý telefonní hovor.
V tradičních systémech si zařízení často „volají“ navzájem přímo. Pokud je jedna strana zaneprázdněná nebo offline, hovor selže. MQTT je jiné. Využívá centrální uzel (Broker), který funguje jako operátor ústředny.
Vydavatelé (vaše zařízení): Připomínají pracovníky v terénu, kteří hlásí data. Nevolají přímo manažerovi – jednoduše zanechají hlášení na ústředně.
Broker (Mervis Server): To je ona ústředna. Přijímá všechna hlášení, organizuje je do specifických „složek“ (Topics) a bezpečně je uchovává.
Odběratelé (Mervis interní): V našem systému používáme interní odběratele pro maximální bezpečnost a kontrolu. I když Mervis může fungovat jako odběratel, nedovolujeme externím ani neautorizovaným odběratelům přístup k vašim datovým tokům.
Architektury připojení
Existují dva způsoby připojení, ale kvůli bezpečnosti a jednoduchosti důrazně doporučujeme Embedded Broker.
1. Vestavěný broker v Mervis (Doporučeno)
V tomto režimu je ústředna přímo součástí Mervis Cloudu.
Bezpečnost: Uzavřený okruh. Žádní externí odběratelé nejsou povoleni. Přístup k datům má pouze systém Mervis, což zajišťuje vysokou úroveň kontroly a soukromí.
Jednoduchost: Nemusíte spravovat externí server.
Provozní tok: Zařízení odesílá data přímo na `mqtt.mervis.info`.
2. Externí broker (Klientský režim)
V tomto režimu používáte vlastní broker třetí strany. Mervis funguje pouze jako další odběratel.
Riziko: Méně bezpečné, protože Mervis nemá kontrolu nad tím, kdo další broker poslouchá.
Využití: Smysluplné při integraci do již existující infrastruktury.
Provozní tok připojení (Embedded)
Pro nastavení zabezpečeného Embedded připojení postupujte takto:
1. Registrace v Portálu (DataNode):
-
Vytvořte DataNode pro váš projekt – digitální dvojče v cloudu.
Vyberte typ zařízení.
Portál vygeneruje DeviceID, uživatelské jméno a heslo.
2. Konfigurace zařízení:
Otevřete webovou administraci zařízení.
Adresa brokeru: nastavte na ``mqtt.mervis.info``.
Port: použijte zabezpečený port s TLS.
Zadejte přihlašovací údaje z portálu.
3. Mervis Generator:
-
Automaticky naskenuje vaše DataNodes a vygeneruje
SCADA projekt, včetně propojení všech tagů bez ručního zadávání.
Podporované Embedded ovladače
Následující zařízení mají v Mervis dedikované ovladače `EmbeddedBroker`:
BMR PLA34 / PLA44: Analyzátory kvality elektrické energie. (
Navštivte BMR)
-
-
-
-
Specializované senzory
Datová struktura & Payloady
Analogie s vlakem
Představte si MQTT pakety jako vlak:
I když MQTT je způsob přepravy, „nákladem“ může být cokoliv. Mezi běžné typy patří:
Požadavky na payload
Formát: JSON je preferovaný standard. Pokud vaše zařízení odesílá jiný formát (např. XML nebo binární), bude nutné provést testování a úpravy.
Topic: Payload nebo hlavička musí jasně určovat „Topic“ (složku, kam daný soubor patří).
Škálování: Surové celočíselné hodnoty z
PLC často vyžadují škálování. Např. hodnota `2305` může znamenat `230.5 Voltů` (děleno 10).
Řešení běžných problémů
| Příznak | Možná příčina | Řešení |
| Žádné připojení | Blokování firewallem | Ujistěte se, že síť umožňuje odchozí provoz na mqtt.mervis.info. |
| Chyba ověření | Nesoulad přihlašovacích údajů | Zkontrolujte, že ID, uživatelské jméno a heslo v zařízení odpovídají údajům z portálu. |
| Offline stav | Chybí heartbeat | Zkontrolujte, že zařízení odesílá „Keep Alive“ každých 60 sekund. |
| Špatné hodnoty | Chybějící škálování | Nastavte škálovací faktor (např. /10) ve značkách v Mervis. |
Pokročilý přehled: JSON struktury
Pro vývojáře, kteří ručně integrují zařízení Wago nebo Weintek, použijte následující vzorové payloady.
Registrace dostupných proměnných
Informuje odběratele o dostupných proměnných
Publikace s doručením „alespoň jednou“
Topic: deviceId/TagConfiguration
Kombinace ID kolekce a Tagu musí být pro každé zařízení jedinečná!
Payload: UTF-8 JSON dokument
/FormatId: (string), ID zprávy
/ApiVersion (int), verze
API
/Complete (bool), nyní musí být true
/Collections (pole kolekcí)
/Id (int), ID kolekce
/CollectionName (string)
/SampleRate (int), vzorkovací rychlost v ms
/PublishInterval (int), interval publikace v ms
/TagData (pole proměnných)
/Tag (string), ID proměnné
/Unit (string), jednotka proměnné
/ValueType (string), ST typ; podporovány jsou pouze jednoduché typy
Příklad
{
"FormatId": "TagConfiguration",
"ApiVersion": 1,
"Complete": true,
"Collections": [{
"Id": 1,
"CollectionName": "Building 1",
"SampleRate": 60000,
"PublishInterval": 60000,
"TagData": [{
"Tag": "Temperature1",
"Unit": "ºC",
"ValueType": "real"
},
{
"Tag": "Humidity",
"Unit": "%",
"ValueType": "word"
}]
},
{
"Id": 2,
"CollectionName": "Building 2",
"SampleRate": 120000,
"PublishInterval": 240000,
"TagData": [{
"Tag": "Water flow",
"Unit": "m3/h",
"ValueType": "byte"
},
{
"Tag": "Current phase L1",
"Unit": "A",
"ValueType": "lreal"
}]
}]
}
Hodnoty proměnných
Publikuje hodnoty proměnných
Publikace s doručením „alespoň jednou“
Topic: deviceId/TagValues
Payload: UTF-8 JSON dokument
/FormatId: (string), ID zprávy
/ApiVersion (int), verze
API
/CollectionId (int), ID kolekce
/TagData (pole hodnot)
/Time (datetime), časová známka v ISO formátu (YYYY-MM-DDTHH:MM:SSZ), ideálně v UTC
/Values (sbírka dvojic tag-hodnota)
Příklad
{
"FormatId": "TagValues",
"ApiVersion": 1,
"CollectionId": 1,
"TagData": [{
"Time": "2018-03-27T17:19:23.720+02:00",
"Values": {
"Temperature1": 15.52,
"Humidity": 21
}
}]
}
Hodnoty proměnných
Publikuje hodnoty proměnných
Publikace s doručením „alespoň jednou“
Topic: $deviceId/mervis/values nebo $deviceId/mervis/values/*
Payload: UTF-8 JSON dokument
Příklad
{
"d" : {
"name:MyHomeTemperature, type:generic_sint64, unit:°C" : [ 0 ],
"number C" : [ 0 ],
"Bit" : [ false ],
"My array" : [ 0, 10, 20 ]
},
"ts" : "2020-08-27T07:10:24.360316"
}
Registrace příkazů
Naše podporované typy
„generic_bool“
„generic_sint8“
„generic_uint8“
„generic_sint16“
„generic_uint16“
„generic_sint32“
„generic_uint32“
„generic_sint64“
„generic_uint64“
„generic_float32“
„generic_float64“
„generic_string“
„generic_datetime“
Vytvoření odběrového topicu pro spuštění příkazu