Skip to content

feat: update accelerators - #211

Merged
rdlauer merged 15 commits into
mainfrom
rob-accel-doc-sync
Oct 19, 2026
Merged

rdlauer merged 15 commits into
mainfrom
rob-accel-doc-sync

Conversation

@rdlauer

@rdlauer rdlauer commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Numerous minor technical fixes to fw examples

rdlauer and others added 15 commits October 16, 2026 15:00
Diesel: a failed note.template doesn't drop Notes, it stores them as
plain JSON; section references now point at the accelerator page's §6
and §11 instead of the retired README sections. Solar: a combiner-only
source can't produce string_fault either (every vr is 1.0), and README
references now point at the accelerator page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Heavy equipment hours: ~23 combustion cycles per vibration window, and
log the classifier thresholds when a Notehub update changes them (the
writeup's tuning steps tell readers to watch for that line).

Tote pool: a failed send waits a heartbeat interval, not a day.

Untethered trailer: the Swan is an STM32L4R5, sensitivity:2 is +/-8G,
comments that said setup() for loop() code, and README references now
point at the accelerator page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both sketches now register an env.template (string hints, so env.get
values stay strings for the existing parser), which Notecard for Skylo
needs before Notehub will deliver environment variables over NTN.

Livestock also sets full:true on its templated alert and summary Notes
so zero values (level_low's alert_code 0, an empty tank, pump off)
aren't dropped by omitempty, and corrects the MB7389 model name and
comments about where templates are retried. Apiary corrects a template
hint comment and points README references at the accelerator page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
EV charger: env var values are strings, so JGetNumber() always read 0
and no Notehub setting ever applied (and any alert_offline_min disabled
the offline alert). Parse them with JGetString + strtod, re-init Modbus
when modbus_slave_id changes, and stop warning on {env-not-modified}.

Transformer: fetchEnvOverrides() returned early on unchanged env vars
before the cadence hub.set, so a failed or not-yet-applied summary
cadence was never retried.

Sub-metering: the MCP6004 supply range, and README references now point
at the accelerator page. Comment fixes in all three.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Demand response: isQueueEmpty() matched "note not found", which the
Notecard never returns, so every empty dispatch.qi poll was counted as
a note.get error; match {note-noexist} and {notefile-noexist}. Comments
now say three attempts and give the real reason for requestAndResponse.

Plug load: clampF() rejects NaN so an env var of "nan" can't slip past
the range checks; comments about when templates and settings are
applied are corrected.

Walk-in cooler: comments now say loop() does the retrying.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ments

Rooftop HVAC: env vars were parsed with atof/atoi/atol and accepted any
value, so sample_interval_sec=0 made the host spin and large start
thresholds overflowed a uint8_t. They now go through envFloat()/envUint()
with per-variable ranges, and a rejected value keeps the current
setting. Removes the any_valid summary guard, which could never trip.

VFD pump: README references now point at the accelerator page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ow-cleared Note

Post-discharge hub: a threshold-tripping reading only attempted its
alert if the reading's Note was accepted, and a final failure was only
logged in debug builds. The alert is now attempted regardless, and
dropped readings and alerts are counted and reported in a vitals_fault.qo
Note that is retried until the Notecard accepts it.

Pillbox: the overflow-cleared diagnostic is retried every wake until
accepted, and comments now describe sendRequest() accurately.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s over NTN

tank_status.qo and tank_alert.qo had a port but no format:"compact", so
nothing ever went over satellite; both are now compact with a _time
field. An env.template now names all 11 variables, which Notecard for
Skylo needs before Notehub delivers environment variables over NTN.
Comments about WiFi priority and the 10% grease depth allowance are
corrected, and README references point at the accelerator pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…anti-theft tracker

checkAndHandleCommand() treated an empty immobilize.qi as an error
because it looked for "quiet" instead of {note-noexist}, so a sync:true
cmd_retrieve_failed alert went out every 5 minutes and burned satellite
data. It also read err_str after freeing the response. ensureConfigured()
marked hub setup done before card.transport ran, so a failed transport
request left satellite off until a power cycle; it now retries.

Reefer: comments about alert retry conditions are corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fetchEnvVars() read freefall_g, impact_g, fall_window_ms,
freefall_min_ms, and panic_hold_ms with JGetNumber(), but env var
values are strings, so it always got 0 and no threshold could be tuned
from Notehub. They're now parsed with JGetString + strtof/strtoul,
keeping the reject-and-keep-current range checks; clampF() also rejects
NaN so "nan" can't disable fall detection. An env.template now names
the six variables so Notecard for Skylo receives them over NTN.

Noise monitor and cold storage: comment fixes, and README references
now point at the accelerator pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d motion

Rail car: configureNotecard() never sent card.transport, so Notecard for
Skylo stayed on its wifi-cell default and the satellite fallback never
turned on; it now sets cell-ntn and retries until both requests succeed.
g_firstWake is cleared only after configuration succeeds, so a failed
first wake no longer skips the boot status Note or sends a false
coupled alert.

Pallet: cargo_alert.qo and cargo_state.qo get compact templates (ports
52 and 53, with _time) so they sync over NTN instead of being rejected.
Orientation is read from card.motion's status field (it was reading a
nonexistent orientation field, so tilt never fired), and movements is
summed as base-36 bucket characters instead of parsed as a number.

Both: a commented PRODUCT_UID define sits above the #ifndef fallback, so
setting it silences the reminder pragma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The firmware never sent card.transport, so Notecard for Skylo stayed on
its wifi-cell default; its summary template wasn't compact and alerts
had no template, so neither could go over NTN anyway. It now sets
cell-ntn, registers an env.template, makes the summary compact (with
_time/_lat/_lon), and adds a compact trailer_alert.qo template on port
51. A failed env.get no longer resets every override to defaults for
that cycle, and full:true keeps zero-valued fields like a parked
trailer's state.

CNC and injection molding: comments about template string hints and
README references are corrected; trailer_sensors.h's frame count is ~30.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Notes over the right transport

Aerial lift: Adafruit INA2xx readCurrent() returns mA, but the firmware
used it as amps, so any load over 200 mA failed the +/-200 A check and
aborted the sample, and smaller readings were 1000x high; it's now
divided by 1000. battery_status.qo had port, compact format, and
delete:true, which deleted every hourly summary on cellular; it's now
an ordinary cellular template. card.transport cell-ntn turns on the
satellite fallback Notecard for Skylo ships without. README description
now says cycle throughput.

Off-grid solar: solar_summary.qo is compact and solar_alert.qo gets a
compact template (port 51), so both can go over NTN; Skylo builds
(-DSKYLO_BUILD) set card.transport cell-ntn.

Cabinet sentinel: template hint comments and README references.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fetchEnvVars() converted thresholds with strtof/strtoul and ignored the
unparsed remainder, so impact_g="2,5" became 2.0 and
fall_window_ms="300oops" became 300, both passing their range checks.
A new parseEnvNumber() requires the whole string to be a finite number
(and a whole number for the _ms settings) before the range check runs;
anything else keeps the current value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The counters also increment when every attempt got no response, and the
Notecard may have stored a Note whose I2C reply was lost, so the
comments now call them possible losses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rdlauer
rdlauer requested a review from tjvantoll October 16, 2026 20:52
@rdlauer
rdlauer merged commit 9c62870 into main Oct 19, 2026
1 check passed
@rdlauer
rdlauer deleted the rob-accel-doc-sync branch October 19, 2026 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants