Betrieb
Tabelle 2. Grundlegende Einstellungen zur Steuerung der Zählerdatenauslesungen und -übertragungen
|
LWM2M-Ressource |
Einstellung |
Beschreibung |
|---|---|---|
|
33906/./17 |
Zählerberichtsintervall |
Intervall in Minuten. Gibt an, wie oft das Modul Werte vom Messgerät liest und speichert. Ein kurzes Berichtsintervall bedeutet, dass das Messgerät häufig abgelesen wird, sodass eine höhere Datengranularität erreicht werden kann. Die Zählerdaten werden dauerhaft in einem nichtflüchtigen Speicher gespeichert und können durch Zurücksetzen auf die Werkseinstellungen gelöscht werden. Falls der Speicher voll ist, werden die ältesten Daten durch die neuesten ersetzt |
|
33906/./18 |
Zählerübertragungsintervall |
Intervall in Minuten. Gibt an, wie oft das Modul Daten an das Empfangssystem sendet. Ein kurzes Übertragungsintervall bedeutet, dass das Modul häufiger Daten sendet, sodass das System Daten von neueren Zählerablesungen abrufen |
|
33906/./1 |
Berichtsdatencodierung |
Gibt an, wie die Daten vor der Übertragung kodiert werden. Wählen Sie die Option aus, die dem Empfangssystem und anderen Anforderungen am besten entspricht |
Tipp
Das Übertragen von Daten verbraucht deutlich mehr Energie als das Auslesen des Zählers. Bei batteriebetriebenen Geräten empfiehlt sich daher ein längeres Übertragungsintervall als Ausleseintervall, um eine angemessene Datenauflösung zu erzielen.
Zählerdaten können entweder mit MQTT-SN oder LwM2M Send übertragen werden. Die Protokolle können nicht gleichzeitig verwendet, das Gerät kann jedoch über LwM2M oder die Elvaco OTC App konfiguriert werden. Der Inhalt der übertragenen Daten bleibt unabhängig vom ausgewählten Transportprotokoll gleich. Bei einer geplanten Zählerdatenübertragung werden die gesendeten Daten durch das ausgewählte Nachrichtenformat festgelegt. Noch nicht gesendete Zählerdaten im Modul werden gemäß der ausgewählten Wiederherstellungsstrategie übertragen (älteste zuerst (FIFO) oder neueste zuerst (LIFO)).
Bei Verwendung von MQTT-SN werden Zählerdatennachrichten in einem MQTT-SN-Topic veröffentlicht. Das Topic kann über die LwM2M-Ressource 33905/./11 oder die Elvaco OTC App remote konfiguriert werden.
Das Modul verwendet die Uhr des Zählers zur Zeiterfassung. Die Zählerzeit wird als lokale Standardzeit (ohne Sommerzeit) vorausgesetzt. Bei der Zeitsynchronisation des Zählers mit der Elvaco OTC App wird stets die lokale Standardzeit verwendet, auch wenn die Sommerzeit gilt. Die vom Modul gesendeten Zählerdaten mit Zeitstempel können durch Angabe des Konfigurationsparameters „UTC-Offset“ auf UTC angepasst werden. Der UTC-Offset wird vor der Übertragung vom Zeitstempel abgezogen. Befindet sich der Zähler in Schweden, wo MEZ (Mitteleuropäische Zeit) gilt, muss der UTC-Offset auf +60 (+1 h) gesetzt sein. In diesem Fall wird um 12:00 Uhr ein Telegramm mit dem Zeitstempel 11:00 gesendet, da dies der entsprechenden UTC-Zeit entspricht. Für einen Zähler in New York (USA) muss der UTC-Offset beispielsweise auf „-300“ (-5 h) gesetzt sein. Ein UTC-Offset von „0“ bedeutet, dass die Zählerzeit unverändert verwendet wird.
Wenn der Zähler auf Sommerzeit eingestellt ist, ignoriert das Modul diese Einstellung und verwendet die Standardzeit. Daher kann die Uhrzeit auf dem Zählerdisplay von der Uhrzeit im Telegramm oder in der Elvaco OTC App abweichen.
Alle Zeitpläne werden mit einer Uhr synchronisiert. Ein Auslesezeitplan von 60 Minuten wird auf volle Stunden synchronisiert, beispielsweise 11:00, 12:00 und 13:00. Bei 120 Minuten ergeben sich 12:00, 14:00 und 16:00. Wenn die Zeit im Modul oder Zähler synchronisiert wird, erfolgt eine Neuplanung, sodass die nächste Zählerauslesung gemäß der aktualisierten Zeit durchgeführt wird. Die Zähleruhr kann periodisch (automatisch) oder manuell synchronisiert werden. Eine periodische Synchronisierung wird empfohlen, damit die Uhr nicht zu stark abweicht.
Optionen für die manuelle Synchronisation
-
Über NFC mit der Elvaco OTC App
-
Über LwM2M mit Ressource
3/./13 -
Einstellen der Zähleruhr im Zähler
Um den Fall zu behandeln, dass die Zeitsynchronisation die Zeit über eine zuvor geplante Ablesung hinaus "verschiebt" (z.B. 23.58 → 00.02), wird das Modul immer eine Ablesung und Übertragung eines neuen Wertes vornehmen, wenn die Zeit synchronisiert wird. Das Gerät wird daher eine zusätzliche Auslesung senden, die auf der Serverseite ausgeblendet werden kann.
Um zu verhindern, dass eine große Anzahl von Geräten Daten genau zur gleichen Zeit überträgt, weisen die Geräte vor der Datenübertragung eine zufällige Verzögerung auf. Die Verzögerung kann entweder über die Elvaco OTC App und die NFC-Schnittstelle oder aus der Ferne über ein Geräteverwaltungssystem konfiguriert werden.
Zählerauslesungen erfolgen immer zur vollen Stunde, beispielsweise um 11.00 Uhr und 13.00 Uhr. Übertragungen können zu anderen Zeiten stattfinden, werden jedoch anhand eines festgelegten Übertragungsintervalls (Ttransmit) für volle Stunden geplant. Die folgende Abbildung veranschaulicht dies. Die Übertragungen werden für den Zeitpunkt T1 geplant. Das tatsächliche Ttransmit ist ein zufälliger Zeitpunkt zwischen (T1 + Toffset) und (T1 + Toffset + Tdelay).
Ttransmit, Toffset und Tdelay sind Parameter des Produkts.
Wenn Daten nicht gesendet werden können, z. B. aufgrund von Netzwerkproblemen, gibt es eine Reihe von Wiederholungsversuchen, nach denen das Gerät aufgibt und die Anzeige als "nicht gesendet" in seinem Speicher belässt. Beim nächsten Übertragungsversuch werden nicht gesendete Daten erneut gesendet (wenn möglich). Die erneute Übertragung kann durch FIFO oder LIFO erfolgen.
Regeln für die erneute Übertragung umfassen das maximale Alter der Daten, die Reihenfolge der Daten, die Anzahl der erneut übertragenen Daten/das Übertragungsintervall.
Beispiel 1. Beispiel 1:
Ein Gerät wird folgendermaßen konfiguriert:
-
Nachrichtenkodierung: M-Bus
-
Automatische Upload-Reihenfolge: FIFO
-
Messintervall: 60 Minuten
-
Übertragungsintervall: 60 Minuten
-
Sende-Offset: 15 Minuten
-
Übertragungsverzögerung: 30 Minuten
-
Maximale Uploads pro Übertragung: 4
-
Upload Höchstalter 72h
Ein Netzwerkproblem führte dazu, dass das Modul 5 Tage lang offline war, während es weiterhin Messdaten las und speicherte. Wenn es dem Gerät gelingt, online zu gehen, findet das folgende Szenario statt.
-
Das Gerät beginnt mit der Übertragung von Messdaten, die 3 Tage alt sind (FIFO-Reihenfolge)
-
Das Gerät sendet 4 Messtelegramme pro Stunde, zu einer zufällig gewählten Zeit zwischen Minute 15 und 45
-
Jedes Telegramm enthält eine einzelne Auslesung, insgesamt 4 Auslesungen pro Übertragung
-
Das Gerät benötigt ungefähr 1 Tag, um "aufzuholen" und eine Messung pro Stunde zu senden
Beispiel 2. Beispiel 2:
Ein Gerät wird folgendermaßen konfiguriert:
-
Nachrichtenkodierung: SenML/CBOR/M-Bus
-
Automatische Upload-Reihenfolge: FIFO
-
Messintervall: 60 Minuten
-
Übertragungsintervall: 60 Minuten
-
Sende-Offset: 15 Minuten
-
Übertragungsverzögerung: 30 Minuten
-
Maximale Uploads pro Übertragung: 4
-
Upload Höchstalter 72h
-
Maximale Nutzlastgröße des Geräts: 12 (Auslesungen pro Telegramm)
Ein Netzwerkproblem führte dazu, dass das Modul 5 Tage lang offline war, während es weiterhin Messdaten las und speicherte. Wenn es dem Gerät gelingt, online zu gehen, findet das folgende Szenario statt.
-
Das Gerät beginnt mit der Übertragung von Messdaten, die 3 Tage alt sind (FIFO-Reihenfolge)
-
Das Gerät sendet 4 Messtelegramme pro Stunde, zu einer zufällig gewählten Zeit zwischen Minute 15 und 45
-
Jedes Telegramm enthält 12 Zählerstände, insgesamt also 4 x 12 = 48 Zählerstände pro Übertragung
-
Das Gerät benötigt ungefähr 2 Stunden, um "aufzuholen" und eine Messung pro Stunde zu senden
CMi6110 kann für verschiedene Messmodi konfiguriert werden. Der ausgewählte Modus bestimmt, wie das Modul festlegt, welche Zählerdaten in den übertragenen Nutzdaten enthalten sind. Informationen zum Ändern des Messmodus finden Sie im LwM2M-Objekt 'Elvaco MCM Config' (Objekt-ID 33906, Ressource 68). Im Modus Benutzerdefiniert kann der Benutzer die Nutzdaten anhand einer Reihe verfügbarer Zählerregister konfigurieren. Im Modus Voreingestellt bestimmt das ausgewählte Nachrichtenformat, welche Zählerdaten vom Modul gesendet werden.
Im Modus Benutzerdefiniert wählt der Benutzer aus, welche unterstützten Zählerregister das Modul in die übertragenen Nutzdaten aufnimmt. Jedes auswählbare Register ist einem Bit in der Bitmaske der benutzerdefinierten Übertragungsfelder zugeordnet (siehe Benutzerdefiniertes Nachrichtenformat für verfügbare Register).
Tabelle 3. Wichtige Einstellungen für den Messmodus Benutzerdefiniert
|
LwM2M resource |
Setting |
Beschreibung |
|---|---|---|
|
33906/./68 |
Measurement mode |
Definiert den Messmodus. Auf |
|
33906/./76 |
Custom format transmit fields |
Bitmaske. Definiert, welche Datenfelder bei Verwendung des Modus Benutzerdefiniert in den Nutzdaten enthalten sind. Jedes Bit der Bitmaske entspricht einem Zählerregister, das entweder ausgewählt oder abgewählt ist. Die Bitmaske ist als Little-Endian-Byte-Array codiert, wobei Byte 0 die Bits 0-7, Byte 1 die Bits 8-15 usw. enthält. |
Anmerkung
Bei Verwendung des Modus Benutzerdefiniert wird die Nachrichtencodierung automatisch auf SenML/CBOR gesetzt.
Bei Verwendung des Modus Voreingestellt hängen die gesendeten Daten vom ausgewählten Nachrichtenformat ab. CMi6110 bietet zwei Nachrichtenformate zur Auswahl: Standard und Erweitert. Eine vollständige Liste der in den Formaten enthaltenen Datensätze finden Sie in Abschnitt Voreingestellte Nachrichtenformate.
Zähleralarme werden über das ausgewählte Transportprotokoll MQTT-SN oder LwM2M Send übertragen. Der Inhalt der übertragenen Daten ist unabhängig vom ausgewählten Transportprotokoll identisch. Wenn ein Alarm ausgelöst wird, entspricht die Nachricht dem ausgewählten Format und die erweiterten Fehlercodes werden angehängt. Noch nicht gesendete Zählerdaten im Modul werden gleichzeitig mit dem Alarm übertragen.
Bei Verwendung von MQTT-SN werden Alarmmeldungen getrennt von der normalen Zählerdatenübertragung in einem eigenen Topic veröffentlicht. Das Alarm-Topic kann über die LwM2M-Ressource 33906/./67 konfiguriert werden.
Jedes Bit in der Alarmmaske ist direkt einem Zählerfehler zugeordnet. Die verschiedenen Alarmmasken zur Steuerung der Alarmüberwachung verwenden dieselbe Zuordnung. In den folgenden Abschnitten wird beschrieben, wie die einzelnen Bitmasken verwaltet und interpretiert werden.
Die Überwachung eines Alarms wird aktiviert, indem das Bit auf „high“ (1) gesetzt wird. Um den Alarm stumm zu schalten, das heißt das Auslösen von Alarmmeldungen zu verhindern, wird das Bit auf „low“ (0) gesetzt. Die folgende Tabelle enthält Beispiele für Bitmaskeneinstellungen für unterschiedliche Verhaltensweisen.
Tabelle 4. Beispiele für Bitmasken zum Aktivieren der Alarmfunktion
|
Binär |
Hex |
Interpretation |
|---|---|---|
|
0b1111 1111 1111 1111 |
0xFFFF |
Alle Alarme werden überwacht |
|
0b0 |
0x0 |
Es werden keine Alarme überwacht. |
|
0b0001 1100 0001 |
0x1C1 |
Die Alarmbits 0, 6, 7 und 8 werden überwacht. |
In der Praxis ermöglicht die Maske für die automatische Alarmrücksetzung, erneut auf einen zurückgesetzten Zähleralarm zu reagieren, beispielsweise nach einer natürlichen Rücksetzung, weil sich der Zähler erholt hat oder repariert wurde, oder nach einer manuellen Rücksetzung. Wenn in dieser Maske keine Alarme aktiviert sind, kann ein bestimmter Alarm während der Lebensdauer des Moduls höchstens zweimal gesendet werden: einmal beim Setzen und einmal bei einer möglichen Rücksetzung. Die Auswahl der automatisch zurückzusetzenden Alarme erfolgt wie bei der Bitmaske zum Aktivieren der Alarmfunktion.
Tabelle 5. Beispiele für die Maske zur automatischen Alarmrücksetzung und die Alarmrücksetz-Bitmasken
|
Binär |
Hex |
Interpretation |
|---|---|---|
|
0b1111 1111 1111 1111 |
0xFFFF |
Alle Alarme in der Alarmmaske werden zurückgesetzt. |
|
0b0 |
0x0 |
Kein Alarm in der Alarmmaske wird zurückgesetzt (für das manuelle Zurücksetzen der Alarmmaske nicht relevant). |
|
0b0001 1100 0001 |
0x1C1 |
Die Alarmbits 0, 6, 7 und 8 werden zurückgesetzt, sobald das Hysteresekriterium erfüllt ist. |
Eine manuelle Rücksetzung kann jederzeit durchgeführt werden, sodass das Modul erneut auf Zähleralarme reagieren kann. Die Auswahl der manuell zurückzusetzenden Alarme erfolgt wie bei der Bitmaske zum Aktivieren der Alarmfunktion.
Tabelle 6. Alarmrücksetz-Bitmasken
|
Binär |
Hex |
Interpretation |
|---|---|---|
|
0b1111 1111 1111 1111 |
0xFFFF |
Alle Alarme in der Alarmmaske werden zurückgesetzt. |
|
0b0 |
0x0 |
Kein Alarm in der Alarmmaske wird zurückgesetzt (für das manuelle Zurücksetzen der Alarmmaske nicht relevant). |
|
0b0001 1100 0001 |
0x1C1 |
Die Alarmbits 0, 6, 7 und 8 werden zurückgesetzt. |
Die folgende Tabelle zeigt die verfügbaren Zählerfehler und ihre Zuordnung zur Bitmaske.
Bei Verwendung des Nachrichtenformats Standard können typische Nutzdaten wie folgt aussehen:
046D002A323B0C7837266966040637570A000414EF472000022B0000023BFCFF025B0000025F000002FD170400
0x02FD17 ist der M-Bus-DIF/VIF-Indikator für Fehlerflags, und die folgenden beiden Bytes 0x0400 zeigen einen Fehler an. Da die M-Bus-Codierung das LSB verwendet, wird die entsprechende Bitmaske als 0x00 04 gelesen. Daraus ergeben sich die Bits 0b0000 0000 0000 0100. Dies bedeutet, dass Bit 2 gesetzt ist und ein Problem mit dem Rücklauftemperatursensor vorliegt (siehe Tabelle Interpretation der Zählerfehler oben).
Werden die Nutzdaten stattdessen als Alarmmeldung gesendet, sehen sie ähnlich aus; zusätzlich werden jedoch die erweiterten Fehlercodes an die Nachricht angehängt:
046D0F2A323B0C7837266966040637570A000414EF472000022B0000023BFCFF025B0000025F000002FD17040002FD180400
0x02FD17 kennzeichnet erneut die Fehlerflags, und die folgenden beiden Bytes 0x04 00 sind mit dem obigen Beispiel identisch. Da diese Nachricht als Alarm ausgelöst wurde, werden die erweiterten Fehlercodes an die Nutzdaten angehängt, siehe 02FD180400. FD18 kennzeichnet eine M-Bus-Fehlermaske. Die Bytes der Fehlermaske werden wie die Fehlerflags anhand der Informationen in der obigen Tabelle Interpretation der Zählerfehler decodiert.
Während der Lebensdauer des Moduls müssen möglicherweise verschiedene Ereignisse protokolliert werden, beispielsweise zur Analyse seines Verhaltens und seines allgemeinen Zustands. Das integrierte Systemprotokoll kann so konfiguriert werden, dass solche Ereignisse entsprechend ihrem Schweregrad gespeichert und gemeldet werden.
Zur Steuerung des Systemprotokolls stehen zwei Einstellungen zur Verfügung: Syslog-Speicherstufe und Stufe für den automatischen Syslog-Upload. Die Speicherstufe bestimmt, welche Ereignisse protokolliert und im Modul gespeichert werden. Die Stufe für den automatischen Upload legt abhängig vom Schweregrad fest, welche Ereignisse automatisch vom Modul gesendet werden. Dadurch können kritische Ereignisse gespeichert werden, ohne sie zwingend zu senden, was Datenverkehr und Stromverbrauch reduziert. Neue Systemprotokolleinträge mit einer entsprechenden Protokollierungsstufe werden zusammen mit der nächsten Zählerdatenübertragung gesendet.
Anmerkung
Eine vollständige Übersicht der LwM2M-Ressourcen für das Systemprotokoll des Moduls finden Sie im LwM2M-Objekt „Elvaco Syslog Config“ (Objekt-ID: 33918).
Die folgenden Tabellen zeigen die verfügbaren Protokollierungsebenen und die implementierten Ereignisse, die protokolliert werden können.
Tabelle 8. Unterstützte Protokollierungsebenen
|
Protokollierungsebene |
Name der Protokollierungsebene |
Beschreibung |
Anmerkung |
|---|---|---|---|
|
0 |
DEBUG |
Zur Fehlerbehebung bei unerwartetem Geräte- oder Serververhalten. |
Im normalen Betrieb wird empfohlen, Debug-Ereignisse weder zu speichern noch zu senden. |
|
1 |
INFO |
Informative, normale Ereignisse |
|
|
2 |
NOTICE |
Benachrichtigungen zum normalen Betrieb |
|
|
3 |
WARNING |
Warnprotokolle |
|
|
4 |
ERROR |
Fehlerprotokolle |
|
|
5 |
CRITICAL |
Protokolle kritischer Fehler |
|
|
Variiert |
Variiert |
Die Protokollierungsebene wird anhand des Inhalts des Protokolleintrags bestimmt. |
Variable Protokollierungsebene, die beispielsweise für Konfigurationsänderungen verwendet wird. Einige Änderungen können unterschiedlich sensibel sein. Sensiblere Protokolleinträge erhalten eine höhere Protokollierungsebene. |
Die folgende Tabelle enthält alle Einträge, die im Gerät protokolliert werden können. Die Spalte ganz rechts gibt an, ob der Systemprotokolleintrag aus einer Konfigurationsänderung stammt. Neben der Protokollierungsebene kann diese Kategorisierung bei der Interpretation der Protokolle auf dem empfangenden Server hilfreich sein.
Tabelle 9. Unterstützte Protokollelemente und zugehörige Protokollierungsebene
|
Eintrag |
Protokolldaten |
Protokollierungsebene |
Ist Konfigurationsänderung |
|---|---|---|---|
|
Product activation |
Grund für die Aktivierung (Taste, falls zutreffend, NFC, Aktivierung bei Durchfluss usw.) |
NOTICE |
NO |
|
Successful timesync |
INFO |
NO |
|
|
Unsuccessful time sync |
Fehlgeschlagene Zeitsynchronisierungen |
WARNING |
NO |
|
Modem restarts |
INFO |
NO |
|
|
Successful connections to Bootstrap, DM, MDM |
INFO |
NO |
|
|
Failed connections to Network, Bootstrap, DM, MDM |
Netzwerkablehnungen, fehlgeschlagene DTLS-Handshakes usw. |
WARNING |
NO |
|
Startup cause |
Grund/Ursache des Starts, z. B. Watchdog, Brownout oder Soft-Reset (z. B. Taste, NFC, LwM2M, Konsole). Die Ebene kann von der Ursache abhängen. |
NOTICE |
NO |
|
Changed SIM |
Änderung der ICCID |
WARNING |
NO |
|
Successful FW Upgrade |
|
WARNING |
NO |
|
Unsuccessful FW Upgrade |
|
WARNING |
NO |
|
Config reset with result |
|
CRITICAL |
NO |
|
Unsuccessful NFC writes |
Grund für den Fehler
|
WARNING |
NO |
|
Failed staged settings |
|
WARNING |
NO |
|
DeviceEnable |
Aktivierungsquelle |
WARNING |
YES |
|
DevEUI |
Neu und alt |
WARNING |
YES |
|
NfcCfgOpen |
WARNING |
YES |
|
|
NfcAutoLockEnable |
WARNING |
YES |
|
|
NfcAutoLockTimeout |
WARNING |
YES |
|
|
MessageEncoding |
INFO |
YES |
|
|
MessageType |
INFO |
YES |
|
|
NfcEnabled |
WARNING |
YES |
|
|
NdefUserText1 |
INFO |
YES |
|
|
NdefUserText2 |
INFO |
YES |
|
|
HwModel |
WARNING |
YES |
|
|
ConsoleEnable |
Protokollieren, um den aktuellen Status der Konsole zu ermitteln. |
WARNING |
YES |
|
HwRevision |
WARNING |
YES |
|
|
MeterMaxRetries |
INFO |
YES |
|
|
MeterCustomerNo |
WARNING |
YES |
|
|
MeterIdentificationSource |
INFO |
YES |
|
|
TraceLogLevels |
WARNING |
YES |
|
|
ApnMode |
WARNING |
YES |
|
|
ManualApn |
WARNING |
YES |
|
|
BootstrapIp |
WARNING |
YES |
|
|
BootstrapHostName |
WARNING |
YES |
|
|
BootstrapPort |
WARNING |
YES |
|
|
BootstrapSecurityMode |
WARNING |
YES |
|
|
NbIotTimer3412 |
WARNING |
YES |
|
|
NbIotTimer3324 |
WARNING |
YES |
|
|
NbIotEdrx |
WARNING |
YES |
|
|
NbIotEdrxMode |
WARNING |
YES |
|
|
NbIotUsePSM |
WARNING |
YES |
|
|
NbIotRadioBand |
WARNING |
YES |
|
|
MqttSnConnectionMode |
WARNING |
YES |
|
|
MqttSnTopic |
WARNING |
YES |
|
|
LwM2MQueueMode |
WARNING |
YES |
|
|
NbIotTxOffset |
WARNING |
YES |
|
|
NbIotTxDelay |
WARNING |
YES |
|
|
NbIotUploadsPerTx |
WARNING |
YES |
|
|
ManualPlmn |
WARNING |
YES |
|
|
NbIotDtlsMaxRewinds |
WARNING |
YES |
|
|
NbIotDtlsMinTimeout |
WARNING |
YES |
|
|
NbIotDtlsMaxTimeout |
WARNING |
YES |
|
|
NbIotMqttsnCommTimeout |
WARNING |
YES |
|
|
NbIotMqttsnCommAttempts |
WARNING |
YES |
|
|
NbIotMdmCommFailures |
WARNING |
YES |
|
|
NbIotCoapAckTimeout |
WARNING |
YES |
|
|
NbIotCoapMaxRetransmit |
WARNING |
YES |
|
|
NbIotIowaDtlsMinTimeout |
INFO |
YES |
|
|
NbIotIowaDtlsMaxTimeout |
INFO |
YES |
|
|
NbIotIowaCommRetryCount |
WARNING |
YES |
|
|
NbIotIowaCommRetryDelay |
WARNING |
YES |
|
|
NbIotIowaCommSeqRetryCount |
WARNING |
YES |
|
|
NbIotIowaCommSeqRetryDelay |
WARNING |
YES |
|
|
NbIotNwkConnMaxHoldoff |
WARNING |
YES |
|
|
NbIotNwkSearchPeriod |
WARNING |
YES |
|
|
NbIotModemRestartBackoff |
WARNING |
YES |
|
|
NbIotMdmReconnectBackoff |
WARNING |
YES |
|
|
NbIotLwM2MResumeBackoff |
WARNING |
YES |
|
|
NbIotAutoUploadAgeLimit |
WARNING |
YES |
|
|
NbIotAutoUploadOrder |
WARNING |
YES |
|
|
Lwm2mBsUri |
WARNING |
YES |
|
|
Lwm2mBsSecurityMode |
WARNING |
YES |
|
|
Lwm2mUri |
WARNING |
YES |
|
|
Lwm2mSecurityMode |
WARNING |
YES |
|
|
Lwm2mLifetime |
WARNING |
YES |
|
|
MqttsnUri |
WARNING |
YES |
|
|
MqttsnSecurityMode |
WARNING |
YES |
|
|
TimeSyncSource |
Den neuen Wert protokollieren. Relevant für die Bestimmung der Qualität der im Protokoll verwendeten Zeitstempel. |
WARNING |
YES |
|
NbIotUploadProtocol |
WARNING |
YES |
|
|
NbIotEnableRai |
WARNING |
YES |
|
|
PowerSource |
WARNING |
YES |
|
|
NbIotAllowedRadioBands |
WARNING |
YES |
|
|
MqttKeepaliveTimeout |
WARNING |
YES |
|
|
LwM2MForcedQueueMode |
WARNING |
YES |
|
|
NbIotRoamHomePlmnSearch |
WARNING |
YES |
|
|
NbIotSyslogLevel |
WARNING |
YES |
|
|
NbIotSyslogMqttSnTopic |
WARNING |
YES |
|
|
NbIotSyslogAutoUploadLevel |
WARNING |
YES |
|
|
NbIotSyslogAutoUploadAgeLimit |
WARNING |
YES |
|
|
NbIotAlarmFuncEnableBitmask |
WARNING |
YES |
|
|
NbIotAlarmMaskResetPeriod |
WARNING |
YES |
|
|
NbIotAlarmHysteresis |
WARNING |
YES |
|
|
NbIotAlarmAutoResetBitmask |
WARNING |
YES |
|
|
NbIotAlarmTxDelayMax |
WARNING |
YES |
|
|
NbIotEmcTestMode |
WARNING |
YES |
|
|
NbIotAlarmMqttSnTopic |
WARNING |
YES |
|
|
MeasurementMode |
WARNING |
YES |
|
|
TxInterval |
INFO |
YES |
|
|
MeterId |
Sowohl Ausgangs- als auch Zielwert protokollieren. Relevant für die Nachverfolgung von Zählerwechseln oder Problemen bei der Zählerkommunikation. |
WARNING |
YES |
|
UTCOffset |
INFO |
YES |
|
|
TimestampRounding |
INFO |
YES |
|
|
ModemConfigured |
INFO |
YES |
|
|
ReadoutInterval |
INFO |
YES |
|
|
ReportInterval |
INFO |
YES |
|
|
Meter data readout |
DEBUG |
NO |
|
|
Meter data transmission |
DEBUG |
NO |
|
|
Found long payload |
WARNING |
NO |
|
|
Meter data readout error |
Statuscode |
WARNING |
NO |
|
No valid timestamp from meter |
NOTICE |
NO |
|
|
Readout skipped on time change |
Alte und neue Zeit |
NOTICE |
NO |
|
Performing readout on time change |
Alte und neue Zeit |
INFO |
NO |
|
Stored [type] credentials for [address] |
[Typ] BS, DM usw. [Adresse] Server-URI |
NOTICE |
NO |
|
Unsupported encrypted meter communication |
ERROR |
NO |
Das Systemprotokoll des Moduls kann über MQTT-SN oder LwM2M Send übertragen werden. Welches Protokoll verwendet wird, hängt vom ausgewählten Transportprotokoll für die Zählerdaten ab. Der Inhalt der übertragenen Daten bleibt unabhängig davon gleich. Wenn im Modul ein Systemprotokolleintrag gespeichert wird, dessen Systemprotokollebene für das Senden konfiguriert ist, wird er zusammen mit der nächsten Zählerdatenübertragung gesendet. Alle noch nicht gesendeten Protokolleinträge, die gesendet werden sollen, werden einbezogen.
Bei Verwendung von MQTT-SN werden Systemprotokolleinträge getrennt von den normalen Zählerdaten in einem eigenen Topic gesendet. Das Systemprotokoll-Topic kann über die LwM2M-Ressource 33918/./0 konfiguriert werden.
Unabhängig davon, ob das Systemprotokoll über MQTT-SN oder LwM2M Send gesendet wird, ist die Nutzlast gemäß dem SenML-Datenmodell strukturiert und mit CBOR kodiert. Die Systemprotokollmeldung selbst wird als ASCII-Zeichenfolge im SenML-Datensatz gespeichert.
Eine vollständige Beschreibung der Kodierung von SenML/CBOR-Paketen finden Sie in Abschnitt SenML/CBOR. Das folgende Beispiel zeigt vereinfacht, wie eine Systemprotokollmeldung von der Roh-Nutzlast bis zur menschenlesbaren Meldung dekodiert wird.
-
Roh-Nutzlast (Referenz):
82A200615602190200A322C11A699337A002020858335B636F6E6669675D204D65746572206964206368616E6765642066726F6D20383537323731363020746F203835373435303430 -
Roh-Nutzlast dekodieren (z. B. mit https://cbor.me/):
[{0: "V", 2: 512}, {-3: 1(1771255712), 2: 2, 8: h'5B636F6E6669675D204D65746572206964206368616E6765642066726F6D20383537323731363020746F203835373435303430'}] -
Datensatz im Paket identifizieren:
5B636F6E6669675D204D65746572206964206368616E6765642066726F6D20383537323731363020746F2038353734353034305B636F6E6E48646C725D204D444D55706C6F61646564 -
Datensatz als ASCII-Zeichenfolge dekodieren:
[config] Meter id changed from 85727160 to 85745040
Das Produkt hat drei Optionen, wenn es um die Nachrichtencodierung geht:
-
M-Bus
-
JSON
-
SenML/CBOR
Bei Verwendung des M-Bus als Nachrichtenkodierungsverfahren werden die Daten in Dateninformationsblöcke (DIB) unterteilt, die ein Dateninformationsfeld (DIF-Code), ein Wertinformationsfeld (VIF-Code) und ein Datenfeld (DATA) umfassen, in dem die eigentliche Nutzlast gespeichert wird (in der folgenden Abbildung veranschaulicht).
DIB-Struktur
Die nachstehende Tabelle enthält ausführliche Beispiele für die Kodierung von Daten bei Verwendung der Nachrichtenkodierung M-Bus.
Tabelle 10. Nutzlast, M-Bus-kodierte Nachricht
|
DIB |
Feld |
Größe |
Datentyp |
Beschreibung |
|---|---|---|---|---|
|
1 |
Datum/Uhrzeit |
6 Bytes |
INT32 |
Datum und Uhrzeit des Messgerätes (JJ-MM-TT hh:mm) Entsprechend OBIS 9.36 046Dxxxxxxxx Bit 31-28 = oberer Jahresteil* Bit 27-24 = Monat Bit 23-21 = unterer Jahresteil* Bit 20-16 = Tag Bit 15 = Sommerzeit-Flag** Bit 14-13 = Jahrhundert Bit 12-8 = Stunde Bit 7 = Fehler-Flag Bit 6 = für zukünftige Verwendung reserviert*** Bit 5-0 = Minute *Das Jahr wird durch Kombination des oberen und unteren Jahresteils ausgelesen. Beispiel: oberer Jahresteil = 0010 und unterer Jahresteil = 010 => Jahr = 0010010 **0 = Standardzeit, 1 = Sommerzeit ***0 = Zeitstempel ist gültig, 1 = Zeitstempel ist nicht gültig |
|
2 |
Zähler-ID |
6 Bytes |
Gemäß dem Identifikationsfeld von M-Bus EN 13757-3 |
Zähler-ID 0C78xxxxxxxx |
|
3 |
Energie |
6-7 Bytes |
INT32 |
Energieverbrauch (Wh, J) 0406xxxxxxxx = xxxxxxxx * 0.001 MWh (kWh) 0407xxxxxxxx = xxxxxxxx * 0.01 MWh 04FB00xxxxxxxx = xxxxxxxx * 0.1 MWh 04FB01xxxxxxxx = xxxxxxxx MWh 040Exxxxxxxx = xxxxxxxx * 0.001 GJ (MJ) 040Fxxxxxxxx = xxxxxxxx * 0.01 GJ 04FB08xxxxxxxx = xxxxxxxx * 0.1 GJ 04FB09xxxxxxxx = xxxxxxxx GJ |
|
4 |
Volumen |
6 Bytes |
INT32 |
Volumen (m3) 0413xxxxxxxx = xxxxxxxx * 0.001 m3 0414xxxxxxxx = xxxxxxxx * 0.01 m3 0415xxxxxxxx = xxxxxxxx * 0.1 m3 0416xxxxxxxx = xxxxxxxx m3 |
|
5 |
Leistung |
4 Bytes |
INT16 |
Leistung (W) 022Bxxxxxx = xxxxxx * 0.001 kW (W) 022Cxxxxxx = xxxxxx * 0.01 kW 022Dxxxxxx = xxxxxx * 0.1 kW 022Exxxxxx = xxxxxx kW |
|
6 |
Durchfluss |
4 Bytes |
INT16 |
Durchfluss (m3/h) 023Bxxxxxx = xxxxxx * 0.001 m3/h 023Cxxxxxx = xxxxxx * 0.01 m3/h 023Dxxxxxx = xxxxxx * 0.1 m3/h 023Exxxxxx = xxxxxx m3/h |
|
7 |
Vorlauftemperatur |
4 Bytes |
INT16 |
Vorlauftemperatur (°C) 025Axxxx = xxxx * 0.1 °C 025Bxxxx = xxxx * °C |
|
8 |
Rücklauftemperatur |
4 Bytes |
INT16 |
Rücklauftemperatur (°C) 025Exxxx = xxxx * 0.1 °C 025Fxxxx = xxxx °C |
|
9 |
Fehler-Flags |
5 Bytes |
INT16 |
Fehler- und Warnungs-Flags 02FD17xxxx Weitere Informationen zu Fehlerkennzeichen finden Sie im aktuellen Zählerhandbuch |
|
10 |
Tarif 1 Energie |
7 Bytes |
INT32 |
Tarif 1 Energieverbrauch (Wh, J) 841003xxxxxxxx = xxxxxxxx Wh 841003xxxxxxxx = xxxxxxxx * 10 Wh 841003xxxxxxxx = xxxxxxxx * 100 Wh 841003xxxxxxxx = xxxxxxxx kWh 841003xxxxxxxx = xxxxxxxx *10 kWh 841003xxxxxxxx = xxxxxxxx MJ 841003xxxxxxxx = xxxxxxxx * 10 MJ |
|
11 |
Tarif 2 Energie |
7 Bytes |
INT32 |
Tarif 2 Energieverbrauch (Wh, J) 842003xxxxxxxx = xxxxxxxx Wh 842003xxxxxxxx = xxxxxxxx * 10 Wh 842003xxxxxxxx = xxxxxxxx * 100 Wh 842003xxxxxxxx = xxxxxxxx kWh 842003xxxxxxxx = xxxxxxxx *10 kWh 842003xxxxxxxx = xxxxxxxx MJ 842003xxxxxxxx = xxxxxxxx * 10 MJ |
|
12 |
Tarif 3 Energie |
7 Bytes |
INT32 |
Tarif 3 Energieverbrauch (Wh, J) 843003xxxxxxxx = xxxxxxxx Wh 843003xxxxxxxx = xxxxxxxx * 10 Wh 843003xxxxxxxx = xxxxxxxx * 100 Wh 843003xxxxxxxx = xxxxxxxx kWh 843003xxxxxxxx = xxxxxxxx *10 kWh 843003xxxxxxxx = xxxxxxxx MJ 843003xxxxxxxx = xxxxxxxx * 10 MJ |
|
13 |
Fehlende Zeit |
6 Bytes |
INT32 |
3C22xxxxxxxx = xxxxxxxx Stunden 3C23xxxxxxxx = xxxxxxxx Tage |
Bei Verwendung der JSON-Nachrichtenkodierung bestehen die gesendeten Nachrichten aus einem Objekt mit einer Liste von Schlüssel-Wert-Paaren. Beispiele für die Bezeichnungen der einzelnen Werttypen und Einheiten sind in der nachstehenden Tabelle aufgeführt. Die Werte werden als Zahlen oder Zeichenfolgen codiert und die Einheiten werden als Zeichenfolgen codiert. JSON bietet eine für den Menschen lesbare Datenkodierung, die allerdings nicht so kompakt ist wie z. B. SenML/CBOR.
Tabelle 11. Nutzlast, JSON-kodierte Nachricht
|
Feld |
JSON-Schlüssel |
|---|---|
|
Zähler-ID |
ID |
|
Zählerdatum/Uhrzeit |
TS |
|
Energie |
E |
|
Energieeinheit |
U |
|
Volumen |
V |
|
Volumeneinheit |
VU |
|
Leistung |
P |
|
Leistungseinheit |
PU |
|
Durchfluss |
F |
|
Durchflusseinheit |
FU |
|
Vorlauftemperatur |
FT |
|
Vorlauftemperatureinheit |
TU |
|
Rücklauftemperatur |
RT |
|
Rücklauftemperatureinheit |
RU |
|
Fehler-Flags |
EF |
|
Tarif 1 Energie |
T1 |
|
Tarif 1 Energieeinheit |
U1 |
|
Tarif 2 Energie |
T2 |
|
Tarif 2 Energieeinheit |
U2 |
|
Tarif 3 Energie |
T3 |
|
Tarif 3 Energieeinheit |
U3 |
|
Fehlende Zeit |
MT |
|
Fehlende Zeiteinheit |
MU |
Beispielnutzdaten, JSON:
{
"TS":"2025-11-28T20:39Z",
"ID":87654321,
"E":12345.678,
"U":"MWh",
"V":3456.7,
"VU":"m3",
"P":5012,
"PU":"W",
"F":212,
"FU":"l/h",
"FT":80.3,
"TU":"C",
"RT":53.8,
"RU":"C",
"EF":"0x4012"
}
Bei batteriebetriebenen Geräten wird empfohlen, mehrere Messungen im selben UDP-Frame zu senden, um Energie zu sparen. Hierzu werden SenML (Sensor Measurement Lists) und CBOR (Concise Binary Object Representation) verwendet, um eine Messliste zu definieren.
Die Idee ist, eine Liste von Messungen zu senden, wobei der erste Eintrag die Basiszeit für alle Auslesungen (die nur einen Offset angeben müssen) und die für alle Auslesungen gemeinsame Zähler-ID enthält. Die anderen Datensätze in der Liste enthalten möglicherweise weniger ausgelesene Felder, um Platz zu sparen. Das Format erlaubt es, alle Daten für jede Auslesung zu senden. In diesem Fall ist die Einsparung (in Form von Bytes) geringer und liegt darin, dass weniger Telegramme gesendet werden, einige Daten nicht für jede Auslesung übertragen werden müssen (wie die Zähler-ID) und Zeitstempel effizienter gehandhabt werden können. SenML/CBOR bietet auch eine Möglichkeit, Listen von Messwerten effizient zu strukturieren.
Elvaco verwendet die SenML/CBOR/M-Bus-Datendarstellung, um Zählerdaten kompakt und selbstbeschreibend zu übertragen. Die übertragenen Daten werden als Paket bezeichnet, das einen Datensatz pro Messung enthält.
Anmerkung
SenML, CBOR und M-Bus sind separate Standards. Dieser Abschnitt beschreibt, wie Produkte diese drei Standards in Kombination verwenden können, um mehrere Messwerte in einem kompakten Format darzustellen, das sich für die Funkübertragung über beispielsweise NB-IoT eignet.
Zählerauslesedaten werden als SenML gesendet, d. h. als eine mit CBOR codierte Liste (auch Array genannt) von Auslesewerten (Datensätzen). Jeder Datensatz ist eine Zuordnung von Schlüssel-Wert-Paaren gemäß SenML.
Anmerkung
Jedes Produkt, welches das SenML/CBOR-Format verwendet, muss die folgenden Anforderungen erfüllen. Darüber hinaus ist der genaue Inhalt der enthaltenen Datenwerte, das Format der Zähler-ID usw. anzugeben. Diese Angabe allein reicht also nicht aus, um einen Parser für ein bestimmtes Produkt zu erstellen.
Basiszeit wird verwendet, um eine Referenzzeit festzulegen.
-
Zeitstempel werden immer nach SenML (d. h. UNIX-Zeit) kodiert (SenML-Etikett -1 „Basiszeit“, SenML-Definition des Zeitfeldes)
-
Dieser Wert muss im ersten Datensatz des Pakets enthalten sein
-
Alle anderen Werte haben einen Zeitwert, der zur Basiszeit addiert wird, um den genauen Zeitpunkt der Auslesung zu bestimmen
Basisname wird verwendet, um die Zähler-ID (Zähleridentifikation in M-Bus) für Produkte darzustellen, die Messdaten für einen Zähler liefern.
-
Wenn der Basisname verwendet wird
-
Dieser Wert MUSS im ersten Datensatz des Pakets enthalten sein
-
Dies wird als Zeichenfolgen-Array dargestellt (CBOR Major Type 3 - SenML-Label -2 „Basisname“)
-
Das Produkt muss das genaue Format für dieses Feld angeben, da es je nach Art des verwendeten "Zählers" variieren kann. Bei einem M-Bus-Format sind es typischerweise die M-Bus-Daten ohne DIF/VIF.
-
-
Für die verbleibenden Zählerauslesewerte wird kein Name festgelegt, nur Werte, die zu einem einzelnen Zähler gehören, können in einem Paket dargestellt werden.
-
-
Wenn die zu sendenden Auslesungen unterschiedliche Zähler-IDs enthalten (z. B. wenn ein Modul zwischen Zählern verschoben wird), dürfen sie NICHT im selben SenML-Paket gesendet werden
-
Alle Werte innerhalb eines SenML-Pakets MÜSSEN sich auf dieselbe Zähler-ID beziehen
-
Die Datenwerte DÜRFEN KEINEN Namenwert enthalten, der den Namen für jeden Wert weiter spezifiziert.
-
-
Der Basisname DARF NICHT für SenML-Pakete verwendet werden, die Daten für mehrere Zähler enthalten. In solchen Fällen muss jeder Datensatz die Zähler-ID des Zählers enthalten.
-
Die tatsächlichen Werte des Zählers können mit mehreren Methoden kodiert werden, z. B. M-Bus.
-
Der erste Datensatz kann auch ein Datenwertfeld enthalten, das mehr Informationen enthält als die übrigen Datensätze im Paket. Dies soll mehr Informationen für das erste Lesen enthalten und dann nur eine Teilmenge von Werten für die verbleibenden Datensätze, um Platz zu sparen. (SenML-Label 8 - "Datenwert")
Alle Datensätze im SenML-Paket sollen Messwerte enthalten. Wenn zusätzliche Informationen im selben Paket übertragen werden müssen, können zusätzliche Datensätze hinzugefügt werden. Für diese Datensätze ist das Namensfeld zu verwenden, indem ein Name mit mindestens einem Zeichen definiert wird. In SenML werden der Basisname und die Namensfelder angehängt, um den endgültigen Datensatznamen zu erhalten.
Der Name muss mindestens ein Zeichen außerhalb von [A-F, a-f, 0-9] enthalten. Dies kennzeichnet eine nicht hexadezimale Darstellung. Da die Zähler-ID normalerweise dezimal oder hexadezimal ist, lässt sich so die Gültigkeit des Datensatznamens leichter prüfen. Wenn ein Parser einen Datensatz mit einem solchen Namensfeld nicht erkennt, muss er den Datensatz ignorieren.
Die folgenden zusätzlichen Datensätze werden derzeit verwendet:
|
Datensatz |
Namensfeld |
Kommentar |
|---|---|---|
|
Encodertyp und -version |
„V“ |
In diesem Feld können Versionen für den Inhalt des Messfeldes definiert werden. |
|
Erweiterte Fehlerinformationen |
„I“ |
Dieser Datensatz ermöglicht das Senden erweiterter Informationen zu einer Messung, beispielsweise Fehlerinformationen. |
In der folgenden Tabelle werden zulässige Encodertypen und -versionen definiert. Die Informationen werden in einem speziellen Datensatz „Feld Encoderversion“ übertragen.
-
Dieses Feld kapselt sowohl die Codierung der Daten als auch die Versionierung
-
Es enthält keinen Zeitstempel
-
Es ist als SenML-Wert codiert
-
Es hat ein Namensfeld mit dem einzelnen Buchstaben „V“
-
Wenn beim Parsen eine ungültige Version gefunden wird, stoppt das Parsen mit einem Fehler
-
Der Wert ist als UINT16 zu interpretieren
-
Das erste Byte ist der Encodertyp und das zweite ist die Encoderversion, die beide als UINT8 interpretiert werden.
Beispiel: Der Wert 0x0102 bezeichnet den Kodierertyp 0x01 und die Kodiererversion 0x02.
-
Die definierten gültigen Kodierertypen und -versionen sind in der folgenden Tabelle aufgeführt.
-
Die Größe des gesamten Datensatzes beträgt maximal 7 Byte
-
-
Wenn der Datensatz ausgeschlossen ist, beträgt der Kodierertyp 0 und die Kodiererversion 0.
|
Kodierertyp |
Kodiererversion |
Daten |
Kommentar |
|---|---|---|---|
|
0 (M-Bus) |
0 |
|
M-Bus-Kodierung von Nutzlastdaten. Jeder Datensatz enthält alle DIF/VIF/Werte nach M-Bus. Beachten Sie, dass M-Bus für die Daten die Byte-Reihenfolge LSB zuerst verwendet und diese auch hier beibehalten werden muss. |
|
1 (Gateway) |
0 |
|
Gateway für Zählerdaten, d. h. Daten für mehrere Zähler befinden sich in einem einzigen Paket. Die Nutzlast kann je nach verwendeter Schnittstelle unterschiedliche Typen aufweisen. Beispiele für Nutzlastformate sind unverschlüsselte oder verschlüsselte M-Bus-Daten mit zusätzlichen Metadaten. Dieser Kodierertyp ist derzeit für Elvaco-Produkte zur Zähleranbindung nicht relevant. |
|
2 (Syslog) |
0 |
|
Als hexadezimale ASCII-Zeichenfolge kodierte Syslog-Datennachricht. Schlüssel 2 gibt die Protokollierungsebene an. Einzelheiten zu den Werten der einzelnen Ebenen finden Sie im Abschnitt zum Systemprotokoll des Moduls. |
|
3 (Transparent M-Bus) |
0 |
|
Transparente M-Bus-Daten. Die Nutzlast enthält ein vollständiges (kabelgebundenes) M-Bus-Telegramm einschließlich Header und CRC. Dieser Kodierertyp ist relevant, wenn der zählergesteuerte Messmodus Transparent verwendet wird. |
|
4 (Benutzerdefiniertes Format) |
0 |
|
Benutzerdefiniertes Nachrichtenformat. Die Nutzlast enthält M-Bus-kodierte Daten; die zurückgegebenen Felder wurden im Gerät konfiguriert. Header und CRC sind nicht enthalten. Die Zähler-ID ist Bestandteil der M-Bus-Daten und nicht des Basisnamens. |
Dieser Datensatz dient zum Senden erweiterter Informationen, die nicht als Teil der normalen Zählerauslesedaten gesendet werden können. Ein typischer Anwendungsfall sind zusätzliche Fehlercodes vom Zähler oder Gerät.
-
Das Format der erweiterten Informationen hängt vom ausgewählten Kodierer ab. Siehe Tabelle unten.
-
Die detaillierte Interpretation der Informationen ist produktspezifisch. Beispielsweise gelten die Fehlercodes eines Zählers jeweils für diesen bestimmten Zähler, auch wenn sie mit M-Bus kodiert sind.
-
Die Information wird als SenML-Datenwert kodiert.
-
Sie enthält ein Feld Name mit dem Wert „I“.
-
Sie muss einen Zeitstempel enthalten.
-
Der Zeitstempel kann mit dem eines anderen Zählerdatensatzes übereinstimmen. In diesem Fall gelten die beiden Datensätze als zum selben Zeitpunkt erfasst.
-
-
Die erweiterten Informationen sind ein optionaler Datensatz.
|
Kodierertyp |
Kodiererversion |
Format der erweiterten Fehlerinformationen |
|---|---|---|
|
0 (M-Bus) |
0 |
M-Bus-Kodierung von Nutzlastdaten. Jeder Datensatz enthält alle DIF/VIF/Werte nach M-Bus. Beachten Sie, dass M-Bus für die Daten die Byte-Reihenfolge LSB zuerst verwendet und diese auch hier beibehalten werden muss. |
|
1 (Gateway) |
0 |
Für Elvaco-Module zur Zähleranbindung nicht relevant. |
|
2 (Syslog) |
0 |
Noch nicht definiert |
|
3 (Transparent M-Bus) |
0 |
M-Bus-Kodierung von Nutzlastdaten. Jeder Datensatz enthält alle DIF/VIF/Werte nach M-Bus. Beachten Sie, dass M-Bus für die Daten die Byte-Reihenfolge LSB zuerst verwendet und diese auch hier beibehalten werden muss. |
Im Folgenden werden Beispielnutzdaten und deren Decodierung gezeigt. Die Nutzdaten bestehen aus drei Datensätzen: erstens Encodertyp und -version, zweitens ein regulärer Zählerstand mit Basisname (Zähler-ID) und Basiszeit und drittens erweiterte Informationen, die in diesem Fall den erweiterten Fehlercodes entsprechen.
CBOR-codierte Rohnutzdaten (Hex):
83A20061560200A32168363636393236333722C11A691C43A0085821040637570A000414EF472000022B0000023BFDFF025B0000025F000002FD170400A3006149084502FD1804000600
Beim Decodieren dieser Nutzdaten, z. B. mit https://cbor.me/, ergibt sich folgende CBOR-Struktur:
01 83 # array(3) 02 A2 # map(2) 03 00 # unsigned(0) 04 61 # text(1) 05 56 # "V" 06 02 # unsigned(2) 07 00 # unsigned(0) 08 A3 # map(3) 09 21 # negative(1) 10 68 # text(8) 11 3636363932363337 # "66692637" 12 22 # negative(2) 13 C1 # tag(1) 14 1A 691C43A0 # unsigned(1763460000) 15 08 # unsigned(8) 16 58 21 # bytes(33) 17 040637570A000414EF472000022B0000023BFDFF025B0000025F000002FD170400 # "\u0004\u00067W\n\u0000\u0004\u0014\xEFG \u0000\u0002+\u0000\u0000\u0002;\xFD\xFF\u0002[\u0000\u0000\u0002_\u0000\u0000\u0002\xFD\u0017\u0004\u0000" 18 A3 # map(3) 19 00 # unsigned(0) 20 61 # text(1) 21 49 # "I" 22 08 # unsigned(8) 23 45 # bytes(5) 24 02FD180400 # "\u0002\xFD\u0018\u0004\u0000" 25 06 # unsigned(6) 26 00 # unsigned(0)
In kompakterer Form ergibt sich:
[{0: "V", 2: 0}, {-2: "66692637", -3: 1(1763460000), 8: h'040637570A000414EF472000022B0000023BFDFF025B0000025F000002FD170400'}, {0: "I", 8: h'02FD180400', 6: 0}]
Anmerkung
Da dieses Paket die erweiterten Fehlerinformationen (im dritten Datensatz) enthält, wurde es als Alarm gesendet. Das bedeutet, dass es in einem separaten Topic veröffentlicht wurde (bei Verwendung von MQTT-SN) oder als Instanz des Zählerdatenobjekts 33911 (bei Verwendung von LwM2M Send).
Nachfolgend werden reale Beispielnutzdaten gezeigt. Beachten Sie, dass dieses Paket mehrere (5) Zählerauslesungen enthält. Eine Zählerauslesung entspricht einem Datensatz. Im ersten Datensatz des Pakets werden die Basiszeit und der Basisname (Zähler-ID) angegeben. Im letzten Datensatz werden Encodertyp und -version angegeben, damit die Daten korrekt interpretiert und geparst werden können.
Rohnutzdaten (Base64):
hqMhaDcxOTUxMzE4IsEaZtB0VAhYIQQGAHcDAAQUYdgKAAItEwACO1QBAlogAgJe8AEC/RcAAKIGOQODCFghBAYAdwMABBRY2AoAAi0TAAI7VAECWh8CAl7wAQL9FwAAogY5BwcIWCEEBv92AwAEFFDYCgACLRgAAjteAQJaHwICXuMBAv0XAACiBjkKiwhYIQQG/3YDAAQUR9gKAAItEwACO1QBAloeAgJe7wEC/RcAAKIGOQ4PCFghBAb+dgMABBQ/2AoAAi0UAAI7SgECWiACAl7sAQL9FwAAogBhVgIA
Beim Decodieren, z. B. mit einem CBOR-Decoder, ergibt sich folgende CBOR-Struktur:
1 86 # array(6) 2 A3 # map(3) 3 21 # negative(1) 4 68 # text(8) 5 3731393531333138 # "71951318" 6 22 # negative(2) 7 C1 # tag(1) 8 1A 66D07454 # unsigned(1724937300) # "2024-08-29T13:15:00Z" 9 08 # unsigned(8) 10 58 21 # bytes(33) 11 040600770300041461D80A00022D1300023B5401025A2002025EF00102FD170000 12 A2 # map(2) 13 06 # unsigned(6) 14 39 0383 # negative(899) # "2024-08-29T13:00:00Z" 15 08 # unsigned(8) 16 58 21 # bytes(33) 17 040600770300041458D80A00022D1300023B5401025A1F02025EF00102FD170000 18 A2 # map(2) 19 06 # unsigned(6) 20 39 0707 # negative(1799) # "2024-08-29T12:45:00Z" 21 08 # unsigned(8) 22 58 21 # bytes(33) 23 0406FF760300041450D80A00022D1800023B5E01025A1F02025EE30102FD170000 24 A2 # map(2) 25 06 # unsigned(6) 26 39 0A8B # negative(2699) # "2024-08-29T12:30:00Z" 27 08 # unsigned(8) 28 58 21 # bytes(33) 29 0406FF760300041447D80A00022D1300023B5401025A1E02025EEF0102FD170000 30 A2 # map(2) 31 06 # unsigned(6) 32 39 0E0F # negative(3599) # "2024-08-29T12:15:00Z" 33 08 # unsigned(8) 34 58 21 # bytes(33) 35 0406FE76030004143FD80A00022D1400023B4A01025A2002025EEC0102FD170000 36 A2 # map(2) 37 00 # unsigned(0) 38 61 # text(1) 39 56 # "V" 40 02 # unsigned(2) 41 00 # unsigned(0)
Unter https://cbor.me/ gibt es einen Validator für CBOR. Beachten Sie, dass er weder SenML noch M-Bus versteht.
Anmerkung
Im Validator wurde ein kleiner Fehler in der hexadezimalen Interpretation von negativen Zahlen identifiziert. Bitte beachten Sie dies, wenn Sie den Validator verwenden.
SenML/CBOR ist als Nachrichtenkodierung zu betrachten. Es definiert, wie die Nachrichten kodiert werden, aber nicht den tatsächlichen Inhalt der Nachrichten (welche Felder aus dem Zähler enthalten sind). SenML/CBOR/M-Bus ist eine solche Kodierung, aber es könnte mehrere geben, die auf dieser SenML/CBOR-Spezifikation basieren, und das obige Encoderversionsfeld definiert genau, welcher Typ und welche Version verwendet wird.
Der Inhalt der Nachricht wird durch das Nachrichtenformat definiert. Das Nachrichtenformat legt fest, welche Felder sowohl im ersten als auch in den nachfolgenden Datensätzen des SenML-Pakets enthalten sein sollen.
Die Anzahl der in einem Paket enthaltenen Datensätze wird durch die Auslese- und Übertragungsintervalle festgelegt. Weitere Informationen finden Sie unter „Auslesungen planen“. Wenn das Ausleseintervall 120 Minuten und das Übertragungsintervall 1440 Minuten beträgt, sind insgesamt 12 Auslesungen enthalten.
Jedes Produkt kann unterschiedliche maximale Nutzlastgrößen in einem einzigen Telegramm haben. Je nach Konfiguration (z. B. DTLS oder nicht) kann auch die Nettonutzlastgröße variieren. Daher muss das Gerät so viele Telegramme "füllen", wie zum Senden der Daten erforderlich sind. Es ist Sache des Benutzers, eine Konfiguration zu definieren, die einen vernünftigen Kompromiss zwischen Stromverbrauch (weniger Telegramme senden) und funktionalen Anforderungen (viele Daten werden gesendet) bietet.
Wenn ein Gerät mit einem Nachrichtenformat und vielen Auslesungen konfiguriert ist, passen die Daten möglicherweise nicht in ein einzelnes Telegramm. In solchen Fällen müssen mehrere Telegramme gesendet werden und jedes Telegramm muss vollständig selbstbeschreibend sein, d.h. Zähler-ID, Zeitstempel usw. enthalten.
|
Parameter |
Wert |
|---|---|
|
Ausleseintervall |
60 |
|
Übertragungsintervall |
1440 (täglich) |
|
Nachrichtenkodierung |
SenML/CBOR/M-Bus Version 0 |
|
Nachrichtenformat |
Standard |
|
Max. Übertragungen pro Tag |
3 |
Dieses Beispiel führt zur Übertragung einer Nachricht pro Tag mit 24 Auslesungen, deren Inhalt jeweils im Nachrichtenformat Standard definiert ist. Die Daten werden mit SenML/CBOR/M-Bus codiert. Bei jeder Übertragung werden maximal 3 solche nicht gesendeten Nachrichten übertragen (falls die Nachrichten aus irgendeinem Grund beim letzten Mal nicht gesendet wurden). Somit werden pro Tag maximal 3 Nachrichten übertragen (mit 3x24=72 Auslesungen für 3 Tage).
|
Parameter |
Wert |
|---|---|
|
Ausleseintervall |
120 |
|
Übertragungsintervall |
720 |
|
Nachrichtenkodierung |
SenML/CBOR/M-Bus Version 0 |
|
Nachrichtenformat |
Tarif |
|
Max. Übertragungen pro Tag |
2 |
Dieses Beispiel führt alle 12 Stunden zur Übertragung einer Nachricht mit 6 Auslesungen, deren Inhalt jeweils im Nachrichtenformat Tarif definiert ist. Die Daten werden mit SenML/CBOR/M-Bus codiert. Bei jeder Übertragung werden maximal 2 solche nicht gesendeten Nachrichten übertragen (falls die Nachrichten aus irgendeinem Grund beim letzten Mal nicht gesendet wurden). Somit werden pro Tag maximal 4 Nachrichten übertragen (mit 4x6=24 Auslesungen für 2 Tage).
Tabelle 12. Einstellungen zur Steuerung des lokalen Zugriffs auf das Gerät
|
LwM2M-Ressource |
Einstellung |
Beschreibung |
|---|---|---|
|
33906/./4 |
NFC aktiviert |
Boolesch. Schaltet die NFC-Schnittstelle des Geräts ein oder aus. Wenn sie deaktiviert ist, kann das Gerät nicht lokal konfiguriert werden. |
|
33906/./5 |
NFC-Konfiguration gesperrt |
Boolesch. Schaltet das NFC-Konfigurationsschloss ein oder aus. Wenn es aktiviert ist, kann das Gerät ohne den PAK nicht lokal konfiguriert werden. |
Tabelle 13. Einstellungen zur Steuerung des automatischen NFC-Konfigurationsschlosses
|
LwM2M-Ressource |
Einstellung |
Beschreibung |
|---|---|---|
|
33906/./71 |
Automatisches NFC-Konfigurationsschloss aktivieren |
Boolesch. Schaltet das automatische NFC-Konfigurationsschloss ein oder aus. Wenn es eingeschaltet ist, wird das Konfigurationsschloss nach Ablauf der Zeitüberschreitung für die automatische Sperre aktiviert. Der Timer startet, sobald das Gerät aktiviert wurde. |
|
33906/./72 |
Zeitüberschreitung des automatischen NFC-Konfigurationsschlosses |
Zeit in Minuten. Legt fest, nach wie vielen Minuten nach der Aktivierung das Konfigurationsschloss aktiviert wird. Hierfür muss das automatische NFC-Konfigurationsschloss aktiviert sein. |
Kommentare (0 Kommentare)