Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
61c86aa
Add Flameout Alarm draft spec input
Flazzarious Oct 2, 2026
d48b839
Merge remote-tracking branch 'origin/main' into feature/003-flameout-…
Flazzarious Oct 5, 2026
71576a5
Spec 003: Flameout Alarm specification
Flazzarious Oct 5, 2026
af9b1fd
Spec 003: clarifications and RPM window mockup
Flazzarious Oct 5, 2026
617c785
Spec 003: ECU telemetry research, telemetry-lost callout
Flazzarious Oct 5, 2026
e4dcff0
Spec 003: implementation plan for Flameout Alarm
Flazzarious Oct 5, 2026
4d3e603
Merge branch 'develop' of https://github.com/Flazzarious/jeti-lua-app…
Flazzarious Oct 5, 2026
8518639
Flameout Alarm: tasks, alarm sounds and app frame (T001-T014)
Flazzarious Oct 6, 2026
919ed72
Flameout Alarm: arming, flameout detection and alarm cycle (US1, T015…
Flazzarious Oct 6, 2026
9a24ee7
Flameout Alarm: find sound files in the emulator too
Flazzarious Oct 6, 2026
5583c9d
Flameout Alarm: Cut disarms, armed callout, SIM profiles (US2, T021-T…
Flazzarious Oct 6, 2026
5e449a9
Flameout Alarm: relight clears the alarm (US4, T032)
Flazzarious Oct 6, 2026
a45b17e
Merge remote-tracking branch 'origin/main' into feature/003-flameout-…
Flazzarious Oct 7, 2026
6af99dd
Flameout Alarm tasks: JETI Studio publishing (T056-T058)
Flazzarious Oct 7, 2026
e9c814a
Flameout Alarm: complete settings form (US3, T025-T030)
Flazzarious Oct 7, 2026
36cdb6a
Flameout Alarm: telemetry loss handling (US6, T036-T038); Cut review …
Flazzarious Oct 7, 2026
07f2ee9
Emulator note: stopPlayback isn't printed; relight and loss confirmed…
Flazzarious Oct 7, 2026
ea4b0c6
Flameout Alarm: sweep-bar window (US7, T040-T045)
Flazzarious Oct 7, 2026
eb6515d
Flameout Alarm: bold state label on the double-size window
Flazzarious Oct 7, 2026
f508d50
Flameout Alarm: transmitter screenshots; SIM and Cut tests confirmed …
Flazzarious Oct 7, 2026
90991fb
Flameout Alarm: test alarm switch (US8, T047-T048)
Flazzarious Oct 7, 2026
5b0ea16
Flameout Alarm docs: README, CREDITS, CLAUDE.md (T050-T053)
Flazzarious Oct 7, 2026
bd402e9
Flameout Alarm: JETI Studio description page and icon (T056-T057)
Flazzarious Oct 7, 2026
101887c
Flameout Alarm: CPU measured on the transmitter, 5-6% (T046)
Flazzarious Oct 7, 2026
fecb5d1
Flameout Alarm 0.1.0: release prep
Flazzarious Oct 7, 2026
c26fb47
Merge pull request #7 from Flazzarious/feature/003-flameout-alarm
Flazzarious Oct 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ other work. Remove an item once he says it's done.
| App (menu name) | Script | Spec | Based on |
| --- | --- | --- | --- |
| Speed Gauge | `src/Apps/AG-SpdGa.lua` | `specs/001-speed-gauge/` | DFM Speed Announcer (Dave McQueeney, MIT) |
| Flameout Alarm | `src/Apps/AG-FlmOt.lua` | `specs/003-flameout-alarm/` | original |

Keep this table current when an app is added.

Expand Down
23 changes: 23 additions & 0 deletions CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,29 @@ Amy model was trained on is undocumented. They were generated with
[`tools/voice/`](tools/voice/README.md), which can regenerate them (the
user chose to commit them, 2026-10-03; spec FR-035).

## Flameout Alarm sounds — Piper and the "Amy" voice

Flameout Alarm (`AG-FlmOt`) is original work; no code comes from another
app. Its alarm sounds use the same **Piper** engine and **"Amy"**
(`en_US-amy-medium`) voice model by **Mycroft / Rhasspy** as Speed Gauge's
voice, credited above:

- the urgent "Flameout!" callout, sped up, pitch-shifted, equalized and
compressed by [`tools/voice/make_flameout.py`](tools/voice/README.md);
- "Engine telemetry lost", "Flameout alarm armed" and "Engine relit".

The lock tone is synthesized by the same script and contains no voice.

The generated files are in
[`src/Apps/AG-FlmOt/`](src/Apps/AG-FlmOt/) and are licensed **CC BY-SA 4.0**
(Amy model), not MIT; that folder's `CREDITS.txt` carries the attribution.
No Piper code is part of this repository or of the app.

The ECU telemetry facts behind the app (spec 003, research R1) come partly
from Thomas Ekdahl's Jeti ECU telemetry app
([thomasekdahlN/jeti](https://github.com/thomasekdahlN/jeti)), which was
studied for facts only; none of its code is used.

## JETI model official demos

[`docs/examples/jeti-demos/`](docs/examples/jeti-demos/) holds unmodified demos
Expand Down
66 changes: 65 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,74 @@ spec-driven workflow (GitHub Spec Kit + Claude Code) in VS Code.
| App | Script | Status | Spec | Based on |
| --- | --- | --- | --- | --- |
| Speed Gauge | [`AG-SpdGa.lua`](src/Apps/AG-SpdGa.lua) | Released (0.3.0) | [001](specs/001-speed-gauge/spec.md) | DFM Speed Announcer by Dave McQueeney (MIT) |
| Flameout Alarm | [`AG-FlmOt.lua`](src/Apps/AG-FlmOt.lua) | Released (0.1.0) | [003](specs/003-flameout-alarm/spec.md) | Original |

Speed Gauge speaks in its own voice (Piper "Amy"), in
`src/Apps/AG-SpdGa/voice/`. Those files are licensed CC BY-SA 4.0, not MIT
(see [CREDITS.md](CREDITS.md)); [`tools/voice/`](tools/voice/README.md)
regenerates them. Without them the app works in the transmitter's voice.

### Flameout Alarm

Watches a turbine's RPM telemetry and sounds an urgent, repeating alarm
("Flameout! Flameout! Flameout!" and a lock tone every 5 seconds, with stick
vibration) when the engine spools down after it has been running. A
double-size window shows RPM as a segmented bar with an idle marker.

**It is advisory only.** It never controls the model or the engine. It does
not replace the ECU's own failsafe, shutdown or auto-restart logic, or the
pilot's own monitoring.

**It only works if the turbine's RPM reaches the transmitter as a normal
telemetry sensor**, i.e. you can pick it in the transmitter's sensor list.
What is known per ECU brand ([research](specs/003-flameout-alarm/research.md#r1-how-ecus-deliver-rpm-to-a-jeti-transmitter)):

| ECU | RPM as a telemetry sensor |
| --- | --- |
| JetCat | Yes, through JetCat's, VSpeak's, Digitech's or CB-Electroniks' Jeti converter |
| Xicoy (V6/V10, also JetsMunt) | Yes, through the Xicoy telemetry adapter (sensor group "Turbine") |
| KingTech | Yes, through the KingTech telemetry unit or a VSpeak/Digitech converter |
| Swiwin | Yes, through VSpeak's Swiwin converter. Direct connection: unconfirmed |
| JetCentral | Unconfirmed: the Telemetry Adapter V2 uses its own Lua app |
| Enjet Power | Unconfirmed |

RPM shown only on a JetiBox screen, or only inside another maker's Lua app,
can't be used. Swiwin users: set the receiver's output period to 11-13 ms,
not "Auto" (a known Swiwin ECU issue, unrelated to this app).

**Setup** (Applications → Flameout Alarm). Monitoring stays off until three
things are set:

- **RPM sensor.** If the ECU sends RPM in units other than RPM (e.g.
thousands), set **Sensor scale** so **Live RPM** reads true engine RPM.
- **Idle RPM**, typed from the ECU's setup, in thousands (35.0 = 35,000
RPM). Compare it with **Live RPM** at idle. Too high, and the app arms only
on a run-up and a relight won't clear the alarm until you open the
throttle. Too low, and the alarm comes later and a restart clears it
sooner.
- **Cut switch**, assigned in its Cut (engine off) position. Moving it to Cut
disarms the app silently and is the only way to silence an alarm.

How it decides:

- A turbine start overshoots idle and slowly settles back down, so the app
arms on an **arming threshold** below idle (default 90%) held for the
arming time (3 s). The arming threshold must stay above any RPM the engine
reaches before it runs on its own; raise the percentage if your engine's
start or auto-restart comes close to it.
- RPM below the **flameout threshold** (default 70% of idle) for the
detection delay (1 s) starts the alarm. A throttle chop to idle stays
above it.
- During an ECU auto-restart the alarm keeps going; it clears once RPM holds
the arming threshold for the arming time.
- If telemetry stops for the telemetry-loss delay (2 s), the app says "Engine
telemetry lost" instead of alarming.

A **Test alarm** switch plays the real alarm on the ground (not while armed).
The sounds in `src/Apps/AG-FlmOt/` are generated with
[`tools/voice/make_flameout.py`](tools/voice/README.md) and licensed CC BY-SA
4.0, not MIT. Install = `AG-FlmOt.lua` plus the `AG-FlmOt/` folder.

## Install with JETI Studio

1. In JETI Studio open **File → Configuration**, and add this line to the
Expand All @@ -27,7 +89,9 @@ regenerates them. Without them the app works in the transmitter's voice.
Studio's Lua app list; select one and install it.

Each app installs exactly its released version (its files come from the
release tag). Descriptions: [Speed Gauge](docs/apps/speed-gauge.md).
release tag). Descriptions: [Speed Gauge](docs/apps/speed-gauge.md),
[Flameout Alarm](docs/apps/flameout-alarm.md) (in JETI Studio once its
`Apps.json` entry is published).

For maintainers: after tagging a release, run
`python tools/publish/make_apps_json.py`, commit `Apps.json` and merge it to
Expand Down
61 changes: 61 additions & 0 deletions docs/apps/flameout-alarm.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Flameout Alarm</title>
</head>
<body style="padding:10px;float:left;max-width:500px;">
<h1>Flameout Alarm</h1>
<p>An urgent, repeating alarm when a turbine flames out, from the
engine's RPM telemetry, and an RPM bar for the main screen, for the
DS-24 II / DC-24 II.</p>
<img src="img/flameout-alarm-armed.png" alt="Flameout Alarm, armed" width="480">
<ul>
<li><b>Flameout alarm:</b> "Flameout! Flameout! Flameout!" and a
rapid lock tone every 5 seconds, with stick vibration. It cuts in
over other apps' speech.</li>
<li><b>No false alarms on the ground:</b> arms only once the
engine has run at idle, ignores the start sequence and throttle
chops, and disarms silently on the throttle cut switch.</li>
<li><b>Auto-restart aware:</b> the alarm keeps going during an ECU
restart and clears once the engine holds idle again.</li>
<li><b>Telemetry loss is not a flameout:</b> you hear "Engine
telemetry lost" instead.</li>
<li><b>RPM window:</b> a segmented RPM bar with an idle marker and
the RPM number; a red FLAMEOUT banner on a flameout.</li>
<li><b>Test alarm switch</b> to hear the real alarm on the
ground.</li>
</ul>
<img src="img/flameout-alarm-flameout.png" alt="Flameout Alarm during a flameout" width="480">
<p><b>Advisory only.</b> It never controls the model or the engine,
and does not replace the ECU's failsafe, shutdown or auto-restart
logic, or your own monitoring.</p>
<p><b>Needs a turbine whose RPM reaches the transmitter as a normal
telemetry sensor:</b> JetCat, Xicoy and KingTech through their Jeti
telemetry adapters or a VSpeak/Digitech converter, Swiwin through
VSpeak's converter. JetCentral, Enjet and Swiwin's direct connection
are unconfirmed.</p>
<h3>Setting up</h3>
<ol>
<li>Add <b>Flameout Alarm</b> in <i>Applications - User Applications</i>.</li>
<li>In its settings choose the <b>RPM sensor</b> (check <i>Live
RPM</i>; set <i>Sensor scale</i> if it's off by 10x or 1000x),
enter <b>Idle RPM</b> in thousands from your ECU's setup (35.0 =
35,000 RPM), assign the <b>Cut switch</b> in its Cut position, then
tick <b>Monitoring</b>.</li>
<li>Put <b>Flameout Alarm</b> at double size on a page in
<i>Timers/Sensors - Displayed telemetry</i>.</li>
<li>Optional: assign a <b>Test alarm</b> switch to hear the
alarm.</li>
</ol>
<p>Defaults: arms at 90% of idle held for 3 s, alarms below 70% of
idle for 1 s, "telemetry lost" after 2 s.</p>
<p>Version: <b>0.1.0</b></p>
<p>Compatibility: <b>DC/DS-24II</b>, firmware 6.x</p>
<p>Voice: Piper text-to-speech with the "Amy" voice by Mycroft /
Rhasspy; the sound files are licensed CC BY-SA 4.0. Flameout Alarm: MIT
license, Copyright (c) 2026 Aaron George.</p>
<p>Source and full credits:
<a href="https://github.com/Flazzarious/jeti-lua-apps">github.com/Flazzarious/jeti-lua-apps</a></p>
</body>
</html>
73 changes: 73 additions & 0 deletions docs/apps/flameout-alarm.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Flameout Alarm

An urgent, repeating alarm when a turbine flames out, from the engine's RPM
telemetry, and an RPM bar for the main screen, for the JETI
**DS-24 II / DC-24 II**.

![Flameout Alarm on the main screen, armed](https://raw.githubusercontent.com/Flazzarious/jeti-lua-apps/main/docs/apps/img/flameout-alarm-armed.png)

## What it does

- **Flameout alarm:** "Flameout! Flameout! Flameout!" followed by a rapid
lock tone, repeating every 5 seconds, with three short pulses on both
sticks. It cuts in over other apps' speech.
- **No false alarms on the ground:** the app arms only once the engine has
been running at idle (it ignores the start sequence and the start
overshoot), stays quiet through throttle chops, and disarms silently when
you move the throttle cut switch to Cut.
- **Auto-restart aware:** while the ECU tries a restart, the alarm keeps
going; it clears once the engine holds idle again.
- **Telemetry loss is not a flameout:** if the RPM data stops, you hear
"Engine telemetry lost" instead of the alarm.
- **RPM window:** a segmented RPM bar with a yellow idle marker and the RPM
as a number (double size), or a compact bar (single size). On a flameout
the window turns into a red FLAMEOUT banner.

![Flameout Alarm during a flameout](https://raw.githubusercontent.com/Flazzarious/jeti-lua-apps/main/docs/apps/img/flameout-alarm-flameout.png)
- **Test alarm switch:** hear the real alarm on the ground, without an
engine.

**Advisory only.** The app never controls the model or the engine. It does
not replace the ECU's own failsafe, shutdown or auto-restart logic, or your
own monitoring.

## Requirements

- JETI **DS-24 II or DC-24 II**, firmware 6.0 or newer. On other DC/DS-24
transmitters the alarm works and the window shows text only.
- A turbine whose **RPM reaches the transmitter as a normal telemetry
sensor**: JetCat, Xicoy and KingTech through their Jeti telemetry adapters
or a VSpeak/Digitech converter, Swiwin through VSpeak's converter.
JetCentral, Enjet and Swiwin's direct connection are unconfirmed. RPM shown
only on a JetiBox screen or inside another maker's app can't be used.

## Setting up

1. Add **Flameout Alarm** in *Applications → User Applications*.
2. Open its settings (*Applications → Flameout Alarm*). Monitoring stays off
until these three are set:
- **RPM sensor**: your ECU's RPM. **Live RPM** shows what the app reads;
if it's off by 10× or 1000×, set **Sensor scale**.
- **Idle RPM**, in thousands (35.0 = 35,000 RPM), from your ECU's setup.
Check it against Live RPM with the engine idling.
- **Cut switch**, assigned while holding the switch in its Cut (engine
off) position.
Then tick **Monitoring**.
3. Put **Flameout Alarm** at double size on a page in *Timers/Sensors →
Displayed telemetry*.
4. Optional: assign a **Test alarm** switch and hold it on to hear the alarm.

The defaults suit most engines: arming at 90% of idle held for 3 s, alarm
below 70% of idle for 1 s, "telemetry lost" after 2 s. If your engine's start
or auto-restart climbs close to 90% of idle before it's running on its own,
raise the arming percentage. Settings are saved per model.

## Credits and licenses

- Voice: **Piper** text-to-speech with the voice model **"Amy"** by
Mycroft / Rhasspy. The sound files (in `/Apps/AG-FlmOt/`) are licensed
**CC BY-SA 4.0**.
- Flameout Alarm itself: MIT license, Copyright (c) 2026 Aaron George.

Source, full credits and license texts:
[github.com/Flazzarious/jeti-lua-apps](https://github.com/Flazzarious/jeti-lua-apps)
Binary file added docs/apps/img/flameout-alarm-armed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/apps/img/flameout-alarm-disarmed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/apps/img/flameout-alarm-flameout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/apps/img/flameout-alarm-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/apps/img/flameout-alarm-idle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading