M Series Receiver Communication


This development documentation outlines the use of the Keiser Triple Redundant Receiver (Receiver) which is a USB based device capable of receiving broadcast data from hundreds of M Series equipment pieces. This device is primarily intended for use with computers and in scenarios where more than 30 pieces of equipment are being used simultaneously.

For an overview of the M Series Bluetooth Smart communication protocol, please review the M Series Direct documentation.

Device Overview

The Receiver is a hardware device specifically designed to facilitate communication with large numbers of M Series equipment pieces. The device utilizes three separate antennae, each tuned to one of the three broadcast frequencies for Bluetooth Smart advertisements. This ensures that if a broadcast is lost on one frequency, it still has an opportunity of being received on one of the remaining two frequencies. The received broadcasts are then combined into a single reception record and pushed onto a queue for transmission through the USB interface.

Basic Operation

The Receiver is powered through the USB port and requires no configuration to operate. Upon being plugged in to a computer, the Receiver will automatically power on and begin the enumeration process with the host computer. Once enumerated, the receiver will begin sending data and will ignore all future commands and requests.

Operation Modes

The Receiver has two modes of operation depending on if broadcasts are being received or not. When no broadcasts are detected, the receiver will be in Standby mode and will be transmit device status values and debug information. Once a broadcast is received, the receiver will switch into Active mode and will begin sending broadcast data. The receiver will stay in Active mode until all broadcasts have ceased and the transmission queue is empty, at which point it will revert to Standby mode.

Data Transmission

The Receiver data transmitted over the USB interface will be a continuous stream of ASCII encoded data which will either be accessed as a virtual COM device stream or through USB Endpoint BulkTransfer polling (depending on platform requirements). Each transmission packet is appended with control character signaling the separation of packets. Segments within the packet are separated with a blank space character.

Standby Mode Transmissions

Standby mode transmissions are identified with a leading segment value between 300 and 304. These transmissions include a status check from each of the four processors on the Receiver's PCB. These values have little use outside of debugging and should be used only to determining device operation mode and to check device connectivity.

The one value of note is the segment following the 300 segment which is the master controller version number (ex: v1.02). This value will always be increased by a whole major version (ex: v1.02 -> v2.00) with the introduction of breaking features. As such, this value should be observed at least once during the initialization process to ensure that the correct parser is in use.

Active Mode Transmissions

Active mode transmissions are identified with a leading segment value between 0 and 200. Each transmission packet is a full M Series equipment broadcast record.

Broadcast Packet Data Structure

Each broadcast packet is a merger of the broadcasts received across all three antennae and provides signaling for common issues such as duplicate Equipment IDs and weak signal reception.

Broadcast Packet

4 54 55 59 F f47e5bf9d16b 6.31 0 1019 1599 1312 77 1:06 14 12 Mi

For ease of referencing segment in this document we will separate each segment by the blank space character into a segment array starting at index 0.

0Equipment ID4
1RSSI Channel 3754
2RSSI Channel 3855
3RSSI Channel 3959
4Duplication FlagF
6Equipment Version6.31
7Data Type0
9Heart Rate1599
11Caloric Burn77

Data Attributes

Equipment ID

The equipment ID contains the ordinal integer assigned to the equipment. This integer is only unique within the collision domain of the equipment (typically a room or facility). This integer will always be between 0 and 200 and is the primary method of identifying the equipment.

Best Practice

Ignore data from equipment transmitting as equipment ID 0. This is the default equipment ID, so ignoring these values prevents issues in facilities which have not assigned ID's to all equipment within a collision domain and provides a uniform method for opting-out instructors.

RSSI Channels

The RSSI (received signal strength indicator) is in indication of the strength of the signal received for each of the three channels. The RSSI value is a negative number represented as an absolute number. A value closer to 0 is an indication of a stronger signal. A value of 0, however, indicates that no signal was received on that channel.

Duplication Flag

The duplication character flag indications whether an equipment ID collision has occurred, meaning that two pieces of equipment are using the same equipment ID. A value of F means no collisions have occurred. A value of T indicates another piece of equipment is using the same equipment ID.


The UUID string is a value which is universally unique among all Keiser equipment. This value will not change unless the equipment's console hardware is replaced.

Equipment Version

The equipment version string is a Semantic Versioning value with major and minor version segments. This value is useful in determining the machines capabilities for parsing. (See Revision History)

Data Type

The data type integer contains information regarding the interval and whether data transmitted is real time (real time mode) or review values (review mode).

A data type value of 0, or 128 to 227 indicates that the data being received is real time. A data type value 255, or 1 to 99 indicates the data being received are review values.

The data type values 0 and 255 correspond to the main interval values (both real time and review accordingly). The data type values 1 to 99 correspond to the review values for intervals 1 to 99. The data type values 128 to 227 correspond to the real time values for 1 to 99 offset by 127.

Data TypeIntervalMode
0MainReal Time
128-2271-99Real Time


The cadence value corresponds to the equipment's cadence in rotations per minute with decimal precision transmitted as one order of magnitude larger (x10). The example segment value of 1019 converts to a cadence value of 101.9. In review mode this value will correspond to the average cadence for that interval.

Heart Rate

The heart rate value contains the heart rate detected by the equipment's 5kHz receiver when the user is wearing a compatible heart rate monitoring device. The value corresponds to the measured heart rate in beats per minute with decimal precision transmitted as one order of magnitude larger (x10). If no heart rate monitor is detected, a 0 value will be transmitted. The example segment value of 1599 would be converted to a heart rate value of 159.9. In review mode this value will correspond to the average heart rate for that interval.


The power value corresponds to the equipment's power value in watts with decimal precision transmitted as one order of magnitude larger (x10). The example segment value of 1312 would be converted to a power value of 131.2. In review mode this value will correspond to the average power for that interval.

Caloric Burn

The caloric burn value corresponds to the approximated caloric burn value determined using the measured energy output of the user assuming an average caloric burn efficiency plus an average basil metabolic rate. This method is independent of age or weight. This value is an accumulated value for the current interval and is the same for real time and review modes.


The duration value is a string representing the duration of the current interval as two segments separated by a colon (:). The first segment represents the total number of minutes and the second segment represents the number of seconds offset from the previous minute. The example segment value of 1:06 converts to a duration value of 1 Minute, 6 Seconds. This value is an accumulated value for the current interval and is the same for real time and review modes.


The gear value is an integer corresponding to the current gear as displayed on the equipment console, ranging from 1 to 24. This value will continue transmitting 24 during braking while the equipment console will show 88. This value is non-representative during the review mode and should be ignored. Equipment prior to version 6.21 will not transmit a gear value so this value will be 0 and should be ignored. (See Revision History)


The distance value corresponds to the calculated distance for the current interval in units dependent upon the Units segment with decimal precision transmitted as one order of magnitude larger (x10). The example segment value of 14 coverts to a distance value of 1.4. This value is an accumulated value for the current interval and is the same for real time and review mode.


The units value dictates the distance value units as either Miles (Mi) or Kilometers (Km). This value is set on the equipment during the initial setup stage and will not change during a session.



On Windows 8 and newer PCs the receiver will be identified as a virtual COM device and the appropriate drivers will be installed and configured without user intervention. The device is typically ready for use within a few minutes of being plugged into a computer.

To test that the device is connected and configured correctly, use the type command on the corresponding virtual COM port.

type com3: >> data.log

Device will automatically enumerate and attach to the kernel as a serial device, available only via COM port access. For WebUSB or similar APIs which do not support serial interfaces, the USB device will not be available and interfacing will require the replacement of the CDC drivers with WinUSB or libusb drivers using a tool like Zadig or via a driver override through a signed INF file.

Mac & Linux

On Mac and Linux the device will automatically enumerate but will most likely not have a virtual COM driver associated. For these platforms it is highly recommended to use the libusb drivers as they come pre-installed and will work just as effectively as virtual COM drivers.

Revision History

6.00 - 6.20-
6.21 - 6.22Addition of Gear attribute to broadcast.
6.23 - 6.29Reduced broadcast interval from 2000 ms to 1937.5 ms.
6.30 - 6.31Reduced broadcast interval from 1937.5 ms to 354.375 ms.
6.32+Reduced broadcast interval from 354.375 ms to 318.75 ms.

Code Examples

TypeScript M Series Receiver ParserM Series Receiver parser written in TypeScript.
TypeScript M Series Receiver Node Serial Port DriverM Series Receiver Node Serial Port driver written in TypeScript.
TypeScript M Series Receiver Node USB DriverM Series Receiver Node USB driver written in TypeScript.
TypeScript M Series Receiver Web USB DriverM Series Receiver Web USB driver written in TypeScript.
WinUSB Override INF FileOverride file for using WinUSB drivers in-place of Usbser drivers for M Series Receiver.

M Series Documentation

M3i Bike ID Settings PDFDescribes procedure for setting equipment distance to either miles or kilometers, and changing the equipment identification number.
M3i Bike ID Settings VideoVideo tutorials instructing how to set the equipment distance units and equipment identification number.
All Equipment ManualsAll the manuals, parts diagrams, and tutorials for Keiser equipment.

Agreements and Guidelines

Using any of the APIs outlined in document make you subject to the following agreements. Please read all documents in their entirety as they govern your use of the APIs.