{ "config": { "step": { "user": { "title": "Maintenance Supporter", "description": "Set up your maintenance management system.", "menu_options": { "create_object": "Create Maintenance Object", "create_from_template": "Create from Template", "global_setup": "Global Settings" } }, "create_from_template": { "title": "Select Template Category", "description": "Choose a category to browse predefined maintenance templates.", "data": { "template_category": "Category", "go_back": "Go back" }, "data_description": { "go_back": "Return to the main menu without saving." } }, "template_select": { "title": "Select Template", "description": "Choose a maintenance template to use as a starting point.", "data": { "template_id": "Template", "go_back": "Go back" }, "data_description": { "go_back": "Return to category selection without saving." } }, "template_customize": { "title": "Customize Template", "description": "Customize the {template_name} template. It includes {task_count} tasks: {task_list}.", "data": { "name": "Object name", "area_id": "Area", "manufacturer": "Manufacturer", "model": "Model", "serial_number": "Serial number", "documentation_url": "Manual / documentation URL", "notes": "Notes", "go_back": "Go back" }, "data_description": { "name": "A name for this maintenance object.", "area_id": "The area where this object is located.", "manufacturer": "The manufacturer of the object.", "model": "The model name or number.", "serial_number": "The serial number of the object.", "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.", "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.", "go_back": "Return to template selection without saving." } }, "global_setup": { "title": "Global Settings", "description": "Configure global maintenance settings.", "data": { "default_warning_days": "Default warning days before due", "notifications_enabled": "Enable notifications", "notify_service": "Notification service" }, "data_description": { "default_warning_days": "Number of days before a maintenance task is due to show a warning.", "notifications_enabled": "Send notifications when maintenance tasks become due.", "notify_service": "The notification service to use (e.g., notify.mobile_app_phone)." } }, "create_object": { "title": "Create Maintenance Object", "description": "Define a device or asset to manage maintenance for.", "data": { "name": "Object name", "area_id": "Area", "manufacturer": "Manufacturer", "model": "Model", "serial_number": "Serial number", "documentation_url": "Manual / documentation URL", "notes": "Notes", "installation_date": "Installation date", "warranty_expiry": "Warranty expiry", "go_back": "Go back" }, "data_description": { "name": "A unique name for this maintenance object (e.g., 'Pool Pump', 'Car').", "area_id": "The area in your home where this object is located.", "manufacturer": "The manufacturer of the object.", "model": "The model name or number.", "serial_number": "The serial number of the object.", "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.", "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.", "installation_date": "When this object was installed or purchased.", "warranty_expiry": "When the manufacturer warranty for this object expires.", "go_back": "Return to the main menu without saving." } }, "task_menu": { "title": "Maintenance Tasks", "description": "Add maintenance tasks for {object_name}. Currently {task_count} task(s) defined.", "menu_options": { "add_task": "Add Maintenance Task", "finish": "Finish Setup" } }, "add_task": { "title": "Add Maintenance Task", "description": "Define a maintenance task for {object_name}.", "data": { "name": "Task name", "type": "Maintenance type", "schedule_type": "Schedule type", "custom_icon": "Task icon", "go_back": "Go back" }, "data_description": { "name": "A descriptive name for this task (e.g., 'Filter Cleaning', 'Oil Change').", "type": "The category of maintenance work.", "schedule_type": "How this task should be scheduled.", "custom_icon": "Optional custom icon for this task (e.g., mdi:oil, mdi:filter-variant).", "go_back": "Return to the task menu without saving." } }, "time_based": { "title": "Time-based Schedule", "description": "Configure the time interval for this maintenance task.", "data": { "interval_days": "Interval", "interval_unit": "Interval unit", "interval_anchor": "Interval anchor", "last_performed": "Last performed", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "interval_days": "How often this maintenance repeats, combined with the interval unit.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "interval_anchor": "How the next due date is calculated after completion. 'Planned' prevents schedule drift by anchoring to the original due date.", "last_performed": "When this maintenance was last performed. Leave empty if never done.", "warning_days": "Number of days before due date to show a warning.", "go_back": "Return to task creation without saving." } }, "one_time": { "title": "One-time Task", "description": "Configure a single, non-recurring maintenance task. It is archived once completed.", "data": { "due_date": "Due date", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "due_date": "The date this one-time task is due.", "warning_days": "Number of days before the due date to show a warning.", "go_back": "Return to task creation without saving." } }, "calendar": { "title": "Calendar Schedule", "description": "Configure a calendar-based recurrence (weekdays, nth weekday of the month, or a day of the month).", "data": { "weekdays": "On these weekdays", "nth": "Which occurrence", "weekday": "Weekday", "day": "Day of month", "warning_days": "Warning days before due", "go_back": "Go back", "last_day": "Last day of the month", "business": "Business days only", "offset": "Offset (days)" }, "data_description": { "weekdays": "The task repeats on each selected weekday.", "nth": "Which occurrence in the month (e.g. 1st, or Last).", "weekday": "The weekday for the nth-weekday rule (e.g. Saturday).", "day": "Day of the month (1-31; clamped to the month's length).", "warning_days": "Number of days before the due date to show a warning.", "go_back": "Return to task creation without saving.", "last_day": "Overrides the day number: the task is due on the month's last day.", "business": "Roll a weekend date back to the preceding Friday (e.g. last business day).", "offset": "Shift the computed date by ±N days (e.g. -2 = two days before)." } }, "sensor_select": { "title": "Select Trigger Sensor", "description": "Choose a Home Assistant entity to monitor for this maintenance task.", "data": { "trigger_entity": "Entity to monitor", "go_back": "Go back" }, "data_description": { "trigger_entity": "Select the sensor entity that should trigger this maintenance task.", "go_back": "Return to task creation without saving." } }, "sensor_attribute": { "title": "Select Attribute", "description": "Choose which value to monitor from {entity_id}. Current state: {current_state} {unit}", "data": { "trigger_attribute": "Value to monitor", "go_back": "Go back" }, "data_description": { "trigger_attribute": "Select the entity state or a specific attribute to monitor.", "go_back": "Return to entity selection without saving." } }, "trigger_type": { "title": "Trigger Type", "description": "How should the sensor value trigger maintenance?", "data": { "trigger_type": "Trigger type", "go_back": "Go back" }, "data_description": { "trigger_type": "Threshold: triggers when value exceeds limits. Counter: triggers after accumulating a target value. State Change: triggers after a number of state transitions.", "go_back": "Return to attribute selection without saving." } }, "trigger_threshold": { "title": "Threshold Configuration", "description": "Set threshold values for **{entity_id}** ({attribute}).\nCurrent: **{current_value} {unit}** | Avg: {average} | Range: {minimum}–{maximum} ({data_period}d)\nSuggested above: {suggested_above} | Suggested below: {suggested_below}", "data": { "trigger_above": "Trigger when above", "trigger_below": "Trigger when below", "trigger_for_minutes": "For at least (minutes)", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_above": "Trigger maintenance when value exceeds this threshold.", "trigger_below": "Trigger maintenance when value falls below this threshold.", "trigger_for_minutes": "Value must exceed threshold for this many minutes before triggering.", "interval_days": "Optional time-based safety interval in addition to the sensor trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning.", "go_back": "Return to trigger type selection without saving." } }, "trigger_counter": { "title": "Counter Configuration", "description": "Set counter target for {entity_id} ({attribute}). Current: {current_value} {unit}.", "data": { "trigger_target_value": "Target value", "trigger_delta_mode": "Delta mode (count changes, not absolute)", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_target_value": "Trigger maintenance when this accumulated value is reached.", "trigger_delta_mode": "If enabled, counts the difference from a baseline instead of the absolute value.", "interval_days": "Optional time-based safety interval in addition to the counter trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning.", "go_back": "Return to trigger type selection without saving." } }, "trigger_state_change": { "title": "State Change Configuration", "description": "Count state transitions of {entity_id}.", "data": { "trigger_from_state": "From state (optional)", "trigger_to_state": "To state (optional)", "trigger_target_changes": "Number of changes to trigger", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_from_state": "Only count transitions from this state. Leave empty for any.", "trigger_to_state": "Only count transitions to this state. Leave empty for any.", "trigger_target_changes": "Number of matching state changes before triggering maintenance.", "interval_days": "Optional time-based safety interval in addition to the state change trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning.", "go_back": "Return to trigger type selection without saving." } }, "trigger_runtime": { "title": "Runtime Configuration", "description": "Track accumulated runtime of {entity_id}. Maintenance triggers when total on-time reaches the target hours.", "data": { "trigger_runtime_hours": "Target runtime (hours)", "trigger_on_states": "Active states (comma-separated)", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_runtime_hours": "Trigger maintenance after this many hours of accumulated runtime.", "trigger_on_states": "Which sensor states count as 'active'. Leave empty for default: on, 1, true. Example: in_use, running", "interval_days": "Optional time-based safety interval in addition to the runtime trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning.", "go_back": "Return to trigger type selection without saving." } }, "compound_logic": { "title": "Compound Trigger", "description": "Choose how multiple conditions should be combined.", "data": { "compound_logic": "Logic", "go_back": "Go back" }, "data_description": { "compound_logic": "AND = all conditions must trigger. OR = any condition triggers.", "go_back": "Return to trigger type selection without saving." } }, "compound_condition_entity": { "title": "Condition #{condition_num} — Entity", "description": "Select the entity for this condition.", "data": { "trigger_entity": "Entity", "go_back": "Go back" }, "data_description": { "trigger_entity": "The sensor entity to monitor for this condition.", "go_back": "Return to previous step without saving." } }, "compound_condition_type": { "title": "Condition #{condition_num} — Type", "description": "How should this condition evaluate the sensor?", "data": { "trigger_type": "Trigger type", "go_back": "Go back" }, "data_description": { "trigger_type": "The method used to determine when this condition triggers.", "go_back": "Return to entity selection without saving." } }, "compound_condition_threshold": { "title": "Condition — Threshold", "data": { "trigger_above": "Trigger above", "trigger_below": "Trigger below", "trigger_for_minutes": "Duration (minutes)", "go_back": "Go back" }, "data_description": { "trigger_above": "Trigger when value exceeds this threshold.", "trigger_below": "Trigger when value drops below this threshold.", "trigger_for_minutes": "Value must remain beyond threshold for this duration.", "go_back": "Return to condition type selection without saving." } }, "compound_condition_counter": { "title": "Condition — Counter", "data": { "trigger_target_value": "Target value", "trigger_delta_mode": "Delta mode", "go_back": "Go back" }, "data_description": { "trigger_target_value": "Trigger when accumulated value reaches this target.", "trigger_delta_mode": "Count changes from a baseline instead of the absolute value.", "go_back": "Return to condition type selection without saving." } }, "compound_condition_state_change": { "title": "Condition — State Change", "data": { "trigger_from_state": "From state", "trigger_to_state": "To state", "trigger_target_changes": "Number of changes", "go_back": "Go back" }, "data_description": { "trigger_from_state": "Only count transitions from this state. Leave empty for any.", "trigger_to_state": "Only count transitions to this state. Leave empty for any.", "trigger_target_changes": "Number of matching state changes before triggering.", "go_back": "Return to condition type selection without saving." } }, "compound_condition_runtime": { "title": "Condition — Runtime", "data": { "trigger_runtime_hours": "Target runtime (hours)", "trigger_on_states": "Active states", "go_back": "Go back" }, "data_description": { "trigger_runtime_hours": "Trigger after this many hours of accumulated runtime.", "trigger_on_states": "Sensor states counted as 'active'. Leave empty for default.", "go_back": "Return to condition type selection without saving." } }, "compound_review": { "title": "Compound Trigger Review", "description": "{condition_count} condition(s) configured with {compound_logic} logic.", "data": { "compound_action": "Action", "go_back": "Go back" }, "data_description": { "go_back": "Return to logic selection without saving." } }, "manual": { "title": "Manual Schedule", "description": "This task has no automatic schedule. You can mark it as due manually.", "data": { "warning_days": "Warning days before due", "notes": "Notes", "go_back": "Go back" }, "data_description": { "warning_days": "Number of days before due date to show a warning.", "notes": "Additional notes or instructions for this task.", "go_back": "Return to task creation without saving." } }, "reconfigure": { "title": "Reconfigure {name}", "description": "Update the settings for this maintenance object.", "data": { "name": "Object name", "area_id": "Area", "manufacturer": "Manufacturer", "model": "Model", "serial_number": "Serial number", "documentation_url": "Manual / documentation URL", "notes": "Notes", "installation_date": "Installation date", "warranty_expiry": "Warranty expiry" }, "data_description": { "name": "The name of this maintenance object.", "area_id": "The area where this object is located.", "manufacturer": "The manufacturer of this object.", "model": "The model of this object.", "serial_number": "The serial number of this object.", "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.", "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.", "installation_date": "When this object was installed.", "warranty_expiry": "When the manufacturer warranty for this object expires." } } }, "error": { "name_exists": "A maintenance object with this name already exists.", "no_tasks": "At least one maintenance task is required.", "invalid_entity": "The selected entity does not exist or has no numeric data.", "invalid_attribute": "The selected attribute is not available on this entity.", "invalid_threshold": "At least one threshold (above or below) must be set.", "invalid_interval": "Interval must be a positive number.", "invalid_due_date": "A due date is required for one-time tasks.", "min_exceeds_max": "Minimum interval must not exceed maximum interval.", "invalid_notify_service": "Invalid notification service format. Use 'notify.service_name' (e.g., notify.mobile_app_phone).", "notify_service_not_found": "This notification service was not found in Home Assistant. Please verify the service name.", "nfc_tag_duplicate": "This NFC tag is already linked to another task." }, "abort": { "already_configured": "This maintenance object is already configured.", "global_already_exists": "Global settings already configured.", "template_not_found": "The selected template was not found.", "missing_data": "Required data was not provided.", "reconfigure_successful": "Configuration updated successfully.", "reconfigure_cancelled": "Reconfiguration cancelled." } }, "options": { "step": { "init": { "title": "Maintenance Options", "description": "{object_info}", "menu_options": { "manage_tasks": "Manage Tasks", "add_task": "Add New Task", "object_settings": "Object Settings", "done": "Done" } }, "global_init": { "title": "Global Settings", "description": "Configure global maintenance settings.", "menu_options": { "general_settings": "General Settings", "advanced_features": "Advanced Features", "panel_access": "Panel Access", "budget_settings": "Budget Settings", "manage_groups": "Manage Groups", "notification_settings": "Notification Settings", "notification_actions": "Interactive Actions", "test_notification": "Send Test Notification", "done": "Done" } }, "advanced_features": { "title": "Advanced Features", "description": "Choose which advanced features to show in the UI. Disabling a feature hides it from the interface but does not delete any data.", "data": { "advanced_adaptive_visible": "Adaptive Scheduling", "advanced_predictions_visible": "Sensor Predictions", "advanced_seasonal_visible": "Seasonal Adjustments", "advanced_environmental_visible": "Environmental Correlation", "advanced_budget_visible": "Budget Tracking", "advanced_groups_visible": "Groups", "advanced_checklists_visible": "Checklists", "advanced_schedule_time_visible": "Time-of-day scheduling" }, "data_description": { "advanced_adaptive_visible": "Show EWA, Weibull analysis, and interval suggestions for tasks.", "advanced_predictions_visible": "Show sensor degradation analysis and threshold prediction charts.", "advanced_seasonal_visible": "Show seasonal factor charts and monthly adjustment data.", "advanced_environmental_visible": "Show environmental correlation (temperature, humidity) adjustments.", "advanced_budget_visible": "Show monthly/yearly budget tracking and alerts.", "advanced_groups_visible": "Show maintenance group management.", "advanced_checklists_visible": "Show task checklists for step-by-step completion.", "advanced_schedule_time_visible": "Allow tasks to become overdue at a specific time of day instead of midnight." } }, "panel_access": { "title": "Panel Access", "description": "Admins always have full access. To delegate create, edit and delete to specific non-admins, turn on the option below and select them — everyone else sees only Complete and Skip. Found {user_count} non-admin user(s).", "data": { "operator_write_enabled": "Allow selected users to create, edit and delete", "admin_panel_user_ids": "Users with full panel access" }, "data_description": { "operator_write_enabled": "Off (default): only admins can modify content. On: the users selected below also get full create/edit/delete access.", "admin_panel_user_ids": "Listed users see the full panel; everyone else sees only Complete and Skip on each task." } }, "general_settings": { "title": "General Settings", "description": "Configure basic settings for Maintenance Supporter.", "data": { "default_warning_days": "Default warning days before due", "notifications_enabled": "Enable notifications", "notify_service": "Notification service", "panel_enabled": "Show sidebar panel", "panel_title": "Sidebar panel title" }, "data_description": { "default_warning_days": "Number of days before a maintenance task is due to show a warning.", "notifications_enabled": "Send notifications when maintenance tasks become due or are overdue.", "notify_service": "The notification service to use (e.g., notify.mobile_app_phone).", "panel_enabled": "Show a Maintenance Supporter panel in the sidebar.", "panel_title": "Custom name for the sidebar entry. Leave blank to use \"Maintenance\". Useful to avoid clashing with Home Assistant's built-in Maintenance dashboard." } }, "notification_settings": { "title": "Notification Settings", "description": "Configure when and how often notifications are sent for each status.", "data": { "notify_due_soon_enabled": "Notify when due soon", "notify_due_soon_interval_hours": "Due soon reminder interval (hours)", "notify_overdue_enabled": "Notify when overdue", "notify_overdue_interval_hours": "Overdue reminder interval (hours)", "notify_triggered_enabled": "Notify when triggered", "notify_triggered_interval_hours": "Triggered reminder interval (hours)", "quiet_hours_enabled": "Enable quiet hours", "quiet_hours_start": "Quiet hours start", "quiet_hours_end": "Quiet hours end", "max_notifications_per_day": "Max notifications per day", "notification_bundling_enabled": "Bundle notifications", "notification_bundle_threshold": "Bundle threshold", "notification_title_style": "Notification title style" }, "data_description": { "notify_due_soon_interval_hours": "How often to repeat the due-soon reminder. Set to 0 for a single notification.", "notify_overdue_interval_hours": "How often to repeat the overdue reminder. Set to 0 for a single notification.", "notify_triggered_interval_hours": "How often to repeat the triggered notification. Set to 0 for a single notification.", "quiet_hours_enabled": "Suppress notifications during quiet hours.", "max_notifications_per_day": "Maximum number of notifications per day. Set to 0 for unlimited.", "notification_bundling_enabled": "Send a single summary notification when multiple tasks need attention.", "notification_bundle_threshold": "Minimum number of tasks to trigger a bundled notification.", "notification_title_style": "What appears as the notification's TITLE. Default keeps the per-status text (e.g. 'Maintenance overdue!'). Object name / Task name help when phone notifications stack." } }, "budget_settings": { "title": "Budget Settings", "description": "Set monthly and yearly maintenance budgets to track spending.", "data": { "budget_currency": "Currency", "budget_monthly": "Monthly budget", "budget_yearly": "Yearly budget", "budget_alerts_enabled": "Enable budget alerts", "budget_alert_threshold": "Alert threshold (%)" }, "data_description": { "budget_currency": "Currency used for budget display and notifications.", "budget_monthly": "Maximum monthly maintenance spending. Set to 0 to disable.", "budget_yearly": "Maximum yearly maintenance spending. Set to 0 to disable.", "budget_alerts_enabled": "Send a notification when spending exceeds the alert threshold.", "budget_alert_threshold": "Percentage of budget at which to send an alert." } }, "notification_actions": { "title": "Interactive Actions", "description": "Configure action buttons shown on mobile notifications (requires Companion App).", "data": { "action_complete_enabled": "Show 'Complete' button", "action_skip_enabled": "Show 'Skip' button", "action_snooze_enabled": "Show 'Snooze' button", "snooze_duration_hours": "Snooze duration (hours)" }, "data_description": { "action_complete_enabled": "Adds a button to mark the task as completed directly from the notification.", "action_skip_enabled": "Adds a button to skip the current maintenance cycle from the notification.", "action_snooze_enabled": "Adds a button to postpone the notification reminder.", "snooze_duration_hours": "How long to postpone notifications when snooze is pressed." } }, "test_notification": { "title": "Test Notification", "description": "{result}" }, "manage_groups": { "title": "Manage Groups", "description": "Select a group to manage or create a new one.", "data": { "selected_group": "Select group" } }, "add_group": { "title": "Add Group", "description": "Create a new maintenance group to organize related tasks.", "data": { "group_name": "Group name", "group_description": "Description" }, "data_description": { "group_name": "A name for this group (e.g., 'Spring Maintenance').", "group_description": "Optional description for this group." } }, "manage_tasks": { "title": "Manage Tasks", "description": "Select a task to edit or remove.", "data": { "selected_task": "Select task", "go_back": "Go back" } }, "task_action": { "title": "Task Actions", "description": "Task: {task_name} — Choose an action.\n\nNext due dates: {next_dates}", "menu_options": { "edit_task": "Edit Task", "edit_trigger": "Edit Trigger", "remove_trigger": "Remove Trigger", "edit_checklist": "Edit Checklist", "adaptive_scheduling": "Adaptive Scheduling", "delete_task": "Delete Task", "manage_tasks": "Back" } }, "edit_task": { "title": "Edit Task", "description": "Edit settings for **{task_name}**.", "data": { "name": "Task name", "type": "Maintenance type", "interval_days": "Interval", "interval_unit": "Interval unit", "due_date": "Due date", "interval_anchor": "Interval anchor", "warning_days": "Warning days before due", "enabled": "Enabled", "notes": "Notes", "documentation_url": "Documentation URL", "last_performed": "Last performed", "responsible_user_id": "Responsible user", "custom_icon": "Task icon", "nfc_tag_id": "NFC tag ID", "go_back": "Go back", "reading_unit": "Reading unit (for reading tasks, e.g. kWh)", "season_months": "Seasonal window (months)", "ends_count": "Ends after (number of times)", "ends_until": "Ends on date" }, "data_description": { "name": "A descriptive name for this task (e.g., 'Filter Cleaning', 'Oil Change').", "type": "The category of maintenance work.", "interval_days": "How often this maintenance repeats, combined with the interval unit.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "due_date": "The date this one-time task is due.", "interval_anchor": "How the next due date is calculated after completion. 'Planned' prevents schedule drift by anchoring to the original due date.", "warning_days": "Number of days before due date to show a warning.", "enabled": "When disabled, scheduling and triggers are paused. The task is not deleted.", "notes": "Additional notes or instructions for this task.", "documentation_url": "Link to external documentation or manual for this task.", "last_performed": "When this maintenance was last performed. Leave empty if never done.", "responsible_user_id": "The Home Assistant user responsible for this task.", "custom_icon": "Optional custom icon for this task (e.g., mdi:oil, mdi:filter-variant).", "nfc_tag_id": "Link an NFC tag to this task. Scanning the tag will automatically mark the task as completed.", "go_back": "Return to task actions without saving.", "season_months": "Only due in the selected months; off-season dates roll to the next active month. Leave empty for all year.", "ends_count": "Stop repeating after this many completions (a finite series). Leave empty for no limit.", "ends_until": "Stop repeating once the next occurrence would fall after this date. Ignored if 'Ends after' is set." } }, "edit_checklist": { "title": "Edit Checklist", "description": "Define checklist steps for {task_name}. Enter one step per line.", "data": { "checklist_text": "Checklist steps", "go_back": "Go back" }, "data_description": { "checklist_text": "Enter each checklist step on a separate line. These steps will be shown when completing the task.", "go_back": "Return to task actions without saving." } }, "delete_task": { "title": "Delete Task", "description": "Are you sure you want to delete the task {task_name}? This cannot be undone.", "data": { "confirm": "Confirm deletion", "go_back": "Go back" } }, "remove_trigger": { "title": "Remove Trigger", "description": "Remove trigger from **{task_name}**?\n\n**Entity:** {entity_ids}\n**Type:** {trigger_type}\n**Config:** {config_details}\n\nIf all entities are removed, the schedule will revert to time-based.", "data": { "entities_to_remove": "Entities to remove", "confirm": "Confirm removal", "go_back": "Go back" }, "data_description": { "entities_to_remove": "Select which entities to remove from this trigger. If all are removed, the entire trigger is deleted.", "go_back": "Return to task actions without saving." } }, "trigger_summary": { "title": "Current Trigger", "description": "Trigger for **{task_name}**:\n\n**Entity:** {entity_ids}\n**Current state:** {current_states}\n**Type:** {trigger_type} (attribute: {attribute})\n**Config:** {config_details}", "menu_options": { "edit_trigger_proceed": "Edit Trigger", "task_action": "Back" } }, "add_task": { "title": "Add Maintenance Task", "description": "Define a new maintenance task for this object.", "data": { "name": "Task name", "type": "Maintenance type", "schedule_type": "Schedule type", "custom_icon": "Task icon", "go_back": "Go back", "reading_unit": "Reading unit (for reading tasks, e.g. kWh)" }, "data_description": { "name": "A descriptive name for this task (e.g., 'Filter Cleaning', 'Oil Change').", "type": "The category of maintenance work.", "schedule_type": "How this task should be scheduled.", "custom_icon": "Optional custom icon for this task (e.g., mdi:oil, mdi:filter-variant).", "go_back": "Return to the main menu without saving." } }, "opt_time_based": { "title": "Time-based Schedule", "description": "Configure the time interval for this task.", "data": { "interval_days": "Interval", "interval_unit": "Interval unit", "interval_anchor": "Interval anchor", "last_performed": "Last performed", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "interval_days": "How often this maintenance repeats, combined with the interval unit.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "interval_anchor": "How the next due date is calculated after completion. 'Planned' prevents schedule drift by anchoring to the original due date.", "last_performed": "When this maintenance was last performed. Leave empty if never done.", "warning_days": "Number of days before due date to show a warning.", "go_back": "Return to the main menu without saving." } }, "opt_one_time": { "title": "One-time Task", "description": "Configure a single, non-recurring maintenance task. It is archived once completed.", "data": { "due_date": "Due date", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "due_date": "The date this one-time task is due.", "warning_days": "Number of days before the due date to show a warning.", "go_back": "Return to the main menu without saving." } }, "opt_calendar": { "title": "Calendar Schedule", "description": "Configure a calendar-based recurrence (weekdays, nth weekday of the month, or a day of the month).", "data": { "weekdays": "On these weekdays", "nth": "Which occurrence", "weekday": "Weekday", "day": "Day of month", "last_performed": "Last performed", "warning_days": "Warning days before due", "go_back": "Go back", "last_day": "Last day of the month", "business": "Business days only", "offset": "Offset (days)" }, "data_description": { "weekdays": "The task repeats on each selected weekday.", "nth": "Which occurrence in the month (e.g. 1st, or Last).", "weekday": "The weekday for the nth-weekday rule (e.g. Saturday).", "day": "Day of the month (1-31; clamped to the month's length).", "last_performed": "When this maintenance was last performed. Leave empty if never done.", "warning_days": "Number of days before the due date to show a warning.", "go_back": "Return to the main menu without saving.", "last_day": "Overrides the day number: the task is due on the month's last day.", "business": "Roll a weekend date back to the preceding Friday (e.g. last business day).", "offset": "Shift the computed date by ±N days (e.g. -2 = two days before)." } }, "opt_manual": { "title": "Manual Schedule", "description": "This task has no automatic schedule. You can mark it as due manually.", "data": { "warning_days": "Warning days before due", "notes": "Notes", "go_back": "Go back" }, "data_description": { "warning_days": "Number of days before due date to show a warning.", "notes": "Additional notes or instructions for this task.", "go_back": "Return to the main menu without saving." } }, "opt_sensor_select": { "title": "Select Trigger Sensor", "description": "Choose a Home Assistant entity to monitor.", "data": { "trigger_entity": "Entity to monitor", "go_back": "Go back" }, "data_description": { "trigger_entity": "Select the sensor entity that should trigger this maintenance task." } }, "opt_sensor_attribute": { "title": "Select Attribute", "description": "Choose which value to monitor from {entity_id}. Current state: {current_state} {unit}", "data": { "trigger_attribute": "Value to monitor", "go_back": "Go back" }, "data_description": { "trigger_attribute": "Select the entity state or a specific attribute to monitor." } }, "opt_trigger_type": { "title": "Trigger Type", "description": "How should the sensor value trigger maintenance?", "data": { "trigger_type": "Trigger type", "go_back": "Go back" }, "data_description": { "trigger_type": "Threshold: triggers when value exceeds limits. Counter: triggers after accumulating a target value. State Change: triggers after a number of state transitions." } }, "opt_trigger_threshold": { "title": "Threshold Configuration", "description": "Set threshold values for **{entity_id}** ({attribute}).\nCurrent: **{current_value} {unit}** | Avg: {average} | Range: {minimum}–{maximum} ({data_period}d)\nSuggested above: {suggested_above} | Suggested below: {suggested_below}", "data": { "trigger_above": "Trigger when above", "trigger_below": "Trigger when below", "trigger_for_minutes": "For at least (minutes)", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_above": "Trigger maintenance when value exceeds this threshold.", "trigger_below": "Trigger maintenance when value falls below this threshold.", "trigger_for_minutes": "Value must exceed threshold for this many minutes before triggering.", "interval_days": "Optional time-based safety interval in addition to the sensor trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning." } }, "opt_trigger_counter": { "title": "Counter Configuration", "description": "Set counter target for {entity_id} ({attribute}). Current: {current_value} {unit}.", "data": { "trigger_target_value": "Target value", "trigger_delta_mode": "Delta mode (count changes, not absolute)", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_target_value": "Trigger maintenance when this accumulated value is reached.", "trigger_delta_mode": "If enabled, counts the difference from a baseline instead of the absolute value.", "interval_days": "Optional time-based safety interval in addition to the counter trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning." } }, "opt_trigger_state_change": { "title": "State Change Configuration", "description": "Count state transitions of {entity_id}.", "data": { "trigger_from_state": "From state (optional)", "trigger_to_state": "To state (optional)", "trigger_target_changes": "Number of changes to trigger", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_from_state": "Only count transitions from this state. Leave empty for any.", "trigger_to_state": "Only count transitions to this state. Leave empty for any.", "trigger_target_changes": "Number of matching state changes before triggering maintenance.", "interval_days": "Optional time-based safety interval in addition to the state change trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning." } }, "opt_trigger_runtime": { "title": "Runtime Configuration", "description": "Track accumulated runtime of {entity_id}.", "data": { "trigger_runtime_hours": "Target runtime (hours)", "trigger_on_states": "Active states (comma-separated)", "interval_days": "Safety interval", "interval_unit": "Interval unit", "warning_days": "Warning days before due", "go_back": "Go back" }, "data_description": { "trigger_runtime_hours": "Trigger maintenance after this many hours of accumulated runtime.", "trigger_on_states": "Which sensor states count as 'active'. Leave empty for default: on, 1, true. Example: in_use, running", "interval_days": "Optional time-based safety interval in addition to the runtime trigger.", "interval_unit": "Unit for the interval: days, weeks, months or years. Months and years follow the calendar.", "warning_days": "Number of days before due date to show a warning." } }, "compound_logic": { "title": "Compound Trigger", "description": "Choose how multiple conditions should be combined.", "data": { "compound_logic": "Logic", "go_back": "Go back" }, "data_description": { "compound_logic": "AND = all conditions must trigger. OR = any condition triggers." } }, "compound_condition_entity": { "title": "Condition #{condition_num} — Entity", "description": "Select the entity for this condition.", "data": { "trigger_entity": "Entity", "go_back": "Go back" }, "data_description": { "trigger_entity": "The sensor entity to monitor for this condition." } }, "compound_condition_type": { "title": "Condition #{condition_num} — Type", "description": "How should this condition evaluate the sensor?", "data": { "trigger_type": "Trigger type", "go_back": "Go back" }, "data_description": { "trigger_type": "The method used to determine when this condition triggers." } }, "compound_condition_threshold": { "title": "Condition — Threshold", "data": { "trigger_above": "Trigger above", "trigger_below": "Trigger below", "trigger_for_minutes": "Duration (minutes)", "go_back": "Go back" }, "data_description": { "trigger_above": "Trigger when value exceeds this threshold.", "trigger_below": "Trigger when value drops below this threshold.", "trigger_for_minutes": "Value must remain beyond threshold for this duration." } }, "compound_condition_counter": { "title": "Condition — Counter", "data": { "trigger_target_value": "Target value", "trigger_delta_mode": "Delta mode", "go_back": "Go back" }, "data_description": { "trigger_target_value": "Trigger when accumulated value reaches this target.", "trigger_delta_mode": "Count changes from a baseline instead of the absolute value." } }, "compound_condition_state_change": { "title": "Condition — State Change", "data": { "trigger_from_state": "From state", "trigger_to_state": "To state", "trigger_target_changes": "Number of changes", "go_back": "Go back" }, "data_description": { "trigger_from_state": "Only count transitions from this state. Leave empty for any.", "trigger_to_state": "Only count transitions to this state. Leave empty for any.", "trigger_target_changes": "Number of matching state changes before triggering." } }, "compound_condition_runtime": { "title": "Condition — Runtime", "data": { "trigger_runtime_hours": "Target runtime (hours)", "trigger_on_states": "Active states", "go_back": "Go back" }, "data_description": { "trigger_runtime_hours": "Trigger after this many hours of accumulated runtime.", "trigger_on_states": "Sensor states counted as 'active'. Leave empty for default." } }, "compound_review": { "title": "Compound Trigger Review", "description": "{condition_count} condition(s) configured with {compound_logic} logic.", "data": { "compound_action": "Action", "go_back": "Go back" } }, "adaptive_scheduling": { "title": "Adaptive Scheduling", "description": "Configure smart interval adaptation for {task_name}. The system learns from your completion feedback to suggest better intervals.", "data": { "adaptive_enabled": "Enable adaptive scheduling", "ewa_alpha": "Learning rate (alpha)", "min_interval_days": "Minimum interval (days)", "max_interval_days": "Maximum interval (days)", "seasonal_enabled": "Enable seasonal awareness", "sensor_prediction_enabled": "Enable sensor-driven predictions", "environmental_entity": "Environmental sensor (optional)", "go_back": "Go back" }, "data_description": { "adaptive_enabled": "When enabled, the system will learn from your feedback and suggest optimal maintenance intervals.", "ewa_alpha": "How quickly the algorithm adapts to new data. Higher = more responsive, lower = more stable.", "min_interval_days": "The shortest interval the system will ever recommend.", "max_interval_days": "The longest interval the system will ever recommend.", "seasonal_enabled": "Adjust recommendations based on seasonal patterns learned from your maintenance history.", "sensor_prediction_enabled": "Analyze sensor trends to predict when thresholds will be reached and suggest earlier maintenance if needed.", "environmental_entity": "Link a temperature, humidity or pressure sensor to correlate environmental conditions with maintenance intervals.", "go_back": "Return to task actions without saving." } }, "object_settings": { "title": "Object Settings", "description": "Edit object details.", "data": { "name": "Object name", "manufacturer": "Manufacturer", "model": "Model", "serial_number": "Serial number", "documentation_url": "Manual / documentation URL", "notes": "Notes", "area_id": "Area", "installation_date": "Installation date", "warranty_expiry": "Warranty expiry", "go_back": "Go back" }, "data_description": { "name": "A unique name for this maintenance object (e.g., 'Pool Pump', 'Car').", "manufacturer": "The manufacturer of the object.", "model": "The model name or number.", "serial_number": "The serial number of the object.", "documentation_url": "Optional link to a PDF manual, vendor page, or any URL with reference info for this object.", "notes": "Free-form notes about the object — part numbers, procedures, settings reminders, etc.", "area_id": "The area in your home where this object is located.", "installation_date": "When this object was installed or purchased.", "warranty_expiry": "When the manufacturer warranty for this object expires.", "go_back": "Return to the main menu without saving." } } } }, "entity": { "button": { "button_complete": { "name": "{task_name} Complete" }, "button_skip": { "name": "{task_name} Skip" }, "button_reset": { "name": "{task_name} Reset" } }, "sensor": { "maintenance_task": { "name": "{task_name}", "state": { "ok": "OK", "due_soon": "Due Soon", "overdue": "Overdue", "triggered": "Triggered", "archived": "Archived", "paused": "Paused" }, "state_attributes": { "maintenance_type": { "name": "Maintenance type", "state": { "cleaning": "Cleaning", "inspection": "Inspection", "replacement": "Replacement", "calibration": "Calibration", "service": "Service", "reading": "Reading", "custom": "Custom" } }, "schedule_type": { "name": "Schedule type", "state": { "time_based": "Time-based", "sensor_based": "Sensor-based", "one_time": "One-time", "manual": "Manual" } }, "interval_days": { "name": "Interval" }, "interval_unit": { "name": "Interval unit" }, "interval_anchor": { "name": "Interval anchor", "state": { "completion": "From completion", "planned": "From planned date" } }, "due_date": { "name": "Due date" }, "warning_days": { "name": "Warning days" }, "last_performed": { "name": "Last performed" }, "next_due": { "name": "Next due" }, "days_until_due": { "name": "Days until due" }, "parent_object": { "name": "Parent object" }, "times_performed": { "name": "Times performed" }, "total_cost": { "name": "Total cost" }, "average_duration": { "name": "Average duration (min)" }, "notes": { "name": "Notes" }, "documentation_url": { "name": "Documentation URL" }, "trigger_entity": { "name": "Trigger entity" }, "trigger_attribute": { "name": "Trigger attribute" }, "trigger_type": { "name": "Trigger type", "state": { "threshold": "Threshold", "counter": "Counter", "state_change": "State change", "runtime": "Runtime", "compound": "Compound" } }, "trigger_active": { "name": "Trigger active" }, "trigger_current_value": { "name": "Trigger current value" }, "trigger_entity_state": { "name": "Trigger entity state", "state": { "available": "Available", "unavailable": "Unavailable", "missing": "Missing", "startup": "Startup" } }, "trigger_above": { "name": "Trigger above" }, "trigger_below": { "name": "Trigger below" }, "trigger_for_minutes": { "name": "Trigger for (minutes)" }, "trigger_target_value": { "name": "Trigger target value" }, "trigger_delta_mode": { "name": "Trigger delta mode" }, "trigger_baseline_value": { "name": "Trigger baseline value" }, "trigger_current_delta": { "name": "Trigger current delta" }, "trigger_from_state": { "name": "Trigger from state" }, "trigger_to_state": { "name": "Trigger to state" }, "trigger_target_changes": { "name": "Trigger target changes" }, "trigger_change_count": { "name": "Trigger change count" }, "trigger_runtime_hours": { "name": "Target runtime (hours)" }, "trigger_accumulated_hours": { "name": "Accumulated runtime (hours)" }, "trigger_remaining_hours": { "name": "Remaining runtime (hours)" }, "last_entry": { "name": "Last entry" }, "suggested_interval": { "name": "Suggested interval" }, "interval_confidence": { "name": "Interval confidence", "state": { "low": "Low", "medium": "Medium", "high": "High" } }, "adaptive_scheduling_enabled": { "name": "Adaptive scheduling enabled" }, "seasonal_factor": { "name": "Seasonal factor" }, "seasonal_reason": { "name": "Seasonal reason", "state": { "learned": "Learned", "manual": "Manual" } }, "degradation_rate": { "name": "Degradation rate" }, "degradation_trend": { "name": "Degradation trend", "state": { "rising": "Rising", "falling": "Falling", "stable": "Stable", "insufficient_data": "Insufficient data" } }, "days_until_threshold": { "name": "Days until threshold" }, "threshold_prediction_confidence": { "name": "Prediction confidence", "state": { "low": "Low", "medium": "Medium", "high": "High" } }, "environmental_factor": { "name": "Environmental factor" }, "environmental_entity": { "name": "Environmental entity" }, "weibull_beta": { "name": "Weibull shape (β)" }, "weibull_eta": { "name": "Weibull scale (η)" }, "weibull_r_squared": { "name": "Weibull R²" }, "weibull_beta_interpretation": { "name": "Failure pattern", "state": { "early_failures": "Early failures", "random_failures": "Random failures", "wear_out": "Wear-out", "highly_predictable": "Highly predictable" } }, "confidence_interval_low": { "name": "Confidence interval (low)" }, "confidence_interval_high": { "name": "Confidence interval (high)" } } }, "summary_overdue": { "name": "Overdue" }, "summary_due_soon": { "name": "Due Soon" }, "summary_triggered": { "name": "Triggered" }, "summary_needs_attention": { "name": "Needs attention" }, "summary_ok": { "name": "OK" }, "document_storage": { "name": "Document storage" }, "summary_total_tasks": { "name": "Total tasks" }, "next_due": { "name": "{task_name} Next due" }, "parts_to_reorder": { "name": "Parts to reorder" }, "batteries_to_replace": { "name": "Batteries to replace" } }, "binary_sensor": { "maintenance_task_due": { "name": "{task_name} overdue", "state_attributes": { "maintenance_status": { "name": "Maintenance status", "state": { "ok": "OK", "due_soon": "Due Soon", "overdue": "Overdue", "triggered": "Triggered", "archived": "Archived" } }, "days_until_due": { "name": "Days until due" }, "next_due": { "name": "Next due" }, "parent_object": { "name": "Parent object" } } } }, "calendar": { "maintenance_schedule": { "name": "Maintenance Schedule" } }, "todo": { "maintenance_todo": { "name": "Maintenance" } } }, "services": { "complete": { "name": "Complete Maintenance", "description": "Mark a maintenance task as completed.", "fields": { "entity_id": { "name": "Entity", "description": "The maintenance sensor entity to complete." }, "notes": { "name": "Notes", "description": "Optional notes about the maintenance performed." }, "cost": { "name": "Cost", "description": "Cost of the maintenance performed." }, "duration": { "name": "Duration", "description": "Duration of the maintenance in minutes." }, "reading_value": { "name": "Reading value", "description": "Recorded value for reading-type tasks (meter reading, level check)." } } }, "reset": { "name": "Reset Maintenance", "description": "Reset the last performed date of a maintenance task.", "fields": { "entity_id": { "name": "Entity", "description": "The maintenance sensor entity to reset." }, "date": { "name": "Date", "description": "The date to set as last performed. Defaults to today." } } }, "skip": { "name": "Skip Maintenance", "description": "Skip the current maintenance cycle.", "fields": { "entity_id": { "name": "Entity", "description": "The maintenance sensor entity to skip." }, "reason": { "name": "Reason", "description": "Optional reason for skipping the maintenance." } } }, "export_data": { "name": "Export Data", "description": "Export all maintenance data as JSON or YAML.", "fields": { "format": { "name": "Format", "description": "Output format for the exported data (json or yaml)." }, "include_history": { "name": "Include History", "description": "Whether to include task history entries in the export." } } }, "add_object": { "name": "Add Object", "description": "Create a new maintenance object (device). Returns the new entry_id.", "fields": { "name": { "name": "Name", "description": "Name of the object/device." }, "area_id": { "name": "Area", "description": "Area to assign the device to." }, "manufacturer": { "name": "Manufacturer" }, "model": { "name": "Model" }, "serial_number": { "name": "Serial number" }, "installation_date": { "name": "Installation date" }, "warranty_expiry": { "name": "Warranty expiry", "description": "Warranty expiry date (used for asset tracking and reminders)." }, "documentation_url": { "name": "Documentation URL", "description": "Link to a manual or vendor page (http/https only)." }, "notes": { "name": "Notes" } } }, "add_task": { "name": "Add Task", "description": "Add a maintenance task to an existing object. Returns the new task_id.", "fields": { "entry_id": { "name": "Object", "description": "The maintenance object to add the task to." }, "name": { "name": "Name", "description": "Name of the task." }, "task_type": { "name": "Task type", "description": "Free-form category (e.g. inspection, service, custom)." }, "schedule_type": { "name": "Schedule type", "description": "time_based (interval) or sensor_based. Default: time_based." }, "interval_days": { "name": "Interval", "description": "Interval length between occurrences (for time-based tasks), combined with interval_unit." }, "interval_unit": { "name": "Interval unit", "description": "Unit for the interval: days, weeks, months or years. Default: days." }, "due_date": { "name": "Due date", "description": "Due date (YYYY-MM-DD) for a one-time task (schedule_type one_time)." }, "schedule": { "name": "Calendar schedule", "description": "Nested recurrence for the calendar kinds, e.g. kind=nth_weekday, nth=1, weekday=5 for the 1st Saturday (weekday 0=Mon ... 6=Sun), kind=weekdays, weekdays=[0, 3] for Mon & Thu, or kind=day_of_month, day=15. Takes precedence over interval_days / schedule_type." }, "warning_days": { "name": "Warning (days)", "description": "Days before due to enter the due-soon window." }, "enabled": { "name": "Enabled" }, "notes": { "name": "Notes" } } }, "update_task": { "name": "Update Task", "description": "Update the common fields of an existing maintenance task. Only the provided fields change.", "fields": { "entry_id": { "name": "Object", "description": "The maintenance object the task belongs to." }, "task_id": { "name": "Task ID", "description": "The id of the task to update (see list_tasks)." }, "name": { "name": "Name", "description": "New name of the task." }, "task_type": { "name": "Task type", "description": "Category (cleaning, inspection, replacement, calibration, service, reading, custom)." }, "schedule_type": { "name": "Schedule type", "description": "time_based (interval), sensor_based, one_time or manual." }, "interval_days": { "name": "Interval", "description": "Interval length between occurrences, combined with interval_unit." }, "interval_unit": { "name": "Interval unit", "description": "days, weeks, months or years." }, "due_date": { "name": "Due date", "description": "Due date for one-time tasks (YYYY-MM-DD)." }, "schedule": { "name": "Schedule (calendar recurrence)", "description": "Nested recurrence object for the calendar kinds, e.g. kind=day_of_month, day=-1, business=true. Takes precedence over the flat fields." }, "warning_days": { "name": "Warning days", "description": "Days before due when the task turns due-soon." }, "enabled": { "name": "Enabled", "description": "Whether the task is active." }, "notes": { "name": "Notes", "description": "Free-form notes on the task." }, "priority": { "name": "Priority", "description": "low, normal or high." }, "labels": { "name": "Labels", "description": "List of tags for filtering and reporting." } } }, "delete_task": { "name": "Delete Task", "description": "Delete a maintenance task including its history. This cannot be undone - consider archiving via the panel instead.", "fields": { "entry_id": { "name": "Object", "description": "The maintenance object the task belongs to." }, "task_id": { "name": "Task ID", "description": "The id of the task to delete (see list_tasks)." } } }, "list_tasks": { "name": "List Tasks", "description": "Return a snapshot of active maintenance tasks (id, name, status, next due) for automations, scripts and voice. Supports filtering by object and status.", "fields": { "entry_id": { "name": "Object", "description": "Only return tasks of this maintenance object." }, "status": { "name": "Status", "description": "Only return tasks with this status." } } } }, "selector": { "maintenance_type": { "options": { "cleaning": "Cleaning", "inspection": "Inspection", "replacement": "Replacement", "calibration": "Calibration", "service": "Service", "reading": "Reading", "custom": "Custom" } }, "schedule_type": { "options": { "time_based": "Time-based", "weekdays": "Weekdays", "nth_weekday": "Nth weekday of month", "day_of_month": "Day of month", "sensor_based": "Sensor-based", "one_time": "One-time", "manual": "Manual" } }, "interval_unit": { "options": { "days": "Days", "weeks": "Weeks", "months": "Months", "years": "Years" } }, "trigger_type": { "options": { "threshold": "Threshold", "counter": "Counter", "state_change": "State Change", "runtime": "Runtime", "compound": "Compound (Multiple Conditions)" } }, "compound_logic": { "options": { "and": "AND (all conditions must trigger)", "or": "OR (any condition triggers)" } }, "entity_logic": { "options": { "any": "Any entity triggers", "all": "All entities must trigger" } }, "notification_title_style": { "options": { "default": "Default (per-status title)", "object_name": "Object name as title", "task_name": "Task name as title" } } }, "issues": { "missing_global_entry": { "title": "Maintenance Supporter global configuration is missing", "fix_flow": { "step": { "init": { "title": "Restore the global configuration", "description": "Your maintenance objects still exist, but the global \"Maintenance Supporter\" entry was deleted — so the summary sensors, the sidebar panel and the dashboard counts are gone, and the KPI chips read \"unknown\".\n\nClick **Submit** to recreate the global configuration with default settings. Your objects and tasks are left untouched. You can adjust notifications and defaults afterwards under Settings → Devices & Services.\n\n(To leave things as they are, use Home Assistant's **Ignore** button.)" } } } }, "document_storage_issues": { "title": "Document storage needs cleanup", "fix_flow": { "step": { "init": { "title": "Reclaim document storage", "description": "Maintenance Supporter found unreferenced files and/or dead records in document storage — usually the aftermath of a crash, an external file deletion, or a partial restore.\n\nClick **Submit** to reclaim the space: unreferenced and stale files are deleted and dead document records are removed. Files still referenced by a document are never touched.\n\n(To dismiss without cleaning up, use Home Assistant's **Ignore** button on the Repairs page.)" } } } }, "missing_trigger_entity": { "title": "Trigger sensor not found: {task_name}", "fix_flow": { "step": { "init": { "title": "Missing trigger entity", "description": "The sensor entity `{entity_id}` configured as trigger for task \"{task_name}\" on object \"{object_name}\" is no longer available.\n\nChoose how to resolve this issue:", "menu_options": { "replace_entity": "Replace with a different entity", "remove_trigger": "Remove the sensor trigger", "dismiss": "Dismiss (will reappear)" } }, "replace_entity": { "title": "Replace trigger entity", "description": "Select a new entity to replace `{entity_id}` as trigger for task \"{task_name}\" on \"{object_name}\".", "data": { "new_entity_id": "New trigger entity" }, "data_description": { "new_entity_id": "Select the new sensor entity to use as trigger." } }, "remove_trigger": { "title": "Remove sensor trigger", "description": "This will remove the sensor trigger from task \"{task_name}\" on \"{object_name}\" and convert the schedule to time-based or manual. The maintenance history will be preserved.\n\nPrevious trigger entity: `{entity_id}`" } } } }, "orphan_admin_panel_user": { "title": "Panel-access user no longer exists", "fix_flow": { "step": { "init": { "title": "Orphaned user in panel-access list", "description": "User `{user_id}…` is in the Maintenance Supporter panel-access list but no longer exists in Home Assistant. Probably the user was deleted.\n\nClick **Submit** to remove this user from the list. (To leave the issue alone, use Home Assistant's **Ignore** button on the Repairs page instead.)" } } } }, "stale_action_entity": { "title": "Completion action references a deleted entity", "fix_flow": { "step": { "init": { "title": "Completion action: {stale_entity} no longer exists", "description": "The task **{task_name}** has an `on_complete_action` configured to call a service on `{stale_entity}`, but that entity is no longer registered in Home Assistant.\n\nChoose how to repair:", "menu_options": { "replace_entity": "Replace with a different entity", "remove_action": "Remove the completion action" } }, "replace_entity": { "title": "Replace target entity", "description": "Pick the entity to use instead of `{stale_entity}` for task **{task_name}**.", "data": { "new_entity": "New target entity" } }, "remove_action": { "title": "Remove completion action", "description": "Clear the `on_complete_action` from task **{task_name}** entirely. The task itself is unaffected — only the on-complete service-call is removed." } } } }, "notify_service_missing": { "title": "Notification service `{service}` not found", "description": "Maintenance Supporter is configured to send notifications via `{service}`, but that service does not currently exist in Home Assistant, so reminders fail silently.\n\nThis usually means the service was renamed, or the integration behind it (a mobile app, a notify group, …) was removed. To fix it: restore that service, or open **Settings → Devices & Services → Maintenance Supporter → Configure → General settings** and pick a valid `notify.*` service.\n\nNote: this only checks the configured service itself. If notifications reach some devices but not others, a member *inside* your notify group is likely misconfigured — that is not visible here; check Home Assistant's **system log** (Settings → System → Logs)." } }, "exceptions": { "no_coordinator_for_entity": { "message": "No maintenance coordinator found for entity {entity_id}." }, "no_task_for_entity": { "message": "No maintenance task found for entity {entity_id}." } }, "triggers": { "task_became_overdue": { "name": "A maintenance task became overdue", "description": "Triggers when a maintenance task's status changes to overdue.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } }, "task_became_due_soon": { "name": "A maintenance task became due soon", "description": "Triggers when a maintenance task enters its warning window.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } }, "sensor_trigger_activated": { "name": "A sensor trigger activated", "description": "Triggers when a sensor-based maintenance task activates.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } }, "task_became_ok": { "name": "A maintenance task returned to OK", "description": "Triggers when a maintenance task no longer needs attention.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } } }, "conditions": { "task_is_overdue": { "name": "A maintenance task is overdue", "description": "Tests if a maintenance task is overdue.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } }, "task_is_due_soon": { "name": "A maintenance task is due soon", "description": "Tests if a maintenance task is in its warning window.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } }, "task_is_triggered": { "name": "A sensor trigger is active", "description": "Tests if a sensor-based maintenance task is triggered.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } }, "task_needs_attention": { "name": "A maintenance task needs attention", "description": "Tests if a maintenance task is overdue or triggered.", "fields": { "behavior": { "name": "Behavior" }, "for": { "name": "For" } } } } }