Fetching Events
Blickfeld Qb2 provides an event service, which can be used to query and continuously stream intrusion events such as security zone intrusions or traffic-related events. These events contain detailed information like zone identifiers, timestamps, beginning and end of the intrusion, intruder object properties, detected vehicle.
| Please follow the Python Client Library Guide to install the Python package first. |
Stream events
In the following code snippet, the Event service of the blickfeld_qb2.percept_processing.services namespace is used to fetch events from the Qb2 device.
import blickfeld_qb2
def stream_security_events() -> None:
# Create token factory using an application key
token_factory = blickfeld_qb2.TokenFactory(
application_key_secret="application-key-for-qb2-xxxxxxxxx"
)
# Open a secure connection to Qb2
with blickfeld_qb2.Channel("qb2-xxxxxxxxx", token=token_factory) as channel:
# Use Event service
service = blickfeld_qb2.percept_processing.services.Event(channel)
# Iterate over events stream and print them
for i, response in enumerate(service.stream()):
print("Event:", response.event)
stream_security_events()
Output (example):
Event: Event(
timestamp=1758005277800006911,
security_zone_intrusion_started=EventSecurityZoneIntrusionStarted(
zone_uuid='c587e5c5-b106-43eb-ada3-c5f8a8577068',
state=State(
generator_name='Security Zone 1',
object_based_security=StateObjectBasedSecurity(
alarm=True,
objects={
'16761': DetectedObject(
pose=Pose(position=Vector3(x=-1.86, y=5.64, z=0.85)),
shape=Shape(
pose=Pose(position=Vector3(x=-1.83, y=5.64, z=0.85)),
box=ShapeBox(dimensions=Vector3(x=0.20, y=0.25, z=1.07))
),
properties=DetectedObjectProperties(
size=2,
num_points=30,
average_intensity=2470,
bounding_box_2_d_surface=0.19,
track_length=4.26
),
point_cloud=Frame(
binary=FrameBinary(
length=30,
cartesian=array([
[-1.83, 5.75, 1.51],
[-1.73, 5.65, 1.36],
... # shortened for clarity
], dtype=float32),
photon_count=array([
1351, 1495, 1845, ...
], dtype=uint16),
direction_id=array([...], dtype=uint32),
metadata=array([...], dtype=uint16),
)
),
timestamp=1758005251337299075,
path=[
Pose(position=Vector3(x=-4.02, y=5.31, z=0.86)),
Pose(position=Vector3(x=-2.94, y=5.45, z=1.40)),
... # truncated
],
visible_to_sensors=['WTGPMBIA2'],
intruding=Flag(state=True, since_timestamp=1758005273182012979),
intruder=Flag(state=True, since_timestamp=1758005264818707365),
lifetime=26462707836,
velocity=Vector3(x=0.08, y=-0.05)
)
}
),
intrusion=Flag(state=True, since_timestamp=1758005277800006911),
intrusion_confidence=1.0
)
)
)
Event(
timestamp=1758005279799066634,
security_zone_intrusion_ended=EventSecurityZoneIntrusionEnded(
zone_uuid='c587e5c5-b106-43eb-ada3-c5f8a8577068',
started_event_id='5442817944-1',
duration=1.99
)
)
Handle zone intrusion details
Prints zone UUID and object positions that triggered an intrusion:
import blickfeld_qb2
def stream_zone_intrusion_details() -> None:
# Create token factory using an application key
token_factory = blickfeld_qb2.TokenFactory(
application_key_secret="application-key-for-qb2-xxxxxxxxx"
)
# Open a secure connection to Qb2
with blickfeld_qb2.Channel("qb2-xxxxxxxxx", token=token_factory) as channel:
# Use Event service
service = blickfeld_qb2.percept_processing.services.Event(channel)
# Iterate over events stream
for response in service.stream():
event = response.event
# Condition for checking start of the intrusion of any zone
if event.security_zone_intrusion_started:
zone_event = event.security_zone_intrusion_started
print(f"Zone: {zone_event.zone_uuid}")
print("Objects involved:")
# Iterate over objects in intrusion zone and print their position
for obj_id, obj in
zone_event.state.object_based_security.objects.items():
pos = obj.pose.position
print
(
f" - ID {obj_id}: (x={pos.x:.2f}, y={pos.y:.2f}, z={pos.z:.2f})"
)
stream_zone_intrusion_details()
Output (example):
Zone: f8762a75-1e41-4600-a805-39b3eac2e85c
Objects involved:
- ID 274778: (x=-1.05, y=3.49, z=0.96)
Zone: c587e5c5-b106-43eb-ada3-c5f8a8577068
Objects involved:
- ID 274893: (x=-1.82, y=7.42, z=1.08)
Zone: f8762a75-1e41-4600-a805-39b3eac2e85c
Objects involved:
- ID 275000: (x=0.53, y=3.22, z=0.87)
Zone: c587e5c5-b106-43eb-ada3-c5f8a8577068
Objects involved:
- ID 275000: (x=-0.75, y=4.35, z=0.75)
Save events to a file
Writes events into a JSON log for later analysis.
import blickfeld_qb2
def log_events_to_file(filepath="events.log") -> None:
# Create token factory using an application key
token_factory = blickfeld_qb2.TokenFactory(
application_key_secret="application-key-for-qb2-xxxxxxxxx"
)
# Open a secure connection to Qb2
with blickfeld_qb2.Channel("qb2-xxxxxxxxx", token=token_factory) as channel:
service = blickfeld_qb2.percept_processing.services.Event(channel)
with open(filepath, "w") as f:
for i, response in enumerate(service.stream()):
# Convert each event into dictionary and dump it into the file
f.write(f"{response.event.to_json()}\n")
log_events_to_file()