⚠️ PROTECTIONS DISABLED FOR TUNING — RE-ENABLE BEFORE NORMAL USE ⚠️
XEngineering
?
Batt - V SOC - %
Alt - A Batt - A
Temp
- °F
RPM - IGN ?
Alternator Enable
Settings are Locked
⚠ Avoid parameter changes during rapid RPM or load swings — controls may briefly lag.
Vessel Information
Length (feet):

Type:

Make/Model:

Year:

Engine Make:

Horsepower:

Home Port:
Charging Equipment
Nominal Battery Voltage:

Battery Capacity (Ah):

Battery Type:

Alternator Brand/Model:

Nominal Solar Panel Wattage:
Physical Regulator Installation

Mounting Alignment Check

X Y Z
-- -- --
Waiting for sensor data...
This works best when the boat is calm and level.

Alignment Selection

Select how the regulator is mounted. Device must be mounted squarely with wires pointing downward.

Location in Vessel

Approximate positions are acceptable. These measurements help improve motion analysis accuracy.

Distance from Bow (feet):

Distance from Centerline (feet):
Positive = starboard, Negative = port, 0 = centerline

Height Above Waterline (feet)
Positive = above waterline, Negative = below, 0 = at waterline
Charge Rate:
Limit by:
RPM ℹ️Engine RPM breakpoint for this bucket. Row 0 covers all RPM below its value; row 9 covers all RPM above its value. Limit
(A) ℹ️Hard current ceiling (A) for this RPM range. In Amps mode, enter your limit here — the kW column is calculated from this value and the present battery voltage. In kW mode, this is derived from your kW limit and live battery voltage each control tick.
Limit
(kW) ℹ️Power limit for this RPM range. This is electrical power, assuming 100% alternator efficiency. If you want to convert to engine power, you can mentally multiply table values by 2 to account for mechanical and electrical losses. In kW mode, enter your limit here — the firmware divides by live battery voltage each control tick to derive the amp ceiling, so the load stays constant regardless of voltage sag or rise. In Amps mode, this is calculated for reference only.
Min
(%) ℹ️Minimum field duty cycle (%) for this RPM range. Protects the tachometer signal coupling capacitor from dropout at low duty. Set to 0 if unsure — the only penalty is occasional tach signal dropout.
<
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
0Overheats
0Safe hours
+
0Overheats
0Safe hours

Current RPM Index: ℹ️Which RPM table bucket (0–9) the controller is currently operating in, based on measured engine RPM. −1 means no valid RPM reading yet. 0
PID Initialized: ℹ️Whether the output current PID has been initialized for the current operating point. Briefly false on startup or after mode transitions; the PID performs a bumpless transfer before resuming AUTO control. No

Output Control
Field Control (?): ℹ️ Manual mode disables safeguards: no MinDuty or MaxDuty enforcement, no temperature or voltage limiting, no RPM-dependent minimum.
Manual PID

Manual Field PWM (%) (?): ℹ️Direct PWM duty cycle (0–100%) applied to the field winding when Manual mode is active. Has no effect in PID mode. Use with caution — Manual mode bypasses many thermal, voltage, and current protections.

Min Field (%) (?): ℹ️Minimum allowable field when Alternator is enabled (global). If in doubt, set to zero — the only penalty is that the tachometer may occasionally drop out. Better is to adjust Min Field locally (by speed) in the RPM table.

Max Field (%) (?): ℹ️Set ≤99% to ensure bootstrap capacitor refresh for the gate driver. At 100% duty the high-side may not fully refresh, risking incomplete gate drive and increased MOSFET heating. 99% is effectively maximum in practice.

Field Resistance (Ω) (?): ℹ️Only affects Field Amps calc, not important.

Field Switching Freq (Hz) (?): ℹ️100 to 2000 Hz is a good range — may want to avoid human hearing frequencies depending on installation location and noise.

Warmup Ramp Rate (A/s) (?): ℹ️ Rate at which the output current ceiling rises from 0A each time the alternator enables. Set to 0 to disable (immediate full output). Example: 2 A/s reaches 120A cap in 60 seconds.
Rate Limiting
Setpoint Rise Rate (A/s) (?): ℹ️Maximum rate the current target can increase during AUTO operation. Does not apply during on/off transitions — only Duty Ramp Rate applies then. Use a slower rate (e.g. 5 A/s) to prevent sudden demand spikes.

Setpoint Fall Rate (A/s) (?): ℹ️Maximum rate the current target can decrease during AUTO operation. No effect during on/off transitions — only Duty Ramp Rate applies then.

Startup Rise Rate (A/s) (?): ℹ️Setpoint slew rate applied only when the field is first turned on (OFF to AUTO). A slow value (e.g. 3 A/s) lets the alternator build field current gradually, preventing integrator windup and the FastOV crash-to-zero that can follow. Has no effect on tuning steps, CV load-connect recovery, or RPM step-ups — those use Setpoint Rise Rate.

Duty Ramp Rate (%/s) (?): ℹ️Maximum rate of duty cycle change in ALL cases including on/off transitions. Lower values prevent rapid field changes that can disturb the tachometer signal.

Shutdown Slow Ramp Rate (%/s) (?): ℹ️Rate at which field duty ramps from minimum to 0% during Phase 3 shutdown. Lower = slower, gentler on LM2907 tach signal. Default 1%/s takes ~5s from 5% to 0.

Shutdown Phase 2 Hold Time (ms) (?): ℹ️How long to hold at minimum field duty before beginning slow ramp to 0. Set to 0 to skip Phase 2 entirely.
Temperature Settings
Alternator Temp Limit (°F) (?): ℹ️ Maximum safe temperature at the sensor location. The temperature PID begins reducing current as temperature approaches this value — intervention starts at (Limit − Temp PID Margin), defaulting to 15°F below. Hard warning and critical shutdowns trigger above it. Sensors often read 20–30°F cooler than true winding temperature; account for this offset when setting this value.

Temp Warning Excess (°F) (?): ℹ️°F above TemperatureLimit that triggers WARNING. Duty ramps to zero and lockout starts. If temperature stays above warning for TempSustainedTimeout, escalates to TEMP_SUSTAINED and GPIO4 cuts after duty settles. Compares raw sensor temperature (not projected). Default: 2°F.

Temp Critical Excess (°F) (?): ℹ️°F above TemperatureLimit that triggers an immediate field cut (GPIO4 LOW, no ramp, no settle wait). Compares raw sensor temperature (not projected). Highest-priority thermal protection event. Default: 10°F.

Temp Sustained Timeout (s) (?): ℹ️Seconds of continuous WARNING temperature before escalating to TEMP_SUSTAINED, which ramps duty to zero then cuts GPIO4. Timer resets if temp drops below the warning threshold. Enter in seconds — stored internally as milliseconds. Default: 120s.

Temp Source (?): ℹ️Select the temperature sensor used for thermal protection. Digital uses an onboard digital sensor (e.g. DS18B20). Thermistor uses an analog NTC thermistor configured by R_fixed, Beta, and T0 below.
Digital Thermistor

Internal Temp Offset (°F) (?): ℹ️ONLY used for alternator component life physics models. How much hotter windings, bearings, brushes are than physically measured alternator case temperature. Typical: 40–60°F.

Thermistor Series Resistor R_fixed (Ω) (?): ℹ️Value (Ω) of the fixed series resistor in the thermistor voltage divider circuit. Must match the resistor physically installed on the board.

Thermistor Beta (?): ℹ️Beta coefficient from the thermistor datasheet — characterizes how its resistance changes with temperature. Typical NTC thermistors: 3000–4000. Find the exact value in your thermistor's datasheet.

Thermistor Reference Temp T0 (°C) (?): ℹ️Reference temperature (°C) at which the thermistor's nominal resistance is specified. Almost always 25°C per datasheet.
Current Sensing
Hall Effect Sensor Range (?): ℹ️Select the rated current range of your QNHCK1-21 clamp-on hall effect sensor. Choosing the wrong range will scale all alternator current readings incorrectly.

Invert Alternator Amps (?): ℹ️Reverses the sign of the raw alternator current reading. Enable if your hall-effect sensor is mounted with reversed polarity and reports negative amps during normal charging.
No Yes

Alternator Current Offset (A) (?): ℹ️Fixed offset (A) added to the raw alternator current reading to correct for sensor zero error. Use the Auto-Zero Reset button to calibrate automatically, or enter a known offset manually.

Current Threshold (A) (?): ℹ️Below this, the Alternator is assumed OFF. Affects many alternator calcs.

Alternator Auto-Zero (?): ℹ️Automatically zeros alternator current reading every hour and when temperature changes 20°F.
Off On
Alternator Health
Set Alternator Life Manually (%) (?): ℹ️This will adjust life for brushes, bearings, insulation all together, meant for zeroing all together.
CV Mode holds the alternator output to a fixed user-specified voltage target, bypassing the normal Bulk / Absorption / Float charge algorithm. The voltage loop adjusts the current setpoint every 100 ms (set by Voltage Loop Interval) using Voltage Loop Kp and Ki to eliminate steady-state voltage error. All current limits remain fully active — RPM Cap Table, thermal penalty, Fast OV, Load Dump, Group 3 iExcess, and any user overrides — so the only thing this mode changes is the voltage target. Use this tab to tune voltage loop parameters or simulate a fixed-voltage regulator. ⚠️ Not intended for lithium batteries.
CV Mode On/Off (?): ℹ️ ⚠️ Not safe for Lithium batteries. This mode bypasses the normal charge algorithm — use only with flooded or AGM batteries, or in consultation with your battery manufacturer.

Overrides normal charging with fixed voltage control — mainly useful for tuning voltage loop parameters or simulating an old-school automotive alternator voltage regulator.
Off On

Target Voltage Setpoint (V) (?): ℹ️ Voltage target when mode is enabled.
Anomaly Detection

The live scatter plot for anomaly detection is shown in Live Data → Alternator (Field vs Output for this RPM and Temperature Bucket). The reset button is also there, just below the plot.

Anomaly Tolerance (A) (?): ℹ️ Extra amps of tolerance added beyond the stored reference min/max before a steady-state point is counted as an anomaly. 0 = any exceedance counts. Recommended: start at 3–5A to absorb natural measurement scatter and avoid false positives. Reduce once you have confidence in the reference data.

Alarm Threshold (errors) (?): ℹ️ Number of out-of-range steady-state points required in a single session before the alarm fires. Resets every power cycle. Recommended: 5. Lower values are more sensitive but risk false alarms from transient conditions like cold starts or sudden load changes. Raise to 10+ in rough sea conditions where RPM and load are less stable.

Degradation Sensitivity (%) (?): ℹ️ How far the thermally-settled session average must drift from the reference average before a degradation alert fires. 15% means the alternator must be producing 15% more or less than its reference average, sustained over ~90 seconds, before Tier 2 triggers. Lower values are more sensitive. Recommended starting point: 15%. Reduce to 10% once you have confidence in the reference data quality.

Enable Audible Alarm (?): ℹ️ When ON, triggers the physical alarm output once the session anomaly count exceeds the threshold above. Leave OFF until the reference matrix is finalized and you have validated that the detection is not generating false positives. The on-screen banner warning is always shown regardless of this setting.
Off On
How Anomaly Detection Works

What This System Does: The efficiency matrix learns the normal relationship between alternator field drive and output current across engine operating conditions. Once enough data is accumulated, it can detect when the alternator is producing significantly more or less current than it historically has under the same conditions — an early warning of problem such as brush wear, diode failure, belt slip, etc.

The Reference Matrix: Operating conditions are divided into bins along three axes — engine RPM, alternator case temperature, and field drive voltage (duty cycle × battery voltage). Every qualifying operating point is accumulated into the appropriate bin as a time-weighted running average, with minimum and maximum values tracked. This matrix persists across power cycles and accumulates forever. The more hours of operation, the more reliable each bin becomes.

Reference Finalization: Once the matrix has accumulated enough data across a sufficiently wide spread of operating conditions, the system automatically selects the best-populated bins as reference bins and freezes their values. These frozen values become the permanent baseline for anomaly detection. The selection algorithm favors bins that collectively span a wide range of RPM, temperature, and field drive — ensuring the reference is not built from a single narrow operating region. Until finalization occurs, the plot displays available data at reduced opacity with a "Low Confidence" label.

Two-Tier Anomaly Detection: Once reference bins are finalized, every qualifying operating point is checked against the reference for its current bin. Tier 1 is instantaneous — if the current output falls outside the stored reference min/max range (plus your configured tolerance), an error is counted immediately and continues to count on every qualifying tick the deviation persists. This catches sudden failures like a broken belt or failed diode. Tier 2 is thermal — once at least 90 qualifying samples have accumulated in the same bin during this session (roughly 90 seconds at the typical 1 Hz sample rate), the running session average is compared against the reference average. If it has drifted past your configured degradation percentage, a single Tier 2 error is recorded for that bin (it fires at most once per bin per power cycle). This catches gradual degradation that stays inside the historical range on any individual reading but represents a sustained drift. Both tiers check in both directions — unexpectedly high output is also flagged, as it can indicate a regulator fault or measurement error.

The Plot: The scatter plot shows field drive voltage on the horizontal axis and alternator output current on the vertical axis. When a finalized reference bin is active, a gray shaded band shows the historical min/max range and a solid gray line shows the historical average for that operating region. The red dot shows the live operating point. If the red dot sits inside the band, the alternator is performing normally. If it drifts outside, the band color and the warning banner below reflect the deviation. When operating in a populated but non-finalized bin, the band is shown faded with a Low Confidence label. When no reference data exists for the current conditions, only the red dot is shown.

Alarms and Reset: The session error count resets each power cycle. If the combined Tier 1 and Tier 2 error count exceeds the configured threshold in a single session, a warning banner appears on screen and optionally triggers the physical alarm output. The warning banner gives specific detail about which operating conditions triggered the anomaly, what the reference values were, and by how much the current output deviated. Use the Reset button only if you have replaced the alternator or made a mechanical change that invalidates the existing reference — it clears all accumulated matrix data and reference bins permanently.

Pick a pill to focus on one protection. Tune the control loops first (in the Tuning tab, protections off), then adjust these after.

View:
Detection

When measured current exceeds the safe system limit for the debounce duration, the trip fires. Set Command Limit to the lowest safe maximum across the whole system — including alternator continuous rating, battery acceptance, mechanical belt drive capacity, fuse ratings, and wiring limits. Whichever is lowest. The trip threshold is automatically 10 A above Command Limit.

Predicts where battery voltage will be a fraction of a second from now: predicted = measured + Prediction Horizon × voltage rise rate. Engages when the prediction exceeds the active charge target by more than the Group 1 Trigger Margin. dvdt EMA TC sets how much the rise rate is smoothed before prediction — larger TC means smoother but laggier. Group 1 Enable turns the whole layer off.

Engages when measured battery voltage exceeds the active charge target by more than the Group 2 Trigger Margin. Group 2 Enable turns the whole layer off.

Engages when measured alternator current exceeds the commanded setpoint by K_excess amps for the N — Persistence count of consecutive ticks (~5 ms each). Signal Filter selects how the current signal is filtered before comparison — Raw, MA(N), or EMA(TC). MA Window sets the moving-average window when MA(N) is selected; the EMA time constant is the Excess current detection filter shown read-only here (lives in Tuning → Plant Delay). Arming requires the CV loop to be active AND measured voltage to be within the Arming Margin below target.

Three tiered thresholds on the rate-of-change of battery current. Tier 1 fires when one sample exceeds its threshold. Tier 2 fires when two consecutive samples exceed its threshold. Tier 3 fires when three consecutive samples exceed its threshold.

G0 Command Limit (A) (?) — OC trips at ?A
A
G0 Overcurrent Trip Debounce (ms) (?)
ms
G1 Group 1 Enable (?)
Off On
G1 OvPredMargin — Group 1 Trigger Margin (V) (?)
V
G1 TdPred — Prediction Horizon (s) (?) ℹ️How far ahead (seconds) the predicted voltage is projected: predicted = measured battery voltage + TdPred × voltage rate-of-rise. Used only by Group 1. Only the rising component of rate-of-rise is used — falling voltage is ignored. Default 0.045 s (45 ms).
s
G1 dvdt EMA TC (ms) (?) ℹ️Time constant for the EMA smoothing applied to the raw voltage rate-of-rise signal before it enters the Group 1 prediction. Larger TC = smoother but laggier; smaller TC = faster response, noisier. The filter is dt-aware, so behavior stays consistent across INA228 sample-cadence jitter. Default 58 ms. Constraint: do not lower TC below ~25 ms without retesting false-fire rate at idle — the 16 mV noise margin is thin.
ms
G2 Group 2 Enable (?)
Off On
G2 OvMeasMargin — Group 2 Trigger Margin (V) (?) ℹ️How far measured battery voltage must exceed the active charge target before Group 2 engages. Default 0.100 V (100 mV). Lowering = more sensitive (fires sooner above target); raising = relaxed. Watch your steady-state ripple amplitude — set this meaningfully above your peak-to-peak ripple to avoid false fires. Note: as of 2026-05-23 this no longer affects Group 3 (iExcess) — see Group 3's own Arming Margin knob.
V
G3 Signal Filter (?)
G3 MA Window — N samples (?)
samples
G3 Excess current detection filter (ms) (?) ℹ️EMA time constant for the alternator current signal used by Group 3 when Signal Filter is set to EMA(TC). A faster (lower) value lets it react sooner. Only active when Signal Filter is EMA(TC) — has no effect in MA(N) (default) or Raw modes. Set in Tuning → Plant Delay (echoed read-only here).
Read-only — set in Tuning → Plant Delay
G3 Arming Margin — V below target (?) ℹ️How close to the active charge target the measured battery voltage must be before Group 3 is allowed to fire. The gate opens when battV > target − ArmingMargin. Default 0.500 V. Larger values arm earlier in the ramp (more aggressive); smaller values restrict iExcess to near-target only. Big-bank installs where voltage barely deflects above target can set this large (e.g. 1.0–5.0 V) so iExcess remains the primary current-overshoot detector. Decoupled from OvMeasMargin (Group 2's trigger) on 2026-05-23 so the two settings move independently.
V
G3 K_excess — Threshold (A above setpoint) (?) ℹ️How many amps above the commanded current setpoint the measured alternator current must exceed before Group 3 fires. Lower = more sensitive, more lead time, higher false-alarm risk. Default 5.0 A.

Arming gate: Group 3 only counts ticks while the CV loop is active AND the iExcess Arming Margin (set above) is satisfied. Target-relative — works at float, bulk, Maintain Mode, and Target Voltage mode alike.
A
G3 N — Persistence (consecutive ticks) (?)
ticks
G4 Tier 1 — Single-Sample Threshold (A/s) (?)
A/s
G4 Tier 2 — Two-Consecutive Threshold (A/s) (?)
A/s
G4 Tier 3 — Three-Consecutive Threshold (A/s) (?)
A/s
Response

The field drive FET is powered off and the field collapses through the coil's natural time constant. Hardware-level cut — no adjustable parameter, and none of the integrator-bleed actions used by the other protections apply here.

KHard — Response Slope sets how aggressively the current cap is trimmed per volt of overshoot — applied every tick, cumulative across the overshoot duration. Shared with Measured OV. AW Bleed Rate continuously drains the voltage integrator while any of the other protections is clamping, scaled to alternator size via Command Limit.

Same KHard — Response Slope cap-trim mechanism as Predictive OV (shared parameter). AW Bleed Rate continuously drains the voltage integrator while the clamp is active.

K_bleed — Integrator Bleed Mode drains the voltage integrator during the event — 0 means snap to zero every tick (default, maximum response); > 0 walks the integrator down proportionally to the amount of excess. AW Bleed Rate also drains continuously while active.

The voltage integrator is snapped to 0 instantly on the rising edge of the trip — hardcoded, no adjustable parameter for the snap itself. AW Bleed Rate also drains continuously while active.

G1G2 KHard — Response Slope (A/V) (?)
A/V
G3 K_bleed — Integrator Bleed Mode (?) ℹ️Controls how the voltage loop integrator is driven down during a Group 3 event, on top of the Shared Action bleed:

0 = pin the integrator at zero every tick (maximum response, default).
> 0 = each tick, subtract (K_bleed × amps-of-excess × tick-duration). Walks the integrator down gradually instead of pinning it.

Proportional mode is gentler and lowers undershoot risk after the event clears. Try 2–5 if the snap-to-zero causes an unacceptable voltage dip below target. Recovery is always handled by the Shared Recovery block regardless of mode.
A
G1G2G3G4 AW Bleed Rate (×Table/s) (?) ℹ️Rate at which the voltage loop integrator is bled toward zero while ANY protection group is asserted. Expressed as a fraction of the Alternator Current Limit per second, so the proportional aggression stays the same regardless of alternator size. Default 2.0 → at a 150 A current limit gives 300 A/s. A 100 ms protection event at default bleeds ~30 A of integrator value.
×Table/s
Recovery

After the trip, the regulator enters a ramp-and-lockout — the field stays at 0 until the over-current condition has cleared. The recovery path used by the other protections (Recovery Seed Fraction, Seed Protect Window) is not used here.

When all protections have released, the voltage integrator is restored to pre-event value × Recovery Seed Fraction. Seed Protect Window protects the fresh seed from being immediately drained by a brief subsequent event. Fast Setpoint Rise Rate then accelerates the slewed current setpoint back up while battery voltage is comfortably below target, so the alternator crosses its deadband and starts producing current again quickly.

When all protections have released, the voltage integrator is restored to pre-event value × Recovery Seed Fraction. Seed Protect Window protects the fresh seed from being immediately drained by a brief subsequent event. Fast Setpoint Rise Rate then accelerates the slewed current setpoint back up while battery voltage is comfortably below target, so the alternator crosses its deadband and starts producing current again quickly.

When all protections have released, the voltage integrator is restored to pre-event value × Recovery Seed Fraction. Seed Protect Window protects the fresh seed from being immediately drained by a brief subsequent event. Fast Setpoint Rise Rate then accelerates the slewed current setpoint back up while battery voltage is comfortably below target, so the alternator crosses its deadband and starts producing current again quickly.

When all protections have released, the voltage integrator is restored to pre-event value × Recovery Seed Fraction. Seed Protect Window protects the fresh seed from being immediately drained by a brief subsequent event. Fast Setpoint Rise Rate then accelerates the slewed current setpoint back up while battery voltage is comfortably below target, so the alternator crosses its deadband and starts producing current again quickly.

G1G2G3G4 Recovery Seed Fraction (?)
×
G1G2G3G4 Seed Protect Window (ms) (?) ℹ️Milliseconds after either of these two events during which the AW Bleed Rate is suppressed:

• A CV-entry bumpless seed fires (when CV mode first activates),
• A protection-release reseed fires (when every protection clears).

Prevents the just-seeded integrator from being immediately bled back to zero if a brief new protection event fires right after the seed. 0 = disabled. Default 150 ms.
ms
G1G2G3G4 Fast Setpoint Rise Rate (×) (?) ℹ️Multiplier applied to the normal Setpoint Rise Rate (set in Tuning) during the recovery window after any protection releases, while battery voltage is still comfortably under the active charge target. Lets the slewed current setpoint cross the alternator's deadband and start producing current again quickly. Default 8×. Window length and the headroom gate are the two knobs below. Range 1–50.
×
G1G2G3G4 Fast Rise Window (ms) (?) ℹ️Hard upper bound on how long the fast-rise window stays open after any protection releases. The window normally closes earlier — as soon as battery voltage climbs into the headroom band below target — but this cap stops fast-rise from running indefinitely if the battery never catches up (very heavy load). Default 5000 ms. Range 500–30000.
ms
G1G2G3G4 Fast Rise Headroom (V) (?) ℹ️Volts below the active charge target at which fast-rise is allowed to fire. The fast-rise gate stays open while battV < target − Headroom; the moment battV climbs back into the target band, the gate closes and the slew falls back to the normal Setpoint Rise Rate. Default 0.2 V — inside the Group 3 iExcess Arming Margin (0.5 V) so iExcess can still arm during fast-rise. Range 0.05–2.0 V.
V
Fuel Consumption Table
RPM GPH

These values are used to estimate fuel burned based on engine RPM. Fuel consumption totals appear in Cloud Features → Statistics.

Bulk Phase
Bulk Voltage (V) (?):
ℹ️ 14.4V typical.

Bulk Voltage Debounce Time (sec) (?): ℹ️ How long battery voltage must remain continuously within 50 mV below Bulk voltage (or higher) before Absorption begins. The 50 mV arming band is hard-coded — it lets the timer start as the battery approaches Bulk, rather than waiting for the exact crossing. Prevents transient voltage spikes from triggering an early Absorption entry. 0.25s typical. Note that there isn't any controls difference between Bulk and Absorb other than the limiting voltage, if those are set differently, so this is more a question of display nomenclature.
Absorption Phase
Absorption Voltage (V) (?): ℹ️ Voltage held during Absorption. Typically 0.1 to 0.2 below Bulk Voltage for an AC charger/ solar or 0.3 to 0.4 below for an alternator controller. It's wise to leave some margin for transients during rapid engine speed changes. The battery dictates how much current it accepts — current tapers naturally as the battery fills.

Tail Current (A) (?): ℹ️ Absorption ends when charging current tapers to or below this value continuously for the Absorption Completion Time. Confirms the battery is genuinely full. 5 amps per 100Ah of bank is typical.

Absorption Completion Time (sec) (?): ℹ️ How long current must remain at or below Tail Current before Absorption ends. Prevents a momentary current dip from triggering a premature exit. 10-60s typical.

Absorption Timeout (min) (?): ℹ️ Maximum time in Absorption before forcing a transition regardless of current. Safety fallback in case Tail Current is never reached. Typical starting point: 30m per 100Ah of battery bank.
Float Phase
Use Float (?): ℹ️ When ON, after Absorption the system holds the battery at Float Voltage to maintain near-full charge. When OFF, charging stops after Absorption and only resumes when rebulk criteria are met — better for lithium longevity in cycling applications.
Off On

Float Voltage (V) (?):
ℹ️ Holding voltage used only when Use Float is ON. Typical: ~13.4V

Float Duration (hrs) (?): ℹ️ Maximum time in Float before returning to Bulk.

Minimum Float Time (min) (?): ℹ️ Delay before rebulk allowed.

Force "Maintain Mode" (?): ℹ️ Targets 0A net battery current- this is not a recommended mode, as errors may build up over time.
Off On
Charge Start / Rebulk Criteria
Rebulk Voltage (V) (?): ℹ️ If battery voltage drops below this threshold during Float or Idle, and stays there for Rebulk Debounce Time, the system returns to Bulk. 13V typical.

Rebulk Current Threshold (A) (?): ℹ️ If net battery current is more negative than this value (i.e. the battery is discharging at this rate or faster), the system returns to Bulk. Provides more reliable rebulk detection than voltage alone under load. Typical ~0.02–0.05C discharge 2 to 5 amps per 100Ah of battery bank.

Rebulk Debounce Time (sec) (?): ℹ️ How long the rebulk condition (voltage sag or discharge current) must persist continuously before a return to Bulk is triggered. Prevents nuisance rebulk from transient loads. 10-60s typical.
Safety

Battery-side protections that ramp the field down or cut it entirely when a battery-safety limit is exceeded. These thresholds sit above the four control-loop throttling protections (Settings → Alternator → Protections) and the INA228 hardware ALERT pin (a hardware backup that needs no configuration).

Alternator Hard Shutdown Voltage (V) (?): ℹ️ Absolute battery voltage at which the alternator is force-shutdown: field is ramped to 0, GPIO4 is cut, and a cooldown lockout begins before charging can resume. This is the only software-layer hard overvoltage shutdown — below it sit the Group 1/2/3 throttling protections (Voltage tab) which keep charging while trimming current; alongside it sits the INA228 hardware ALERT pin (a separate hardware backup at the same default threshold of BulkVoltage + 0.3 V, but using the chip's slow-averaged value — see console log on boot for the exact programmed threshold). Should be set just below your battery BMS shutdown voltage so the alternator stops before the BMS opens the contactor. First-boot default auto-scales to BulkVoltage + 0.3 V (so 14.8 V on a 12V system, 29.1 V on a 24V system, 57.9 V on a 48V system). Once you save your own value it stays absolute — re-set it manually if you later change BulkVoltage to a different system class.

Voltage Disagree Threshold (V) (?): ℹ️Voltage difference between BatteryV and IBV that indicates sensor disagreement. Helps detect wiring or sensor issues. Typical: 0.15V.

Voltage Disagree Timeout (s) (?): ℹ️How long voltage disagreement must persist before triggering warning. Filters transient differences. Default: 10s.

Field Collapse Delay (s) (?): ℹ️Lockout/cooldown duration after a fault that triggered the slow ramp-down path. Once a qualifying fault fires, charging will not restart until this time elapses, even if the fault clears. Triggered by: alternator hard-shutdown (AlternatorHardShutdownV exceeded), voltage sensor disagreement (warning or critical), both voltage sensors implausible, temperature warning/sustained, temperature data stale, alternator current data stale. NOT triggered by immediate-cut faults (INA228 hardware overvoltage, hard overcurrent, temperature critical, RPM below minimum) — those just cut the field and re-enable as soon as the condition clears, no cooldown. Default: 30s.

Settle Time Before Cut (ms) (?): ℹ️How long duty must be at 0% before GPIO4 field enable goes LOW. Prevents relay chatter during brief dips. Typical: 500ms.
SoC Integration
SoC Info Available? (?) ℹ️ If the regulator is hooked up to a battery shunt per the installation directions and you select Yes, SoC is used to reduce unnecessary rebulk cycles near full. If OFF, charger ignores SoC.
No Yes
SoC Block Rebulk Above (%) (?): ℹ️ Suggest 90%. If SoC is at or above this value, rebulk is blocked even if voltage or current drop below the rebulk trigger thresholds. Prevents nuisance stage resets when the battery is already near full. Set this near the top of your acceptable charge band — 90% is a good starting point. Must be meaningfully higher than SoC Allow Rebulk to create a stable hysteresis gap.

SoC Allow Rebulk Below (%) (?): ℹ️ Suggest 75%. If SoC falls below this value, rebulk is forced regardless of the block threshold or float timer. Use this as a safety floor — when the battery has genuinely depleted, a full bulk charge should always run. Should be at least 10–15% below SoC Block Rebulk to prevent hunting between stages. Setting this too close to the block threshold causes rapid oscillation between bulk and float.
Measurement Sources
Invert Battery Amps (?):
No Yes

Battery Current Offset (A) (?):

Shunt Resitance uOhms (micro)(?): ℹ️ Resistance of your current shunt in micro-ohms (µΩ). The INA228 uses this value to convert measured voltage drop to amps. Victron SmartShunt / BMV shunts = 100µΩ. Check your shunt's datasheet if unsure — an incorrect value will scale all current and SoC readings proportionally.
BMS Integration
Defer to BMS Control (?):
No Yes

Charge on ___ BMS Signal (?):
Low High
How It Works

Rebulk: The system always begins in Bulk when charging is enabled. It returns to Bulk from Float or Idle if battery voltage drops below Rebulk Voltage or net discharge current exceeds Rebulk Current Threshold — continuously for Rebulk Debounce Time. The timer resets if the condition clears before the debounce expires. If SoC data is available, it suppresses rebulk when the battery is at or above the block threshold and permits it again when SoC drops to the allow threshold — but SoC alone cannot trigger rebulk; voltage, current, or (in float) timeout criteria must also be met.

Bulk: The system pushes the maximum thermally- (and otherwise-) allowed current from the RPM Cap Table. Bulk ends once battery voltage has remained continuously at or above Bulk Voltage for Bulk Voltage Debounce Time (default 0.25 sec).

Absorption: The voltage loop holds the battery at Absorption Voltage. Current is no longer commanded — the battery dictates how much it accepts and it tapers naturally as the battery fills. Absorption ends when current drops to or below Tail Current continuously for Absorption Completion Time. If the system is thermally constrained (the thermal penalty is meaningfully active and current is already near the tail threshold), tail detection is suspended until thermal headroom recovers — this prevents a false "battery full" exit triggered by the thermal loop pulling current down. If tail current is never reached, a safety exit to float or idle occurs after Absorption Timeout.

Float (if enabled): The system holds the battery gently at Float Voltage. After Minimum Float Time has elapsed, rebulk criteria are evaluated. Float also has a hard ceiling — if Float Duration elapses while in float, the system returns to Bulk regardless of voltage or current. (Idle has no equivalent timeout; only the rebulk conditions can leave it.) If Use Float is OFF, charging stops after Absorption and the system idles until rebulk criteria are met — better for lithium longevity in cycling applications.

Weather Mode ℹ️ Saves fuel, emissions, and alternator wear when solar forecast is optimistic for at least 2 of the next 3 days in your GPS location. Useful for solar-dominant systems.
Off On
GPS Location
Current: 0.000000°, 0.000000°
Override manually
Solar Forecast
Day Irradiance (kWh/m²) ℹ️ Solar energy hitting your location per square meter per day Predicted (kWh) ℹ️ Expected output based on your panels' rating and performance ratio
Today 0.0 0.00
Tomorrow 0.0 0.00
Day 2 0.0 0.00
Configuration
Nominal Solar Array Power (W): ? System-rated solar capacity, e.g. 600 for two 300W panels

Solar Performance Ratio: ? Accounts for losses, 0.75 typical, adjust to fit your system

High Solar Threshold (kWh): ? If predicted solar output for at least 2 of next 3 days exceeds this value, pause alternator output
How It Works

Weather mode automatically fetches solar irradiance forecasts using your GPS coordinates and calculates expected solar panel output. GPS coordinates are obtained automatically from your NMEA2000 network, or can be entered manually if no GPS compass is connected. When high solar conditions are predicted for two of the next three days, alternator charging is paused. Solar panel wattage and performance ratio settings allow accurate prediction of future solar energy production. GPS coordinates are required for weather forecasts to work. If the "Update Weather Now" button fails and forecasts are not updated, check the Console tab for troubleshooting information (missing GPS, weak WiFi, etc.). This feature reduces fuel consumption and system wear when Mother Nature is planning to help.

Event Detection Thresholds

Capsize Threshold (degrees) (?):

Pitchpole Threshold (degrees) (?):

Slam Threshold (g's) (?):
Alarm Enable (0):
Off Armed

Alarm Status:
Silent

High Temp Alarm (°F) (0):
Low Temp Alarm (°F) (0):
Voltage Alarms
High Voltage Alarm (0):

Low Voltage Alarm (0):
Current Alarms
High Current Alarm (Alternator) (A) (0):

High Current Alarm (Battery) (A) (0):
Alarm Controls
Alarm Latch Mode (0):
Momentary Latched

Alarm Test (0):

Reset Alarm Latch:
Full Charge Detection
Battery Capacity (Amp hr) (?): ℹ️Total usable capacity of your battery bank in amp-hours. Used by the coulomb counter to calculate State of Charge. Set to your battery's rated AH at the 20-hour rate. This does not affect alternator output — it only affects the SoC display and rebulk logic.

Max Charge Detection Voltage (?): ℹ️Battery voltage must be at or above this level for full-charge detection to trigger. Set slightly below your Absorption voltage. If voltage never reaches this threshold during charging, SoC will never be reset to 100%.

Max Charge Detection Tail Current (%) (0): ℹ️ A percentage of battery capacity (A*hr), ex: 3% for 100A*hr bank = 3 amps

Max Charge Detection Time (s) (?): ℹ️Seconds the battery must simultaneously hold at or above Charged Voltage AND at or below the Tail Current before full charge is declared and SoC is reset to 100%. Longer values reduce false-positive full-charge detections.
Efficiency Parameters
Peukert Exponent (?): ℹ️Corrects for capacity reduction at high discharge rates. Lead acid: 1.15–1.35. AGM: 1.05–1.15. Lithium: 1.0–1.05. A value of 1.0 disables the correction. Higher values mean more capacity is lost at high current draws.

Charge Efficiency (%) (?): ℹ️Accounts for energy lost as heat during charging — not all current put in gets stored. Lead acid: 85–90%. AGM: 92–95%. Lithium: 97–99%. Setting too high overstates SoC; too low understates it.
SOC Correction
SOC Auto-Correction (0): ℹ️ Automatically corrects battery current readings when full charge is detected. Requires INA228 battery shunt to be installed.
Off On

SOC Gain Factor (Current Value): ℹ️Live read-only multiplier applied to the shunt current measurement. Adjusted automatically by SOC Auto-Correction each time a full charge is detected. Above 1.0 means the shunt was reading low; below 1.0 means it was reading high. Use Reset Factor to return to 1.0.
?
Other Settings
Set SoC (%) Manually (?): ℹ️Force the State of Charge to a specific value. Use this to seed the SoC after a known full or partial charge, or to correct a badly drifted reading. The coulomb counter resumes from this point immediately.

Battery Current Source (?): ℹ️This dropdown only chooses the source for the battery-monitor SoC and current readouts. It does NOT change which sensor drives any safety or control loop. The onboard INA228 shunt is always required for this controller — Load Dump Protection, fast over-voltage, tail-current detection, rebulk-by-current, and MaintainMode all read the INA228 directly regardless of this setting.

INA228 Shunt = onboard high-precision sensor (most accurate, recommended; also makes the battery-monitor numbers consistent with the safety logic). Victron VE.Direct = use serial data from a Victron BMV or smart shunt for the SoC display only. Note that Victron data lags the actual current by ~1–2 s, so short transients (e.g. windlass pulls) will be smeared in the SoC readout.
Data & Communication
Cloud Features (?):
Off On

Cloud Data Upload Interval (?) minutes: ℹ️ How often to upload sensor data to cloud for historical tracking. Default is 10 minutes. Minimum 0.3 minutes to prevent excessive cloud traffic.

Accelerometer Data:(?):
Off On

VE.Direct Data (?):
Off On

NMEA 0183 Data (?):
Off On

NMEA2K Data (?):
Off On
Display Preferences
Temperature Units: ℹ️ Choose Fahrenheit or Celsius for all temperature displays and form inputs. Setting is saved on the device.

Switch Panel Override (?): ℹ️ Coming soon
Off On
Engine & Alternator Parameters
RPM Scaling Factor (?): ℹ️ Used to convert measured stator frequency (Hz) into RPM. Adjust until RPM in this App matches your tachometer. Decent guess = 1100.

Pulley Ratio, Alt to Engine (?): ℹ️ *** Only used for Alternator Lifetime Calcs *** Alternator RPM = Engine RPM × this ratio. Common: 2.0-3.0
Emergency & Troubleshooting
⚠️ Caution!
Ignition Override (0): ℹ️ Don't depend on this setting- troubleshooting only! This is a great way to drain battery by leaving Wifi functions on, and accidentally energize field.
Off On

Hardware Present? (?): ℹ️ When lacking wiring harnesses, this mode will fake data inputs to allow interface testing.
No Yes

Ignore Alt Temp (0): ℹ️ For emergency use, if temp sensor is bad
No Yes

Ignore RPM (0): ℹ️ For emergency use only. Bypasses the RPM gate — field will be enabled regardless of RPM. Use if RPM sensor is absent or malfunctioning.
No Yes

Min RPM For Field (RPM) (?): ℹ️ Field is cut immediately when RPM falls below this threshold. Default 200 RPM. Set to 0 to disable (not recommended — use Ignore RPM instead).

Limp Home Mode (?): ℹ️ DO NOT USE CASUALLY. Will ignore all sensors and set a field of 30%, even with IGNITION OFF! Harware Over-voltage protection is still active.
Off On
User Interface
Dark Mode:
Off On
Security & Maintenance

Lock Settings:

Erase All Memory: ℹ️ Scorched-earth reset. Erases all settings, WiFi credentials, calibration data, and buffered logs. The cloud registration token is deliberately preserved so your cloud account and history stay intact — after reconnecting WiFi, cloud features resume automatically. To also wipe the cloud account, press Delete All Data first. Device restarts into WiFi config mode; you will need to re-enter your WiFi network name and password before the regulator will operate again.
Plant Delay — the measured electrical lag between a field duty command and the resulting current response. The two current filters (excess current detection, output PID feedback) sit inside control paths, so their sensor filter wants to be roughly 1/3 of the plant delay. Setting them equal to the plant stacks two equal lags in series and erodes phase margin — the controller ends up reacting to where the current was rather than where it is. Faster than 1/3 starts feeding sensor noise into Kp/Kd without buying much. The voltage filter is different — its main consumer is the slope-bleed dV/dt, which is computed once per voltage loop tick (default 100 ms, set by the Voltage Loop Interval). Filtering at roughly the full plant delay is in the textbook range relative to that differencing interval. Run the test at a steady speed somewhere within your normal operating range. When the test finishes, the modal shows the measured plant delay and a "Set All Filters" button that writes plant/3 to the two current filters and the full plant delay to the voltage filter. You can also set the three filters individually.

Test Parameters

Step Test Amplitude (% duty) (?): ℹ️ Duty cycle step size used during the plant delay measurement test. Larger steps produce a cleaner current signal above noise but disturb the system more. Default: 6%. Must be large enough that the current response is clearly visible above the baseline noise floor.
⚠️ Protections: ℹ️Toggle right = Enabled (default). The regulator runs Group 1 (predictive OV), Group 2 (measured OV), Group 3 (iExcess), and AlternatorHardShutdownV normally.

Toggle left = Disabled. Those four layers are bypassed so a step-test can characterise the plant without them fighting the test input. G4 (Load Dump), the INA228 hardware ALERT pin, and the hardware overcurrent trip (Alternator Current Limit + 10 A) stay active regardless.

Does not auto-revert — re-enable before normal use. A red banner at the top of every page is shown whenever protections are disabled. Resets to Enabled on every reboot.
Disabled Enabled

Last Test Results

Rise Delays (ms)

Rise 1 ℹ️Time from first UP duty step to first confirmed current rise above threshold. ? ms
Rise 2 ? ms
Rise 3 ? ms
Rise Average ? ms

Fall Delays (ms)

Fall 1 ℹ️Time from first DOWN duty step to first confirmed current drop below threshold. ? ms
Fall 2 ? ms
Fall 3 ? ms
Fall Average ? ms

Apply Results

The test measures the field coil's electrical lag (plant delay). The "Set All Filters" button inside the modal writes plant/3 to the two current filters and the full plant delay to the voltage filter — see each tooltip below for the reasoning. You can also override any value individually.

Excess current detection filter (ms) (?): ℹ️ EMA time constant for the alternator current signal used by the Group 3 excess-current (overcurrent trip) detector. Set All Filters writes plant/3 here. The detector also stacks an IExcessN persist counter on top of this EMA, so the effective trip lag is roughly N × loop_tick + 3τ. Filtering at the full plant delay would make the trip too sluggish to catch real transients before the fastOV supervisor has to clean them up; plant/3 gives the detector a clear view of current dynamics in the plant's response band while still rejecting noise above it. Only active when Group 3 signal source is set to EMA(TC) — has no effect in MA(N) (default) or Raw modes. Echoed read-only in Current tab → OV Protection Group 3. Default: 100 ms.

Output current PID feedback filter (ms) (?): ℹ️ EMA time constant for the alternator current signal fed back into the output current PID. Set All Filters writes plant/3 here. The plant (field coil L/R) is already a first-order low-pass inside the loop; setting the sensor filter equal to it stacks two equal lags in series, which costs ~45° of phase margin at crossover and forces lower Kp than you'd otherwise get away with. A filter at roughly plant/3 lets the controller see current dynamics in close to real time without feeding raw sensor noise into Kp/Kd. Independent from the Group 3 excess-current filter. Mostly inert when the Output PID signal source is MA(N) or Raw, but the same EMA is also used unconditionally to seed the CV integrator on the AUTO→CV handoff. Echoed read-only in Current tab → Output Current Controller. Default: 100 ms.

Voltage sensor smoothing filter (ms) (?): ℹ️ EMA time constant applied to the measured battery voltage. Set All Filters writes the full plant delay here (not plant/3) because this filter isn't inside a control path — its dominant consumer is the slope-bleed dV/dt, computed as a backward difference of the filtered voltage over the ~200 ms voltage-loop tick. Filtering at roughly half the differencing interval is the standard balance: slower and the slope reacts too late, faster and the slope gets noisy. Also used by the charging stage machine (Bulk → Absorption hold timer), where the timescale is seconds and the filter TC barely matters. Voltage Loop Kp/Ki and the Group 1/2 voltage comparisons all use raw battery voltage instead — this setting doesn't affect them. Group 1's voltage rate-of-change uses its own separate EMA (dvdt EMA TC). Default: 100 ms.
Telemetry

Control Loop

PID Input ℹ️ Measured alternator current (A) from the selected amp source. This is the process variable fed to the output current PID each sample cycle (~16Hz). ? A
PID Setpoint ℹ️ The slew-limited current target (A) the output current PID is chasing. ? A
PID Output ℹ️ Raw duty cycle (%) computed by the output current PID before clamping. ? %
PID Error ℹ️ Difference between setpoint and input. ? A

Term Contributions

Current P Term ℹ️ Proportional contribution. ? %
Current I Term ℹ️ Integral contribution. ? %
Current D Term ℹ️ Derivative contribution. ? %

Field Output

Field Voltage ℹ️ Estimated field voltage. ? V
Field Curr ℹ️ Estimated field current. ? A
Duty ℹ️ Actual PWM duty cycle. ? %
Live Plot View
Current Target Generator
⚠️ Protections: ℹ️Toggle right = Enabled (default). The regulator runs Group 1 (predictive OV), Group 2 (measured OV), Group 3 (iExcess), and AlternatorHardShutdownV normally.

Toggle left = Disabled. Those four layers are bypassed so a step-test can characterise the plant without them fighting the test input. G4 (Load Dump), the INA228 hardware ALERT pin, and the hardware overcurrent trip (Alternator Current Limit + 10 A) stay active regardless.

Does not auto-revert — re-enable before normal use. A red banner at the top of every page is shown whenever protections are disabled. Resets to Enabled on every reboot.
Disabled Enabled
Waveform (?): ℹ️Enables test waveform generation for evaluating PID performance. Use with plots to optimize PID parameters. Disable for normal operation.
Off On

Wave Period (s) (?): ℹ️Duration (s) of one complete test square wave cycle. The wave spends half the period at the low setpoint and half at the high setpoint.

Wave Amplitude (A) (?): ℹ️Square wave oscillates between 5A (low) and (5 + amplitude) (high). E.g. amplitude 20A creates a wave cycling between 5A and 25A.

Time to Display — X Axis (s) (?): ℹ️Width of the live plot time window in seconds. Determines how much history is visible at once.

Y Axis Maximum (?): ℹ️Upper bound of the live plot Y axis.

Y Axis Minimum (?): ℹ️Lower bound of the live plot Y axis.
Tuning Score Log
Live score (1/10/100/1000 min):
# Score ↑ Kp Ki Kd SDiv Track DRamp Amp Per RPM Temp°F Worst t(s)

Score = ISE/s (lower is better). Scored within 5s of each setpoint step, after 2 ring-in cycles. <2   <6   ≥6. Highlighted rows match current PID + wave settings.

Controller Parameters
ℹ️Zeros the output current PID integrator. Duty will ramp back up from 0 via the slew limiter. Use if the integrator has accumulated badly during manual tuning.

PID Kp (Proportional) (?): ℹ️Immediate response to current error. Higher = faster correction but more overshoot. Start with 0.3, increase if too slow, decrease if oscillating.

PID Ki (Integral) (?): ℹ️Eliminates steady-state error over time. Higher = faster elimination of offset but may cause instability. Start with 0.5, increase slowly if needed.

PID Kd (Derivative) (?): ℹ️Dampens rapid changes to reduce overshoot. Usually kept at 0.0.

PID Sample Divisor (?): ℹ️A 2 makes it update half as often, etc. Don't adjust.

PID Tracking Gain (1/s) (?): ℹ️Anti-windup tracking gain for PID. Keeps the integrator aligned with actual duty when governor limits output. Higher = faster correction. Typical: 2.0. Set to 0 to disable. Only active when Ki > 0.

Signal Source (?) — alternator current (ADS1115): ℹ️Selects how the alternator output current is filtered before entering the PID as its process variable. EMA(TC): exponential moving average — default, smooth. MA(N): moving average of N samples. Raw: instantaneous ADC reading, no filtering. N and TC are set independently from the Group 3 (excess current) filter.
Telemetry

Voltage Control Loop

Voltage Target ℹ️ The voltage the CV loop is holding the battery to right now. Bulk voltage in bulk, absorption voltage in absorption, float voltage in float, or the Target Voltage Setpoint when Target Voltage mode is active. ? V
Voltage Error ℹ️ Active charging target minus measured battery voltage. Positive = battery below target (loop allows more current). Negative = battery above target (loop reduces current cap). ? V
Icv ℹ️ CV voltage loop output (Icv) — the current setpoint the voltage loop wants to deliver. Used as the actual setpoint in absorption, float, and Target Voltage mode. Seeded on CV entry for bumpless transfer; clamped to [0, current ceiling]. Pulled down by Groups 1/2 when measured battery voltage is approaching or above target. In bulk this value is stale and has no effect on the output current loop. ? A
CV Integrator ℹ️ Voltage loop integrator (cv_I). Units are amps. Seeded on CV entry so the CV loop output starts at the live current setpoint with no step. Groups 1/2 drive this down when correcting a predicted overshoot, and force it to ≤ 0 while measured battery voltage is above target — preventing the integrator from rebuilding the loop output immediately after a pullback. Should drift slowly toward the value that holds voltage at target. Large sustained values mean Voltage Loop Kp alone cannot reach target — Voltage Loop Ki is carrying the load. ? A
Voltage Ctrl Active ℹ️ Whether the CV loop is running this tick. True in bulk, absorption, float, Target Voltage mode, and Maintain Mode. False only in idle (UseFloat=0 post-absorption rest). ?
Live Plot View
Plot axes: X (s): V min: max: A min: max:
Voltage Step Generator
⚠️ Protections: ℹ️Toggle right = Enabled (default). The regulator runs Group 1 (predictive OV), Group 2 (measured OV), Group 3 (iExcess), and AlternatorHardShutdownV normally.

Toggle left = Disabled. Those four layers are bypassed so a step-test can characterise the plant without them fighting the test input. G4 (Load Dump), the INA228 hardware ALERT pin, and the hardware overcurrent trip (Alternator Current Limit + 10 A) stay active regardless.

Does not auto-revert — re-enable before normal use. A red banner at the top of every page is shown whenever protections are disabled. Resets to Enabled on every reboot.
Disabled Enabled
CV Tuning Mode (?): ℹ️ Enables the square-wave voltage dithering test. The regulator briefly raises the target by the wave amplitude for half a period (HIGH phase), then drops back to the real target (LOW phase), repeating to score step-up settling time and overshoot. At least 1 scored HIGH-phase cycle is required before a log entry can be committed. Disable to commit the current run.
Off On

Wave Amplitude (V) (?): ℹ️ How far above the real charging target the high phase steps. Larger = bigger step disturbance = more aggressive test. Recommend 0.20–0.50V. The low phase always rests at the real charging target.

Wave Period (sec) (?): ℹ️ Total period of one low+high cycle in seconds. Each half-period is this value ÷ 2. Use longer periods (60–120s) at higher time constants; shorter (30–45s) for faster loops. Minimum is 30s. Must be long enough for the voltage to fully settle in the high phase.

Overshoot Penalty (K) (?): ℹ️ Multiplier applied to overshoot (battery voltage above target) in the HIGH-phase ISE scoring formula used by both the live spans at the top of the CV Tuning Score Log and each committed log entry. Approach below target is weighted ×1. Higher values penalize overshoot more harshly relative to undershoot — useful for batteries that are very sensitive to overvoltage. Each committed record stores the K it was scored with, so comparing entries across different K values requires reading that column. Default: 10.

Settling Consecutive Reads (?): ℹ️ How many readings in a row the battery voltage must stay within ±0.10V of the test target before the system calls it "settled" and stops the settling-time timer. Each reading happens about every 100ms (the voltage loop rate), so 10 readings ≈ 1 second of being on-target. Higher = stricter, more honest settling-time numbers, but tests take longer. Lower = looser, could be fooled by a brief lucky moment. Default 10 (~1 second); 8–12 is a reasonable starting range.
CV Tuning Score Log
Live score (1/10/100/1000 min):
# Score ↑Settle ↑OvV ↑ISE ↓Score ↓Settle ↓OvV ↓ISE ↓US VKp VKi SRR SFR AwBl AwRec AwSP RsF KS KH IExK IExN IKB LDT2 LDT1 LDT3 TC WA WP KO CR OVf IEf LDf HOCf RPM Temp BattV SOC% CVT
No records yet — open section to fetch.

Score = (HIGH ISE + LOW re-overshoot ISE + LOW undershoot ISE) ÷ total active time, ×1000. HIGH phase: squared error; overshoot above 25mV dead-band weighted by Overshoot Penalty (K), approach weighted ×1. LOW phase overshoot: squared ISE, only after voltage crosses below target (no descent-from-HIGH penalty). LOW phase undershoot (↓US): squared ISE ×0.15, 1s grace from phase start then ramps to full weight over 10s. Both lower is better. <2   <10   ≥10. Highlighted rows match current VKp/VKi + wave settings. OVf/IEf/LDf/HOCf = protection fire counts during scored phases.

Controller Parameters
ℹ️Zeroes the voltage loop integrator. Use if it's stuck at zero or wound up to a bad value — the PI will rebuild from scratch on the next tick. Useful after changing Voltage Loop Kp/Ki during a tuning session.

Voltage Loop Kp (A/V) (?): ℹ️Voltage loop proportional gain. Active in bulk, absorption, float, Target Voltage mode, and Maintain Mode. Sets the fast-response term of the CV PI: CV loop output = Voltage Loop Kp × voltage error + voltage loop integrator. That output becomes the current setpoint sent to the output current loop, then clamped to the RPM/thermal current ceiling.

Voltage Loop Ki (?): ℹ️Integral gain for the voltage loop — the slow-correction term that pulls battery voltage exactly to target over time. Active in bulk, absorption, float, Target Voltage mode, and Maintain Mode. Asymmetric: when battery voltage is below target the integrator builds up at this rate (gentle, patient approach), but when it goes above target the integrator unwinds 7× faster (aggressive recovery from overshoot). The 7× multiplier is hard-coded — only the build-up rate (this setting) is user-tunable. On CV entry the integrator is seeded so the current setpoint matches the output PID's current value — no step in setpoint. Set to 0 to disable integral action. Start small — try 0.1.

Slope bleed threshold (V/s) (?): ℹ️ Voltage rise rate above which the voltage loop integrator begins to drain. The rise rate is computed from the smoothed voltage signal (set by "Voltage sensor smoothing filter" in Tuning → Plant Delay), not from the voltage rate-of-change EMA used by Group 1 prediction. Below this threshold the integrator is unaffected. Setting too low causes false drains during normal charging; too high and it never fires in time. Default: 0.50 V/s.

Slope bleed gain (A per V/s) (?): ℹ️ How aggressively to drain the voltage loop integrator when slope exceeds the threshold. At 50 with 0.2 V/s excess slope, drains 1A per 100ms tick. Higher = more aggressive preemptive wind-down. Default: 50.

Slope bleed proximity gate (V) (?): ℹ️ Are we close enough to setpoint that the integrator could cause overshoot?

When measured battery voltage is more than this many volts below the active charge target, slope-bleed is fully suppressed — the voltage loop integrator needs every amp it can build to climb toward target. As voltage approaches target, bleed strength ramps smoothly from 0 to full, draining the integrator just before overshoot becomes likely.

Compares: measured voltage vs the live stage target (bulk, absorption, float — whichever is active right now).

Voltage sensor smoothing filter (ms) (?): ℹ️EMA filter applied to the slope bleed signal and the charging stage machine (Bulk → Absorption transitions). PI error terms and Group 1/2 voltage comparisons use raw battery voltage — this setting does not affect them. Group 1's voltage rate-of-change uses its own separate EMA, controlled by dvdt EMA TC. Set in Tuning → Plant Delay.
Read-only — set in Tuning → Plant Delay

Voltage Loop Interval (ms) (?): ℹ️How often the voltage loop's integrator (the slow-correction term) updates. Active in bulk, absorption, float, Target Voltage mode, and Maintain Mode. The proportional response (the fast-correction term — Voltage Loop Kp × voltage error) runs every output PID tick (~5ms) regardless of this setting, so the loop reacts to voltage changes immediately; only the integral build-up cadence is controlled here. Default: 100 ms. Shorter values make the integrator more responsive but can amplify noise; longer values make it smoother but slower to correct steady-state error.
Telemetry

Temp Loop Status

Temperature PID Active ℹ️ Whether the temperature PID is currently running in AUTO. Goes MANUAL when temp data is stale; resumes with bumpless transfer on recovery. ?
Projected Temp Input ℹ️ Temperature the PID actually sees: projectedTemp = filteredTemp + slope × ThermalLookaheadSec. Can exceed any temperature the sensor has ever measured when temp is rising. Zero slope is used during the ~65s slope buffer warmup after startup or reset, so the value equals filteredTemp until then. ? °F
PID Setpoint ℹ️ Active temperature setpoint the PID controls against. When the 60-second slope buffer is full (~65s after startup or reset), this is TemperatureLimit − 5°F. During warmup it is TemperatureLimit − 20°F, giving a wider margin while slope prediction is unavailable. ? °F
Thermal Penalty ℹ️ Amps subtracted from the RPM cap table ceiling (uTarget = I_cap − thermalPenalty). Positive = PID is derating current due to heat. Floored at 0 — the penalty cannot go negative; cold boost is not implemented. ? A

Term Contributions

Temperature P Term ℹ️ Proportional contribution to thermal penalty (A). = Kp × (projectedTemp − setpoint). PID runs in REVERSE mode: positive error (projectedTemp above setpoint) drives positive penalty (reduces current). Total penalty is floored at 0. ? A
Temperature I Term ℹ️ Integral accumulator (A). Builds positive while projected temperature stays above setpoint. Bounded by the PID output limits (0 to MaxTableValue) — cannot go negative to boost current above the cap table. ? A
Temperature D Term (library) ℹ️ Library derivative term (A). Always 0 — Kd is hardcoded to 0.0 in firmware. Derivative action is implemented via the slope-based lookahead instead: the PID input is projectedTemp = filteredTemp + slope × lookahead, not current temperature. ? A
Temp Slope (°F/s) ℹ️ Temperature rate of change in °F/s, computed as a backward difference over a 60-second window (12 intervals × TempPIDInterval). Zero while the buffer fills after startup or reset. Clamped to ±0.5 °F/s to reject sensor faults. Used to compute: projectedTemp = currentTemp + slope × ThermalLookaheadSec. ? °F/s
Live Plot View
Not loaded — open section to fetch.
Window:
Temperature Control & Penalty
Mode / Anti-Windup
Temperature PID Term Decomposition
Step Test Parameters

Steps the temperature setpoint between a low and high value. Scores each step-up transition on settling time and overshoot. Requires alternator to be thermally engaged — run at steady mid-RPM with unconstrained current demand and a low setpoint so the loop is active. Allow 2 full cycles to ring in before scoring begins.

Thermal Step Test (?): ℹ️Enables the thermal step test. Steps TemperatureLimitF between Low and High setpoints. Ring-in (2 full cycles) runs before scoring. Turn off to commit the current test's record to the log.
Off On

Low Setpoint (°F) (?): ℹ️Low phase temperature setpoint. Set below the normal operating limit so the alternator heats freely during this phase. Typical: 120°F.

High Setpoint (°F) (?): ℹ️High phase temperature setpoint. Simulates the actual operating limit. The step up from Low to High is the scored transition. Typical: 150°F.

Half-Period (min) (?): ℹ️Duration of each low and high phase in minutes. Must be long enough for temperature to settle — thermal time constants are 5–15 minutes. Typical: 10–15 min.

K Overshoot (?): ℹ️Penalty multiplier on integrated temperature above the high setpoint (°F·s). Higher = more harshly penalised overshoot. Default: 4.

K Undershoot (?): ℹ️Penalty multiplier on integrated temperature below the high setpoint (°F·s) after the loop has settled — penalises unnecessary conservatism. Default: 1.

Settle Threshold (°F) (?): ℹ️Temperature must be within ±this value of the high setpoint for N consecutive reads to declare settled. Default: 2°F.

Consecutive Reads (?): ℹ️Number of consecutive temperature readings within the settle band required to declare settled. Default: 3.
Step Test Score Log
10m: — 1h: — 10h: — 100h: —
# Score Settle (s) Worst Over (°F) Avg Over (°F·s) Avg Under (°F·s) Steps Kp Ki Lookahead (s) Filter α Interval (ms) Low (°F) High (°F) Half-Period (min) RPM Ambient (°F) Rise (A/s) Fall (A/s)
No records — open section to load.

Score = AvgSettle + K_over × AvgIntOver + K_under × AvgIntUnder. Lower is better. Live score (always-on) uses asymmetric ISE when loop is actively engaged.

Controller Parameters
ℹ️Zeros the penalty output, integrator, IIR filter, and 60-second slope buffer; sets PID to MANUAL (inactive). The slope buffer takes ~65s to refill before full lookahead prediction resumes. Use if the integrator has wound up or the filter is stuck on a bad reading.

Temp PID Kp (A/°F) (?): ℹ️Proportional gain (A per °F of projected temperature error). Error is projectedTemp − setpoint. Higher values derate current more aggressively as projected temperature approaches the limit. Default: 0.5.

Temp PID Ki (?): ℹ️Integral gain (A per °F·s of accumulated error). Builds penalty while projected temperature stays above setpoint. Bounded by the penalty output limits (0 to MaxTableValue). Default: 0.05.

Thermal Lookahead (s) (?): ℹ️Lookahead horizon in seconds. projectedTemp = tempNow + slope × ThermalLookaheadSec, where tempNow is the raw sensor reading (DS18B20) or IIR-filtered reading (thermistor). Larger = earlier derating before the limit is reached; smaller = tighter control near the limit. Clamped to 0–300s. Default: 90.

Temp PID Interval (ms) (?): ℹ️How often the temperature PID runs and the slope buffer is updated. Also sets the slope window: 12 intervals × this value (default 12 × 5000ms = 60s). Independent of the output current loop rate. Default: 5000ms.

Temp PID Filter Alpha (?): ℹ️IIR smoothing coefficient for tempFiltered. For DS18B20, tempFiltered is computed but the PID lookahead and slope buffer both use the raw sensor reading directly — this alpha affects the logged/plotted filtered value but does not affect the PID input. For thermistor, alpha is hardcoded to 0.02 regardless of this setting. Default: 0.2.

PID Control Architecture

Three-Loop Cascaded Control: Three independent controllers run at different rates and stack on top of each other. The output current loop runs 10 times per second and drives the alternator field duty cycle to chase a current target. The voltage loop also runs 10 times per second, but only during Bulk, Absorption, and Float — it computes the current target that holds the battery at the configured voltage. The temperature loop runs once every 5 seconds, and outputs a single thermal penalty in amps that gets subtracted from the RPM Cap Table ceiling before the inner loops see it. The cascade is strict: temperature constrains what current the voltage loop is allowed to ask for; the voltage loop constrains what the output current loop is allowed to chase; the output current loop is the only thing that touches the field. Each layer never reaches past the one below it.

RPM Cap Table: For each engine RPM range, you configure a hard ceiling based on your installation's physical limits — belt load, shaft stress, alternator and battery bank ratings. This ceiling is enforced after the thermal penalty is applied and is never exceeded regardless of thermal state. The ceiling can be entered as either a current limit (Amps mode) or a power limit (kW mode) using the toggle above the table. In Amps mode the configured value is a fixed current ceiling. In kW mode the regulator divides your power limit by live battery voltage on every control tick to derive the amp ceiling — so the mechanical load on the belt and shaft stays constant regardless of voltage sag or rise during charging.

Forecasted Thermal Penalty: The temperature controller does not act on the current temperature reading. It acts on a projected temperature — current filtered temperature plus the measured rate of rise multiplied by the Thermal Lookahead horizon (default 90 seconds). This is what lets the loop pull current down before the alternator actually reaches the limit. The setpoint is the real damage limit (Alternator Temp Limit) and the output is a penalty in amps: zero means no restriction, higher numbers mean more current pulled away from what the RPM Cap Table would otherwise allow. Because the penalty is relative rather than absolute, it transfers cleanly across RPM and stage changes. The penalty itself is slew-limited so brief temperature noise doesn't cause harsh current swings.

Voltage Loop: A proportional-integral controller (Voltage Loop Kp and Ki) holds battery voltage at target during Bulk, Absorption, and Float. The integrator uses asymmetric gain — it bleeds down fast when voltage runs above target and rises slowly when below, biasing toward safety. The Slope Bleed Gain drains the integrator when voltage is climbing quickly, which prevents overshoot during the approach to target. Anti-windup freezes upward integration whenever the current ceiling — not voltage — is the binding constraint, so the integrator does not load up while unable to act.

Three-Stage Charging: The regulator implements a constant-current / constant-voltage / float charging cycle (CC/CV/Float), with an optional Idle mode after Absorption for lithium longevity.

In Bulk, the voltage loop is off and the system charges at the maximum thermally allowed current from the RPM Cap Table. This continues until battery voltage has been held at the Bulk Voltage target continuously for the Bulk Voltage Debounce Time — a debounce that prevents transient voltage spikes from triggering a premature transition.

In Absorption, the voltage loop engages and holds the battery at the Absorption Voltage. The battery itself now dictates how much current it accepts — current tapers naturally as the battery fills. The system exits Absorption when charge current has dropped to or below the Tail Current for the Absorption Completion Time, confirming the battery is genuinely full. If the system is thermally constrained — meaning the thermal penalty is meaningfully active AND current is already near the Tail Current — tail detection is suspended until thermal headroom recovers, preventing a false exit before the battery is truly full. A safety timeout (Absorption Timeout) forces a transition to Float (or Idle, if Use Float is Off) if Tail Current is never reached.

In Float, the voltage loop holds the battery at the lower Float Voltage. After the Minimum Float Time has elapsed, the system monitors for voltage sag or sustained discharge current. If either condition persists for the Rebulk Debounce Time, or if Float Duration expires, Bulk charging restarts — subject to SoC blocking if SoC data is available. If Use Float is Off, the system skips Float entirely and enters Idle after Absorption, charging again only when rebulk criteria are met.

Independent Protection Layers: Several fast-response protections sit outside the three-loop cascade and act on raw sensor readings without filter lag. Fast OV (Groups 1 and 2) caps current immediately when raw battery voltage runs above a margin below the charging target. Load Dump protection caps current when a sustained battery-current rise rate is detected, catching FET disconnect or load drop events. Group 3 (iExcess) bleeds the voltage-loop integrator if current overshoots, killing the cause rather than just the symptom. None of these depend on the control loops being active — they are always armed.

Stability and Recovery: All mode transitions are bumpless — both the output current loop integrator and the voltage loop integrator are seeded to the operating point before the new mode takes over, so transitions never produce a setpoint step. If the temperature sensor goes stale, the temperature loop holds its last penalty value and re-enters smoothly when fresh data returns rather than snapping back. Anti-windup keeps the temperature integrator parked near any tighter non-thermal constraint when thermals are not the binding limit, so the penalty can climb the instant temperature demands it. A hardware-level shutdown path (GPIO4) provides two independent escape hatches: immediate cut for critical conditions (temperature critically over limit, hard fault) and a controlled ramp-then-cut for sustained warning-level conditions. GPIO4 protection remains active regardless of loop state. Any fault that interrupts charging restarts from Bulk when charging resumes, never mid-cycle.

How to Tune the PID Controller

Overview: The output current loop, the voltage loop, and the temperature loop each have their own dedicated tuning mode (Tuning Mode for the inner current loop, CV Tuning Mode for the voltage loop, Thermal Tuning Mode for the temperature loop). Tune them in that order — inner loop first, then voltage, then thermal — because each layer depends on the one beneath it being stable. This section covers the inner current loop. Voltage and thermal tuning have their own dedicated tabs with built-in step tests and live scoring.

Three-Phase Process: The goal is to tune the core PID first, then verify it handles the rate limiters gracefully with anti-windup tracking. Tune in bulk stage — absorption and float share the same output current loop, so a well-tuned bulk response carries through automatically.

Phase 1 — Core Loop (Unrestricted):
Set both slew limiters to very high values to effectively disable them:
Setpoint Rise Rate: 1000 A/s
Setpoint Fall Rate: 1000 A/s
Duty Ramp Rate: 1000 %/s
Enable Tuning Mode and watch the step response on the plots. Tune Kp, Ki, and Kd until you get well-damped step responses with minimal overshoot (10–20%) and fast settling time (2–4 seconds).

Phase 2 — Actuator Slew + Anti-Windup:
Re-enable the actuator slew limiter by setting Duty Ramp Rate to a realistic value (typically 10–30 %/s). Keep setpoint slew limiters high (1000 A/s). Run tuning mode again and watch for overshoot after transitions. If you see overshoot once the duty ramp catches up, increase PID Tracking Gain from its default until the overshoot disappears. This is the back-calculation gain that bleeds the integrator down whenever the duty output is rate-limited.

Phase 3 — Production Verification:
Set Setpoint Rise Rate and Setpoint Fall Rate to your desired production values (typically 5–20 A/s rise, 20–50 A/s fall). Run tuning mode one final time to verify the loop remains stable and well-behaved with both rate limiters active.

Tuning Philosophy for Cruising:
Run tests at moderate RPM within your typical cruising range. A slower, well-damped loop (4–6 second settling time) is preferable to a fast loop that causes harsh load transitions. The independent protection layers (Fast OV, Load Dump, Group 3 iExcess, GPIO4 hard cut) handle the unsafe edges — you don't need the loop itself to react instantly. Smooth and stable beats fast and harsh.

Current Defaults: Kp = 0.5, Ki = 2.0, Kd = 0.01, PID Tracking Gain = 4.0, Duty Ramp Rate = 50 %/s, Setpoint Rise Rate = 30 A/s, Setpoint Fall Rate = 50 A/s. These are sensible starting points but every installation is different — always verify with a step test in your own setup.

Health
--
vs reference avg
Session History (no sessions yet)

Alternator Current

0 A

Temperature

Alternator 0 °F
Thermistor 0 °F
Since Last Overheat ℹ️Hours elapsed without an overheat event this boot session. Resets to zero on reboot and on any new overheat. Does not persist across power cycles. hr

Field Control

Command Field Duty Cycle 0 %
Field Volts (Calc'd) 0 V
Field Amps (Calc'd) 0 A

Alt Current Zero Offset (Auto-Learned)

0.00 A

Field vs Output for this RPM and Temperature Bucket

Anomaly detection settings (tolerance, alarm threshold, degradation sensitivity) live in Settings → Alternator → Advanced → Anomaly Detection.


Performance Matrix — Coverage Summary

Total SS time accumulated across all operating condition bins. Gray = no data collected yet in that bucket.

cells  ·  populated  ·  reference bins  ·  Total SS:
By RPM
By Temperature
By Alternator Current
Not loaded

DS18B20 Temperature Sensor Health

Counts since boot. One read failure on startup is normal. Persistent failures need attention; occasional CRC recoveries are fine.

Read Failures ?
CRC Failures ?
CRC Recovered (retry) ?
All-0xFF Reads ?
Power-On 85°C Reads ?
Out of Range Reads ?
Request Failures ?
Connected Check Failures ?
Resolution Auto-Fixes ?
Re-read Failures ?
Resolution Fix CRC Failures ?
Enumerate Failures ?

Live Tuning Scores

Always-running scores over rolling clock-time windows. Lower is better. Dash = no qualifying data yet for that window.

Inner Loop (current) — 1m / 10m / 100m / 1000m:
CV Loop (voltage) — 1m / 10m / 100m / 1000m:
Thermal Loop — 30m / 3h / 24h / 7d:

State of Charge

0 %

Battery Voltage

Battery Voltage (INA) ℹ️ Measured by INA228 uC - primary source 0 V
Battery Voltage (ADS) ℹ️ Measured by ADS1115 uC - for redundancy 0 V
Victron Battery Voltage ℹ️ Available if VE.Direct Data is turned on in Settings→System 0 V

Charging Mode

-

Battery Current

Battery Current 0 A
Victron Battery Current 0 A

Charge/Discharge Time

Time to Full Charge 0 min
Time to Full Discharge 0 min

SOC Gain Factor (Auto-Learned)

1.000

Engine Speed

0 rev/min

Boat Speed

Speed Over Ground (SOG) 0 kts
Velocity Made Good (VMG) ℹ️ Speed toward target bearing. Positive = getting closer, Negative = getting farther away 0 kts
Target Mode ℹ️ When ON, VMG automatically tracks true wind direction (useful for upwind sailing). Overrides manual bearing below.
Manual True Wind
Manual Bearing (-1 ℹ️ Enter compass heading you want to sail toward (0-359°). Set to -1 to disable.

Wind Data

Apparent Wind Speed ℹ️ Wind speed as measured on the boat (includes boat motion effect) 0 kts
Apparent Wind Angle ℹ️ Direction of apparent wind relative to boat heading 0°
True Wind Speed ℹ️ Actual wind speed with boat motion removed (calculated from apparent wind and boat speed) 0 kts
True Wind Direction ℹ️ Actual wind direction with boat motion removed (calculated from apparent wind and boat heading) 0°

Heading & Course

Heading 0°
Course Over Ground (COG) 0°
Leeway ℹ️ Heading - COG. Positive = drifting to starboard, Negative = drifting to port 0°

GPS Position

Latitude 0°
Longitude 0°
# Satellites 0

Heel Angle

0.0°

Pitch Angle

0.0°

Vertical Acceleration

0.00 g

Current Motion

Total Acceleration 0.00 g
Yaw Rate 0.0 °/s

Anchorage Comfort

Anchorage Comfort ℹ️Comfort score at anchor on a 0–100 scale (100 = flat calm). Based on rolling (heel deviation, 65% weight) and hobby-horsing (pitch deviation, 35% weight) over the last 60 seconds. Full penalty at 12° heel deviation or 8° pitch deviation. Grayed out underway — contextually meaningful only at anchor. Motion history resets on departure so passage data never skews the score. Activates below 1.3 kt. -- / 100
Roll Deviation (2 min) ℹ️Peak-to-peak heel (roll) deviation over the last 2 minutes. Measures how much the boat rolls side to side at anchor. Color coded: green = comfortable, yellow = moderate, red = uncomfortable. Grayed out underway. -- °
Pitch Deviation (2 min) ℹ️Peak-to-peak pitch (fore-aft) deviation over the last 2 minutes. Measures how much the boat hobby-horses at anchor. Color coded: green = comfortable, yellow = moderate, red = uncomfortable. Grayed out underway. -- °
Yaw Swing (2 min) ℹ️Peak-to-peak heading swing over the last 2 minutes from the NMEA2000 compass. Shows how much the boat swings on its anchor rode. "--" if no compass data. Color coded: green = steady, yellow = moderate swing, red = wide swing. Grayed out underway. -- °

Underway Metrics

Wave Period ℹ️Dominant wave period in seconds, auto-detected from the vertical acceleration signal. Calculated via zero-crossings of the 10 Hz-decimated vertical accel after DC (gravity) removal. Shows "--" until enough crossings are detected. -- s
Motion Sickness Index ℹ️Lawther & Griffin (1987) motion sickness index. Frequency-weights vertical acceleration — peaks at 0.2 Hz (5-second waves), which causes the most sickness. Scale: 0–30 low, 30–70 moderate, 70+ severe. Not a percentage; higher is worse. Only accumulates underway (SOG ≥ 1.7 kt); grayed out at anchor. Resets to zero on departure and arrival — no cross-contamination between trips. --
Vomit Probability (2hr) ℹ️Estimated percentage of an average population who would vomit during a 2-hour voyage at the current sustained motion level. Derived from the Motion Sickness Index using the Lawther & Griffin power-law model. Only accumulates underway (SOG ≥ 1.7 kt); grayed out at anchor. -- %
Heel Change (60s) ℹ️Total change in heel angle over the last 60 seconds (latest minus oldest sample). Captures slow, persistent roll shifts — e.g. a jibe or load transfer. 0.0°
Heel Deviation (60s) ℹ️Average absolute departure from the 60-second mean heel angle. Measures how much the boat is rocking side-to-side regardless of its steady list. High deviation = active rolling. Used in the Anchorage Comfort score. 0.0°
Pitch Change (60s) ℹ️Total change in pitch angle over the last 60 seconds (latest minus oldest). Captures slow fore-aft trim shifts. 0.0°
Pitch Deviation (60s) ℹ️Average absolute departure from the 60-second mean pitch angle. Measures fore-aft hobby-horsing. High deviation = active pitching. Used in the Anchorage Comfort score. 0.0°

Events (Current Window)

Slam Count ℹ️Number of slams in the current window. A slam is counted when vertical (upward) acceleration exceeds the configurable Slam Threshold, with a 300 ms refractory period to avoid counting one physical event multiple times. 0
Slam Peak (Max) ℹ️Highest single vertical acceleration reading recorded during a slam event in the current window, in g's. Resets each window. 0.0 g

Events (Lifetime)

Total Slams ℹ️Cumulative slam count since the device was last reset. Persists across power cycles via non-volatile storage. 0
Capsize Events ℹ️Number of times heel angle has exceeded the configurable Capsize Threshold (settable in IMU Settings). An NVS save is forced immediately on each event in case of power loss. 0
Pitchpole Events ℹ️Number of times pitch angle has exceeded the configurable Pitchpole Threshold (settable in IMU Settings). An NVS save is forced immediately on each event in case of power loss. 0

Raw Accelerometer (g)

Accel X 0.000 g
Accel Y 0.000 g
Accel Z 0.000 g

Raw Gyroscope (°/s)

Gyro X 0.0 °/s
Gyro Y 0.0 °/s
Gyro Z 0.0 °/s

Lifetime Maximums

Max Heel Angle 0.0°
Max Pitch Angle 0.0°
Worst Slam 0.0 g

Sea State Hours (Lifetime) ℹ️Cumulative hours bucketed by Motion Sickness Index and speed (moving = SOG ≥ 1.5 kt). Buckets: Gentle (MSI < 10), Moderate (10–30), Rough (30–70), Extreme (MSI ≥ 70). Logged once per minute.

Moving — Gentle 0.0 hr
Moving — Moderate 0.0 hr
Moving — Rough 0.0 hr
Moving — Extreme 0.0 hr
Stationary — Gentle 0.0 hr
Stationary — Moderate 0.0 hr
Stationary — Rough 0.0 hr
Stationary — Extreme 0.0 hr

Window Stats - Accel (g)

Accel X (min/avg/max) 0.000 / 0.000 / 0.000
Accel Y (min/avg/max) 0.000 / 0.000 / 0.000
Accel Z (min/avg/max) 0.000 / 0.000 / 0.000

Window Stats - Gyro (°/s)

Gyro X (min/avg/max) 0.0 / 0.0 / 0.0
Gyro Y (min/avg/max) 0.0 / 0.0 / 0.0
Gyro Z (min/avg/max) 0.0 / 0.0 / 0.0

Window Stats - Calculated

Heel (min/avg/max) 0.0° / 0.0° / 0.0°
Pitch (min/avg/max) 0.0° / 0.0° / 0.0°
Vert Accel (min/avg/max) 0.00 / 0.00 / 0.00 g
Total Accel (min/avg/max) 0.00 / 0.00 / 0.00 g

Diagnostics

IMU Status ℹ️ Whether the LSM6DSOX IMU is enabled and initialized. Disabled
Mounting Orientation ℹ️ Detected or configured physical orientation of the IMU on the PCB. Unknown
FIFO Overruns ℹ️ Count of times the IMU FIFO filled before it could be drained. Indicates loop() is too slow to keep up with the sensor output rate. 0
I²C Errors ℹ️ Cumulative I²C communication failures on the IMU bus since boot. A rising count here points to bus contention or signal integrity issues. 0
Unknown Tags ℹ️ FIFO samples with unrecognised tag bytes. Expected to be zero — a non-zero value suggests a FIFO configuration mismatch or hardware issue. 0
Accel Ring Drops ℹ️ Accelerometer samples discarded because the ring buffer was full. Should be zero during normal operation. 0
Gyro Ring Drops ℹ️ Gyroscope samples discarded because the ring buffer was full. Should be zero during normal operation. 0
Total Accel Samples ℹ️ Cumulative accelerometer samples successfully pushed to the ring buffer since boot. 0
Total Gyro Samples ℹ️ Cumulative gyroscope samples successfully pushed to the ring buffer since boot. 0
IMU Read Time (last call) ℹ️ Duration of the most recent IMU FIFO drain in microseconds. Previously labelled "current" — now reflects the last completed call via the FuncTiming lastCall field. 0 µs
IMU Read Time (worst 5s) ℹ️ Worst IMU FIFO drain duration in the rolling 5-second window. Resets every 5 seconds alongside all other function timing windows. 0 µs
Accel Ring Usage ℹ️ Current accelerometer ring buffer fill level as a percentage of total capacity. 0%
Gyro Ring Usage ℹ️ Current gyroscope ring buffer fill level as a percentage of total capacity. 0%

Memory ℹ️ Updated every 7 seconds. Internal RAM is fast on-chip SRAM shared by the CPU, stacks, and DMA. PSRAM is the external 8 MB SPI RAM used for most heap allocations. Heap fragmentation is an internal-only metric: 0% = fully contiguous, 100% = worst case. High fragmentation with adequate free space can still cause allocation failures for large contiguous buffers.

Free Heap (kB) ℹ️ Total free heap across all regions (internal + PSRAM). Includes ~8,000 kB PSRAM. 0
Min Ever Free Heap (kB) ℹ️ Watermark since boot — the lowest free heap total ever recorded. A useful lower bound for leak detection. 0
Free Internal RAM (kB) ℹ️ Free / total on-chip SRAM. Stacks, DMA buffers, and WiFi/BT stack live here. This is the more constrained resource. 0 / 0
Largest Free Block (kB) ℹ️ Largest single contiguous free block in internal RAM. Allocations larger than this will fail even if total free space looks adequate. 0
Free PSRAM (kB) ℹ️ Free / total external SPI RAM. Most heap allocations land here. Plenty of headroom is normal. 0 / 0
Heap Fragmentation (%) ℹ️ Internal RAM only. 100 × (1 − largest_free_block / total_free). 0% = fully contiguous; above ~70% warrants attention. 0

Function Timing — Worst Case (ms) ℹ️ Worst-case execution time per function. 5s window resets every 5 seconds — shows active spikes. The "Worst — last X min / X.X hr" column shows the worst since the most recent "Reset Peak Values" press (or boot, if never pressed) — catches infrequent spikes. Nested calls are included: a flash write inside ReadAnalogInputs shows up under that row.

5s Worst (ms)
Worst — last … min
Loop Time ℹ️ Total loop() duration. 5s window worst resets every 5s — shows active spike. The right column tracks the worst since the most recent "Reset Peak Values" press (or boot).
0
0
WiFi Send ℹ️ SendWifiData() — builds and streams all SSE payloads to connected clients. Runs every loop tick. Spikes here indicate slow TCP send or large payload backlog.
0
0
Read Analog Inputs ℹ️ Primary spike suspect — includes any NVS or flash writes triggered by new max values inside this function.
0
0
↳ RAI Total ℹ️ Full ReadAnalogInputs() duration including all sub-sections and any flash writes. Should match the outer ft_ReadAnalogInputs row closely — a large gap between them indicates overhead outside the measured sections.
0
0
↳ INA228 ℹ️ INA228 battery monitor read block only. Includes any flash writes triggered by new voltage max/min values. If this is consistently near zero while RAI Total spikes, the culprit is ADS, BMP, or IMU.
0
0
↳ ADS1115 State ℹ️ ADS1115 state machine cost per state step — not a full conversion cycle. A spike here indicates an I²C timeout or a slow Wire.requestFrom() call on the ADS bus.
0
0
↳ BMP388 State ℹ️ BMP388 pressure/temperature state machine cost per state step. Normally near zero — a spike indicates a slow forced-conversion read or I²C contention.
0
0
↳ IMU FIFO Drain ℹ️ LSM6DSOX FIFO drain cost per poll. Scales with sample backlog — if loop() slows down and samples accumulate, this will spike. Collision avoidance skips the drain if INA228 just ran long, which shows as zero here.
0
0
↳ Accel Metrics ℹ️ updateAccelMetrics() cost per call — ring-buffer processing, complementary filter, and wave period detection. Only runs when Accelerometer Data is enabled. Reported in µs.
0
0
VE Direct Read ℹ️ ReadVEData() duration in µs. ~12,000µs typical for a full Victron frame parse. Spikes indicate UART contention or a long frame with many fields.
0
0
Alternator Control Logic ℹ️ AdjustFieldLearnMode — field duty cycle calculation and learning table updates.
0
0
Check Alarms ℹ️ CheckAlarms() — alarm state machine, INA228 hardware OV latch management.
0
0
Calc Derived Metrics ℹ️ calculateDerivedMetrics() — computes filtered voltages, currents, and power figures from raw sensor data.
0
0
Log Dashboard Values ℹ️ logDashboardValues() — records periodic min/max/history samples to ring buffers and flash.
0
0
Update System Health Stats ℹ️ updateSystemHealthStats() — polls FreeRTOS heap stats, CPU load, fragmentation. Involves system calls that can occasionally stall.
0
0
Check WiFi Connection ℹ️ checkWiFiConnection() — reconnect logic and RSSI polling. Only runs when ignition is on.
0
0
CH1 Compute Stats ℹ️ ch1_compute_stats() — scans mini-bucket rings to publish 10s/2m/all-time CH1 interval stats.
0
0
Upload Sensor History ℹ️ Times the LittleFS read and queue send. Actual HTTP transfer happens on Core 0 and is not included.
0
0
Upload Buffered Records ℹ️ Times the LittleFS read and queue send. Actual HTTP transfer happens on Core 0 and is not included.
0
0
Build Config Payload ℹ️ Builds the configuration snapshot JSON for cloud upload. Fires infrequently — 0ms is normal between snapshot intervals.
0
0
Efficiency Tracker ℹ️ efficiencyTracker_tick() — includes NVS matrix and session health commits every 2 minutes. Spikes to 200–500ms every 2 min are expected in real mode; in fake mode these writes are suppressed.
0
0
SOC / Update Block
Update Engine Runtime
0
0
Update Engine Fuel
0
0
Update Battery SOC
0
0
Update Travel Statistics
0
0
Update Distance Interval
0
0
Update Board Temp / Pressure
0
0
Handle SOC Gain Reset
0
0
Handle Alt Zero Reset
0
0
Calculate Charge Times
0
0
Update Sailing Metrics
0
0
Update Weather Mode
0
0
Update Sensor Window ℹ️ updateSensorWindow() — computes rolling min/max window used for efficiency tracking and thermal analysis. Can spike when the window fills or flushes.
0
0
Check Time Sync ℹ️ checkTimeSync() — NTP sync check. Gated: skipped while in critical zone.
0
0

NVS Full Save ℹ️ saveNVSDataFull() persists all session/lifetime accumulators (charged energy, runtime, fuel, distance, lifetime damage, dynamic learning, IMU lifetime counters) to flash in a single synchronous commit. It runs only at the field-off edge (5s after field cuts), at shutdown, and on capsize/pitchpole events. The commit blocks Core 1 for as long as it takes — that's safe because the field is off so there's no OV risk during the stall. If you've been running continuously for hours and the device loses power before the next field-off edge, the deltas since the last save are lost.

Time Since Last Save (s) ℹ️ Seconds since the last successful saveNVSDataFull(). The longer this gets, the more accumulated session/lifetime data is at risk if the device loses power before the next field-off edge. 0 means no save has happened yet this boot. 0
Last Save Duration (ms) ℹ️ Wall-clock time the most recent saveNVSDataFull() call took to complete, including the nvs_commit() flash write. Expected 50-300ms depending on how many sectors needed erasing. Always runs with field off so any duration is safe. 0
Worst Save Duration (ms) ℹ️ Longest saveNVSDataFull() duration seen since boot. Useful as a long-term wear indicator — if this climbs steadily over many months, the NVS partition is fragmenting and may benefit from an erase. 0
Save Count ℹ️ Total saveNVSDataFull() calls since boot. Confirms the field-off drain is firing as expected — should increment each time the field cuts (engine pause, anchor, dock). 0

CH1 Sample Interval (ms)

Last Interval (ms) ℹ️ Most recent time between CH1 reads, ms. Note: this interval spans multiple loop iterations (the ADS1115 state machine advances one step per loop and CH1 reads happen every ~4 loops). It is wall-clock time across non-blocking iterations, NOT a single-loop stall — so it commonly exceeds the worst loop time without anything actually being blocked. 0
Avg 10s (ms) ℹ️ Mean CH1 interval over last 10 seconds 0
Worst 10s (ms) ℹ️ Maximum CH1 interval seen in last 10 seconds, ms 0
Over 2× 10s (count) ℹ️ Count of CH1 intervals exceeding 2× average in last 10 seconds 0
Avg 2m (ms) ℹ️ Mean CH1 interval over last 2 minutes (closed 10s buckets only) 0
Worst 2m (ms) ℹ️ Maximum CH1 interval seen in last 2 minutes, ms 0
Over 2× 2m (count) ℹ️ Count of CH1 intervals exceeding 2× average in last 2 minutes 0
Avg All-Time (ms) ℹ️ Mean CH1 interval since power-on 0
Worst All-Time (ms) ℹ️ Maximum CH1 interval seen since power-on, ms 0
Over 2× All-Time (count) ℹ️ Count of CH1 intervals exceeding 2× running mean since power-on 0

INA228 Read Interval (ms) ℹ️ Inter-sample timing for INA228 voltage/current reads. Stats are gated to "field on" only. With the field on the INA228 runs in fast mode (~5 ms cycle target) and these values update. With the field off the INA228 drops to low-speed mode (~1054 ms cycle) and these values are intentionally frozen at their last reading — zero / dashes here means the field has not been on yet this session. Note: this interval is wall-clock time between successive read completions and spans multiple loop iterations. It commonly exceeds the worst single-loop time without anything actually being blocked — only the worst loop time tells you about a true stall.

Last Interval (ms) ℹ️ Most recent time between INA228 reads, ms
Avg 10s (ms) ℹ️ Mean INA228 read interval over last 10 seconds of field-active time
Worst 10s (ms) ℹ️ Maximum INA228 read interval in last 10 seconds of field-active time, ms
Over 2× 10s (count) ℹ️ Count of INA228 intervals exceeding 2× average in last 10 seconds
Avg 2m (ms) ℹ️ Mean INA228 read interval over last 2 minutes of field-active time
Worst 2m (ms) ℹ️ Maximum INA228 read interval since last fast-mode rising edge (gate-open transition), ms. (Avg and Over-2× in this row are still rolling 2m windows; only worst is tracked monotonically since fast-mode start, by direct update.)
Over 2× 2m (count) ℹ️ Count of INA228 intervals exceeding 2× average in last 2 minutes
Avg All-Time (ms) ℹ️ Mean INA228 read interval since boot or last Reset Peaks (only fast-mode reads are sampled)
Worst All-Time (ms) ℹ️ Maximum INA228 read interval since boot, ms. Persists across fast/slow-mode transitions — only a power cycle or Reset Peaks clears it.
Over 2× All-Time (count) ℹ️ Count of INA228 intervals exceeding 2× the running mean of all prior samples since boot or last Reset Peaks (only fast-mode reads are sampled)

Voltage Loop Actual Interval (ms) ℹ️ Measured time between consecutive voltage loop PI fires in CV mode. Target is VoltageLoopInterval (100ms). Values significantly above target indicate a stalled loop tick during CV operation. Zero until CV mode has fired at least twice. Note: this interval is wall-clock time across multiple loop iterations — it can exceed the worst single-loop time without any single loop being blocked. Also note that CV exit/re-entry inflates this number because the gap to the previous in-CV fire is reported even when CV mode was off in between. The worst single-loop time in the Function Timing table is the authoritative stall indicator.

Worst 5s Window (ms) ℹ️ Worst actual voltage loop fire-to-fire interval in the rolling 5-second window, ms. Reset every 5s.
Worst — last … min ℹ️ Worst actual voltage loop fire-to-fire interval since the last "Reset Peak Values" press (or boot), ms.

CPU Load (%) ℹ️ Core 0: WiFi/system tasks, Core 1: main control loop. Per-core CPU load for ESP32-S3 using FreeRTOS runtime stats. Works for SMP with unpinned tasks because idle tasks are core-pinned, but does not provide per-task or per-core attribution of non-idle time; values are estimates, not exact accounting of where each task actually executed.

Current
Max
Core 0
0
0
Core 1
0
0

WiFi Status

Strength (dBm) ℹ️ Above -67dBm good. Below -75dBm unstable 0
Client Disconnects (count) ℹ️ WiFi connection losses detected by ESP32 (router drops, signal loss, network issues) 0
Heartbeat (count) ℹ️ Increments with each packet sent 0

Session Info

This
Last
Duration
0
0
Max Loop (s)
0
0
Reset Reason ℹ️ Common reset reasons: Scheduled Restart (11) is automatic maintenance every 4 hours (normal operation). Software Reset (1) is an unscheduled restart from crash recovery or manual commands. Task Watchdog (4) means the main program froze for over 16 seconds. Power On (0) occurs after battery disconnect/reconnect. Most frequently seen: Scheduled Restart during normal operation. Note: Sessions following OTA updates may show inaccurate reset reasons.
Unknown
Unknown

System

Mode ℹ️ Client = on ship's network, Access Point = regulator providing its own hotspot ?
Device Serial ℹ️ Unique factory-burned ID for this regulator. Include this in any email to support about cloud account recovery. ?
Software Version Loading...
Software Image ℹ️ Factory Golden = safe working default, User Updateable = newer versions loaded from Settings→Software Updates ?
Buffered Records (count) ℹ️ Data buffered when WiFi disconnected. Will upload to Cloud at next opportunity. Resetting might take a few tries, brute force works. 0/?
Power Cycles (count) ℹ️ Lifetime, or since re-flashing 0
ADS1115 I2C Error Count ℹ️ Count for this power cycle only, does not persist thru power loss 0

Counts of protection events since boot or last reset. All counters are rising-edge — each number represents how many times that protection mechanism activated, not how long it was active. Use the per-category reset buttons to establish a clean baseline after tuning changes or suspected transient conditions. FastOV events are normal during load transients; sustained accumulation at idle is not.

Voltage & Current Protection

FastOV Cap (live) ℹ️ Live per-tick ceiling on commanded current (A) from the fast overvoltage supervisor. Equals MaxTableValue when inactive. ? A
Protection Events (total) ℹ️ Rising-edge count of the unified protection flag — increments on every distinct activation of any protection: Group 1 (predictive OV), Group 2 (measured OV), Group 3 (iExcess), or Group 4 (Load Dump). Slow growth during transients is normal. Fast growth at steady state means thresholds need tuning. Overlapping events count as one activation (rising edge only). ?
FastOV Hard Events ℹ️ Rising-edge count of hard OV activations only — Group 1 (predictive K_HARD) OR Group 2 (measurement hysteresis). Both contribute to this single counter. Does NOT include Group 3 iExcess or Group 4 Load Dump (those increment the Protection Events counter above, plus their own per-group counters). Should be rare. Accumulation at steady state means real overshoot is occurring. ?
iExcess Events ℹ️ Rising-edge count: current excess supervisor trips. Fires when measured current exceeds setpoint + IExcessK for IExcessN consecutive ticks while in CV mode. Active in all charge stages, not just CV. ?
INA228 OV Events ℹ️ Rising-edge count: INA228 hardware ALERT pin fired (bus voltage crossed VoltageHardwareLimit = BulkVoltage + 0.3V). Hardware cuts GPIO4 immediately before software runs. Should be zero under normal operation. ?
Hard OC Events ℹ️ Rising-edge count: hard overcurrent trip (MeasuredAmps exceeded HardOCTripAmps for HardOCDebounceMs). Field cut immediately. Should be zero. ?
Voltage Spike Events ℹ️ Rising-edge count: measured battery voltage exceeded BulkVoltage + spike margin. Field ramps down and cuts after settle. Occasional events during RPM transients are acceptable. ?
Volt Disagree Critical Events ℹ️ Rising-edge count: ADS1115 and INA228 voltage readings diverged beyond the critical threshold. Field cut. Indicates a sensor fault or wiring problem. ?
Volt Disagree Warning Events ℹ️ Rising-edge count: ADS1115 and INA228 voltage readings diverged into the warning zone (less than critical). Field ramps down but may recover if disagreement clears. ?
Volt Implausible Events ℹ️ Rising-edge count: voltage sensor reading flagged as implausible (out of expected range). Indicates hardware or calibration fault. ?
Current Sensor Stale Events ℹ️ Rising-edge count: alternator current sensor (ADS1115 CH1) stopped updating. Field cut after 10s without fresh data. Check clamp sensor wiring and ADS1115 connection. ?

Thermal Protection Events

Temp Critical Events ℹ️ Rising-edge count: alternator temperature exceeded the critical threshold (TempLimit + critical excess). Field cut immediately. Should be rare. ?
Temp Sustained Events ℹ️ Rising-edge count: alternator temperature remained in the warning zone long enough to trigger a sustained overtemp shutdown. Less severe than critical but indicates prolonged thermal stress. ?
Temp Stale Events ℹ️ Rising-edge count: temperature sensor data went stale (DS18B20 stopped updating). Field cut as a precaution. Investigate sensor wiring if this is nonzero. ?
Barometric Pressure ℹ️ Sea-level barometric pressure (mbar — the unit used by the BBC Shipping Forecast, NOAA marine VHF, and most marine instruments; 1 mbar = 1 hPa exactly). Sampled every 10 minutes into a 7-day PSRAM ring buffer, persisted to NVS only at the field-off edge (no impact on loop timing). Forecast uses the Zambretti algorithm (1915, refined 1985) when true wind direction (NMEA2k) and GPS latitude are both fresh — it combines current pressure, 3-hour tendency, wind direction, and hemisphere/season into one of 26 outcomes. When either is stale, it falls back to a simpler tendency-only rule based on the UK Met Office Shipping Forecast Glossary (Steady / Rising slowly / Rising / Rising quickly / Rising very rapidly, thresholds 0.1 / 1.5 / 3.5 / 6 mbar over 3 h). History older than 7 days is available in your cloud storage.
Zone
Current
mbar
3-Hour Tendency
Forecast Method

Board Temperature ℹ️ Temperature measured in the regulator, will often be 5-25 deg hotter than ambient depending on location and electrical demands

0 °F

ADS Ch3 Voltage

0 V

Download Logs: ℹ️ Sends the last ~1 hour (133kb) of 2s interval data and the last ~1 minute (21kb) of 100ms interval data to CSV files to the Downloads folder (pc) or Files (mobile device). Logs are automatically cleared after download.
Update Rate (ms) (?): ℹ️ How often sensor data is sent to this display (milliseconds). Lower = more responsive display but higher CPU/network load. Range: 50-1000ms. Does not affect actual control speed.

Plot Time Window (sec) (?):

Time Axis Labels (?): ℹ️ UNIX: Proper time labels, but slower
Relative: "Seconds ago" labels, but smoother plotting
Relative UNIX

Y-Axis Ranges
Y Axis Min (Current) (?):

Y Axis Max (Current) (?):

Y Axis Min (Voltage) (?):

Y Axis Max (Voltage) (?):

Y Axis Min (RPM) (?):

Y Axis Max (RPM) (?):

Y Axis Min (Temperature) (?):

Y Axis Max (Temperature) (?):
Timestamps show when messages were received by the app, not when sent by the regulator. Messages are throttled: max 5 every 700ms (adjustable in firmware).
Device Information
Device ID
Account Information

Username (suggest using your boat name)

Email (kept private)
Account Management


Delete All My Data (GDPR) ℹ️ This will permanently delete all your data from the cloud platform. This action cannot be undone. Your device will continue to work locally.
Travel

Distance Traveled
Lifetime 0.0nm
Session 0.0nm

Speed ℹ️ Specify intervals for calculation later
Average
Lifetime 0.0kts
Session 0.0kts
Maximum
Lifetime 0.0kts
Session 0.0kts
Alternator

Energy Output
Lifetime 0kWh
Session 0kWh

Fuel Consumed ℹ️ Assumes 15% system efficiency (diesel engine and electrical machine combined)
Lifetime 0L
Session 0L

Field On Time
Lifetime 0H:M:S
Session 0H:M:S

Max Current
Lifetime 0A
Session 0A

Max Temperature
Digital Sensor
Lifetime 0°F
Session 0°F
Thermistor
Lifetime 0°F
Session 0°F

Wear Rate ℹ️ How long a NEW alterantor would last at the present speed and temperature. This one is an indication of instantaneous wear rate, not accumulated damage.
Theoretical Life @ Current Conditions
10000hours Good

Component Life Remaining ℹ️ Insulation: Exponential degradation with temperature (Arrhenius model). Reference: 50k hrs at 212°F.

Grease: Life halves every 18°F above 158°F. Also decreases with RPM. Reference: 40k hrs at 158°F, 6k RPM.

Brush: Wear increases 0.25% per °F above 150°F. Life decreases with RPM. Reference: 5k hrs at 6k RPM.
Insulation
100.0% Good
Bearing Grease
100.0% Good
Brush
100.0% Good
Battery

Energy
Charged
Lifetime 0kWh
Session 0kWh
Discharged
Lifetime 0kWh
Session 0kWh

Voltage
Maximum
Lifetime 0V
Session 0V
Minimum
Lifetime 0V
Session 0V

Average State of Charge
0%

Charge Cycles
Lifetime 0
Session 0
Solar

Solar Energy Produced
Lifetime 0kWh
Session 0kWh
Engine

Engine Fuel Consumed ℹ️ Based on measured RPM and RPM-consumption table defined in Settings → Engine
Lifetime 0L
Session 0L

Engine Run Time
Lifetime 0:00:00
Session 0:00:00

Engine Rev Counter
Lifetime 0rotations
Session 0rotations

Max Engine RPM
Lifetime 0rev/min
Session 0rev/min

Loading historical data viewer...

Loading leaderboards...

Loading fleet statistics...

Current Version:
Loading...

Available Versions:
Press refresh button...

CONNECTED