Device settings — PBLFEATHERGPS

Received 2026-10-11 12:36:37 UTC (7 days ago) · revision 3

Bluetooth sensors

enabled Listen for the Bluetooth temperature and door sensors (passive - never connects to them). default: On

Door sensors door_sensors

ELA magnet pucks. Enter the serial printed on the side of the puck (e.g. 00002A9) - or its Bluetooth address if you know it; either is enough. Door activity wakes a parked unit. 'Open value' is the state bit that means OPEN - flip it if the screen shows the door backwards. Source, ID, Byte and Mask say where the state sits in the puck's Bluetooth message; the defaults match the ELA Blue PUCK MAG. Up to 4.

Temperature sensors temp_sensors

ELA Puck T sensors to use. Enter the serial printed on the side of the puck (e.g. 00000004A) - or its Bluetooth address (aa:bb:cc:dd:ee:ff) if you know it; either is enough. With none listed the unit accepts any Puck T it hears. Up to 6.

scan_window_ms Length of each listening window when not listening continuously. Longer than the sensors' advertising period (~9.5s for the ELA pucks) or they can be missed. default: 10.5 s
temp_max_age_ms A temperature reading older than this is treated as missing (not logged or shown). default: 3 min
scan_interval_ms Gap between listening windows when not listening continuously. default: 30 s
continuous_when_active Listen non-stop while logging or on USB/external power, so readings are as fresh as the sensors send them. Off = use the window/interval below always. default: On

GPS

silent_timeout_ms No data at all from the GPS for this long is reported as 'NO GPS DATA' (check wiring/power) rather than 'no fix'. default: 10 s

WiFi

Saved WiFi networks networks

Networks the unit may join, strongest in-range one first. Leave a password blank to keep the saved one; a new network with a blank password is treated as open. Up to 8.

scan_first Scan first and only try saved networks that are in range (fast after a wake). Turn off only to use a hidden network. default: On
total_budget_ms Stop trying further networks once one connect attempt has taken this long. 0 = no limit. default: 30 s
connect_timeout_ms How long to wait for each network to connect. default: 10 s

Power & sleep

wake_on_door Wake periodically for a quiet Bluetooth check of the door sensor(s); any door activity since parking wakes the unit like a button press. Needs a door sensor registered under Bluetooth. default: On
wake_on_button Pressing the button wakes the unit from sleep. At least one wake source must be on or the unit won't park. default: On
no_fix_sleep_ms How long it sleeps before searching again. Doubles on each repeat without a fix, up to 8x. default: 10 min
parked_after_ms How long stationary on battery before the unit parks in deep sleep. default: 10 min
no_fix_timeout_ms How long without any GPS fix before the unit sleeps. default: 10 min
wake_door_scan_ms How long each door check listens. Must be longer than the door sensor's advertising period (~9.5s default) unless that is shortened in the ELA app. default: 10.5 s
parked_sleep_enabled Deep-sleep when parked (stationary) on battery power. default: On · differs from default
wake_check_window_ms How long the GPS gets to find a fix during a timed check. default: 10 s
wake_door_interval_ms How often the door check wakes the unit while parked. Shorter = quicker to notice the door, more battery. default: 1 min
wake_move_threshold_m Further than this from the parked position counts as a trip starting. default: 100 m m
no_fix_timeout_enabled On battery and stationary with no GPS fix for the timeout below: sleep instead of searching forever. default: On · differs from default
wake_timer_interval_ms How often the timed GPS check wakes the unit. default: 10 min
wake_on_timer_gps_check Wake periodically for a quiet GPS check; if the unit has moved it carries on booting, otherwise it sleeps again. default: Off

Motion detection

moving_speed_mps Speed that must be held (for the confirm time below) before the unit counts as moving. 2.24 m/s is 5 mph. default: 2.24 m/s m/s
moving_confirm_ms How long speed must stay above the moving speed before the unit is called moving. default: 20 s
stopped_speed_mps Speed below which the unit starts counting as stopped. default: 2.24 m/s m/s
stationary_grace_ms How long logging carries on after stopping (or after boot, before first movement) before it pauses. default: 5 min
stopped_debounce_ms How long speed must stay below the stopped speed before the unit is called stationary. default: 15 s

Display

dim_percent TFT only. Backlight brightness once dimmed. default: 15 % %
dim_after_ms TFT only. The screen dims after this long without a button press. 0 = never. default: 30 s
off_after_ms TFT only. The screen turns off after this long without a button press. 0 = never. default: 2 min

Logging

max_pdop Highest PDOP (position dilution) accepted. Lower is stricter; poor satellite geometry can put a fix far off. default: 10
trip_gap_ms A gap this long since the last logged point starts a new trip file instead of adding to the old one. default: 2 h
min_satellites Fewest satellites a fix needs before it is trusted for logging or deciding if the unit is moving. default: 4 sats
summary_interval_ms How often a track point is written to the GPX file (and the status printout runs). default: 10 s
max_plausible_speed_kmh A jump from the last logged point that implies more than this speed is rejected as a bad fix. default: 200 km/h km/h

Network

checkin_interval_ms How often the unit connects to WiFi to check for commands from this server. default: 1 min
upload_mode_checkin_interval_ms Check-in interval while in upload mode (headless button / TFT Status screen), for pulling files quickly. default: 10 s

Storage

min_free_bytes_before_prune When free storage drops below this, the oldest non-active GPX file is deleted automatically. default: 256 KB

Indicators

neopixel_brightness Onboard LED brightness, 1 (dim) to 255 (full). default: 40

GPX data per point

hdop Horizontal dilution of precision (fix quality). default: On · differs from default
pdop Position dilution of precision (fix quality). default: On
speed GPS speed (knots). default: On
events Event tags on a point (boot, startedMoving, stoppedMoving, doorOpened, doorClosed, doorWake) and the reset reason on boot. default: On
moving Whether the unit considered itself moving. The map/summary pages use this. default: On
ble_temp Bluetooth temperature sensors: the first as puckTemp (read by the map/summary pages), each sensor also as its own named entry. default: On
door_raw The door sensor's raw advertised value (2 bytes). It changes on every door activity, so it shows openings between points. default: Off
esp_temp The unit's own chip temperature. The map pages fall back to this when there is no Bluetooth temperature. default: On
fix_type Fix type (2D / 3D) on each point. default: On
door_state Door open/closed from the registered door sensor(s), when one has been heard recently. default: On
satellites Number of satellites used. default: On
power_source Whether running on battery, charging, or external power. default: Off
battery_percent Battery level (%) from the fuel gauge, if one is fitted. default: Off
battery_voltage Battery voltage from the fuel gauge, if one is fitted. default: Off

Only the fields you change are sent. The device saves them and restarts when it is stationary or in upload mode.

Raw JSON

{
  "ble": {
    "enabled": true,
    "door_sensors": [
      {
        "id": 10758,
        "mac": "",
        "byte": 0,
        "mask": 1,
        "name": "Door Switch",
        "serial": "00002A9",
        "source": "service",
        "open_value": 0
      }
    ],
    "temp_sensors": [
      {
        "mac": "",
        "name": "T1",
        "serial": "00000004A"
      }
    ],
    "scan_window_ms": 10500,
    "temp_max_age_ms": 180000,
    "scan_interval_ms": 30000,
    "continuous_when_active": true
  },
  "gps": {
    "silent_timeout_ms": 10000
  },
  "wifi": {
    "networks": [
      {
        "ssid": "Zyxel_1CA1",
        "password": "********"
      },
      {
        "ssid": "Tom's iPhone",
        "password": "********"
      },
      {
        "ssid": "BTHub6-58HQ",
        "password": "********"
      }
    ],
    "scan_first": true,
    "total_budget_ms": 30000,
    "connect_timeout_ms": 10000
  },
  "power": {
    "wake_on_door": true,
    "wake_on_button": true,
    "no_fix_sleep_ms": 600000,
    "parked_after_ms": 600000,
    "no_fix_timeout_ms": 600000,
    "wake_door_scan_ms": 10500,
    "parked_sleep_enabled": false,
    "wake_check_window_ms": 10000,
    "wake_door_interval_ms": 60000,
    "wake_move_threshold_m": 100,
    "no_fix_timeout_enabled": false,
    "wake_timer_interval_ms": 600000,
    "wake_on_timer_gps_check": false
  },
  "motion": {
    "moving_speed_mps": 2.24,
    "moving_confirm_ms": 20000,
    "stopped_speed_mps": 2.24,
    "stationary_grace_ms": 300000,
    "stopped_debounce_ms": 15000
  },
  "display": {
    "dim_percent": 15,
    "dim_after_ms": 30000,
    "off_after_ms": 120000
  },
  "logging": {
    "max_pdop": 10,
    "trip_gap_ms": 7200000,
    "min_satellites": 4,
    "summary_interval_ms": 10000,
    "max_plausible_speed_kmh": 200
  },
  "network": {
    "checkin_interval_ms": 60000,
    "upload_mode_checkin_interval_ms": 10000
  },
  "storage": {
    "min_free_bytes_before_prune": 262144
  },
  "indicators": {
    "neopixel_brightness": 40
  },
  "config_version": 1,
  "gpx_extensions": {
    "hdop": false,
    "pdop": true,
    "speed": true,
    "events": true,
    "moving": true,
    "ble_temp": true,
    "door_raw": false,
    "esp_temp": true,
    "fix_type": true,
    "door_state": true,
    "satellites": true,
    "power_source": false,
    "battery_percent": false,
    "battery_voltage": false
  },
  "config_revision": 3
}

← Back to boxes