mirror of
https://github.com/zvx-echo6/meshai.git
synced 2026-06-11 17:34:44 +02:00
nws: add _SAME_INSTRUCTION map and tighten instruction to 40-byte limit
Short, actionable instructions keyed by SAME event code (TOR -> "Seek shelter immediately.", SVR -> "Move indoors now.", etc.). Falls back to the CAP instruction field when no SAME code matches. Truncates at 40 UTF-8 bytes to keep wire size compact for mesh broadcast. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
b3105c65f5
commit
503c16db5e
1 changed files with 18 additions and 4 deletions
|
|
@ -73,6 +73,20 @@ _SAME_EMOJI = {
|
||||||
"MAW": "🌊", "ADR": "⚠️",
|
"MAW": "🌊", "ADR": "⚠️",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_SAME_INSTRUCTION = {
|
||||||
|
"TOR": "Seek shelter immediately.",
|
||||||
|
"SVR": "Move indoors now.",
|
||||||
|
"FFW": "Turn around, don't drown.",
|
||||||
|
"FLW": "Move to higher ground.",
|
||||||
|
"WSW": "Avoid travel if possible.",
|
||||||
|
"BZW": "Avoid travel.",
|
||||||
|
"EWW": "Secure outdoor objects.",
|
||||||
|
"HWW": "Secure outdoor objects.",
|
||||||
|
"FRW": "Evacuate if ordered.",
|
||||||
|
"SMW": "Move indoors now.",
|
||||||
|
"MAW": "Move away from water.",
|
||||||
|
}
|
||||||
|
|
||||||
_NWS_OFFICE_SHORT = {
|
_NWS_OFFICE_SHORT = {
|
||||||
"KBOI": "Boise", "KPIH": "Pocatello", "KMSO": "Missoula",
|
"KBOI": "Boise", "KPIH": "Pocatello", "KMSO": "Missoula",
|
||||||
"KOTX": "Spokane", "KSLC": "Salt Lake City", "KMFR": "Medford",
|
"KOTX": "Spokane", "KSLC": "Salt Lake City", "KMFR": "Medford",
|
||||||
|
|
@ -326,10 +340,10 @@ def _render(*, event_type, area_desc, geocoder_city, county, state,
|
||||||
expires_seg = _format_expires_short(expires_epoch, now=now) if expires_epoch else ""
|
expires_seg = _format_expires_short(expires_epoch, now=now) if expires_epoch else ""
|
||||||
line5 = f"Expires: {expires_seg}" if expires_seg else ""
|
line5 = f"Expires: {expires_seg}" if expires_seg else ""
|
||||||
|
|
||||||
# Line 6: instruction (max 80 chars)
|
# Line 6: instruction — prefer short SAME-keyed text, fall back to CAP field
|
||||||
instruction = (d.get("instruction") or "").strip()
|
instruction = _SAME_INSTRUCTION.get(same_code) or (d.get("instruction") or "").strip()
|
||||||
if len(instruction) > 80:
|
if len(instruction.encode("utf-8")) > 40:
|
||||||
instruction = instruction[:77] + "..."
|
instruction = instruction[:37] + "..."
|
||||||
line6 = instruction
|
line6 = instruction
|
||||||
|
|
||||||
lines = [l for l in (line1, line2, line3, line4, line5, line6) if l]
|
lines = [l for l in (line1, line2, line3, line4, line5, line6) if l]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue