← Nodes

KYKT — GPS Tracker

Active

Seeed 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

  • tracker
  • gps
  • battery

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

  1. Disconnect the iOS app from KYKT (BLE + serial together makes acks unreliable).
  2. Connect KYKT by USB; confirm port in Device Manager (COM18 at time of writing).
  3. 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-edit batches --set and --ch-set writes into a single reboot over serial. Channel writes commit fine inside the transaction.
  • Only one --ch-index per invocation. A second --ch-index silently 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.
  • --get prints only non-default fields. A missing is_power_saving or environment_measurement_enabled line 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_saving line (default false)
  • No telemetry.environment_measurement_enabled line (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.