MQTT

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.

Existují dva způsoby připojení, ale kvůli bezpečnosti a jednoduchosti důrazně doporučujeme Embedded Broker.

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`.

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.

Pro nastavení zabezpečeného Embedded připojení postupujte takto:

  1. 1. Registrace v Portálu (DataNode):
    • Přihlaste se do portálu Mervis: portal.mervis.info.
    • 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.
  1. 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.
  1. 3. Mervis Generator:
    • Jakmile je DataNode aktivní, navštivte generator.mervis.info.
    • Automaticky naskenuje vaše DataNodes a vygeneruje SCADA projekt, včetně propojení všech tagů bez ručního zadávání.

Následující zařízení mají v Mervis dedikované ovladače `EmbeddedBroker`:

Specializované senzory

Představte si MQTT pakety jako vlak:

  • Protokol (koleje): Tím je samotný MQTT.
  • Payload (náklad): To jsou skutečná data uvnitř vagonů.

I když MQTT je způsob přepravy, „nákladem“ může být cokoliv. Mezi běžné typy patří:

  • JSON (preferovaný v Mervis)
  • XML
  • Text / String
  • JPEG obrázky
  • Binární data
  • 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).
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.

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
		}
	}]
}
  • Předpokládáme, že všechny hodnoty času jsou v UTC
  • Screenshoty jsou z EasyBuilder Pro SW

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
    • /d: kořenový prvek
      • „název_vlastnosti“: hodnota - název může obsahovat metadata (nepovinné). Hodnoty vždy jako pole […]
        • formát metadata:

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ů

  • Topic: $deviceId/mervis/cmd_reg nebo $deviceId/mervis/cmd_reg/*
  • Formát:
    • /d: kořenový prvek
      • „názevVlastnosti“ musí obsahovat informace (oddělené čárkou). Hodnota je ignorována.
        • „id“ – ID příkazu a určuje odběrové topic ($deviceId/mervis/command/change_temperature)
        • „name“ – pro zobrazení zákazníkovi
        • „params“ – parametry příkazu (musí obsahovat všechny parametry z odběrového topicu)
          • „name“ – název parametru
          • „type“ – typ parametru (pouze námi podporované typy)
          • „unit“ – jednotka
  • „ts“ – časový údaj
{
    "d" : {
        "id:change_temperature, name:change temperature in house ,params:[{name: temperature, type:generic_float64, unit:°C}, {name: date, type:generic_datetime, unit:UTC}]" : false
    },
    "ts" : "2020-08-27T07:10:11.356013"
}

choose/create $deviceId/mervis/cmd_reg/ nastavte obecnou záložku dle screenshotu přidejte příkazy

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

  • pro předchozí příklad příkazu
  • vytvořte topic: $deviceId/mervis/command/change_temperature
  • se dvěma adresami:
    • temperature (32-bit float)
    • date (string)

  • © Energocentrum Plus, s.r.o. 2017 - 2026