Repository navigation
feat: update accelerators - #211
Merged
Merged
Conversation
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>
tjvantoll
approved these changes
Oct 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Numerous minor technical fixes to fw examples