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.
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.
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.
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.
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
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 as a means 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
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.
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.
|RSSI Channel 37|
|RSSI Channel 38|
|RSSI Channel 39|
The equipment ID contains the ordinal integer assigned to the equipment. This integer is only unique withing the collision domain of the equipment (typically a room or facility). This integer will always be between
200 and is the primary method of identifying the equipment.
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.
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.
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.
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
227 indicates that the data being received is real time. A data type value
99 indicates the data being received are review values.
The data type values
255 correspond to the main interval values (both real time and review accordingly). The data type values
99 correspond to the review values for intervals
99. The data type values
227 correspond to the real time values for
99 offset by
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.
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.
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
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
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.
|6.00 - 6.20||-|
|6.21 - 6.22||Addition of |
|6.23 - 6.29||Reduced broadcast interval from |
|6.30 - 6.31||Reduced broadcast interval from |
|6.32+||Reduced broadcast interval from |
|TypeScript M Series Receiver Parser||M Series Receiver parser written in TypeScript.|
|TypeScript M Series Receiver Driver||M Series Receiver driver written in TypeScript.|
M Series Documentation
|M3i Bike ID Settings PDF||Describes procedure for setting equipment distance to either miles or kilometers, and changing the equipment identification number.|
|M3i Bike ID Settings Video||Video tutorials instructing how to set the equipment distance units and equipment identification number.|
|All Equipment Manuals||All 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.