Naar de inhoud
Elausys

HyperVisu / Integraties

MQTT-integratie

Abonneer op statustopics en publiceer commando's via een MQTT-broker — payload-codec, topic-browser en QoS.

elausys · 21 augustus 2026
Op deze pagina

MQTT-integratie

MQTT verbindt HyperVisu met de publish/subscribe-wereld: Zigbee2MQTT, Tasmota, Shelly (MQTT-modus), ESPHome, energie-gateways en alle aangepaste firmware die communiceert met een MQTT-broker. HyperVisu is een MQTT-client — het abonneert op de topics waarop apparaten hun status publiceren en publiceert commando's op de topics waarnaar apparaten luisteren. Er is geen polling: een apparaat waarvan de status verandert, publiceert direct, en de widget wordt meteen bijgewerkt.

Een broker bevindt zich in het midden. Dit kan een broker zijn die u al gebruikt (Mosquitto, EMQX, de broker die wordt meegeleverd met een Zigbee2MQTT-installatie, …) of de in HyperVisu ingebouwde broker, die de server zelf kan uitvoeren zodat apparaten er rechtstreeks verbinding mee maken (zie "De ingebouwde MQTT-broker"). Alles in dit artikel is op beide manieren van toepassing — de ingebouwde broker is een gewone broker, bereikbaar via een reguliere verbinding.

Wat u nodig heeft: het brokeradres en de poort, de inloggegevens indien vereist, en de topics en het payload-formaat van het apparaat — uit de documentatie van het apparaat, of direct uitgelezen van de broker met de topic-browser (hieronder).

Verbindingen. Schakel eerst MQTT Protocol in op de pagina Diensten (zie "Diensten & protocollen"); dit staat standaard uit op een nieuwe server. MQTT ondersteunt meerdere verbindingen: één verbinding per broker (zie "Verbindingen"). Selecteer bij Verbinding toevoegen de kaart MQTT: het dialoogvenster vraagt om een Instantienaam, het Brokeradres, de Poort, de Client-ID en de inloggegevens, en bevat een knop Testen. CA-certificaat en de Broker-opties (Keepalive, Standaard QoS, Beschikbaarheidstopic, Clean session) staan niet in het dialoogvenster: stel deze in op de opgeslagen verbinding, die direct in de editor opent zodra u op Verbinding aanmaken klikt. De verbindingseditor bevat:

VeldOmschrijving
BrokeradresHost, of een volledige URL: mqtt://, mqtts://, ws://, wss:// (een gewone host betekent mqtt://). Een pad in het adres blijft behouden, bijvoorbeeld ws://192.168.1.30/mqtt.
PoortDe poort van de listener — meestal 1883 voor gewone MQTT en 8883 voor MQTT via TLS. Voer deze altijd in: in het dialoogvenster Verbinding toevoegen wordt een lege poort opgeslagen als 1883, ongeacht het schema, en het veld Poort overschrijft een poort die in het adres is opgegeven.
Gebruikersnaam / WachtwoordLeeg laten voor een anonieme broker.
Client-IDLeeg laten om er een af te leiden van het MAC-adres van de server.
Zelfondertekende certificaten accepterenWordt alleen weergegeven voor mqtts:// / wss://. Standaard uitgeschakeld: het brokercertificaat moet zijn ondertekend door een vertrouwde autoriteit. Indien ingeschakeld, wordt het certificaat helemaal niet geverifieerd.
CA-certificaatAlleen weergegeven voor TLS: het PEM-certificaat van de autoriteit die de broker heeft ondertekend, wanneer dit geen openbare autoriteit is.
KeepaliveHoe lang een inactieve verbinding open mag blijven vóór een ping (standaard 60 s).
Standaard QoS0 · hoogstens één keer, 1 · minstens één keer of 2 · precies één keer — gebruikt door elk object dat geen eigen QoS instelt.
Beschikbaarheidstopic / HyperVisu-beschikbaarheid aankondigenWaar HyperVisu online / offline voor zichzelf publiceert (standaard hypervisu/status, retained). De broker publiceert namens HyperVisu offline als de verbinding wegvalt.
Clean sessionAan (standaard): de broker vergeet de abonnementen wanneer de verbinding wegvalt en HyperVisu abonneert zich opnieuw bij het herverbinden. Schakel dit alleen uit voor een broker die berichten in de wachtrij moet plaatsen terwijl HyperVisu offline is.

Testen op een MQTT-verbinding is een echte test: de server maakt verbinding met de broker en wacht op de bevestiging (binnen 10 s). Een goed resultaat toont Verbinding geslaagd. In het dialoogvenster Verbinding toevoegen test Testen de ingevoerde waarden voordat u de verbinding aanmaakt. Bij een opgeslagen verbinding controleert Testen de opgeslagen configuratie, niet de nog niet opgeslagen velden: klik eerst op Verbinding opslaan en daarna op Testen. Een geslaagde test bewijst dat het adres, de poort, de inloggegevens en de TLS-instellingen door de broker worden geaccepteerd; het bewijst niet dat een topic gegevens bevat.

De status van de verbinding geeft Verbonden weer zolang de brokerverbinding actief is. Een broker die wegvalt, wordt elke paar seconden opnieuw geprobeerd, zonder limiet — er is nooit een herstart van de server nodig.

📘 Opmerking: Nadat u een verbinding heeft aangemaakt of opgeslagen, verschijnt Wijzigingen toepassen met een teller in de zijbalk. De verbinding werkt al zonder dit; toepassen herlaadt de serverconfiguratie en wist de teller.

MQTT-verbindingseditor, desktopbrowser.

Een object koppelen (zie "MQTT koppelen" hieronder). Per object voert u een Topic in; de beheerinterface slaat dit op als <verbinding>:<topic> zodat twee brokers dezelfde topicnaam kunnen gebruiken. De richting van het object bepaalt wat er gebeurt:

RichtingGedrag
InAbonneert op het topic (statustopic). Wildcards zijn toegestaan: + voor één niveau, # voor de rest.
UitPubliceert naar het topic (commandotopic). Moet een concreet topic zijn — geen wildcards.
In/UitAbonneert en publiceert op hetzelfde topic. Alleen correct voor apparaten die de retained status op één topic behouden; gebruik bij voorkeur twee objecten (één In, één Uit).

De payload-codec — hoe de payload wordt omgezet in een waarde en omgekeerd — is de gegevenstypereeks van het object, samengesteld door de editor uit deze velden:

VeldOpgeslagen alsBetekenis
Payload-formaat— / PATH=Ruwe waarde: de volledige payload is de waarde. JSON: de waarde wordt gelezen op het JSON-pad (state, sensor.temperature, values[0]).
AAN-teken / UIT-tekenON= / OFF=Voor binaire objecten: wat het apparaat schrijft en verwacht voor waar/onwaar (bijv. ON / OFF). Zonder tekens worden true/false, 1/0, on/off begrepen bij inkomende berichten en wordt true/false gepubliceerd.
Schaal / OffsetSCALE= / OFFSET=Lezen: waarde = ruw × schaal + offset; publiceren gebruikt het omgekeerde, ruw = (waarde − offset) ÷ schaal. Een commando-object en het bijbehorende feedbackobject gebruiken daarom dezelfde schaal.
Payload-sjabloonPUB=Optioneel publicatiesjabloon; {{value}} wordt vervangen door de waarde, bijv. {"state":"{{value}}"}. Laat leeg om de kale waarde te publiceren.
QoSQOS=Broker-standaard, 0, 1 of 2 voor dit commando.
Gepubliceerde berichten behouden (retain)RETAIN=1Standaard uitgeschakeld.
Minimuminterval (ms)THROTTLE=Frequente sensormeldingen worden beperkt tot dit tempo (standaard 100 ms); de laatste waarde komt altijd door. 0 schakelt dit uit.

De tekenreeks heeft de vorm TYPE:param:param… — bijvoorbeeld BOOL:PATH=state:ON=ON:OFF=OFF of FLOAT:SCALE=0.3937:PUB={"brightness":{{value}}}. Een lege reeks betekent "gebruik de ruwe payload als het type van het object". De objecteditor heeft geen veld voor het gegevenstype: het type is het type dat wordt weergegeven op het veld waarop u klikt in de topic-browser (hieronder), en het aanklikken van een veld past het type van het object hierop aan. Kleurobjecten (RGB) accepteren inkomend {"r","g","b"}, {"red","green","blue"}, [r,g,b], #RRGGBB en 255,128,0, en publiceren {"r":…,"g":…,"b":…} tenzij een sjabloon anders aangeeft.

⚠️ Waarschuwing: Een retained commando wordt opnieuw uitgevoerd telkens wanneer het apparaat opnieuw verbinding maakt met de broker. Behoud statussen, geen commando's — de editor waarschuwt wanneer u retain inschakelt voor een uitgaand object.

Topic-browser. MQTT is het enige protocol waarvan de adressen rechtstreeks van het netwerk kunnen worden uitgelezen. Klik in de objecteditor onder MQTT-topicconfiguratie op Broker scannen: de server luistert vier seconden naar de volledige broker en meldt hoeveel topics er zijn gedetecteerd (retained topics komen direct binnen, dus een korte scan toont al snel de meeste relevante topics; activeer voor een apparaat dat niet retaint een nieuwe meting en scan opnieuw). De lijst is beperkt tot 500 topics. De objecteditor kan niet een deel van de broker scannen: open Topic en typ in Topics zoeken… om de resultaten te filteren, of typ zelf het volledige topic. Elke rij toont het topic en de laatste payload, met een retained-label. Kies een topic en:

  • voor een JSON-payload wordt elk veld vermeld onder Kies de waarde die dit object moet volgen — één klik stelt het JSON-pad, het objecttype en, voor booleans, de AAN/UIT-tekens in volgens de notatie van het apparaat;
  • voor een eenvoudige payload stelt Gebruik de ruwe payload als het type in.

Kies het topic voordat u op een veld klikt: het selecteren van een ander topic reset het payload-formaat, het JSON-pad en de tekens. De klik vult Schaal en Offset niet in.

U kunt nog steeds een topic invoeren dat de scan niet heeft opgevangen — een commandotopic is mogelijk nog nooit gepubliceerd en een inkomend object vereist mogelijk een wildcard. Typ het in Topic en klik op Gebruik "…" in de lijst.

MQTT-objecteditor na "Broker scannen".

Gedrag dat handig is om te weten

  • Directe status na een herstart. Retained berichten worden door de broker bij elke (her)verbinding opnieuw verzonden, zodat widgets waarden weergeven zonder te hoeven wachten op de volgende publicatie van het apparaat.
  • Geen verzonnen feedback. Een commando wordt pas bevestigd wanneer het apparaat zijn statustopic publiceert (of de broker dit opnieuw verzendt) — exact zoals bij KNX-statusobjecten. Als het apparaat offline is, doet de widget niet alsof het werkt.
  • Commando's tijdens een onderbreking. Commando's met QoS 1 of 2 worden in de wachtrij geplaatst zolang de broker onbereikbaar is en afgeleverd bij het herstellen van de verbinding; QoS 0-commando's naar een onbereikbare broker mislukken en worden gelogd.
  • Beveiliging. Payloads groter dan 64 KB worden genegeerd met een waarschuwing; er wordt één abonnement per uniek topicfilter geopend, ongeacht hoeveel objecten dit delen.

Praktijkvoorbeeld — een dimbare Zigbee2MQTT-lamp

Zigbee2MQTT publiceert de status van de lamp als JSON op zigbee2mqtt/lamp ({"state":"ON","brightness":178}) en accepteert commando's op zigbee2mqtt/lamp/set. De helderheid loopt van 0–254.

  1. Maak een MQTT-verbinding aan voor de broker (zie "Verbindingen"): brokeradres 192.168.1.10, poort 1883, de inloggegevens van de Zigbee2MQTT-broker indien van toepassing. Klik op Testen — dit moet succes melden.
  2. Voeg onder Apparaten een Dimmer-widget toe met de naam "Kantoorlamp". Selecteer onder Protocol uw brokerverbinding, aangeduid met de naam die u eraan heeft gegeven. Het apparaat verschijnt met vier objecten: Schakelen AAN/UIT, Schakelfeedback, Dimwaarde en Dimfeedback.
  3. Op Schakelen AAN/UIT (het aan/uit-commando): typ zigbee2mqtt/lamp/set in Topic en klik op Gebruik "…" in de lijst. Stel AAN-teken in op ON, UIT-teken op OFF en Payload-sjabloon op {"state":"{{value}}"}. Typ de tekens daadwerkelijk in: de grijze ON en OFF zijn slechts voorbeelden, en zonder tekens publiceert de schakelaar true of false.
  4. Op Schakelfeedback (de aan/uit-status): klik op Broker scannen, kies zigbee2mqtt/lamp en klik vervolgens op het veld state — de editor stelt het JSON-pad in op state en de tekens op ON/OFF.
  5. Op Dimwaarde (het helderheidscommando): topic zigbee2mqtt/lamp/set, Payload-sjabloon {"brightness":{{value}}}, Schaal 0.3937, Offset 0.
  6. Op Dimfeedback (de helderheidsstatus): topic zigbee2mqtt/lamp, klik op het veld brightness en stel dezelfde Schaal in op 0.3937. Dit is ongeveer 100/254: inkomende waarden worden hiermee vermenigvuldigd (Zigbee 0–254 wordt 0–100 %), uitgaande waarden worden hierdoor gedeeld (0–100 % wordt 0–254).
  7. Klik op Object opslaan bij elk object, klik vervolgens op Wijzigingen toepassen in de zijbalk en bevestig.
  8. Stel de helderheid in op 50 % in de app. De lamp ontvangt ongeveer 127 en de feedback retourneert ongeveer 50 %. De schuifregelaar bevestigt dit aan de hand van het statustopic, en het bedienen van de lamp met de fysieke afstandsbediening werkt de app eveneens bij.

📘 Opmerking: De verzonden waarde wordt niet afgerond: 50 % wordt gepubliceerd als 127.000254. De objecteditor heeft geen veld voor het gegevenstype, dus u kunt een commando-object geen geheel getal laten verzenden. Controleer of uw lamp een decimale helderheidswaarde accepteert.

MQTT koppelen

MQTT-objecten worden geconfigureerd in het dialoogvenster voor objectinstellingen (open het object met Bewerken, zie "Objectinstellingen, logboekregistratie & meldingen"). Het protocolspecifieke gedeelte bevindt zich in drie kaarten:

MQTT-topicconfiguratie

VeldOmschrijving
TopicHet topic waarop dit object zich abonneert (In: een statustopic — wildcards + en # toegestaan) of waarnaar het publiceert (Uit: een commandotopic — geen wildcards). Kies het uit de lijst na Broker scannen, of typ het in. Het opgeslagen adres is <verbinding>:<topic>.
Broker scannenLuistert enkele seconden op de broker en toont de gedetecteerde topics, elk met de Laatste payload en een retained-label. Bij een geselecteerd topic toont een JSON-payload de beschikbare velden onder Kies de waarde die dit object moet volgen — één klik vult het JSON-pad, het gegevenstype en de AAN/UIT-tekens in; een eenvoudige payload biedt Gebruik de ruwe payload als aan.
Payload-formaatRuwe waarde (de volledige payload is de waarde) of JSON met een JSON-pad (state, sensor.temperature, values[0]).
AAN-teken / UIT-tekenBinaire objecten: wat het apparaat schrijft en verwacht voor waar/onwaar (bijv. ON / OFF).

Publiceren (uitgaande objecten)

VeldOmschrijving
Payload-sjabloonOptioneel. {{value}} wordt vervangen door de waarde; laat leeg om de kale waarde te publiceren.
QoSBroker-standaard, 0, 1 of 2 — de aflevergarantie voor dit commando.
Gepubliceerde berichten behouden (retain)Standaard uitgeschakeld. Een retained commando wordt opnieuw uitgevoerd telkens wanneer het apparaat opnieuw verbinding maakt — behoud statussen, geen commando's.

Abonneren (inkomende objecten)

VeldOmschrijving
Minimuminterval (ms)Frequente sensormeldingen worden beperkt tot dit tempo (standaard 100 ms); de laatste waarde komt altijd door. 0 schakelt dit uit.
Schaal / OffsetNumerieke objecten: waarde = ruw × schaal + offset bij inkomende berichten, het omgekeerde bij publiceren.

De velden worden opgeslagen als de gegevenstypereeks van het object (bijv. BOOL:PATH=state:ON=ON:OFF=OFF) — de structuur, de topic-browser en een uitgewerkt praktijkvoorbeeld vindt u in het MQTT-hoofdstuk hierboven.

De MQTT-objectinstellingen voor een helderheidsstatusobject.

Veelgestelde vragen

Heb ik een aparte MQTT-broker nodig?

U heeft een broker nodig, maar dit kan een bestaande broker zijn of de ingebouwde broker van HyperVisu. Maak een verbinding aan naar de gekozen broker.

Hoe vind ik het juiste statustopic en JSON-veld?

Gebruik Broker scannen in de objecteditor, selecteer een topic en kies het veld dat het object moet volgen.

Kan een commandotopic wildcards bevatten?

Nee. Inkomende abonnementen kunnen + en # gebruiken, maar uitgaande commando's vereisen een concreet topic.

Moet ik commandoberichten als retained instellen?

Over het algemeen niet. Retained commando's worden opnieuw uitgevoerd zodra het apparaat opnieuw verbinding maakt. Retained statusberichten zijn wel nuttig om weergegeven waarden te herstellen.

Waarom bevestigt een commando niet direct de apparaatstatus?

HyperVisu wacht op de statuspublicatie van het apparaat zelf in plaats van een terugmelding te baseren op enkel het verzonden commando.

Moet de server herstarten wanneer de broker weer online komt?

Nee. Mislukte brokerverbindingen worden automatisch opnieuw geprobeerd en abonnementen worden bij herverbinding opnieuw geactiveerd.

Verder verkennen

Vind de andere handleidingen voor dit product in de documentatie.

Terug naar Integraties