Betrieb
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, aber ü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 (First in First out (FiFO) oder Last in First out (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 ist auf die Uhr des Zählers angewiesen, um die Zeit zu halten. Es wird davon ausgegangen, dass die Zeit im Zähler in der Standard-Ortszeit (keine Sommerzeit) angegeben ist. Bei der Zeitsynchronisation im Zähler-mit der Elvaco OTC-App wird immer die lokale Standardzeit verwendet, auch wenn die Sommerzeit in Kraft ist. Die vom Modul gesendeten zeitgestempelten Zählerdaten können durch Angabe des Konfigurationsparameters "UTC-Offset" so eingestellt werden, dass sie in UTC gesendet werden. Der UTC-Offset wird vor der Übertragung vom Zeitstempel abgezogen. Wenn sich der Zähler in Schweden befindet, wo die MEZ (mitteleuropäische Zeit) gilt, sollte der UTC-Offset auf +60 (+1h) eingestellt sein. In diesem Fall wird um 12.00 Uhr ein Telegramm mit dem Zeitstempel 11.00 gesendet, da dies die entsprechende UTC-Zeit ist. Ein Zähler in New York (USA) sollte einen UTC-Offset von „-300“ (-5h) haben usw. 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, sollten die Geräte vor der Datenübertragung eine zufällige Verzögerung aufweisen. Die Verzögerung ist entweder über die Elvaco OTC-App und die NFC-Schnittstelle oder aus der Ferne über ein Geräteverwaltungssystem konfigurierbar.
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).
TÜbertragung, TOffset and TVerzögerung sind Parameter im Produkt.
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 10. 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-Auftrag)
-
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 Anzeige, insgesamt 4 Anzeigen pro Sendung
-
Das Gerät benötigt ungefähr 1 Tag, um "aufzuholen" und eine Messung pro Stunde zu senden
Beispiel 11. 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 (Anzeigen 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-Auftrag)
-
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
CMi6160 kann in zwei verschiedenen Modi betrieben werden: zählergesteuert oder modulgesteuert. Die Auswahl des Modus bestimmt, welche Optionen für die vom Modul zu sendenden Daten verfügbar sind. Informationen zum Wechseln zwischen den Modi finden Sie im LwM2M-Objekt „Elvaco MCM Config“ (Objekt-ID 33906, Ressource 68). Im zählergesteuerten Modus wird die Nutzlast durch die Einstellungen im Zähler bestimmt. Im modulgesteuerten Modus bestimmen die Moduleinstellungen, welche Daten gesendet werden.
Im zählergesteuerten Modus wird das im Diehl SHARKY- oder SCYLAR-Zähler festgelegte kundenspezifische Telegramm transparent und unverändert gesendet. Dieses Telegramm ist in der Regel bei der Lieferung im Zähler vorkonfiguriert, kann jedoch auch vor Ort angepasst werden. In diesem Modus wird die Nachrichtenkodierung automatisch auf SenML/CBOR eingestellt, um größere kundenspezifische Telegramme zu übertragen. Da Diehl SHARKY und SCYLAR das M-Bus-Protokoll verwenden, liegt auch die in den SenML/CBOR-Paketen übertragene Nutzlast im M-Bus-Format vor.
Im modulgesteuerten Modus hängen die gesendeten Daten vom ausgewählten Nachrichtenformat ab. CMi6160 bietet die beiden Nachrichtenformate Standard und Tariff. Eine vollständige Liste der in den einzelnen Formaten enthaltenen Datensätze finden Sie in Abschnitt 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 130. 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 131. 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 132. 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. |
In der folgenden Tabelle sind die verfügbaren Zählerfehler und ihre Zuordnung zur Bitmaske aufgeführt.
Bei Verwendung des Nachrichtenformats Tariff kann eine typische Nutzlast wie folgt aussehen:
04139C2E0000023B0000325A0000325E0000841006000000008420FD320000000001FD1750
Wenn dieselbe Nutzlast als Alarmmeldung gesendet wird, werden die erweiterten Fehlercodes an die Nutzlast angehängt:
04139C2E0000023B0000325A0000325E0000841006000000008420FD320000000001FD175002FD180800
Die erweiterten Zählercodes werden durch M-Bus-DIF/VIF 2FD18, Error Mask, identifiziert; darauf folgen die beiden Fehlerbytes 0x0800. Da M-Bus Little-Endian-Kodierung verwendet, lautet die vollständige Fehlermaske 0b0000 0000 0000 1000. Dies bedeutet, dass Fehlerbit 3 gesetzt ist und ein Problem mit den Temperaturmessungen vorliegt (siehe Tabelle zur Interpretation von Zählerfehlern).
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 storage level und Syslog auto-upload level. Die Speicherebene bestimmt, welche Ereignisse protokolliert und im Modul gespeichert werden. Die Ebene 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 Protokollierungsebene 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 134. 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 135. 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 136. 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 = Jahreshöchstwert* Bit 27-24 = Monat Bit 23-21 = Jahrestiefstwert* 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 die Kombination des Feldes Jahreshöchstwert und Jahrestiefstwert ausgelesen. Zum Beispiel: Jahreshöchstwert = 0010 und Jahrestiefstwert = 010 => Jahr = 0010010 **0 = Standardzeit, 1 = Sommerzeit ***0 = Zeitstempel ist gültig, 1 = Zeitstempel ist nicht gültig |
|
2 |
Meter ID |
6 Bytes |
Gemäß dem Identifikationsfeld von M-Bus EN 13757-3 |
Meter 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 137. 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 |
|
Einheit der Vorlauftemperatur |
TU |
|
Rücklauftemperatur |
RT |
|
Rücklauftemperatureinheit |
RU |
|
Fehler-Flags |
EF |
|
Energie Tarif 1 |
T1 |
|
Energieeinheit Tarif 1 |
U1 |
|
Energie Tarif 2 |
T2 |
|
Energieeinheit Tarif 2 |
U2 |
|
Energie Tarif 3 |
T3 |
|
Energieeinheit Tarif 3 |
U3 |
|
Fehlende Zeit |
MT |
|
Fehlende Zeiteinheit |
MU |
|
Erweiterte Informationen |
I |
Beispiel Nutzlast, JSON
{"TS":"2025-08-27T07:36:01Z "," ID":81493511, "E":0, "U":"kWh", "V":0, "VU":"m3", "P":5012, "PU":"W", "F":212, "FU":"l/h", "FT":30.1, "TU":"C", "RT":22.5, "RU": "C", "I":"0x0010", "EF":"0x70"}
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. eine Liste (aka Array) von Auslesewerten (Datensätzen), kodiert mit CBOR. Jeder Datensatz ist eine Zuordnung von Schlüssel-Wert-Paaren mit 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.
Base time 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 Packs enthalten sein
-
Alle anderen Werte haben einen Zeitwert, der zur Basiszeit addiert wird, um den genauen Zeitpunkt der Auslesung zu bestimmen
Base name wird verwendet, um die MeterID (Zähleridentifikation im 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 der Packung enthalten sein
-
Dies wird als String-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 MeterIDs 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 MeterID 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 MeterID 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 |
|---|---|---|
|
Encoder Typ & 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 "Encoder Version field" übermittelt.
-
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 die erste Bytereihenfolge LSB für die Daten verwendet und auch hier beibehalten werden soll. |
|
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. |
Das folgende Beispiel zeigt ein Datenpaket mit zwei Datensätzen: Der erste enthält transparente M-Bus-Daten, der zweite mit „I“ gekennzeichnete erweiterte Informationen.
1 83 # array(3) 2 3 ** Record for defining encoder and version ** 4 5 A2 # map(2) 6 00 # unsigned(0) ## Key 1: Name 7 61 # text(1) ## Value 1: 8 56 # "V" ## "V" = version 9 02 # unsigned(2) ## Key 2: Value 10 19 0300 # unsigned(768) ## Value 2: enc=3, ver=0 11 12 ** first record of the pack ** 13 14 A2 # map(2) 15 22 # negative(2) ## Key 1: Base Time 16 C1 # tag(1) ## Value 1: 17 1A 6835B149 # unsigned(1748349257) ## 2025-05-27T12:28:33+00:00 18 08 # unsigned(8) ## Key 2: Data value 19 58 36 # bytes(54) ## Value 2: M-Bus telegram 20 6830306808007274 21 031961A51140048B 22 0000000C06080000 # Payload data, line breaks added for readbility 23 00046D220C3B350C 24 13377400008C10FD 25 32000000008C2013 26 000000006D16 27 28 ** second record of the pack, containing extended information ** 29 30 A3 # map(3) 31 00 # unsigned(0) ## Key 1: Name 32 61 # text(1) ## Value 1: 33 49 # "I" ## "I" = extended information 34 08 # unsigned(8) ## Key 2: Data value 35 45 # bytes(5) ## Value 2: M-Bus data 36 02FD187000 # "\u0002\xFD\u0018p\u0000" 37 06 # unsigned(6) ## Key 3: Timestamp 38 00 # unsigned(0) ## Value 3: Relative time 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 im nachfolgenden Datensatz des SenML-Pakets enthalten sein sollen.
Die Anzahl der in einem Paket enthaltenen Datensätze wird durch die Auslese- und Sendeintervalle festgelegt. Weitere Informationen finden Sie unter Planen von Auslesungen. Wenn das Ausleseintervall 120 Minuten und das Übertragungsintervall 1440 Minuten beträgt, werden insgesamt 12 Anzeigen einbezogen.
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 Messwerten, die alle den Inhalt haben, der im Standardnachrichtenformat definiert ist. Die Daten werden mit SenML/CBOR/M-Bus kodiert. Maximal 3 nicht gesendete solche Nachrichten werden jedes Mal gesendet (wenn die Nachrichten aus irgendeinem Grund nicht "letztes Mal" gesendet wurden). Die maximal übertragenen Nachrichten pro Tag betragen also 3 (mit 3x24=72 Messwerten, die 3 Tage abdecken)
|
Parameter |
Wert |
|---|---|
|
Ausleseintervall |
120 |
|
Übertragungsintervall |
720 |
|
Nachrichtenkodierung |
SenML/CBOR/M-Bus Version 0 |
|
Nachrichtenformat |
Tarif |
|
Max. Übertragungen pro Tag |
2 |
Dieses Beispiel führt zur Übertragung einer Nachricht alle 12 Stunden mit 6 Lesevorgängen, die alle den im Nachrichtenformat "Tarif" definierten Inhalt aufweisen. Die Daten werden mit SenML/CBOR/M-Bus kodiert. Maximal 2 nicht gesendete solche Nachrichten werden jedes Mal gesendet (wenn die Nachrichten aus irgendeinem Grund nicht "letztes Mal" gesendet wurden), so dass die maximal übertragenen Nachrichten pro Tag 4 sind (mit 4x6 = 24 Messwerten, die 2 Tage abdecken).
Tabelle 138. 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 139. 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. |
-
Halten Sie die Drucktaste 5–15 Sekunden gedrückt.
-
Lassen Sie die Taste los, wenn die grüne LED aufleuchtet.
-
Halten Sie die Drucktaste 15–20 Sekunden gedrückt.
-
Lassen Sie die Taste los, wenn die rote LED aufleuchtet.
Beim Zurücksetzen auf die Werkseinstellungen werden die Geräteeinstellungen auf die Werkseinstellungen zurückgesetzt. Außerdem werden alle im Modul gespeicherten Zählerdaten und Systemprotokolleinträge gelöscht. Das Zurücksetzen kann entweder über die Elvaco OTC App oder remote über LwM2M (Ressource 3/./5) erfolgen.
Anmerkung
Beim Zurücksetzen auf die Werkseinstellungen werden alle Netzwerk- und Serverparameter auf ihre Werkseinstellungen zurückgesetzt. Anschließend versucht das Gerät, mithilfe der automatischen APN-Erkennung eine Bootstrap-Verbindung zu Elvacos Standardserver herzustellen.
Wenn die SIM-Karte ausschließlich für einen privaten APN konfiguriert ist, kann sich das Gerät weiterhin im NB-IoT-Netzwerk registrieren, den Bootstrap-Server von Elvaco jedoch nicht erreichen. Das Gerät ist dann logisch nicht erreichbar und muss lokal neu konfiguriert werden.
Kommentare (0 Kommentare)