Inhaltsverzeichnis
EFR SGM-D4
Der SGM-D4 der EFR GmbH aus Münchgen kann über eine optische Datenschnittstelle IR-Schnittstelle ausgelesen werden.
Der Zähler ist als eigenständiges Gerät (moderne Messeinrichtung) einsetzbar. In Kombination mit dem Smart Meter Gateway bildet der SGM-D4 ein intelligentes Messsystem (iMSys). Beim Einsatz im Lastmanagement und bei der EEG-Einspeisung kann eine Steuerbox als zusätzliche Komponente, die über die CLS-Schnittstelle durch das Gateway zur Leitstelle angebunden wird, verwendet werden.
Hardware
Der Zähler sendet SML-Datenpakete im Sekundentakt.
Die Kundenschnittstelle dafür befindet sich rechts neben dem Display und ist mit Metall umgeben, so dass ein Magnet haften bleibt. Man benötigt zum Auslesen den IR-Schreib-Lesekopf.
In der Schnittstellenöffnung sitzt die Sendediode rechts.
Außerdem besitzt der Zähler einen Impulsausgang der je nach Stromausführung 5000 oder 10000 Imp./kWh liefert.
Schnittstelle
Für den Endverbraucher steht eine frontseitige optische Datenschnittstelle zur Verfügung. Die Schnittstellen arbeiten im „PUSH“ Betrieb. Nach PIN-Eingabe mit einer Taschenlampe (das Gerät hat keine Taste), kann „InF On“ für den Betrieb mit vollständigem Datensatz gesetzt werden. Gesendet wird SML-Push nach FNN-Spezifikationen „Basiszähler“ mit einer Datenrate von 9600 Bd und 8N1 Zeichenkodierung.
Die INFO Schnittstelle liefert nach PIN-Eingabe und Aktivierung von „InF On“ die Werte
- Zählerstand Bezug
- Zählerstand Lieferung
- Leistung gesamt
- Leistung L1
- Leistung L2
- Leistung L3
- Spannung U1
- Spannung U2
- Spannung U3
- Stromstärke I1
- Stromstärke I2
- Stromstärke I3
- Phasenwinkel U2:U1
- Phasenwinkel U3:U1
- Phasenwinkel I1:U1
- Phasenwinkel I2:U2
- Phasenwinkel I3:U3
- Netzfrequenz
Typenbezeichnungen
| SGM-D4 | ||||||
|---|---|---|---|---|---|---|
| A | Klasse A (2 gemäß IEC 62053-21) | |||||
| B | Klasse B (1 gemäß IEC 62053-21) | |||||
| 6 | Direktanschluss 5(60) A - Ausführung | |||||
| 9 | Direktanschluss 5(100) A - Ausführung | |||||
| 0 | Bezugszähler (+A mit Rücklaufsperre) | |||||
| 1 | Lieferzähler (-A mit Rücklaufsperre) | |||||
| 2 | Zweirichtungszähler (+A/-A Bezug und Lieferung) | |||||
| 3 | Saldierender Lieferzähler (-A saldierend ohne Rücklaufsperre) | |||||
| 0 | Einzeltarifausführung | |||||
| W | Doppeltarifausführung (gesteuert über Klemmen 13/15) | |||||
| N | mit Klemmendeckelkontakt |
Beispielkonfiguration
Eine vzlogger.conf für alle 18 OBIS-Kennzahlen eines SGM-D4-A920N für die Verwendung von vzlogger mit HTTP-Dienst (local) und MQTT (z.B. für Home Assistant):
- vzlogger.conf
{ "retry" : 0, "verbosity" : 3, "log" : "/var/log/vzlogger/vzlogger.log", "local" : { "enabled" : true, "port" : 8084, "index" : true, "timeout" : 0, "buffer" : 0 }, "mqtt": { "enabled": true, "host": "192.168.0.30", "port": 1883, "keepalive": 30, "topic": "vzlogger", "id": "vzlogger", "user": "ein-mqtt-user", "pass": "ein-sicheres-passwort" }, "meters" : [ { "enabled" : true, "allowskip" : true, "interval" : -1, "aggtime" : -1, "aggfixedinterval": false, "channels" : [ { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:1.8.0*255", "measurement_name": "Zählerstand Bezug", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:2.8.0*255", "measurement_name": "Zählerstand Lieferung", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:16.7.0*255", "measurement_name": "Leistung (Momentan)", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:36.7.0*255", "measurement_name": "Leistung L1 (Momentan)", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:56.7.0*255", "measurement_name": "Leistung L2 (Momentan)", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:76.7.0*255", "measurement_name": "Leistung L3 (Momentan)", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:32.7.0*255", "measurement_name": "Spannung L1", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:52.7.0*255", "measurement_name": "Spannung L2", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:72.7.0*255", "measurement_name": "Spannung L3", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:31.7.0*255", "measurement_name": "Stromstärke L1", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:51.7.0*255", "measurement_name": "Stromstärke L2", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:71.7.0*255", "measurement_name": "Stromstärke L3", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:81.7.1*255", "measurement_name": "Phasenwinkel UL2:UL1", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:81.7.2*255", "measurement_name": "Phasenwinkel UL3:UL1", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:81.7.4*255", "measurement_name": "Phasenwinkel IL1:UL1", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:81.7.15*255", "measurement_name": "Phasenwinkel IL2:UL2", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:81.7.26*255", "measurement_name": "Phasenwinkel IL3:UL3", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 }, { "api" : "null", "uuid" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "identifier" : "1-0:14.7.0*255", "measurement_name": "Netzfrequenz", "aggmode" : "none", "middleware" : "null", "duplicates" : 0 } ], "protocol" : "sml", "device" : "/dev/ttyUSB0", "baudrate" : 9600, "parity" : "8n1", "use_local_time" : true } ] }
Herstellerinformationen
Home Assistant
Um die Werte als Sensoren in Home Assistant zu bekommen kann man Rest-Entitäten zu den JSON-Werten des lokalen HTTP-Dienstes oder MQTT-Entitäten erzeugen.
Rest-Entitäten
Um die configuration.yaml nicht zu unübersichtlich werden zu lassen, sollte spätestens jetzt als best practice darin per sensor: !include_dir_merge_list sensors/ Sensoren in extra Dateien ins anzulegende Unterverzeichnis sensors ausgelagert werden, so auch die vzlogger.yaml, die um die eigenen UUIDs und die IP des vzlogger zu ergänzen ist:
- vzlogger.yaml
- platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.3f'%(i.tuples[0][1] / 1000) | float }} {% endif %} {% endfor %} method: GET name: "Zählerstand Bezug" unit_of_measurement: kWh device_class: energy icon: mdi:counter - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.3f'%(i.tuples[0][1] / 1000) | float }} {% endif %} {% endfor %} method: GET name: "Zählerstand Lieferung" unit_of_measurement: kWh device_class: energy icon: mdi:counter - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Leistung (Momentan)" unit_of_measurement: W device_class: power icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Leistung L1 (Momentan)" unit_of_measurement: W device_class: power icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Leistung L2 (Momentan)" unit_of_measurement: W device_class: power icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Leistung L3 (Momentan)" unit_of_measurement: W device_class: power icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Spannung L1" unit_of_measurement: V device_class: voltage icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Spannung L2" unit_of_measurement: V device_class: voltage icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Spannung L3" unit_of_measurement: V device_class: voltage icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Stromstärke L1" unit_of_measurement: A device_class: current icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Stromstärke L2" unit_of_measurement: A device_class: current icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Stromstärke L3" unit_of_measurement: A device_class: current icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Phasenwinkel UL2:UL1" unit_of_measurement: ° state_class: MEASUREMENT_ANGLE icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Phasenwinkel UL3:UL1" unit_of_measurement: ° state_class: MEASUREMENT_ANGLE icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Phasenwinkel IL1:UL1" unit_of_measurement: ° state_class: MEASUREMENT_ANGLE icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Phasenwinkel IL2:UL2" unit_of_measurement: ° state_class: MEASUREMENT_ANGLE icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Phasenwinkel IL3:UL3" unit_of_measurement: ° state_class: MEASUREMENT_ANGLE icon: mdi:gauge - platform: rest resource: http://192.168.0.3:8084/ value_template: > {% for i in value_json.data %} {% if i.uuid == "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" %} {{ '%.1f'%(i.tuples[0][1]) | float }} {% endif %} {% endfor %} method: GET name: "Netzfrequenz" unit_of_measurement: Hz device_class: frequency icon: mdi:gauge
MQTT-Entitäten
Komfortabler ist jedoch die Verwendung von MQTT - vor allem, wenn MQTT bereits anderweitig im Einsatz ist. Da vzlogger kein auto discovery bietet, müsste man jeden Sensor umständlich manuell anlegen. Abhilfe schafft hier das mächtige Node-RED Addon. Darin kann man folgenden Flow hinzufügen: Node-RED → „Import“ → einfügen → „Importieren“:
- Node-RED Flow
[ { "id": "vz_start", "type": "inject", "z": "flow1", "name": "Generate MQTT Discovery", "props": [], "repeat": "", "crontab": "", "once": true, "onceDelay": "3", "topic": "", "x": 200, "y": 140, "wires": [["vz_prepare"]] }, { "id": "vz_prepare", "type": "function", "z": "flow1", "name": "Build Discovery Messages", "func": "", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 460, "y": 140, "wires": [["vz_mqtt"]] }, { "id": "vz_mqtt", "type": "mqtt out", "z": "flow1", "name": "MQTT Discovery Out", "topic": "", "qos": "1", "retain": "true", "broker": "mqtt_broker", "x": 770, "y": 140, "wires": [] }, { "id": "mqtt_broker", "type": "mqtt-broker", "name": "HA MQTT", "broker": "localhost", "port": "1883", "clientid": "", "usetls": false, "compatmode": false, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthRetain": "false", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closeRetain": "false", "closePayload": "", "willTopic": "", "willQos": "0", "willRetain": "false", "willPayload": "" } ]
Danach sind im Node „MQTT Discovery Out“ (→ Eigenschaften → Server-Eigenschaften → Sicherheit) Benuttzername und Passwort für den MQTT-Broker anzugeben. Außerdem muss als Kernstück das folgende Skript (wieder um die eingenen UUIDs ergänzt) in den Node „Build Discovery Messages“ (→ Eigenschaften → Funktion) eingefügt werden. Ggf ist das Modell zu korrigieren:
- Node-RED Funktion
let base = "homeassistant/sensor"; let device = { name: "Stromzähler", identifiers: ["vzlogger-sml"], manufacturer: "EFR GmbH", model: "SGM-D4-A920N", via_device: "vzlogger" }; // Alle Channels aus deiner vzlogger.conf let channels = [ { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Zählerstand Bezug", "unit": "Wh", "device_class": "energy", "icon": "mdi:counter" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Zählerstand Lieferung", "unit": "Wh", "device_class": "energy", "icon": "mdi:counter" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Leistung gesamt", "unit": "W", "device_class": "power", "icon": "mdi:gauge" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Leistung L1", "unit": "W", "device_class": "power", "icon": "mdi:gauge" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Leistung L2", "unit": "W", "device_class": "power", "icon": "mdi:gauge" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Leistung L3", "unit": "W", "device_class": "power", "icon": "mdi:gauge" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Spannung U1", "unit": "V", "device_class": "voltage", "icon": "mdi:sine-wave" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Spannung U2", "unit": "V", "device_class": "voltage", "icon": "mdi:sine-wave" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Spannung U3", "unit": "V", "device_class": "voltage", "icon": "mdi:sine-wave" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Stromstärke I1", "unit": "A", "device_class": "current", "icon": "mdi:current-ac" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Stromstärke I2", "unit": "A", "device_class": "current", "icon": "mdi:current-ac" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Stromstärke I3", "unit": "A", "device_class": "current", "icon": "mdi:current-ac" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Phasenwinkel U2:U1", "unit": "°", "icon": "mdi:angle-acute" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Phasenwinkel U3:U1", "unit": "°", "icon": "mdi:angle-acute" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Phasenwinkel I1:U1", "unit": "°", "icon": "mdi:angle-acute" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Phasenwinkel I2:U2", "unit": "°", "icon": "mdi:angle-acute" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Phasenwinkel I3:U3", "unit": "°", "icon": "mdi:angle-acute" }, { "uuid": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "measurement_name": "Netzfrequenz", "unit": "Hz", "device_class": "frequency", "icon": "mdi:waveform" } ]; let msgs = []; channels.forEach((ch, index) => { let id = "vz_" + ch.uuid.replace(/-/g, ""); let config = { name: ch.measurement_name, state_topic: `vzlogger/chn${index}/raw`, // payload kommt von raw unique_id: id, unit_of_measurement: ch.unit, state_class: "measurement", device: device }; if (ch.device_class) config.device_class = ch.device_class; if (ch.icon) config.icon = ch.icon; msgs.push({ topic: `${base}/${id}/config`, payload: JSON.stringify(config), qos: 1, retain: true }); }); return [msgs];