> For the complete documentation index, see [llms.txt](https://docs.smart-stuff.nl/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.smart-stuff.nl/dsmr-api/koppelingen/mqtt.md).

# MQTT

De dongle heeft de mogelijkheid om de gegevens te delen via MQTT. Hiervoor dient er wel het een en ander ingesteld te worden.

### Instellen MQTT

Druk op de menu blak rechtsboven op het wieltje.

Het onderstaande settingsscherm wordt zichtbaar.

![](/files/qSfVRycbuFzxZ7uiBKHd)

Voor het instellen van de MQTT koppeling zijn alleen de onderstaande gegevens van belang.

<table><thead><tr><th>item</th><th width="384.2197125256674">omschrijving</th><th>default</th></tr></thead><tbody><tr><td>MQTT broker ip/url</td><td>ip-adres of hostname waarop de mqtt broker te bereiken is</td><td>&#x3C;leeg></td></tr><tr><td>MQTT over tls</td><td>maakt een tls beveiligde verbinding</td><td>false</td></tr><tr><td>MQTT broker port</td><td>poortnummer van de mqtt broker</td><td>1883</td></tr><tr><td>MQTT gebruiker</td><td>als u uw mqtt broker beveiligd heeft dient hier de username ingevuld te worden</td><td>&#x3C;leeg></td></tr><tr><td>MQTT gebruiker password</td><td>als u uw mqtt broker beveiligd heeft dient hier het password ingevuld te worden</td><td>&#x3C;leeg></td></tr><tr><td>MQTT top topic</td><td>De topic naam waarop de gegevens verzonden worden</td><td>P1-DONGLE-PRO</td></tr><tr><td>verzenden MQTT</td><td>frequentie waarmee de dongle de gegevens verstuurd. Eens per x seconde</td><td>0</td></tr></tbody></table>

{% hint style="info" %}
Een MQTT bericht sneller sturen dan de update frequentie van de slimme meter is niet effectief. Zet bij versie 2/4 slimme meters het interval op 10 seconden of meer.
{% endhint %}

{% hint style="info" %}
Gebruik geen / of \ in gebruikersnaam/wachtwoord velden
{% endhint %}

## MQTT connectie

De dongle zal een MQTT verbinding opzetten zodra broker ip/url + port is gevuld en er een netwerkverbinding is ingesteld.\
\
Indien de Verzend MQTT Berichten (Sec.) op 0 staat zal er geen bericht worden gepubliceerd maar wordt de verbinding wel onderhouden. Op deze manier kan de dongle nog wel commando's ontvangen zonder dat er direct data wordt verzonden.

Wil je niet dat de dongle blijft proberen dan dient de broker ip/url leeg gemaakt te worden.

## MQTT verborgen functies

Er zijn een aantal opties in de settingsfile die niet via de frontend kunnen worden aangepast. Hieronder het lijstje met beschrijving.

<table><thead><tr><th width="185.27734375">paramenter</th><th width="408.7734375">omschrijving</th><th>default</th></tr></thead><tbody><tr><td>"macid-topic": false</td><td>zet het mac-id achter het toptopic. = mac adres zonder :</td><td>false</td></tr><tr><td>"act-json-mqtt": false</td><td>maakt een mqtt bericht met topic all en stopt de actuele gegevens in de json payload</td><td>false</td></tr><tr><td>"mqtt-hide": false</td><td>verbergt de mqtt settings in het settingsscherm. Deze kunnen dan alleen via de settingsfile worden ingezien en aangepast</td><td>false</td></tr></tbody></table>

## Home Assistant Auto Discover

De dongle heeft een voorziening waardoor Home Assistant automatisch de dongle kan detecteren. Na het instellen van de MQTT broker hoeft u hier in de dongle verder niets voor te doen.

Wilt u dit liever niet? Dan is dit uit te zetten in settingsfile door onderstaande op te nemen

```
"HAdiscovery": false
```

In de settingspagina heet deze instelling `ha_disc_enabl`.

### Firmware-update vanuit Home Assistant

Vanaf DSMR-API firmware **5.9.0** maakt MQTT Auto Discovery ook een update-entiteit met de naam **DSMR Firmware** aan. Home Assistant toont hierin:

* de geïnstalleerde firmwareversie;
* de nieuwste firmwareversie die door de dongle is gevonden;
* een knop om de nieuwste versie te installeren.

Hiervoor moeten MQTT en **HA Auto discovery** zijn ingeschakeld. De dongle moet daarnaast internettoegang hebben om de versie-informatie en firmware van de ingestelde OTA-locatie op te halen.

{% hint style="warning" %}
Maak voor een firmware-update bij voorkeur eerst een backup van `DSMRsettings.json` en de `RNG`-historiebestanden. Tijdens de installatie wordt de dongle opnieuw gestart en is deze tijdelijk niet bereikbaar.
{% endhint %}

De update-integratie gebruikt onderstaande topics:

| Topic                        | Functie                                                                                         |
| ---------------------------- | ----------------------------------------------------------------------------------------------- |
| `<top topic>/update/state`   | Retained JSON-status met de geïnstalleerde versie, nieuwste versie en update-status.            |
| `<top topic>/update/install` | Home Assistant publiceert de payload `install` om de nieuwste gevonden firmware te installeren. |

## MQTT commands

De dongle zal op een aantal topics subscriben. Deze zijn:

```cpp
<top topic>/reboot
<top topic>/update
<top topic>/update/install
<top topic>/interval
<top topic>/reconfig
<top topic>/ota-url
<top topic>/top-topic

```

**reboot**

De dongle zal een reboot uitvoeren

**update**

De payload dient het versienummer te bevatten. Bijvoorbeeld 4.15.14.

Dit versie nummer wordt gebruikt om de update routine uit te voeren.

**update/install**

Dit topic wordt vanaf firmware 5.9.0 gebruikt door de Home Assistant update-entiteit. De payload `install` installeert de nieuwste firmwareversie die de dongle bij de laatste versiecontrole heeft gevonden.

**interval**

Hiermee kan het mqtt publish interval worden ingestel. De payload bevat het aantal seconden. Bijvoorbeeld 4.

**ota-url**

Hiermee kan de ota-url op afstand worden aangepast. De nieuwe url dient in de payload opgenomen te worden. bv:

```
ota.smart-stuff.nl/p1u/v5/
```

**top-topic**

Hiermee het top-topic op afstand worden aangepast.

**reconfig**

Met de reconfig kan broker url, port en username / password worden aangepast. De payload is in json formaat. Hieronder een voorbeeld.

```cpp
{
    "broker": "url",
    "port": 1892,
    "user": "name",
    "pass": "word"
}
```

## MQTT velden

Afhankelijk van uw voorzieningen worden de mqtt velden verzonden door de dongle. Heeft u bijvoorbeeld geen Gas dan zal dit niet verzonden worden. Etc.

Meest praktische is dan ook om na het instellen van de dongle een MQTT sniffer te gebruiken zoals MQTT Explorer (<http://mqtt-explorer.com/>). U ziet dan alle berichten langskomen. Dat is makkelijk met integratie.

{% hint style="info" %}
Met MQTTExplorer kan je zien welke topics door de dongle worden verzonden.
{% endhint %}

### Twee soorten data

Er zijn twee soorten data die verzonden worden, namelijk:

* **static data**\
  deze data krijgen de retained flag mee. Deze data wordt eens per 10 minuten verzonden. Bijvoorbeeld ID van de slimme meter, ip-adres dongle, versienummer etc. Het is onnodig om deze telkens op te sturen.
* **actuele data**\
  deze data wordt telkens verzonden

### Berichten

Hieronder staan de verschillende mqtt berichten. Elk bericht is opgebouwd uit top-topic\topic en payload. Bv

`P1-Dongle-pro\p1_version met payload 50.` <-- slimme meter versie 5.0

LWT wordt tijdens start / reboot aangepast naar On of Off. Ook de LWT is retained. LWT staat voor Last Will Testament en geeft aan of de dongle actief is.

Afhankelijk van slimme meter versie en configuratie, bv: wel/geen energie opwekking, 1 of 3 fases etc, worden topics wel of niet verzonden.

<table><thead><tr><th width="394">topic</th><th width="240.33333333333331">type</th><th>static</th></tr></thead><tbody><tr><td>identification</td><td>/* String */</td><td>y</td></tr><tr><td>p1_version</td><td>/* String */</td><td>y</td></tr><tr><td>p1_version_be</td><td>/* String */</td><td>y</td></tr><tr><td>timestamp</td><td>/* String */</td><td></td></tr><tr><td>equipment_id</td><td>/* String */</td><td>y</td></tr><tr><td>energy_delivered_tariff1</td><td>/* FixedValue */</td><td></td></tr><tr><td>energy_delivered_tariff2</td><td>/* FixedValue */</td><td></td></tr><tr><td>energy_returned_tariff1</td><td>/* FixedValue */</td><td></td></tr><tr><td>energy_returned_tariff2</td><td>/* FixedValue */</td><td></td></tr><tr><td>electricity_tariff</td><td>/* String */</td><td></td></tr><tr><td>power_delivered</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_returned</td><td>/* FixedValue */</td><td></td></tr><tr><td>message_short</td><td>/* String */</td><td></td></tr><tr><td>message_long</td><td>/* String */</td><td></td></tr><tr><td>voltage_l1</td><td>/* FixedValue */</td><td></td></tr><tr><td>voltage_l2</td><td>/* FixedValue */</td><td></td></tr><tr><td>voltage_l3</td><td>/* FixedValue */</td><td></td></tr><tr><td>current_l1</td><td>/* FixedValue */</td><td></td></tr><tr><td>current_l2</td><td>/* FixedValue */</td><td></td></tr><tr><td>current_l3</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_delivered_l1</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_delivered_l2</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_delivered_l3</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_returned_l1</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_returned_l2</td><td>/* FixedValue */</td><td></td></tr><tr><td>power_returned_l3</td><td>/* FixedValue */</td><td></td></tr><tr><td>mbus1_device_type</td><td>/* uint16_t */</td><td>y</td></tr><tr><td>mbus1_equipment_id_tc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus1_equipment_id_ntc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus1_valve_position</td><td>/* uint8_t */</td><td></td></tr><tr><td>mbus1_delivered</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus1_delivered_ntc</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus1_delivered_dbl</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus2_device_type</td><td>/* uint16_t */</td><td>y</td></tr><tr><td>mbus2_equipment_id_tc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus2_equipment_id_ntc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus2_valve_position</td><td>/* uint8_t */</td><td></td></tr><tr><td>mbus2_delivered</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus2_delivered_ntc</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus2_delivered_dbl</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus3_device_type</td><td>/* uint16_t */</td><td>y</td></tr><tr><td>mbus3_equipment_id_tc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus3_equipment_id_ntc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus3_valve_position</td><td>/* uint8_t */</td><td></td></tr><tr><td>mbus3_delivered</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus3_delivered_ntc</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus3_delivered_dbl</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus4_device_type</td><td>/* uint16_t */</td><td>y</td></tr><tr><td>mbus4_equipment_id_tc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus4_equipment_id_ntc</td><td>/* String */</td><td>y</td></tr><tr><td>mbus4_valve_position</td><td>/* uint8_t */</td><td></td></tr><tr><td>mbus4_delivered</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus4_delivered_ntc</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>mbus4_delivered_dbl</td><td>/* TimestampedFixedValue */</td><td></td></tr><tr><td>gas_delivered</td><td>/* FixedValue */</td><td></td></tr><tr><td>gas_delivered_timestamp</td><td>/* String */</td><td></td></tr><tr><td>water_delivered</td><td>/* FixedValue */</td><td></td></tr><tr><td>LWT</td><td>On or Off</td><td>y</td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.smart-stuff.nl/dsmr-api/koppelingen/mqtt.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
