IoT-Zähler: Registrierung eines Geräts und wie es seine Messwerte signiert
IoT-Geräte: Registrieren Sie ein AMI oder einen IoT-Endpunkt, kopieren Sie dessen Geheimnis (wird einmal angezeigt), wechseln Sie es mit dem neuen Geheimnis und sehen Sie, wie das Gerät jede Anfrage an /api/public/utilities/iot/reads signiert – mit einer Beispielanfrage, den Grenzwerten und jeder Antwort, die es erhalten kann.
Ein AMI- oder IoT-Zähler übermittelt seine Messwerte über HTTPS an TRANXACT. Jedes Gerät verfügt über einen vom Server generierten Schlüssel (utd_ gefolgt von 24 Buchstaben und Ziffern) und ein geheimes Passwort. Das Gerät authentifiziert sich bei jeder Anfrage, sodass niemand anderes Messwerte für diesen Zähler übermitteln kann.
Registrieren eines Geräts
- Öffnen Sie CRM › Utilities › Utility Meters & Reads › IoT Devices und klicken Sie auf New.
- Geben Sie eine Bezeichnung ein, wählen Sie den Messwert aus und wählen Sie die Signatur: hmac (eine HMAC-SHA256-Signatur jeder Anfrage – empfohlen), bearer (Schlüssel und Geheimnis werden als Token gesendet) oder beides.
- Stellen Sie für dieses Gerät und die Firmware (falls bekannt) die maximale Anzahl an Lesevorgängen pro Minute ein.
- Speichern. Die Antwort zeigt den Schlüssel und das Geheimnis: „Kopieren Sie das Geheimnis jetzt – es wird nicht erneut angezeigt.“ Geben Sie beides in die Gerätekonfiguration ein.
Das Geheimnis wird nur einmal angezeigt. Es wird danach nie wieder aufgelistet, auch nicht für Administratoren; die Liste zeigt nur die letzten vier Zeichen („Geheimnis endet“). Bei Verlust wird ein neues ausgestellt.
Das Geheimnis drehen
Drücken Sie in der Gerätezeile auf „Neues Geheimnis“ und bestätigen Sie. Das neue Geheimnis wird einmal angezeigt, das alte ist danach nicht mehr gültig. Geben Sie dem Gerät daher sofort das neue Geheimnis. Stellen Sie den Status auf „Deaktiviert“, um ein Gerät ohne Rotation zu stoppen, oder auf „Außer Betrieb“, wenn es außer Dienst gestellt wird.
Wie ein Gerät eine Messung signalisiert
- Erstellen Sie den JSON-Body: eine Liste von Lesevorgängen, jeweils mit read_at (ISO-8601-Zeit) und dem Messwert. Batterie-, Signal-, Firmware- und Alarminformationen sind optional.
- Die aktuelle Unix-Zeit in Sekunden als Zeitstempel verwenden.
- Berechnen Sie unter dem Gerätegeheimnis den HMAC-SHA256-Hash des Zeitstempels, eines Punktes und der exakten Bytes des Nachrichtentextes: „<Zeitstempel>.<Nachrichtentext>“. Schreiben Sie das Ergebnis als 64-stellige Hexadezimalzeichen in Kleinbuchstaben.
- Senden Sie den Body per POST an /api/public/utilities/iot/reads mit den Headern X-Utility-Device (der Schlüssel), X-Utility-Timestamp und X-Utility-Signature (die Hexadezimaldarstellung, optional mit dem Präfix sha256=).
POST https://<your-tranxact-host>/api/public/utilities/iot/reads
Content-Type: application/json
X-Utility-Device: <utd_DEVICE_KEY>
X-Utility-Timestamp: <1792252800>
X-Utility-Signature: sha256=<64 hex characters>
{"reads":[{"read_at":"<2026-10-17T09:30:00Z>","reading":<48213.4>}],
"battery_pct":<87>,"signal_dbm":<-71>,"firmware":"<2.4.1>",
"alarms":[{"type":"<leak>","detail":"<continuous flow 6 h>"}]}
Dieselbe Signatur funktionierte auch in einer Shell, um ein Gerät vor der Installation zu testen:
BODY='{"reads":[{"read_at":"<2026-10-17T09:30:00Z>","reading":<48213.4>}]}'
TS=$(date +%s)
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "<DEVICE_SECRET>" | sed 's/^.* //')
curl -X POST "https://<your-tranxact-host>/api/public/utilities/iot/reads" \
-H "Content-Type: application/json" \
-H "X-Utility-Device: <utd_DEVICE_KEY>" \
-H "X-Utility-Timestamp: $TS" \
-H "X-Utility-Signature: sha256=$SIG" \
--data-binary "$BODY"
Signieren Sie genau die Bytes, die Sie senden. Wenn Sie das JSON nach der Signierung neu formatieren oder es mit einem anderen Zeilenumbruch senden, verändern sich die Bytes, und die Signatur stimmt nicht mehr überein.
Ein Gerät, das auf Bearer (oder beides) eingestellt ist, sendet stattdessen möglicherweise Authorization: Bearer <utd_DEVICE_KEY>.<DEVICE_SECRET> ohne Signatur-Header. HMAC ist die sicherere Wahl: Das Geheimnis wird niemals übertragen, und eine abgefangene Anfrage kann nicht wiederholt werden.
Grenzen
- Der Zeitstempel muss innerhalb von 5 Minuten von der Serveruhr abweichen: Stellen Sie sicher, dass die Geräteuhr über NTP synchronisiert ist.
- Dieselbe signierte Anfrage wird zweimal als Wiederholungsanfrage abgelehnt. Ein bereits vorhandener Lesevorgang wird als Duplikat gezählt und einmal gespeichert.
- Maximal 64 KB und 500 Lesevorgänge pro Anfrage, die maximale Anzahl an Lesevorgängen pro Minute des Geräts und 600 Anfragen pro Minute von einer Adresse.
- Das Gerät muss eingeschaltet und an einen Zähler angeschlossen sein.
Was das Gerät zurückerhält
| Antwort | Bedeutung |
|---|---|
| 201 oder 200 mit akzeptierten, Duplikaten, Ausnahmen, abgelehnten, Alarmen und Problemen | Die Anfrage wurde entgegengenommen. Jeder Lesevorgang wird gezählt; ungültige Lesevorgänge werden anhand ihres Index als „Probleme“ gekennzeichnet. |
| 401 Geräteauthentifizierung | Unbekannter oder inaktiver Schlüssel, falscher Modus oder eine nicht übereinstimmende Signatur. Die Anzahl der abgelehnten Zugriffe des Geräts erhöht sich. |
| 401 veralteter Zeitstempel | Der Zeitstempel ist um mehr als 5 Minuten falsch. |
| 409 Wiederholung | Dieser unterzeichnete Antrag ist bereits eingegangen. |
| 413 too_many_reads | Mehr als 500 Lesevorgänge in einer Anfrage. |
| 422 ohne Zähler | Das Gerät ist nicht an einen Zähler angeschlossen. |
| 429 ratenbegrenzt | Die Übertragung erfolgte schneller als das zulässige Limit. Bitte warten Sie und versuchen Sie es erneut. |
| 400 bad_json | Der Inhalt ist kein JSON. |
| 403 utilities_off | Die Versorgung des Unternehmens mit Strom, Wasser und Gas ist unterbrochen. |
Gesundheit und Alarme
- Jede Anfrage aktualisiert den Status „Zuletzt gesehen“, den Akkustand in Prozent und die Signalstärke in dBm des Geräts. Bei einem Akkustand unter 15 % wird ein Alarm ausgelöst.
- Alarmtypen, die ein Gerät senden kann: niedriger Batteriestand, Manipulation, Leckage, Rückfluss, kein Durchfluss, Offline und Sonstige. Pro Gerät ist jeweils ein Alarm pro Typ aktiv.
- Die Gerätealarme werden aufgelistet; „Löschen“ schließt einen Alarm mit einem Hinweis. Ein Leck löst automatisch einen Serviceauftrag zur Leckageuntersuchung mit hoher Priorität aus; ein Manipulations- oder Rückflussalarm löst ebenfalls einen Serviceauftrag aus.
- Die im Dashboard angezeigte Zahl für IoT-Zähler (24h) gibt die Anzahl der aktiven Geräte an, von denen am Vortag Daten empfangen wurden.