KYKT — GPS Tracker
ActiveSeeed SenseCAP Card Tracker T1000-E (nRF52840)
Card-format GPS tag carried on a bag. Position only, excluded from routing, and power saving must stay off.
Commissioned September 12, 2026Notes updated September 12, 2026
Radio
- Hardware
- Seeed SenseCAP Card Tracker T1000-E (nRF52840)
- Firmware
- —
- Role
- TRACKER
- Region
- —
- Modem preset
- —
- Frequency slot
- —
- Hop limit
- 5
- TX power
- —
- Node ID
- —
- MQTT
- off
Power
- Source
- battery
- Solar
- —
- Battery
- 700 mAh
- Chemistry
- —
- Notes
- About one day of continuous GPS. Never enable power saving — the deep-sleep wake bug leaves the node recoverable only over serial/bootloader.
Site
- Deployment
- portable
- Area
- —
- Grid square
- —
- Elevation
- —
- Fixed position
- no
- Position precision
- 0 bits (off)
Other
- GPS update interval
- 60 s
- Position broadcast
- 900 s (15 min heartbeat)
- Smart broadcast
- on, 50 m / 60 s floor
- Position flags
- 897 (altitude, timestamp, heading, speed)
- Telemetry
- device metrics hourly; environment off
- Channel 0 precision
- 0 — no position on the public channel
Note on COM ports: The
COM##numbers in this guide are the author’s own, shown as examples — your port will differ. On Windows, open Device Manager → Ports (COM & LPT) with the node plugged in to find the COM number your device enumerated as, and use that in place of the example in every command. On macOS/Linux the equivalent is a/dev/tty.*,/dev/ttyUSB*, or/dev/ttyACM*path. Always confirm your own port before running these commands.
1. Target Configuration
| Section | Setting | Value | Purpose |
|---|---|---|---|
| Device | role | TRACKER | Position-only node; no rebroadcast, excluded from routing |
| Device | led_heartbeat_disabled | true | Battery / discretion |
| Device | node_info_broadcast_secs | 10800 | NodeInfo every 3 h |
| Power | is_power_saving | false | Deep-sleep wake bug |
| Position | gps_mode | ENABLED | Live GPS |
| Position | gps_update_interval | 60 | Fix cadence, seconds |
| Position | position_broadcast_secs | 900 | Stationary heartbeat, 15 min |
| Position | position_broadcast_smart_enabled | true | Send on movement |
| Position | broadcast_smart_minimum_distance | 50 | Metres moved before send |
| Position | broadcast_smart_minimum_interval_secs | 60 | Floor between smart sends |
| Position | position_flags | 897 | Altitude + Timestamp + Heading + Speed |
| Telemetry | device_update_interval | 3600 | Battery/voltage hourly |
| Telemetry | environment_measurement_enabled | false | No environment sensor |
| Channel 0 (PRIMARY) | position_precision | 0 | No position on the public channel |
Expected battery life with this profile: roughly one day of continuous GPS. First knobs to relax if needed: gps_update_interval 120, position_broadcast_secs 1800. Do not touch power saving.
2. CLI Procedure (Windows CMD, serial)
Before starting
- Disconnect the iOS app from KYKT (BLE + serial together makes acks unreliable).
- Connect KYKT by USB; confirm port in Device Manager (COM18 at time of writing).
- Every committed write reboots the node. Wait 60–90 s before the next command. If the port disappears mid-run, that is the reboot — wait and re-run the same command.
Step 1 — Config transaction (one reboot)
meshtastic --port COM18 --begin-edit --set device.role TRACKER --set power.is_power_saving false --set device.led_heartbeat_disabled true --set device.node_info_broadcast_secs 10800 --set position.gps_mode ENABLED --set position.gps_update_interval 60 --set position.position_broadcast_secs 900 --set position.position_broadcast_smart_enabled true --set position.broadcast_smart_minimum_distance 50 --set position.broadcast_smart_minimum_interval_secs 60 --set position.position_flags 897 --set telemetry.device_update_interval 3600 --set telemetry.environment_measurement_enabled false --ch-index 0 --ch-set module_settings.position_precision 0 --commit-edit
Step 2 — Wait for reboot, then verify (Section 4).
Step 3 — Re-send any field that did not persist, one field per command
meshtastic --port COM18 --set position.position_broadcast_secs 900
meshtastic --port COM18 --set position.broadcast_smart_minimum_interval_secs 60
meshtastic --port COM18 --ch-index 0 --ch-set module_settings.position_precision 0
CLI rules learned on this node
--begin-edit … --commit-editbatches--setand--ch-setwrites into a single reboot over serial. Channel writes commit fine inside the transaction.- Only one
--ch-indexper invocation. A second--ch-indexsilently overrides the first — use separate commands for separate channels. - A large transaction may ack but drop one or two fields (seen:
position_broadcast_secs,broadcast_smart_minimum_interval_secs). Always verify, then re-send single-field. --getprints only non-default fields. A missingis_power_savingorenvironment_measurement_enabledline means default (false) — absence is not failure.
3. iOS App Procedure (Meshtastic app)
Use only if serial is unavailable. A GUI save rewrites the entire section, so re-verify with the CLI afterward.
Connect to KYKT over Bluetooth, then:
Settings → Radio Configuration → Device
- Device Role: Tracker
- LED Heartbeat: Off
- Node Info Broadcast Interval: 3 hours
- Save
Settings → Radio Configuration → Position
- GPS Mode: Enabled
- GPS Update Interval: 1 minute
- Position Broadcast Interval: 15 minutes
- Smart Position: On
- Minimum Distance: 50 m
- Minimum Interval: 1 minute
- Position Flags: Altitude, Timestamp, Heading, Speed on; all others off
- Save
Settings → Radio Configuration → Power
- Power Saving: Off
- Save
Settings → Module Configuration → Telemetry
- Device Metrics Update Interval: 1 hour
- Environment Metrics: Off
- Save
Settings → Channels → Primary (index 0)
- Position: Off (equivalent to precision 0 — nothing is sent on this channel)
- Save
Each save reboots the node. Wait for reconnect before opening the next section. After the last save, disconnect the app and run the Section 4 CLI verification — the app has previously written unexpected interval values (0 / 43200) on save.
4. Verification
Commands
meshtastic --port COM18 --get position --get telemetry --get device
meshtastic --port COM18 --info | findstr /i precision
Expected output — position / telemetry / device
position.position_broadcast_secs: 900
position.position_broadcast_smart_enabled: True
position.gps_update_interval: 60
position.position_flags: 897
position.broadcast_smart_minimum_distance: 50
position.broadcast_smart_minimum_interval_secs: 60
position.gps_mode: 1
telemetry.device_update_interval: 3600
device.role: 5
device.node_info_broadcast_secs: 10800
device.led_heartbeat_disabled: True
gps_mode: 1 = ENABLED. device.role: 5 = TRACKER. gps_en_gpio, buzzer_gpio and tzdef are hardware/board defaults and can be ignored.
Expected output — channel 0
Index 0: PRIMARY ... "moduleSettings": { "positionPrecision": 0 ...
Field check
-
position_broadcast_secs= 900 (not 3600) -
broadcast_smart_minimum_interval_secs= 60 (not 300) - Channel 0
positionPrecision= 0 (not 15) - No
power.is_power_savingline (default false) - No
telemetry.environment_measurement_enabledline (default false)
Functional check from the base
meshtastic --host 10.10.10.195 --nodes
KYKT should appear with fresh coordinates, battery %, and a last-heard within the smart/heartbeat window. Double-press the T1000-E button to force an immediate position send if it has not updated.
5. Operating Notes
- Double-press button = ad-hoc position send.
- Long-press = power off/on; unaffected by this configuration.
- Never enable power saving on this node.
- Any time the iOS app touches the node, re-run Section 4.