Photovoltaique-Gestion de mon Système Solaire Victron avec Node-RED : Partie 2 – Gestion des Batteries

Intro

Sur mon blog domo.rem81.com, je partage mes projets domotiques pour rendre ma maison plus intelligente et économe. Dans mon précédent article, j’ai présenté le flow « Communs », qui collecte les données générales de mon système solaire Victron Energy (puissance PV, état du réseau, etc.). Aujourd’hui, je vous présente un deuxième flow Node-RED, nommé « Batteries », qui se concentre sur la surveillance et la gestion de ma batterie via un SmartShunt 500A/50mV. Ce flow est complémentaire au premier et me permet de suivre l’état de charge (SOC), la tension, le courant, et d’ajuster automatiquement le SOC pour plus de précision.

Objectif du flow

Ce flow « Batteries » a pour but de collecter des données sur ma batterie (tension, courant, SOC, puissance, etc.) à partir d’un SmartShunt Victron Energy, de calculer un SOC théorique basé sur la tension, d’ajuster le SOC du SmartShunt si nécessaire, et de publier toutes ces données via MQTT pour une intégration avec Home Assistant. Ces informations me permettent de surveiller l’état de ma batterie en temps réel et de préparer des automatisations (que je détaillerai dans un prochain article).

Le flow Node-RED

Code json

Vous pouvez copier/coller le fichier .json en Annexe

Visualisation du flow

Voici une capture d’écran de mon flow « Batteries » dans Node-RED, où vous pouvez voir la disposition des nœuds et le flux des données entre eux :

Cette capture montre les sous-flux principaux, comme la collecte de la tension et du SOC (nœuds victron-input-battery), le calcul du SOC théorique (nœud function nommé « SOC Théorique »), l’ajustement du SOC du SmartShunt (nœud function nommé « MàJ Soc Smart Shunt »), et les publications MQTT (nœuds mqtt out).

Analyse du flow :

  1. SOC de la batterie :
  • Un nœud victron-input-battery récupère le SOC (/Soc) depuis le SmartShunt 500A/50mV.
  • La valeur est publiée sur le topic mp2/batteries/soc via deux brokers MQTT : un pour Home Assistant (192.168.0.37:1883) et un pour un serveur Proxmox (192.168.0.204:1883).
  • Elle est également stockée dans une variable de flux soc_sshunt pour une comparaison ultérieure et envoyée à un autre flow via un nœud link out.
  1. Tension et SOC théorique :
  • Un nœud récupère la tension de la batterie (/Dc/0/Voltage) et la publie sur mp2/batteries/tension.
  • Un nœud function calcule un SOC théorique en utilisant une interpolation linéaire basée sur la tension (46V = 0%, 58.8V = 100%). Le résultat est publié sur mp2/batteries/soc_theorique.
  1. Ajustement du SOC du SmartShunt :
  • Un nœud function compare le SOC théorique avec le SOC du SmartShunt. Si l’écart est supérieur à ±1 %, le SOC du SmartShunt est mis à jour via un nœud victron-output-custom.
  1. Autres métriques :
  • Courant (/Dc/0/Current) publié sur mp2/batteries/Courant.
  • Puissance (/Dc/0/Power) publiée sur mp2/batteries/puissance.
  • Consommation en Ah (/ConsumedAmphours) et nombre de cycles (/History/ChargeCycles) affichés via des nœuds debug.

Détails techniques :

  • Calcul du SOC théorique : Le script suivant utilise une interpolation linéaire pour estimer le SOC à partir de la tension :
  var ub = msg.payload;
  var x1 = 46;  // Tension min (0% SOC)
  var y1 = 0;   // SOC min
  var x2 = 58.8; // Tension max (100% SOC)
  var y2 = 100;  // SOC max
  var soc;
  var a;
  var b;
  a = (y2 - y1) / (x2 - x1); // Pente
  b = y1 - a * x1;           // Ordonnée à l'origine
  soc = ub * a + b;          // Interpolation linéaire
  soc = Math.round(soc * 100) / 100; // Arrondi à 2 décimales
  if (soc <= 0) {
      soc = 0;
  }
  if (soc >= 100) {
      soc = 100;
  }
  msg = {payload: soc};
  return msg;
  • Ajustement du SOC : Si l’écart entre le SOC théorique et le SOC du SmartShunt dépasse ±1 %, le SOC est mis à jour :
  let soc_ssh = flow.get('soc_sshunt');
  let soc_theo = msg.payload;
  var delta = soc_theo - soc_ssh;
  if ((delta < -1) || (delta > 1)) {
      msg.payload = Math.trunc(soc_theo);
  } else {
      msg.payload = soc_ssh;
  }
  return [msg];
  • Brokers MQTT : Deux brokers sont utilisés pour assurer une redondance et une intégration avec différents systèmes (Home Assistant et Proxmox).

Interactions avec le flow « Communs » :

Ce flow est complémentaire au flow « Communs » que j’ai présenté dans mon précédent article. Par exemple :

  • Le SOC minimum (soc_mini) collecté dans « Communs » pourrait être utilisé pour des automatisations impliquant la batterie.
  • Un nœud link out (out_soc) envoie le SOC à un autre flow (non détaillé ici), probablement pour des automatisations ou des alertes.
  • Un commentaire indique que la puissance de la batterie est utilisée dans un ESP, qui gére un routeur photovoltaïque.

Intégration avec Home Assistant

Ce flow envoie toutes les données via MQTT à Home Assistant (broker à 192.168.0.37:1883). Par exemple, le topic mp2/batteries/soc me permet de suivre l’état de charge de ma batterie dans un tableau de bord, tandis que mp2/batteries/puissance affiche la puissance actuelle de la batterie. Ces données sont également envoyées à un serveur Proxmox pour un monitoring secondaire.

Pourquoi Node-RED ?

  • Simplicité : Je peux collecter et traiter des données complexes sans écrire de code complexe.
  • Flexibilité : Les nœuds Victron s’intègrent parfaitement avec MQTT et Home Assistant.
  • Visuel : L’interface de Node-RED me permet de voir clairement le flux des données.

Palettes Utilisées

Pour reproduire ce flow, vous aurez besoin d’installer les palettes suivantes dans Node-RED :

  • node-red-contrib-victron : Fournit les nœuds pour interagir avec les systèmes Victron Energy (comme victron-input-battery, victron-output-custom, etc.). Installez-la via le gestionnaire de palettes de Node-RED ou avec la commande :
  npm install node-red-contrib-victron
  • node-red-node-mqtt : Fournit les nœuds MQTT (mqtt out, mqtt-broker). Cette palette est généralement incluse par défaut dans Node-RED, mais si elle est absente, vous pouvez l’installer avec :
  npm install node-red-node-mqtt
  • Nœuds de base (Core) : Les nœuds comme debug, function, change, comment, et link out sont inclus par défaut dans Node-RED.

Note : Assurez-vous que votre instance Node-RED a accès à votre système Victron (via DBus ou MQTT, selon votre configuration) pour que les nœuds Victron fonctionnent correctement.

Conclusion

Ce flow « Batteries » est une brique essentielle de mon système de gestion d’énergie solaire avec Victron Energy. Il me permet de surveiller l’état de ma batterie avec précision, en ajustant automatiquement le SOC pour une meilleure fiabilité. Combiné au flow « Communs », il me fournit une vue complète de mon installation solaire. Dans un prochain article, je partagerai d’autres flows, comme « prevision de production », pour montrer comment j’automatise ma consommation d’énergie. Si vous avez un système Victron ou utilisez Node-RED, ce projet pourrait vous inspirer. Des questions ou des idées ? Laissez un commentaire sur domo.rem81.com !


Annexe: Code Json

[
    {
        "id": "29130ad702b56000",
        "type": "tab",
        "label": "Batteries",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "25490f3e5a399369",
        "type": "victron-input-battery",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/Dc/0/Voltage",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV"
        },
        "pathObj": {
            "path": "/Dc/0/Voltage",
            "type": "float",
            "name": "Battery voltage (V)"
        },
        "name": "U Batteries",
        "onlyChanges": false,
        "roundValues": "2",
        "x": 100,
        "y": 100,
        "wires": [
            [
                "94e498db4a56ef0b",
                "c14904df63dd9e6f",
                "fada26106dac841c",
                "182f4f35d42b4ff9"
            ]
        ]
    },
    {
        "id": "94e498db4a56ef0b",
        "type": "debug",
        "z": "29130ad702b56000",
        "d": true,
        "name": "U Batt",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 310,
        "y": 120,
        "wires": []
    },
    {
        "id": "c14904df63dd9e6f",
        "type": "function",
        "z": "29130ad702b56000",
        "name": "SOC Théorique",
        "func": "var ub=msg.payload;\nvar x1 = 46;\nvar y1= 0;\nvar x2= 58.8;\nvar y2 = 100;\nvar soc;\nvar a;\nvar b;\na=(y2-y1)/(x2-x1);\nb= y1-a*x1\nsoc= ub*a+b;\nsoc= Math.round(soc * 100) / 100;\n\n\nif (soc <= 0) {\n    soc = 0;\n}\nif (soc >= 100) {\n    soc= 100;\n}\n\nmsg= {payload: soc}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 320,
        "y": 160,
        "wires": [
            [
                "c2fce310153f1763",
                "91687d1ffba467e6",
                "2f67fbb98a741726",
                "28d635708a26c864"
            ]
        ]
    },
    {
        "id": "c2fce310153f1763",
        "type": "debug",
        "z": "29130ad702b56000",
        "name": "debug 32",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 540,
        "y": 160,
        "wires": []
    },
    {
        "id": "ebf5dab3b3e5413d",
        "type": "victron-input-battery",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/Soc",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV"
        },
        "pathObj": {
            "path": "/Soc",
            "type": "float",
            "name": "State of charge (%)"
        },
        "initial": "",
        "name": "SOC Batteries",
        "onlyChanges": false,
        "roundValues": "2",
        "x": 110,
        "y": 40,
        "wires": [
            [
                "502277e6ecfd5856",
                "b6fffe9e904ea6b5",
                "d5ade795fa7c78e4",
                "ff15fedc3e19f1db",
                "a628d4a8639f7382"
            ]
        ]
    },
    {
        "id": "502277e6ecfd5856",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "soc",
        "topic": "mp2/batteries/soc",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "a89b02435258ed38",
        "x": 310,
        "y": 40,
        "wires": []
    },
    {
        "id": "b6fffe9e904ea6b5",
        "type": "debug",
        "z": "29130ad702b56000",
        "d": true,
        "name": "SOC",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 530,
        "y": 40,
        "wires": []
    },
    {
        "id": "d5ade795fa7c78e4",
        "type": "link out",
        "z": "29130ad702b56000",
        "name": "out_soc",
        "mode": "link",
        "links": [
            "f17fdbd169acaef1"
        ],
        "x": 795,
        "y": 40,
        "wires": []
    },
    {
        "id": "4e4c3558bf619e56",
        "type": "debug",
        "z": "29130ad702b56000",
        "name": "I batteries",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 700,
        "y": 320,
        "wires": []
    },
    {
        "id": "3ea8ca01df64dbc4",
        "type": "victron-input-battery",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/ConsumedAmphours",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV"
        },
        "pathObj": {
            "path": "/ConsumedAmphours",
            "type": "float",
            "name": "Consumed Amphours (Ah)"
        },
        "initial": "",
        "name": "Conso Ah",
        "onlyChanges": false,
        "roundValues": "2",
        "x": 80,
        "y": 320,
        "wires": [
            [
                "4e4c3558bf619e56"
            ]
        ]
    },
    {
        "id": "407c4ee074674ac2",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "I batteries",
        "topic": "mp2/batteries/Courant",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "a89b02435258ed38",
        "x": 320,
        "y": 380,
        "wires": []
    },
    {
        "id": "8868631168a32ed8",
        "type": "victron-input-battery",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/Dc/0/Current",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV"
        },
        "pathObj": {
            "path": "/Dc/0/Current",
            "type": "float",
            "name": "Battery current (A)"
        },
        "name": "I Batteries",
        "onlyChanges": false,
        "roundValues": "2",
        "x": 80,
        "y": 380,
        "wires": [
            [
                "06689269eff0dbec",
                "407c4ee074674ac2",
                "a83f085f94f518a2"
            ]
        ]
    },
    {
        "id": "06689269eff0dbec",
        "type": "debug",
        "z": "29130ad702b56000",
        "name": "I Batt",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 490,
        "y": 380,
        "wires": []
    },
    {
        "id": "54cf7d05bcad4ed8",
        "type": "victron-input-battery",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/History/ChargeCycles",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV"
        },
        "pathObj": {
            "path": "/History/ChargeCycles",
            "type": "float",
            "name": "Charge cycles (count)"
        },
        "name": "Nb Cycles",
        "onlyChanges": false,
        "x": 80,
        "y": 440,
        "wires": [
            [
                "b2bd98959ebc0a7b"
            ]
        ]
    },
    {
        "id": "b2bd98959ebc0a7b",
        "type": "debug",
        "z": "29130ad702b56000",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 510,
        "y": 440,
        "wires": []
    },
    {
        "id": "a1bfa5a134705042",
        "type": "victron-input-battery",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/Dc/0/Power",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV"
        },
        "pathObj": {
            "path": "/Dc/0/Power",
            "type": "float",
            "name": "Battery power (W)"
        },
        "name": "Pu Batteries",
        "onlyChanges": false,
        "roundValues": "2",
        "x": 90,
        "y": 540,
        "wires": [
            [
                "f3879dd655a10bc4",
                "05019ceb9b485bfc",
                "a5d524a552a81df0"
            ]
        ]
    },
    {
        "id": "f3879dd655a10bc4",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "Pu Batteries",
        "topic": "mp2/batteries/puissance",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "a89b02435258ed38",
        "x": 310,
        "y": 540,
        "wires": []
    },
    {
        "id": "14426b05e7249ca2",
        "type": "comment",
        "z": "29130ad702b56000",
        "name": "Puissance utilisée dans ESP173 Routeur PV",
        "info": "",
        "x": 350,
        "y": 500,
        "wires": []
    },
    {
        "id": "05019ceb9b485bfc",
        "type": "debug",
        "z": "29130ad702b56000",
        "name": "Pu batteries",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 470,
        "y": 540,
        "wires": []
    },
    {
        "id": "91687d1ffba467e6",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "SOC Thero",
        "topic": "mp2/batteries/soc_theorique",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "a89b02435258ed38",
        "x": 730,
        "y": 160,
        "wires": []
    },
    {
        "id": "fada26106dac841c",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "U batteries",
        "topic": "mp2/batteries/tension",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "a89b02435258ed38",
        "x": 530,
        "y": 100,
        "wires": []
    },
    {
        "id": "115b15d7f3da88c1",
        "type": "victron-output-custom",
        "z": "29130ad702b56000",
        "service": "com.victronenergy.battery/277",
        "path": "/Soc",
        "serviceObj": {
            "service": "com.victronenergy.battery/277",
            "name": "SmartShunt 500A/50mV (277)"
        },
        "pathObj": {
            "path": "/Soc",
            "name": "/Soc",
            "type": "number"
        },
        "name": " Forçage SOC Smart Shunt",
        "onlyChanges": false,
        "x": 620,
        "y": 220,
        "wires": []
    },
    {
        "id": "ff15fedc3e19f1db",
        "type": "change",
        "z": "29130ad702b56000",
        "name": "Save SOC",
        "rules": [
            {
                "t": "set",
                "p": "soc_sshunt",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 130,
        "y": 220,
        "wires": [
            [
                "2f67fbb98a741726"
            ]
        ],
        "info": "*** mermaid\njourney\n    title My working day\n    section Go to work\n      Make tea: 5: Me\n      Go upstairs: 3: Me\n      Do work: 1: Me, Cat\n    section Go home\n      Go downstairs: 5: Me\n      Sit down: 5: Me"
    },
    {
        "id": "2f67fbb98a741726",
        "type": "function",
        "z": "29130ad702b56000",
        "name": "MàJ Soc Smart Shunt",
        "func": "// Si il y a un écart de -+2 entre le SOC Théorique et le SOC du Smart Shunt\n// le SOC du Smart Shunt est mis à jour avec le SOC Théorique\n\nlet soc_ssh = flow.get('soc_sshunt')\nlet soc_theo = msg.payload\n\nvar delta= soc_theo-soc_ssh; \nnode.warn(\"Delta=\"+delta+\"soc_theo=\"+soc_theo+\"soc ss=\"+soc_ssh);\n\n\nif ((delta<-1) || (delta>1)) {\n    msg.payload=Math.trunc(soc_theo);\n    }else{\n    msg.payload=soc_ssh;\n    }\n\nreturn [msg];",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 360,
        "y": 220,
        "wires": [
            [
                "69070c37a73492a9",
                "115b15d7f3da88c1"
            ]
        ]
    },
    {
        "id": "69070c37a73492a9",
        "type": "debug",
        "z": "29130ad702b56000",
        "name": "debug 39",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 840,
        "y": 220,
        "wires": []
    },
    {
        "id": "a628d4a8639f7382",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "soc",
        "topic": "mp2/batteries/soc",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "6f9049bab74834df",
        "x": 690,
        "y": 40,
        "wires": []
    },
    {
        "id": "182f4f35d42b4ff9",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "U batteries",
        "topic": "mp2/batteries/tension",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "6f9049bab74834df",
        "x": 790,
        "y": 100,
        "wires": []
    },
    {
        "id": "a83f085f94f518a2",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "I batteries",
        "topic": "mp2/batteries/Courant",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "6f9049bab74834df",
        "x": 720,
        "y": 380,
        "wires": []
    },
    {
        "id": "a5d524a552a81df0",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "Pu Batteries",
        "topic": "mp2/batteries/puissance",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "6f9049bab74834df",
        "x": 730,
        "y": 540,
        "wires": []
    },
    {
        "id": "28d635708a26c864",
        "type": "mqtt out",
        "z": "29130ad702b56000",
        "name": "SOC Thero",
        "topic": "mp2/batteries/soc_theorique",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "6f9049bab74834df",
        "x": 910,
        "y": 160,
        "wires": []
    },
    {
        "id": "a89b02435258ed38",
        "type": "mqtt-broker",
        "name": "MQTTHA",
        "broker": "192.168.0.37",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    },
    {
        "id": "6f9049bab74834df",
        "type": "mqtt-broker",
        "name": "Proxmox",
        "broker": "192.168.0.204",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *