Signaturen mehrerer Pässe prüfen
Prüfen Sie die Ed25519-Signaturen einer Liste öffentlicher Pässe offline, laden Sie das Schlüsselset nur einmal und geben Sie je Pass ein Ergebnis aus.
Das Skript erwartet Pass-UUIDs (den Teil nach urn:dpp:) als Argumente, lädt das Schlüsselset von
/.well-known/batterypass/keys.json einmal und prüft jeden Pass wie in
Passsignatur offline prüfen beschrieben: document nach RFC 8785
kanonisieren, den SHA-256 mit verification.hash vergleichen und die Ed25519-Signatur mit dem Schlüssel prüfen,
den verification.key_id nennt. Einen API-Schlüssel braucht es nicht. Ist ein Pass nicht valid, endet es mit
dem Status 1; es passt also in einen Monitoring-Job oder eine Wareneingangsprüfung.
Der Tab cURL nutzt stattdessen verifyPassport: Dort prüft der
Server die Signaturen für Sie. Das geht schnell, verlässt sich aber auf die Antwort des Servers.
#!/usr/bin/env bash
# verify-many.sh <passport-uuid>...: the server-side check with verifyPassport (needs curl and jq)
for id in "$@"; do
curl -sS "$BATTERYPASS_URL/api/v1/public/passports/$id/verify" |
jq -r --arg id "$id" '"\($id)\t\(if .valid == true then "valid (version \(.version_no))" elif .code then .code else "INVALID" end)"'
done0192f0c4-7d1e-7a3b-9c55-2f1e8d4a6b10 valid
0192f0c4-7d1e-7a3b-9c55-2f1e8d4a6b11 not checked (qr_locked)
0192f0c4-7d1e-7a3b-9c55-2f1e8d4a6b12 error 404not checked heißt, dass der Pass gerade nicht öffentlich ist (sein status steht dabei); ein signiertes Dokument
gibt es dann nicht. Öffentliche Abrufe sind auf 300 Anfragen pro Minute und Client-Adresse begrenzt; bei langen
Listen legen Sie eine Pause ein oder behandeln 429 wie unter
Fehler und Wiederholungen. Um Pässe eines anderen Herstellers zu prüfen, setzen
Sie BATTERYPASS_URL auf die Adresse, von der dessen Pässe stammen.
Data-Warehouse-Abgleich
Gehen Sie alle Einheiten und ihre aktuellen Werte seitenweise durch und schreiben Sie je Einheit eine JSON-Zeile, bereit zum Laden in ein Data Warehouse.
Veröffentlichte Pässe eines Modells
Listen Sie jede Einheit eines Batteriemodells mit veröffentlichtem Pass auf und geben Sie Pass-ID, aktuelle Version und öffentlichen Link als CSV aus.