This commit is contained in:
Home Assistant Version Control
2026-08-18 14:36:46 +00:00
parent 13dc64b70f
commit 88e26358aa
89 changed files with 26068 additions and 18351 deletions
@@ -1,4 +1,52 @@
{
"card": {
"min": "min",
"entity_not_found": "Entity not found",
"running_long": "Running long",
"remaining": "remaining",
"progress": "progress",
"show_time_remaining": "Show time remaining",
"show_percentage": "Show percentage",
"layout": {
"tile": "Tile (compact)",
"detail": "Detail (rich)",
"glance": "Glance (multiple devices)"
},
"btn": {
"pause": "Pause",
"resume": "Resume",
"terminate": "End cycle",
"record_start": "Start recording",
"record_stop": "Stop recording",
"program": "Program",
"open_panel": "Open WashData"
},
"editor": {
"layout": "Layout",
"entity": "Appliance entity",
"entities": "Appliances",
"title": "Title",
"icon": "Icon",
"show_state": "Show state",
"show_program": "Show program",
"show_progress_bar": "Show progress bar",
"spin_icon": "Spin icon while running",
"display_mode": "Detail line",
"active_color": "Active color override",
"show_phase": "Show phase",
"show_energy": "Show energy and cost",
"show_anomaly": "Show overrun warning",
"show_sparkline": "Show live power graph",
"buttons": "Action buttons",
"program_entity": "Program entity (override)",
"time_entity": "Time entity (override)",
"pct_entity": "Progress entity (override)",
"power_entity": "Power entity (override)",
"tap_action": "Tap action",
"hold_action": "Hold action",
"double_tap_action": "Double tap action"
}
},
"badge": {
"approved": "Approved",
"artifact_tip": "{n} anomalies detected (e.g. door opened mid-cycle) open to see them on the graph",
@@ -72,6 +120,21 @@
"discard_tip": "Discard the recorded trace without saving",
"disconnect": "Disconnect",
"dismiss": "Dismiss",
"mute_suggestion": "Stop suggesting this setting",
"pg_load_calibrated": "Load Calibrated (ML) ({n})",
"pg_load_calibrated_tip": "Stage ML-calibrated settings as Playground overrides",
"pg_load_live": "Load live settings",
"pg_load_live_tip": "Re-read the integration's current settings and drop every Playground edit",
"pg_load_suggested": "Load suggested ({n})",
"pg_load_suggested_tip": "Stage the auto-tuner's current suggestions as Playground overrides",
"pg_preset_delete": "Delete preset",
"pg_preset_load": "Load preset",
"pg_preset_load_tip": "Replace the Playground values with this preset (live settings are untouched)",
"pg_preset_save": "Save as preset",
"pg_preset_save_tip": "Save every value below as a named preset for this device",
"pg_publish_all": "Publish {n} to integration",
"pg_publish_one": "Publish {label} to the integration",
"reset_muted": "Reset muted",
"done": "Done",
"download_device": "Download this setup",
"download_export": "Download export",
@@ -274,6 +337,7 @@
"no_automations": "No automations reference this device yet.",
"panel_settings": "Panel Settings",
"param_sweep": "Parameter sweep",
"pg_settings_source": "Settings source",
"phase_catalog": "Phase Catalog",
"playground": "Playground",
"process_history": "Process History",
@@ -370,6 +434,7 @@
"default_access_level": "Default level for users not listed below",
"default_other": "Default (other devices)",
"default_tab": "Default tab when opening the panel",
"font_size": "Panel font size",
"delta": "Δ",
"description": "Description",
"dest_real_history": "Real history (counts in stats)",
@@ -466,6 +531,9 @@
"pg_group_matching": "Program matching",
"pg_group_timing": "Timing rules",
"pg_idle": "Idle",
"pg_preset": "Playground preset",
"pg_preset_name": "New preset name",
"pg_preset_none": "Select a preset…",
"pg_stress_group": "Idle termination test",
"pg_stress_idle_auto": "Auto",
"pg_stress_idle_w": "Idle level (W)",
@@ -768,6 +836,16 @@
"pg_analysis_hint2": "Pick a cycle and press Run to load match analysis.",
"pg_apply_confirm": "Apply best value: {label} = {value}?",
"pg_apply_settings_confirm": "Save these {n} setting(s) to this device? {list}",
"pg_ctrl_intro": "Values start from this device's live integration settings. Edits stay in the Playground until you publish them.",
"pg_live_unavailable": "Live settings unavailable, showing defaults.",
"pg_load_live_confirm": "Discard {n} Playground edit(s) and reload the integration's current settings?",
"pg_matches_live": "Matches live settings",
"pg_n_changed": "{n} changed vs live settings",
"pg_sugg_none": "All suggestions already match the current settings",
"pg_preset_delete_confirm": "Delete the preset \"{name}\"?",
"pg_preset_limit": "Preset limit reached ({n})",
"pg_preset_overwrite": "Overwrite the preset \"{name}\"?",
"pg_publish_one_confirm": "Save {label} = {value} to this device's settings?",
"pg_stress_terminated_detail": "Settled to ~{idle}W idle -- cycle ended {h}h {m}m later via {reason}.",
"pg_stress_above_threshold_detail": "Idle draw ~{idle}W is at or above the effective stop threshold ({stop}W) -- the cycle never registered as quiet. Raise stop_threshold_w to fix.",
"pg_stress_hit_cap_detail": "Cycle ran {h}h {m}m without stopping -- force-stopped by the safety cap. Idle draw {idle}W vs stop threshold {stop}W.",
@@ -800,6 +878,7 @@
"preferences_admin": "Preferences, panel & access control",
"preferences_adv": "Preferences",
"prefs_personal": "These apply to your Home Assistant account only.",
"font_size_hint": "Make everything in this panel larger or smaller. Applies to your account on this device.",
"process_history_hint": "Re-run matching on all stored cycles, refresh tuning suggestions, retrain the ML models (if enabled), and recompute cycle health. Run this after a batch of reviews.",
"profile_deleted": "Profile deleted",
"profile_poor_health_detail": "Cycles assigned to this profile have inconsistent shapes or low confidence. Consider rebuilding the envelope or reviewing labelled cycles.",
@@ -845,6 +924,10 @@
"store_share_device_intro": "Upload {brand} {model} with the reference cycles you select. Others with the same appliance can adopt your programs. Entries are reviewed before appearing publicly.",
"store_share_intro": "Upload this reference cycle so others with the same appliance can use it. It is reviewed before appearing publicly.",
"sug_staged": "Set {key} = {val}. Save to apply.",
"sug_muted": "Won't suggest this setting again",
"sug_mute_failed": "Could not mute suggestion",
"sug_unmuted_all": "Muted suggestions reset",
"n_suggestions_muted": "{count} muted; the auto-tuner will not propose these.",
"tail_trim_hint": "Remove this many seconds from the end",
"toast_auto_detect_enabled": "Auto-detect enabled",
"toast_auto_label_complete": "Auto-label complete",
@@ -872,6 +955,7 @@
"trend_duration_shorter": "Duration trending shorter ({pct}%/cycle) recent avg {avg}",
"trend_energy_down": "Energy trending down ({pct}%/cycle)",
"trend_energy_up": "Energy trending up ({pct}%/cycle) recent avg {avg}",
"trim_destructive_confirm": "This keeps only {pct}% of the cycle and cannot be undone. Continue?",
"trim_intro": "Drag the red handles, or enter values. Everything outside the window is removed.",
"tuning_suggestions_available": "{count} tuning suggestion available from observed cycles. They appear beside the relevant fields.",
"unsure_detected_prefix": "WashData is unsure it detected",
@@ -903,6 +987,7 @@
"duration_scale": "Stage 4: log-ratio where duration agreement halves; smaller = stricter penalty (default 0.175)",
"energy_scale": "Stage 4: log-ratio where energy agreement halves; smaller = stricter penalty (default 0.25)",
"anti_wrinkle_idle_timeout": "Quiet time allowed between two tumble pulses before anti-wrinkle ends",
"dishwasher_end_spike_quiet_release": "Dishwasher: quiet seconds after expected duration before the end-of-cycle drain wait is released",
"anti_wrinkle_max_power": "A pulse above this ends anti-wrinkle and opens a new cycle",
"anti_wrinkle_enabled": "Absorb the tumble pulses after the main phase instead of reading them as new cycles",
"anti_wrinkle_max_duration": "A pulse longer than this ends anti-wrinkle and opens a new cycle",
@@ -970,6 +1055,10 @@
"intro": "How a cycle is detected as starting, running and finishing.",
"label": "Detection"
},
"dishwasher": {
"intro": "End-of-cycle handling for dishwashers, which typically finish with a long near-silent drying phase before a short final drain.",
"label": "Dishwasher"
},
"matching": {
"intro": "How finished cycles are matched to learned profiles and labelled.",
"label": "Matching"
@@ -1040,6 +1129,10 @@
"doc": "Appliance class. Sets sensible detection defaults (thresholds, off-delay, end handling) tuned for that appliance type; change it only if the device was originally set up as the wrong type.",
"label": "Device Type"
},
"dishwasher_end_spike_quiet_release": {
"doc": "Once the cycle passes its expected duration, how long the dishwasher must stay quiet (below the Stop Threshold) before WashData stops waiting for a final drain and ends the cycle. Raise it if your machine has a long silent drying phase before a late final drain that is being missed - a wider window lets the learned duration follow seasonal drift (colder inlet water = longer cycles) instead of locking to the old average. It only ever shortens the wait relative to the internal 30-minute end-spike cap, never extends it.",
"label": "Passive-Dry Quiet Release"
},
"door_sensor_entity": {
"doc": "Optional door binary sensor. Used to detect when the appliance has been opened/unloaded after a cycle.",
"label": "Door Sensor Entity"
@@ -1228,6 +1321,10 @@
"doc": "Minutes after a cycle ends before sending the still-waiting \"unload the machine\" reminder. Set 0 to disable the reminder.",
"label": "Unload Nag Delay"
},
"notify_unload_repeat": {
"doc": "Keep re-sending the unload reminder every \"Unload Nag Delay\" minutes until you open the door or tap \"Stop reminding\" on the notification. Requires a Door Sensor Entity (the reminder itself does). The dismiss button works on Home Assistant companion-app (mobile) notifications.",
"label": "Repeat Until Door Opens"
},
"off_delay": {
"doc": "Time to wait after power drops before declaring the cycle finished. If power resumes within this window the cycle continues seamlessly - this bridges pauses between wash stages. Dishwashers have long drying phases (power off for 20-60 min) so the off-delay must exceed that to keep the whole wash+dry as one cycle.",
"label": "Off Delay"
@@ -1386,6 +1483,26 @@
"anti_wrinkle_idle_timeout": {
"label": "Max Pulse Gap",
"doc": "How long the machine may stay quiet between two tumble pulses before anti-wrinkle mode ends. Set it above the longest gap your dryer leaves between pulses, otherwise every later pulse is read as a false start."
},
"power_profile_interval_min": {
"label": "Power Profile Interval",
"doc": "Bucket size for the per-profile power_profile sensor attribute (the flat per-slot average-watts array consumed by external planners such as EMHASS and tibber_prices). Smaller buckets keep short power spikes sharp; larger buckets smooth the shape. Default 15 min. Read-time only; does not affect detection."
},
"notify_live_sticky": {
"label": "Keep Live Notification On Tap",
"doc": "Android only. Make the live-progress notification persistent (sticky) so tapping it does not dismiss the ongoing thread. Off keeps the default behaviour where a tap dismisses it."
},
"notify_live_click_action": {
"label": "Live Notification Tap Target",
"doc": "Android only. Where a tap on the live-progress notification opens (e.g. /lovelace/laundry, or a full URL) instead of the app landing page. Leave blank for the default."
},
"door_opens_at_end": {
"label": "Door Opens Automatically At End",
"doc": "For dishwashers that pop the door open at the end of the cycle to dry (AirDry and similar). With this on, a door-open on a running cycle no longer pauses it forever; instead, if the door stays open for the dwell below, WashData treats the cycle as finished. A brief open (adding an item) is ignored. Requires a Door Sensor Entity."
},
"door_end_dwell_seconds": {
"label": "Door-Open End Dwell",
"doc": "How long the door must stay open before WashData ends the cycle, when \"Door Opens Automatically At End\" is on. Long enough to ignore quickly adding a dish (default 60 s), short enough to end promptly once the machine pops the door."
}
},
"setting_group": {
@@ -1554,7 +1671,7 @@
}
},
"reason": {
"watchdog": "Kept as low as safe (3x the p95 update gap of {p95}s, min 30s) so stalls are caught quickly without false stops.",
"watchdog": "Kept as low as safe (just above the p95 update gap of {p95}s and at least 2x the sampling interval of {median}s, min 30s) so stalls are caught quickly without false stops.",
"no_update_timeout": "Based on observed update cadence (p95={p95}s) * 20 (min 60s).",
"off_delay_cadence": "Based on observed update cadence (p95={p95}s) * 5",
"off_delay_device_floor": "Used device-specific safe minimum for {device} ({floor}s).",
@@ -1575,6 +1692,7 @@
"profile_match_threshold": "p10 confidence of {cycles} correct auto-labels ({p10}); safe live-commit floor.",
"end_repeat_count": "{false}/{total} clean cycles ({pct}%) had a >60s internal pause that resumed; require {val} end confirmation(s).",
"min_off_gap": "Based on {gaps} observed inter-cycle gaps (p05={p05}s). Device floor: {floor}s.",
"min_off_gap_bridge": "Sized to bridge the longest quiet stretch inside a cycle: {span}s + 60s buffer, from {spans} bridged gaps across {cycles} clean cycles (stays under your {ceiling}s back-to-back headroom).",
"min_active": "Based on minimum active power ({min}W) observed in last cycle.",
"end_energy_default": "Default recommended baseline for end-of-cycle noise gate.",
"dead_zone_from_dip": "Based on early power dip detected at {s}s.",
@@ -1678,6 +1796,10 @@
"no_split_found": "No idle gaps found to split on",
"panel_settings_saved": "Panel settings saved",
"pause_no_cycle": "No active cycle to pause",
"pg_preset_loaded": "Preset \"{name}\" loaded",
"pg_preset_saved": "Preset \"{name}\" saved",
"pg_sugg_loaded": "Staged {n} suggested value(s) - run the Playground to compare",
"pg_sugg_ml_loaded": "Staged {n} ML-calibrated value(s) - run the Playground to compare",
"pg_run_gone": "That run is no longer available.",
"phase_name_required": "Phase name is required",
"phase_updated": "Phase updated",