====== 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 [[software:sml|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 [[hardware:controllers:ir-schreib-lesekopf|IR-Schreib-Lesekopf]].\\
In der Schnittstellenöffnung sitzt die Sendediode rechts.
Der verblombte Modulfachdeckel zur Abdeckung und Plombierung von
Zusatzgeräten, wie z. B. Smart Meter Gateway (SMGW) oder Steuerbox baut unter der Schnittstelle so sehr auf, dass ein [[hardware:controllers:ir-schreib-lesekopf|IR-Schreib-Lesekopf]] mit nach unten abgehendem USB-Stecker keinen Platz findet. In dem Fall müsste ein kompakter Winkelstecker eingesetzt werden.
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 [[hardware:controllers:ir-schreib-lesekopf#grundlagen|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):
{
"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
}
]
}
MQTT-Einstellungen sind auf die jeweils eigenen anzupassen oder der Abschnitt zu entfernen.
USB-Schnitstelle muss ggf. angepasst werden.
Die 18 UUIDs kann man sich schnell z.B. hier generieren: [[https://www.uuidgenerator.net/|Online UUID Generator Tool]]
===== Herstellerinformationen =====
* [[https://www.efr.de/products/smart-energy-geraete/elektronische-stromzaehler/basiszaehler/sgm-d4/|Produkthomepage]]
* [[https://www.efr.de/wp-content/uploads/2022/06/Produktinformation_EFR_SGM-D4_DE_WEB.pdf|Produktinformation (PDF)]]
* [[https://www.efr.de/wp-content/uploads/2022/03/Bedienungsanleitung_EFR-SGM-D4-1.pdf|Bedienungsanleitung (PDF)]]
* [[https://web.archive.org/web/20250809022944/https://www.efr.de/products/smart-energy-geraete/elektronische-stromzaehler/basiszaehler/sgm-d4/|Produkthomepage (archiviert, PDF)]]
* [[https://web.archive.org/web/20250809022944/https://www.efr.de/wp-content/uploads/2022/06/Produktinformation_EFR_SGM-D4_DE_WEB.pdf|Produktinformation (archiviert, PDF)]]
* [[https://web.archive.org/web/20250809022944/https://www.efr.de/wp-content/uploads/2022/03/Bedienungsanleitung_EFR-SGM-D4-1.pdf|Bedienungsanleitung (archiviert)]]
===== 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:
- 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“:
[
{
"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:
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];