diff --git a/event/stream/topics.go b/event/stream/topics.go index 9071dad..552c132 100644 --- a/event/stream/topics.go +++ b/event/stream/topics.go @@ -79,10 +79,12 @@ var topicRules = []struct { // https://developer.axis.com/vapix/network-video/event-and-action-services/ {"MotionRegionDetector/Motion", KindMotion}, - // AXIS Guard suite — vendor analytics apps with CameraProfile - // suffixes. Treated as motion so they can drive motion-triggered - // recording on cameras using these apps instead of basic VMD. + // AXIS ACAP motion apps with CameraProfile suffixes. VMD is + // the stock app shipped on the camera; the Guard suite are the + // paid analytics products. Prefix-match because of the suffix. + // https://developer.axis.com/vapix/applications/vmd4 // https://developer.axis.com/vapix/applications/motion-guard + {"CameraApplicationPlatform/VMD/", KindMotion}, {"CameraApplicationPlatform/MotionGuard/", KindMotion}, {"CameraApplicationPlatform/FenceGuard/", KindMotion}, {"CameraApplicationPlatform/LoiteringGuard/", KindMotion}, diff --git a/event/stream/topics_test.go b/event/stream/topics_test.go index 2bc2a34..617bf5b 100644 --- a/event/stream/topics_test.go +++ b/event/stream/topics_test.go @@ -25,6 +25,12 @@ func TestClassifyTopic(t *testing.T) { {"axis_fence_guard", "tnsaxis:CameraApplicationPlatform/FenceGuard/Camera1ProfileANY", KindMotion}, {"axis_loitering_guard", "tnsaxis:CameraApplicationPlatform/LoiteringGuard/Camera1ProfileANY", KindMotion}, + // AXIS VMD 4 — the stock motion app, and the one an installer + // reaches for before any Guard product. The profile suffix + // varies with the configured VMD profile. + {"axis_vmd4_profile_any", "tnsaxis:CameraApplicationPlatform/VMD/Camera1ProfileANY", KindMotion}, + {"axis_vmd4_profile_numbered", "tnsaxis:CameraApplicationPlatform/VMD/Camera1Profile1", KindMotion}, + // --- Tampering -------------------------------------------------- {"tamper_detector", "tns1:RuleEngine/TamperDetector/Tamper", KindTampering},