diff --git a/scripts/motan/data_logger.py b/scripts/motan/data_logger.py
index 81370713c..e00c99560 100755
--- a/scripts/motan/data_logger.py
+++ b/scripts/motan/data_logger.py
@@ -152,10 +152,12 @@ class DataLogger:
                                 "motion_report/dump_stepper", {"name": stepper})
         # Subscribe to additional sensor data
         stypes = ["adxl345", "lis2dw", "mpu9250", "angle"]
+        stypes = {st:st for st in stypes}
+        stypes['probe_eddy_current'] = 'ldc1612'
         config = status["configfile"]["settings"]
         for cfgname in config.keys():
-            for st in stypes:
-                if cfgname == st or cfgname.startswith(st + " "):
+            for capprefix, st in sorted(stypes.items()):
+                if cfgname == capprefix or cfgname.startswith(capprefix + " "):
                     aname = cfgname.split()[-1]
                     lname = "%s:%s" % (st, aname)
                     qcmd = "%s/dump_%s" % (st, st)
diff --git a/scripts/motan/readlog.py b/scripts/motan/readlog.py
index f49f0b593..1b44c9375 100644
--- a/scripts/motan/readlog.py
+++ b/scripts/motan/readlog.py
@@ -439,6 +439,71 @@ class HandleAngle:
             self.data_pos += 1
 LogHandlers["angle"] = HandleAngle
 
+def interpolate(next_val, prev_val, next_time, prev_time, req_time):
+    vdiff = next_val - prev_val
+    tdiff = next_time - prev_time
+    rtdiff = req_time - prev_time
+    return prev_val + rtdiff * vdiff / tdiff
+
+# Extract eddy current data
+class HandleEddyCurrent:
+    SubscriptionIdParts = 2
+    ParametersMin = 1
+    ParametersMax = 2
+    DataSets = [
+        ('ldc1612(<name>)', 'Coil resonant frequency'),
+        ('ldc1612(<name>,period)', 'Coil resonant period'),
+        ('ldc1612(<name>,z)', 'Estimated Z height'),
+    ]
+    def __init__(self, lmanager, name, name_parts):
+        self.name = name
+        self.sensor_name = name_parts[1]
+        if len(name_parts) == 3 and name_parts[2] not in ("period", "z"):
+            raise error("Unknown ldc1612 selection '%s'" % (name_parts[2],))
+        self.report_frequency = len(name_parts) == 2
+        self.report_z = len(name_parts) == 3 and name_parts[2] == "z"
+        self.jdispatch = lmanager.get_jdispatch()
+        self.next_samp = self.prev_samp = [0., 0., 0.]
+        self.cur_data = []
+        self.data_pos = 0
+    def get_label(self):
+        if self.report_frequency:
+            label = '%s frequency' % (self.sensor_name,)
+            return {'label': label, 'units': 'Frequency\n(Hz)'}
+        if self.report_z:
+            label = '%s height' % (self.sensor_name,)
+            return {'label': label, 'units': 'Position\n(mm)'}
+        label = '%s period' % (self.sensor_name,)
+        return {'label': label, 'units': 'Period\n(s)'}
+    def pull_data(self, req_time):
+        while 1:
+            next_time, next_freq, next_z = self.next_samp
+            if req_time <= next_time:
+                prev_time, prev_freq, prev_z = self.prev_samp
+                if self.report_frequency:
+                    next_val = next_freq
+                    prev_val = prev_freq
+                elif self.report_z:
+                    next_val = next_z
+                    prev_val = prev_z
+                else:
+                    next_val = 1. / next_freq
+                    prev_val = 1. / prev_freq
+                return interpolate(next_val, prev_val, next_time, prev_time,
+                                   req_time)
+            if self.data_pos >= len(self.cur_data):
+                # Read next data block
+                jmsg = self.jdispatch.pull_msg(req_time, self.name)
+                if jmsg is None:
+                    return 0.
+                self.cur_data = jmsg['data']
+                self.data_pos = 0
+                continue
+            self.prev_samp = self.next_samp
+            self.next_samp = self.cur_data[self.data_pos]
+            self.data_pos += 1
+LogHandlers["ldc1612"] = HandleEddyCurrent
+
 
 ######################################################################
 # Log reading