Applies to
The LGW (Light Gateway), also called the communication module or XK-Dongle. It is the communication unit supplied with XK300 Essence, and connects to the sensor by USB. Also applies to XK-300H.
Using the earlier XK-GW gateway?
The Raspberry Pi based XK-GW has its own network requirements. See the XK-GW gateway manuals.
1 · XK ToolHub
XK ToolHub: getting started
XK ToolHub is a Windows application for setting up a device connected to a PC by USB. It brings together Wi-Fi setup, firmware update and MQTT endpoint settings, and can install further tools from the Tool Library.
Install XK ToolHub
Current version: 1.0.6
- Download the installer: XKToolHub-Setup-1.0.6.zip
- Extract the ZIP file.
- Run
XKToolHub-Setup-1.0.6.exe. - Complete the installation.
Launch XK ToolHub
Use one of the following methods:
- Double-click XK ToolHub on the desktop.
- Open the Start menu and run XK ToolHub.
The Home screen
After launch, the Home screen is displayed. Select the tool that matches your task.
- Configure Wi-Fi: configures Wi-Fi on devices, including standard setup and batch setup. See Wi-Fi Setup.
- Update Firmware: updates firmware for one device or several devices, with guided update flows and progress monitoring. See Firmware Update.
- MQTT Endpoint Setting: configures the MQTT connection, either an XK Cloud region preset or your own host, port, topic and TLS options. See MQTT Endpoint Settings.
- Find more tools: opens the Tool Library to search, install, update and launch additional tools. See Find more tools.
1.1 · XK ToolHub
Wi-Fi Setup
Use Wi-Fi Settings to apply Wi-Fi credentials to a connected device. Wi-Fi models support 2.4 GHz networks only.
Basic procedure
- Connect the device to the PC.
- Enter the Wi-Fi name (SSID).
- Enter the Password.
- Click Apply.
- Check the log and confirm Wi-Fi Settings Applied Successfully.
Fields
| Field | Description |
|---|---|
| Wi-Fi name (SSID) | The target Wi-Fi network name. |
| Password | The Wi-Fi password. |
| Hidden SSID | Select if the target network does not broadcast its SSID. |
| Open network | Select if the target network does not require a password. |
| Apply | Applies the Wi-Fi settings to the connected device. |
Optional functions
Connection. Click Connection at the top of the screen to change the COM port. The default is Auto Scan. Select a COM port manually only when you need a different one.
Current Wi-Fi Status. Expand Current Wi-Fi Status to check the device serial number, MAC address and configured SSID.
1.2 · XK ToolHub
Firmware Update
Update to the latest firmware
- Connect the device to the PC.
- Click Auto Update.
- Wait while the device is updated to the latest firmware version.
Optional: change the Flash Target
Click Flash Target at the top of the screen to expand the options. By default, both the COM port and the model are set to Auto Scan.
Select the COM port or model manually. You can change the COM port and the Model. Use this when auto scan does not match the target device or model.
Use a custom package. Use this when you need to install firmware that is not an official release, provided by XK.
- Open Flash Target.
- Change Model to Custom Package.
- Upload the ZIP file provided by XK.
- Click Flash Firmware.
Optional: older 300H firmware (version 1.9.x)
This procedure erases the device completely, including the product serial, and can leave the device unusable if done incorrectly. Use it only when Xandar Kardian support asks you to, and follow their instructions.
Follow this method if an XK-300H is running firmware version 1.9.x.
- Connect the device to the PC.
- In the Firmware Update tool, open the Bulk OTA tab.
- Set Model to XK_300_H.
- Keep Units set to 1.
- Select Erase all and Write base bins.
- Click START BULK OTA.
The Bulk OTA tab is generally used to update several devices at once. It is also used for advanced firmware write cases such as this one.
1.3 · XK ToolHub
MQTT Endpoint Settings
Connect the device
- Connect the device to the PC.
- Click Connect.
- Check the connection status. When the device is connected, the screen shows Connected (COMx).
Use XK Cloud
Use this option to connect the device to XK Cloud.
- Click Connect.
- Keep Use XK Cloud enabled.
- Select a Region.
- Click Apply.
When Use XK Cloud is enabled, the tool uses the XK Cloud configuration instead of manual broker settings.
Use your own endpoint
Use this option to send data to your own MQTT broker instead of XK Cloud.
- Click Connect.
- Turn off Use XK Cloud.
- Enter the endpoint information: Host, Port, Public Topic, Client ID, Username and Password.
- Click Apply.
Optional: enable TLS
Use this when the endpoint requires TLS authentication.
- Turn on Enable TLS.
- Select the TLS Mode.
- Upload the required certificate files: CA Cert, and for mutual TLS also Client Cert and Private Key.
- Click Apply.
The payload your broker receives is described in MQTT data integration.
1.4 · XK ToolHub
Find more tools
Use Find more tools to open the Tool Library and install tools that are not shown on the Home screen by default.
Basic procedure
- Open XK ToolHub.
- Click Find more tools on the Home screen.
- Search for the tool you need.
- Click Install.
- After installation, click Open or return to the Home screen.
- Confirm that the installed tool appears on the Home screen and in the left Tools menu.
Controls
| Control | What it does |
|---|---|
| Find more tools | Opens the Tool Library. |
| Search tools | Filters the tool list by name or keyword. |
| Refresh | Reloads the latest tool catalog from the server. |
| Install | Downloads and installs the selected tool. |
| Open | Opens an installed tool. |
| Update | Appears when a newer version of an installed tool is available. |
| Remove | Removes an installed optional tool. Built-in tools cannot be removed. |
How the Tool Library works
- Available tools are offered by the server but not installed yet. Install them when needed.
- Installed tools appear on the Home screen, in the left Tools menu and in the Tool Library.
- Built-in tools come with XK ToolHub: Wi-Fi Setup, Firmware Update and MQTT Endpoint. They can be updated through the Tool Library but cannot be removed.
Updates
When you open an installed tool, XK ToolHub checks for a newer version. If one is found, an update prompt may appear. Click Update now to install it, or Not now to keep the current version. The prompt appears only once per session for the same tool.
2 · Device Portal
XK Device Portal
The Device Portal is a web page served by the device itself. Use it to check the device status and to configure the network, MQTT, sensor and system settings without a PC application. It applies to the LGW (XK-Dongle) and XK-300H.
1. Access the Device Portal
Connect to AP mode. After the device boots, its access point (AP) mode stays active for 5 minutes. Connect your PC or phone to the device network:
- XK-300H:
xk300h-[last 6 digits of the serial number] - XK-Dongle (LGW):
xkdongle-[last 6 digits of the serial number]
Open the portal. In a web browser, go to 192.168.4.1. The login page appears.
Sign in. The AP password and the portal login are provided by Xandar Kardian with your devices. Passwords are case-sensitive. If you do not have them, please contact Xandar Kardian support. We recommend changing the login after the first sign-in (see System, Account).
Extend AP mode. AP mode is active for 5 minutes by default. To reset the timer and extend it up to 10 minutes, click Extend 10min in the left menu.
2. Device Information
The Device Information page shows the current status and configuration of the device. Only basic information is shown at first; click expand for detailed technical parameters, and Refresh to load the latest values.
3. Network configuration
3.1 Select Network
Network Status shows the network in use and the signal strength of the active connection. Use Network Configuration to switch the connection type, or to change the Wi-Fi name (SSID) or password.
Switch to LTE.
- Open the dropdown menu.
- Select LTE Mode.
- Click Save Configuration.
Switch to Wi-Fi.
- Open the dropdown menu.
- Select WiFi Mode.
- Enter the Wi-Fi name (SSID) and password, or click Scan WiFi to list nearby networks.
- Wait a few seconds for the scan to finish.
- Select the Wi-Fi network from the list.
- Enter the password.
- Click Save Configuration.
3.2 LTE settings
With the SIM card provided by XK, no APN setting is normally needed. If you use your own SIM card, enter the APN value and click Save APN.
3.3 MQTT settings
Use this page to set where the device publishes its data: broker address, authentication, publish topic, TLS and Keep Alive.
MQTT status. The banner at the top shows Connected when the device is connected to the broker and communicating normally, and Disconnected when the connection is lost or delayed.
Use XK US Cloud (toggle). When enabled, the device works with XK US Cloud: Host, Port and Topic are fixed automatically and some fields are disabled.
Send data to your own MQTT server.
- Turn off Use XK US Cloud.
- Enter the MQTT settings.
- Click Save MQTT Settings.
| Field | Description |
|---|---|
| Host | Broker domain or IP address, for example broker.example.com or 192.168.0.10. |
| Port | Broker port. Standard MQTT uses 1883; MQTT over TLS usually 8883. |
| Publish Topic | Topic the device publishes its data to. |
| Client ID | MQTT client identifier. A unique value per device is recommended. |
| Username | Broker account name. Optional, depending on the broker. |
| Password | Broker password. Optional, depending on the broker. Click Show to display it. |
| Enable TLS | Encrypts the connection with TLS, typically on port 8883. The broker's certificate requirements, such as a CA certificate, must be met. |
| Keep Alive (seconds) | Interval that keeps the broker connection alive. 30 to 120 seconds is common. |
3.4 Batch Wi-Fi settings
The device you are connected to in AP mode can act as the main device: it scans nearby devices and applies the same Wi-Fi settings to several of them at once. Configure no more than 10 devices at a time.
- Click Scan Nearby and wait for the device list to fill.
- Select the devices to configure.
- Enter the router SSID in Batch SSID and the router password in Batch Password.
- Click Apply To Selected.
- Check the Status column on the right. ok means the configuration completed.
4. Sensor control
Radar data shows the parameters currently received from the radar. For details of the radar application data, click XK Manual at the bottom left of the page.
Radar parameter control sends commands to the radar sensor.
-1: reboot the radar sensor100100: return the radar parameters to their default values (this is not a factory reset)6006: environment mapping
To change a parameter, enter 1010.1010, [PARAMETER_NUM], [PARAMETER_VALUE], 255.255 255.255 and click Send Command. Supported parameters are listed in the XK Manual parameter table.
5. System
- System Tools: system-level functions such as rebooting the device.
- Firmware Update: the device supports OTA updates within the platform range provided by XK. Updates are also possible without network connectivity: upload the update files provided by XK.
- Account: change the login. To change the password, enter the current password, then the new password twice. The username is optional; if left blank, it stays unchanged.
- Logs: review logs for inspection and troubleshooting.
Some settings take a few seconds to apply. After network changes, the connection status may update with a short delay. For batch configuration, use a stable environment and limit the number of selected devices.
3 · Network
Network checklist for the LGW
Firewall, addressing and Wi-Fi requirements for sites using the LGW communication module. LTE models use the cellular network and do not need any change to the facility network.
Required outbound firewall rules
| Port | Protocol | Direction | Destination | Purpose | Required |
|---|---|---|---|---|---|
| 8883 | TCP | Outbound | a1m82llrt5xrr6-ats.iot.us-east-2.amazonaws.com |
MQTT over TLS: cloud data, Sensor Manager commands and data | Yes |
| 8883 | TCP | Outbound | a1m82llrt5xrr6-ats.iot.ca-central-1.amazonaws.com |
MQTT over TLS, Canada region | If used |
| 8883 | TCP | Outbound | a1m82llrt5xrr6-ats.iot.ap-northeast-2.amazonaws.com |
MQTT over TLS, Korea region | If used |
| 8883 | TCP | Outbound | a1m82llrt5xrr6-ats.iot.ap-southeast-2.amazonaws.com |
MQTT over TLS, Australia region | If used |
| 80 | TCP | Outbound | us-central1-xk-calibrationtool.cloudfunctions.net |
Device OTA download and time lookup | Yes |
| 53 | UDP/TCP | Outbound | Site DNS resolver, and 8.8.8.8 if allowed |
DNS resolution | Yes |
- Inbound port forwarding is not required.
- The firewall must allow return traffic for sessions the device starts (stateful firewall).
- MQTT over TLS on TCP 8883 must not be blocked or intercepted.
IP and DHCP
- DHCP is required for the Wi-Fi connection in the current firmware.
- The DHCP pool must have enough free addresses for all XK modules, plus a margin.
- If fixed addresses are needed, use a DHCP reservation on the router or DHCP server, based on the device MAC address.
- Static IP configuration on the device itself is not supported in the current firmware.
Wi-Fi and network segmentation
- XK devices do not require or support tagged VLAN configuration on the device side.
- If network separation is needed, configure it on the facility network: for example a dedicated SSID, or an untagged/access VLAN on the AP, switch or router.
- The SSID used by XK devices must allow DNS (UDP/TCP 53), MQTT over TLS (TCP 8883), and OTA and time lookup (TCP 80).
- These network controls can prevent normal operation: captive portal, proxy authentication, TLS inspection and MQTT blocking.
- For Wi-Fi models, provide stable 2.4 GHz coverage and enough AP client capacity.
Bandwidth
| Measure | Approximate value |
|---|---|
| Daily upload | 7.72 MiB per day |
| Daily download | 1.10 MiB per day |
| Average upload | 0.75 kbit/s |
| Average download | 0.11 kbit/s |
Assumptions: MQTT over TLS on TCP 8883, QoS 0, publish interval 3 seconds; the download estimate covers TCP ACK traffic only.
Troubleshooting
| Symptom | Check |
|---|---|
| Devices disconnect frequently | DHCP pool size, DHCP lease stability, AP client capacity, Wi-Fi signal strength (RSSI), DNS resolution |
| Cloud data does not appear | Outbound TCP 8883 to the AWS IoT endpoint; whether TLS or MQTT traffic is blocked; whether TLS inspection interferes with MQTT over TLS |
| Gateway OTA or time sync fails | Outbound TCP 80 to us-central1-xk-calibrationtool.cloudfunctions.net |
4 · Integration
MQTT data integration
How to receive and parse the JSON that the gateway publishes over MQTT, for partners who send data to their own broker (see MQTT Endpoint Settings).
Production sensors ship with the latest sensor firmware and use the App 41 data format. You only need to configure your MQTT endpoint and parse the published JSON.
| Item | Value |
|---|---|
| Data format | JSON |
| Protocol | MQTT |
| Default transmission interval | Typically every 3 seconds |
| Sensor data format | App 41 |
Message structure
Each payload carries standard telemetry fields. Device-status fields are added to the next telemetry payload after each minute change; they are not sent as a separate message.
Standard fields (every packet)
| Field | Type | Description |
|---|---|---|
| dt | String | Data type. Fixed to e (essential) for this integration. |
| nw | Integer | Network status: the connection interface (see below). |
| device | String | Gateway MAC address, lowercase and colon-separated, e.g. aa:bb:cc:dd:ee:ff. |
| app | Integer | Sensor firmware application number. Production payloads use 41. |
| sn | String | Gateway serial number. |
| rsn | String | Serial number of the connected radar sensor. |
| saving-mode | Integer | Gateway data-saving mode: 0 = normal, 1 = saving mode. |
| data | Array | Vital signs and radar metrics (see the index tables). |
| data2 | Array | Extended data. Included only when data[7] (version) is 121507 or later; then 21 values (indexes 0–20). |
Periodic fields (added after a minute change)
| Field | Type | Description |
|---|---|---|
| esp-ver | String | Gateway firmware version. |
| led-strip-bright | Integer | LED strip brightness level. |
| led-strip-onoff | Integer | LED strip state: 1 = on, 0 = off. |
| lte-rssi | Integer | LTE modem signal strength. |
| boot-count | Integer | Total number of gateway reboots. |
Network status (nw)
| Value | Name | Meaning |
|---|---|---|
| 0 | NW_STATUS_OFFLINE | Offline or local network only |
| 1 | NW_STATUS_WIFI | Connected via Wi-Fi |
| 2 | NW_STATUS_LTE | Connected via LTE |
| 3 | NW_STATUS_LTE_M | Connected via LTE-M |
data array (App 41)
Parse data and data2 by position; each index has a fixed meaning.
| Index | Metric | Description |
|---|---|---|
| 0 | Presence | 1.0 = occupied, 0.0 = vacant, -1.0 = booting |
| 1 | RR | Respiratory rate (breaths per minute) |
| 2 | HR | Heart rate (beats per minute) |
| 3 | Movement Index | Intensity of detected relative movement |
| 4 | stability_BR | Respiratory rate stability score |
| 5 | stability_HR | Heart rate stability score |
| 6 | stability_move | Movement stability score |
| 7 | Version | Sensor firmware version |
| 8 | DataCursor | Internal sequence counter for processed data |
| 9 | POBCCollectedTime | POBC collection time; each count is 5 minutes |
| 10 | POBCCollectedDate | POBC collection date; each count is 1 day |
| 11 | DwellTime | How long the person has been present |
| 12 | Amplitude_RR | Amplitude of the respiratory signal |
| 13 | Distance_RR | Distance to the respiratory detection point |
| 14 | RegionPresence | Presence within a sub-region |
| 15 | vital_signal | Latest vital signal value |
| 16 | POBC_RR | Probability that the respiratory rate baseline has shifted |
| 17 | POBC_HR | Probability that the heart rate baseline has shifted |
| 18 | Awakeness | Sleep/wake status indicator |
data2 array (version 121507 or later)
| Index | Metric | Description |
|---|---|---|
| 0 | AutoSensitivity | Environmental movement noise level related to occupancy sensitivity |
| 1 | POBCCollectedTime | POBC collection time; each count is 5 minutes |
| 2 | POBCCollectedDate | POBC collection date; each count is 1 day |
| 3 | Absence_Duration | How long the person has been absent |
| 4 | RRPoint_Sustained | How long a respiratory detection point has been sustained |
| 5 | SleepFlag | Sleep detected: 1 = yes, 0 = no |
| 6 | MoveDuringSleepFlag | Movement during sleep detected: 1 = yes, 0 = no |
| 7 | ShallowB_Flag | Cumulative count of shallow breathing detections |
| 8 | MoveAVG_Last5Min | Average movement index over the last 5 minutes |
| 9 | AwakenessAVG_Last5Min | Average awakeness over the last 5 minutes |
| 10 | Z_RRAVG_Last5Min | Average respiratory Z-score over the last 5 minutes |
| 11 | Z_HRAVG_Last5Min | Average heart rate Z-score over the last 5 minutes |
| 12 | RRAVG_Last5Min | Average respiratory rate over the last 5 minutes |
| 13 | HRAVG_Last5Min | Average heart rate over the last 5 minutes |
| 14 | DistanceRRAVG_Last5Min | Average distance to the vital-sign source over the last 5 minutes |
| 15 | runtime_day | Sensor runtime in days |
| 16 | Z_RR | Respiratory Z-score |
| 17 | Z_HR | Heart rate Z-score |
| 18 | publish_policy | Encoded as mode × 1,000,000 + normal interval (s) × 1,000 + conditional interval (s) |
| 19 | MoveDuringSleep_Duration | Number of 10 Hz samples with MoveDuringSleep = 1 (not seconds) |
| 20 | MoveDuringSleep_Count | Number of 0 → 1 MoveDuringSleep transitions |
Payload examples
Standard telemetry:
{
"dt": "e", "nw": 1, "device": "a1:b2:c3:d4:e5:f6", "app": 41,
"sn": "GW1234567890", "rsn": "RS1234567890", "saving-mode": 0,
"data": [1, 16.8, 72.4, 14.2, 91.0, 88.5, 76.3, 121507, 1024, 35, 0, 124.5, 0.42, 2.15, 1, 0.031, 17.1, 71.8, 83.6],
"data2": [48, 35, 0, 0, 1, 0, 0, 0, 12.4, 82.1, 0.18, 0.21, 16.5, 72.0, 2.08, 3, 0.19, 0.23, 1003003, 6, 2]
}
Telemetry with device status:
{
"dt": "e", "nw": 1, "device": "a1:b2:c3:d4:e5:f6", "app": 41,
"sn": "GW1234567890", "rsn": "RS1234567890",
"esp-ver": "2.2.11-300H-next", "led-strip-bright": 32, "led-strip-onoff": 1,
"lte-rssi": 0, "boot-count": 54, "saving-mode": 0,
"data": [1, 16.8, 72.4, 14.2, 91.0, 88.5, 76.3, 121507, 1024, 35, 0, 124.5, 0.42, 2.15, 1, 0.031, 17.1, 71.8, 83.6],
"data2": [48, 35, 0, 0, 1, 0, 0, 0, 12.4, 82.1, 0.18, 0.21, 16.5, 72.0, 2.08, 3, 0.19, 0.23, 1003003, 6, 2]
}
Parsing rules
- Accept only valid JSON payloads.
- Confirm that
dtiseandappis41. - Confirm that
datacontains at least 19 numeric values. - For version 121507 or later, confirm that
data2contains 21 numeric values. For earlier versions,data2is absent. - Parse the arrays by index, not by field name.
- Ignore unknown top-level keys, so future gateway metadata does not break the parser.
- Use
device,snandrsnto link a reading to its gateway and sensor.
const dataFields = [
"presence", "BR", "HR", "movement_index", "stability_BR", "stability_HR",
"stability_move", "version", "dc", "POBCCollectedTime", "POBCCollectedDate",
"dwelltime", "Amplitude_RR", "Distance_RR", "RegionPresence", "vital_signal",
"POBC_RR", "POBC_HR", "Awakeness"
];
const data2Fields = [
"AutoSensitivity", "POBCCollectedTime", "POBCCollectedDate", "Absence_Duration",
"RRPoint_Sustained", "SleepFlag", "MoveDuringSleepFlag", "ShallowB_Flag",
"MoveAVG_Last5Min", "AwakenessAVG_Last5Min", "Z_RRAVG_Last5Min", "Z_HRAVG_Last5Min",
"RRAVG_Last5Min", "HRAVG_Last5Min", "DistanceRRAVG_Last5Min", "runtime_day",
"Z_RR", "Z_HR", "publish_policy", "MoveDuringSleep_Duration", "MoveDuringSleep_Count"
];
function mapArray(fields, values) {
return Object.fromEntries(fields.map((field, index) => [field, values[index]]));
}
function parseSensorPayload(payload) {
const message = typeof payload === "string" ? JSON.parse(payload) : payload;
if (message.dt !== "e" || message.app !== 41) {
throw new Error("Unexpected sensor payload");
}
if (!Array.isArray(message.data) || message.data.length < dataFields.length) {
throw new Error("Invalid data array");
}
const version = message.data[7];
const hasData2 = version >= 121507;
if (hasData2 && (!Array.isArray(message.data2) || message.data2.length !== data2Fields.length)) {
throw new Error("Invalid data2 array");
}
if (!hasData2 && message.data2 !== undefined) {
throw new Error("Unexpected data2 array");
}
return {
device: message.device,
gatewaySerial: message.sn,
sensorSerial: message.rsn,
savingMode: message["saving-mode"],
data: mapArray(dataFields, message.data.slice(0, dataFields.length)),
data2: hasData2 ? mapArray(data2Fields, message.data2) : undefined
};
}
5 · Sensor Manager
Update LGW software in Sensor Manager
Update the LGW software remotely from Sensor Manager and check that the update is complete. The update takes about 3 to 5 minutes, depending on network conditions. The screenshots use an example company called "Sample"; select your own company.
1. Open LGW Calibration
Open Sensor Manager and sign in. In the left menu, select LGW, then Calibration.
2. Select your company and connection status
In the Company dropdown, select your company. Place is optional: select one to narrow the list, or leave it blank. Under Connection Status, select connected.
3. Confirm the device list
Check the List section below the filters. Confirm that the devices are shown and that the company above the list is correct.
4. Select the devices to update
Tick the checkbox on the left of each device to update, and check the Device ID to make sure you selected the right devices. A blue checkbox and a highlighted row mark a selected device.
5. Choose Update LGW
Above the device list, open the Command dropdown in the for Users tab and select Update LGW.
6. Click Send and wait 3 to 5 minutes
Confirm that Update LGW is selected and the right devices are ticked, then click Send next to the Command dropdown. Allow about 3 to 5 minutes for the update to finish.
7. Check the software version
Find each updated device in the list and check the GW SW Version column. The update is complete when every selected device shows the latest software version.
The version number in the screenshot is an example only; the latest version may differ.