Zum Inhalt

Eventschema

Unsere Produkte (BMA, BCA, B101, B401, BMA TLC, Mobile BMA) senden strukturierte MQTT-Events, sobald ein konfigurierter Trigger auslöst, und streamen sie an Ihren eigenen Broker, wie unter Control Center → Datenübertragung konfiguriert.

Event JSON Schema

Laden Sie das verbindliche Schema unter events/schema/6.0/schema.json herunter und nutzen Sie es als Vertrag für Validatoren oder generierte Modelle. Fügen Sie Payload und Schema in ein JSON-Schema-Tool (z. B. jsonschemavalidator.net) ein, um die Kompatibilität zu prüfen.

Gemeinsame Felder

Jede Payload beginnt mit einer gemeinsamen Hülle und bettet dann einen oder mehrere eventspezifische Abschnitte ein.

  • version, eventSchema: identifizieren die Schemaversion (aktuell 6.0) und die kanonische Referenz-URL.
  • uuid: weltweit eindeutige Kennung je Event.
  • tenantId: Control-Center-Tenant, dem das Gerät zugeordnet ist.
  • node: beschreibt den Hardware-Node (Gerät), der das Event ausgelöst hat, inklusive node.id, node.name und optional node.metadata.
  • stream: beschreibt den Video- oder Sensorstream des Nodes, inklusive stream.id, stream.name und optionalen stream.geoLocation-Koordinaten [lat, lon].

Crossing Line Event

Ein Crossing Line-Trigger löst aus, sobald der Mittelpunkt eines Objekts die konfigurierte Linie kreuzt, und sendet ein crossingLineEvent mit den folgenden Feldern.

  • crossingLineEvent.class und optional crossingLineEvent.subClass: erkannte Objektklasse (z. B. person, car, truck) gemäß der Objektklassen-Referenz.
  • crossingLineEvent.direction plus optional crossingLineEvent.directionName: normalisierte Richtung (in, out) sowie optionaler benutzerdefinierter Name aus der Trigger-Konfiguration.
  • crossingLineEvent.lineId, crossingLineEvent.lineName: Kennung und Name der Crossing Line.
  • crossingLineEvent.timestamp: UTC-Zeitpunkt der Überquerung im ISO-8601-Format.
  • crossingLineEvent.trackId, crossingLineEvent.trackUuid: verknüpfen das Event mit der zugrunde liegenden Trajektorie des Objekts.
Beispiel: Crossing Line Event
{
  "crossingLineEvent": {
    "class": "car",
    "subClass": "van",
    "direction": "in",
    "lineId": "e8f82efd-82bf-499d-be17-b66371f16375",
    "lineName": "cl0",
    "timestamp": "2025-11-05T14:07:28.918328Z",
    "trackId": 1048578,
    "trackUuid": "28e3681f-5398-4347-8c3d-ca64a3c25537"
  },
  "node": {
    "id": "99031920-6239-471e-a3d7-f241b7753fd0",
    "name": "BMA"
  },
  "stream": {
    "id": "79031920-6239-471e-a3d7-f241b7753fd0",
    "name": "Stream1"
  },
  "version": "6.0",
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
  "tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}

Bewegungspfad

Wenn Bewegungspfad an Event anhängen aktiviert ist, enthält das Event eine Trajektorie mit absoluten Pixelkoordinaten des Objekts. Es werden bis zu 10 Track-Punkte gesendet; längere Pfade überspringen Zwischenpunkte.

Beispiel: Crossing Line Event mit Pfad
{
  "crossingLineEvent": {
    "class": "car",
    "subClass": "van",
    "direction": "in",
    "lineId": "e8f82efd-82bf-499d-be17-b66371f16375",
    "lineName": "cl0",
    "timestamp": "2025-11-05T14:07:28.918328Z",
    "trackId": 1048578,
    "trackUuid": "28e3681f-5398-4347-8c3d-ca64a3c25537",
    "path": [
      {
        "h": 311.0,
        "timestamp": "2025-11-05T14:07:20.228986Z",
        "w": 325.0,
        "x": 1080.0,
        "y": 355.0
      },
      {
        "h": 348.0,
        "timestamp": "2025-11-05T14:07:21.106134Z",
        "w": 376.0,
        "x": 1037.0,
        "y": 367.0
      },
      {
        "h": 454.0,
        "timestamp": "2025-11-05T14:07:28.867676Z",
        "w": 536.0,
        "x": 826.0,
        "y": 447.0
      }
    ]
  },
  "node": {
    "id": "99031920-6239-471e-a3d7-f241b7753fd0",
    "name": "BMA"
  },
  "stream": {
    "id": "79031920-6239-471e-a3d7-f241b7753fd0",
    "name": "Stream1"
  },
  "version": "6.0",
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
  "tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}

Automatic Number Plate Recognition (ANPR)

Wenn das ANPR-Modell oder die Option Parking Mode ANPR (verfügbar mit den Traffic & Parking-Modellen — Standard oder Accuracy+) für einen Stream aktiviert ist, erscheinen folgende Zusatzfelder.

  • crossingLineEvent.numberPlate: erkannter Kennzeichentext.
  • crossingLineEvent.numberPlateOrigin: Land/Region des Kennzeichens (ISO 3166-1 alpha-2).
  • crossingLineEvent.numberPlateArea: regionales Kürzel des Kennzeichentexts.
  • crossingLineEvent.numberPlateLines: ein- oder zweizeiliges Kennzeichen.
  • crossingLineEvent.numberPlateRect: Bounding-Box des Kennzeichens;
  • crossingLineEvent.vehicleRect: Bounding-Box des gesamten Fahrzeugs. Nur mit Parking Mode ANPR verfügbar.

Information

Mit dem ANPR-Modell wird ausschließlich die Klasse numberplate ausgegeben; vehicleRect entfällt. Die Position des Kennzeichens im Bild wird in absoluten Koordinaten angegeben.

Beispiel: Crossing Line Event mit Parking Mode ANPR
{
  "crossingLineEvent": {
    "class": "car",
    "subClass": "van",
    "direction": "in",
    "lineId": "e8f82efd-82bf-499d-be17-b66371f16375",
    "lineName": "ibktwi_cl0",
    "timestamp": "2025-11-05T14:07:28.918328Z",
    "trackId": 1048578,
    "trackUuid": "28e3681f-5398-4347-8c3d-ca64a3c25537",
    "numberPlate": "I1544AM",
    "numberPlateOrigin": "AT",
    "numberPlateArea": "I",
    "numberPlateLines": 1,
    "numberPlateRect": {
      "h": 47,
      "w": 150,
      "x": 128,
      "y": 344
    },
    "vehicleRect": {
      "h": 445,
      "w": 535,
      "x": 836,
      "y": 437
    }
  },
  "node": {
    "id": "99031920-6239-471e-a3d7-f241b7753fd0",
    "name": "test"
  },
  "stream": {
    "id": "79031920-6239-471e-a3d7-f241b7753fd0",
    "name": "streamname"
  },
  "version": "6.0",
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
  "tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}
Beispiel: Crossing Line Event mit ANPR-Modell
{
  "crossingLineEvent": {
    "class": "numberplate",
    "direction": "in",
    "lineId": "e8f82efd-82bf-499d-be17-b66371f16375",
    "lineName": "ibktwi_cl0",
    "numberPlate": "I1544AM",
    "numberPlateArea": "I",
    "numberPlateLines": 1,
    "numberPlateOrigin": "AT",
    "numberPlateRect": {
      "h": 36,
      "w": 134,
      "x": 1139,
      "y": 661
    },
    "timestamp": "2025-11-05T12:48:09.175453Z",
    "trackId": 493,
    "trackUuid": "7854a1b7-c9d4-4519-b081-464a1b182cb7"
  },
  "node": {
    "id": "99031920-6239-471e-a3d7-f241b7753fd0",
    "name": "test"
  },
  "stream": {
    "id": "79031920-6239-471e-a3d7-f241b7753fd0",
    "name": "streamname"
  },
  "version": "6.0",
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
  "tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}

Region of Interest Event

Ein Region of Interest-Trigger sendet ein regionOfInterestEvent, das belegte Objekte und Verweildauern auflistet.

  • regionOfInterestEvent.objects[]: aktuelle Objekte mit regionOfInterestEvent.objects[].class/subClass gemäß Objektklassen, regionOfInterestEvent.objects[].trackId und regionOfInterestEvent.objects[].dwellTime in Sekunden.
  • regionOfInterestEvent.roiId, regionOfInterestEvent.roiName: konfigurierte ROI-Kennung und Name.
  • regionOfInterestEvent.state: occupied, wenn mindestens ein Objekt in der ROI ist, sonst vacant.
  • regionOfInterestEvent.triggerType: Grund für das Event (time oder change).
Beispiel: Region of Interest Event
{
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "node": {
    "id": "c44d31c4-de0c-4933-b562-0d627c7db2b6",
    "name": "2021110040"
  },
  "regionOfInterestEvent": {
    "capacity": 1,
    "objects": [
      {
        "class": "car",
        "dwellTime": 0,
        "trackId": 2,
        "trackUuid": "e5c1606c-5b2e-41c4-a445-7a89fb3934b9"
      }
    ],
    "roiId": "cb2ed4b3-b200-4f0e-90b5-cd00aa999328",
    "roiName": "roi links",
    "state": "occupied",
    "timestamp": "2025-12-03T16:39:07.809630Z",
    "triggerType": "change"
  },
  "stream": {
    "geoLocation": {
      "coordinates": [
        11.40,
        47.26
      ]
    },
    "id": "f0b5f1dd-d1a5-47de-b1f7-ffe1704baf7c",
    "name": "Stream1"
  },
  "tenantId": "3bb3ed7e-4c92-4db3-b317-1e06a4bc4995",
  "uuid": "ed78e199-a306-4c13-828f-9d54b5555e44",
  "version": "6.0"
}

Automatic Number Plate Recognition (ANPR)

Wenn für einen Stream das ANPR-Modell oder die Option Parking Mode ANPR (verfügbar bei den Traffic & Parking-Modellen — Standard oder Accuracy+) aktiviert ist, stehen bei ROI-Objekten die folgenden Zusatzfelder zur Verfügung.

  • regionOfInterestEvent.objects[].numberPlate: erkannten Kennzeichentext.
  • regionOfInterestEvent.objects[].numberPlateOrigin: Land/Region des Kennzeichens (ISO 3166-1 alpha-2).
  • regionOfInterestEvent.objects[].numberPlateArea: Regionalcode des Kennzeichens.
  • regionOfInterestEvent.objects[].numberPlateLines: gibt Ein- oder Zweizeiler an.
  • regionOfInterestEvent.objects[].numberPlateRect: Bounding-Box des Kennzeichens;
  • regionOfInterestEvent.objects[].vehicleRect: Bounding-Box des Fahrzeugs. Nur verfügbar mit Parking Mode ANPR.

Information

Mit dem ANPR-Modell wird ausschließlich die Klasse numberplate ausgegeben; vehicleRect entfällt. Die Position des Kennzeichens im Bild wird in absoluten Koordinaten angegeben.

Beispiel: Region of Interest Event mit ANPR-Modell
{
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "node": {
    "id": "c44d31c4-de0c-4933-b562-0d627c7db2b6",
    "name": "2021110040"
  },
  "regionOfInterestEvent": {
    "capacity": 1,
    "objects": [
      {
        "class": "numberplate",
        "dwellTime": 0,
        "numberPlate": "ILXXXXX",
        "numberPlateArea": "IL",
        "numberPlateLines": 1,
        "numberPlateOrigin": "AT",
        "numberPlateRect": {
          "h": 28,
          "w": 85,
          "x": 812,
          "y": 517
        },
        "trackId": 180355079,
        "trackUuid": "119ffff9-ffa7-4fb7-b865-e957aee9bfda"
      }
    ],
    "roiId": "cb2ed4b3-b200-4f0e-90b5-cd00aa999328",
    "roiName": "roi links",
    "state": "occupied",
    "timestamp": "2025-12-03T15:05:59.378959Z",
    "triggerType": "change"
  },
  "stream": {
    "geoLocation": {
      "coordinates": [
        11.40,
        47.26
      ]
    },
    "id": "f0b5f1dd-d1a5-47de-b1f7-ffe1704baf7c",
    "name": "Stream1"
  },
  "tenantId": "3bb3ed7e-4c92-4db3-b317-1e06a4bc4995",
  "uuid": "b5cb3844-3743-4cc5-ac39-36448bfd47f9",
  "version": "6.0"
}
Beispiel: Region of Interest Event mit Parking Mode ANPR
{
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "node": {
    "id": "c44d31c4-de0c-4933-b562-0d627c7db2b6",
    "name": "2021110040"
  },
  "regionOfInterestEvent": {
    "capacity": 1,
    "objects": [
      {
        "class": "car",
        "dwellTime": 0,
        "numberPlateRect": {
          "h": 18,
          "w": 60,
          "x": 124,
          "y": 190
        },
        "trackId": 53477380,
        "trackUuid": "7c3b0a5d-964f-4f1b-9d3c-e01b790be382",
        "vehicleRect": {
          "h": 222,
          "w": 244,
          "x": 694,
          "y": 233
        }
      }
    ],
    "roiId": "cb2ed4b3-b200-4f0e-90b5-cd00aa999328",
    "roiName": "roi links",
    "state": "occupied",
    "timestamp": "2025-12-03T16:17:40.482253Z",
    "triggerType": "change"
  },
  "stream": {
    "geoLocation": {
      "coordinates": [
        11.40,
        47.26
      ]
    },
    "id": "f0b5f1dd-d1a5-47de-b1f7-ffe1704baf7c",
    "name": "Stream1"
  },
  "tenantId": "3bb3ed7e-4c92-4db3-b317-1e06a4bc4995",
  "uuid": "3f245256-7092-417e-b488-f65dc0ba342f",
  "version": "6.0"
}

Origin Destination Event

Ein Origin Destination-Trigger sendet ein originDestinationEvent, wenn die Trajektorie eines Objekts mindestens zwei OD-Zonen durchlaufen hat und nutzt die erste und letzte durchlaufene Zone für das Event.

  • originDestinationEvent.entry.zone.zoneId, originDestinationEvent.entry.zone.name, originDestinationEvent.entry.timestamp: Einstiegszone und Zeitpunkt des Eintritts.
  • originDestinationEvent.exit.zone.zoneId, originDestinationEvent.exit.zone.name, originDestinationEvent.exit.timestamp: Ausgangszone und Zeitpunkt des Austritts.
  • originDestinationEvent.movementPath[]: Objekttrajektorie mit absoluten Pixelkoordinaten.
Beispiel: Origin Destination Event
{
  "version": "6.0",
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
  "tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6",
  "node": {
    "id": "99031920-6239-471e-a3d7-f241b7753fd0",
    "name": "test"
  },
  "stream": {
    "id": "79031920-6239-471e-a3d7-f241b7753fd0",
    "name": "streamname"
  },
  "originDestinationEvent": {
    "classification": "truck",
    "subClass": "articulated-truck",
    "entry": {
      "zone": {
        "zoneId": "56317209-9B83-43A6-A63E-58C9191A7869",
        "name": "entryZoneName"
      },
      "timestamp": "2019-12-29T10:31:14.373202Z"
    },
    "exit": {
      "zone": {
        "zoneId": "c28ed4e8-bf1b-4c2e-9938-aeb28687f7aa",
        "name": "exitZoneName"
      },
      "timestamp": "2019-12-29T10:31:20.373202Z"
    },
    "trackId": 23,
    "trackUuid": "5609fb4b-cf2b-426d-8f75-0a639a932b90",
    "movementPath": [
      {
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "h": 554.192138671875,
        "w": 766.527587890625,
        "x": 0.0,
        "y": 525.807861328125
      },
      {
        "timestamp": "2019-12-29T10:31:15.173212Z",
        "h": 757.237060546875,
        "w": 1013.7042236328125,
        "x": 137.61514282226563,
        "y": 161.38143920898438
      },
      {
        "timestamp": "2019-12-29T10:31:16.229202Z",
        "h": 757.23712158203125,
        "w": 789.47369384765625,
        "x": 249.73042297363281,
        "y": 108.07360076904297
      },
      {
        "timestamp": "2019-12-29T10:31:17.343202Z",
        "h": 757.23712158203125,
        "w": 1013.704345703125,
        "x": 149.989990234375,
        "y": 157.84721374511719
      },
      {
        "timestamp": "2019-12-29T10:31:18.373202Z",
        "h": 757.237060546875,
        "w": 789.47369384765625,
        "x": 184.40171813964844,
        "y": 161.38143920898438
      },
      {
        "timestamp": "2019-12-29T10:31:19.373202Z",
        "w": 1013.7042236328125,
        "h": 757.23712158203125,
        "x": 131.88348388671875,
        "y": 157.84721374511719
      },
      {
        "timestamp": "2019-12-29T10:31:20.373202Z",
        "h": 757.23712158203125,
        "w": 1013.7042236328125,
        "x": 131.88348388671875,
        "y": 157.84721374511719
      }
    ]
  }
}

Raw Track Event

Der Raw Track Event Trigger zeichnet die vollständige Trajektorie eines Objekts auf und löst aus, sobald der Track beendet ist – zum Beispiel wenn das Objekt das Kamerabild verlässt.

  • rawTrackEvent.class: erkannte Objektklasse gemäß Objektklassen.
  • rawTrackEvent.trackId, rawTrackEvent.trackUuid: verknüpfen das Event mit der zugrunde liegenden Trajektorie.
  • rawTrackEvent.path[]: Objekttrajektorie mit absoluten Pixelkoordinaten.
Beispiel: Raw Track Event
{
  "heatmapEvent": {
    "class": "car",
    "trackId": 23,
    "trackUuid": "5609fb4b-cf2b-426d-8f75-0a639a932b90",
    "path": [
      {
        "h": 554.192138671875,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 766.527587890625,
        "x": 0.0,
        "y": 525.807861328125
      },
      {
        "h": 757.237060546875,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 1013.7042236328125,
        "x": 137.61514282226563,
        "y": 161.38143920898438
      },
      {
        "h": 757.2371215820313,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 789.4736938476563,
        "x": 249.7304229736328,
        "y": 108.07360076904297
      },
      {
        "h": 757.2371215820313,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 1013.704345703125,
        "x": 149.989990234375,
        "y": 157.8472137451172
      },
      {
        "h": 757.237060546875,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 789.4736938476563,
        "x": 184.40171813964844,
        "y": 161.38143920898438
      },
      {
        "h": 757.2371215820313,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 1013.7042236328125,
        "x": 131.88348388671875,
        "y": 157.8472137451172
      },
      {
        "h": 757.2371215820313,
        "timestamp": "2019-12-29T10:31:14.373202Z",
        "w": 1013.7042236328125,
        "x": 131.88348388671875,
        "y": 157.8472137451172
      }
    ]
  },
  "node": {
    "id": "99031920-6239-471e-a3d7-f241b7753fd0",
    "name": "test"
  },
  "stream": {
    "id": "79031920-6239-471e-a3d7-f241b7753fd0",
    "name": "streamname"
  },
  "version": "6.0",
  "eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
  "uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
  "tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}