diff --git a/src/Aeon.Acquisition/Aeon.Acquisition.csproj b/src/Aeon.Acquisition/Aeon.Acquisition.csproj
index 782ab54..ff30574 100644
--- a/src/Aeon.Acquisition/Aeon.Acquisition.csproj
+++ b/src/Aeon.Acquisition/Aeon.Acquisition.csproj
@@ -6,7 +6,7 @@
Bonsai Rx Project Aeon Acquisition
net472
0.5.0
- build231007
+ build231008
diff --git a/src/Aeon.Acquisition/HeartbeatMonitor.bonsai b/src/Aeon.Acquisition/HeartbeatMonitor.bonsai
new file mode 100644
index 0000000..3d9bcce
--- /dev/null
+++ b/src/Aeon.Acquisition/HeartbeatMonitor.bonsai
@@ -0,0 +1,75 @@
+
+
+ Captures the sequence of heartbeats from the specified source as a named group.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DeviceEvents
+
+
+
+
+
+
+
+
+ Source1
+
+
+
+
+
+ Name
+ DeviceEvents
+
+
+
+
+
+ Item2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Aeon.Acquisition/SynchronizerMonitor.bonsai b/src/Aeon.Acquisition/SynchronizerMonitor.bonsai
new file mode 100644
index 0000000..f7db6fe
--- /dev/null
+++ b/src/Aeon.Acquisition/SynchronizerMonitor.bonsai
@@ -0,0 +1,145 @@
+
+
+ Provides continuous statistics and reports current time and device synchronization state.
+
+
+
+ Source1
+
+
+
+
+
+ HeartbeatSources
+
+
+
+
+
+
+
+
+
+ PT0.2S
+
+
+
+ SynchronizerEvents
+
+
+ Include
+
+
+
+
+
+ PT0.4S
+
+
+
+ UnwrapTimestamps
+
+
+
+ Source1
+
+
+
+
+
+ Seconds
+
+
+
+
+
+ {0}@{1}
+ Value,Seconds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Item1
+
+
+
+
+
+ Item2
+
+
+
+
+
+ new(
+Item1 as Stats,
+Item2 as Names)
+
+
+ HeartbeatSources
+
+
+ Length
+
+
+
+
+
+ new(
+Item1.Stats.Mean as MeanRawTimestamp,
+DateTime(1904, 1, 1) + TimeSpan.FromSeconds(Item1.Stats.Mean) as MeanTimestamp,
+Item2 as ExpectedDeviceCount,
+Item1.Stats.Count as DeviceCount,
+Item1.Stats.Maximum - Item1.Stats.Minimum as MaxDifference,
+string.Join("\t", Item1.Names) as Elements)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file