{ "config": { "step": { "user": { "title": "Configuração WashData", "description": "Configure a sua máquina de lavar ou outro electrodoméstico.\n\nÉ necessário um sensor de potência.\n\n**De seguida, ser-lhe-á perguntado se deseja criar o seu primeiro perfil.**", "data": { "name": "Nome do dispositivo", "device_type": "Tipo de dispositivo", "power_sensor": "Sensor de potência", "min_power": "Limiar mínimo de potência (W)" }, "data_description": { "name": "Um nome descritivo para este dispositivo (por exemplo, 'Máquina de lavar', 'Máquina de lavar loiça').", "device_type": "Que tipo de electrodoméstico é este? Ajuda a personalizar a detecção e a rotulagem.", "power_sensor": "A entidade do sensor que reporta o consumo de energia em tempo real (em watts) da sua tomada inteligente.", "min_power": "Leituras de potência acima deste limiar (em watts) indicam que o electrodoméstico está a funcionar. Comece com 2W para a maioria dos dispositivos." } }, "first_profile": { "title": "Criar primeiro perfil", "description": "Um **Ciclo** é uma operação completa do seu electrodoméstico (por exemplo, uma carga de roupa). Um **Perfil** agrupa esses ciclos por tipo (por exemplo, 'Algodão', 'Lavagem Rápida'). Criar um perfil agora ajuda a integração a estimar a duração de imediato.\n\nPode seleccionar manualmente este perfil nos controlos do dispositivo se não for detectado automaticamente.\n\n**Deixe 'Nome do perfil' em branco para ignorar este passo.**", "data": { "profile_name": "Nome do perfil (opcional)", "manual_duration": "Duração estimada (minutos)" } } }, "error": { "cannot_connect": "Falha ao ligar", "invalid_auth": "Autenticação inválida", "unknown": "Erro inesperado" }, "abort": { "already_configured": "O dispositivo já está configurado" } }, "options": { "step": { "init": { "menu_options": { "learning_feedbacks": "Rever feedbacks de aprendizagem", "settings": "Definições", "notifications": "Notificações", "manage_cycles": "Gerir ciclos", "manage_profiles": "Gerir perfis", "manage_phase_catalog": "Gerir catálogo de fases", "record_cycle": "Gravar ciclo (manual)", "diagnostics": "Diagnóstico e manutenção" } }, "apply_suggestions": { "title": "Copiar valores sugeridos", "description": "Isto copiará os valores sugeridos actuais para as suas Definições guardadas. Esta é uma acção única e não activa substituições automáticas.\n\nValores sugeridos a copiar:\n{suggested}", "data": { "confirm": "Confirmar acção de cópia" } }, "apply_suggestions_confirm": { "title": "Rever alterações sugeridas", "description": "WashData encontrou **{pending_count}** valores sugeridos para aplicação.\n\nMudanças:\n{changes}\n\n✅ Marque a caixa abaixo e clique em **Enviar** para aplicar e salvar essas alterações imediatamente.\n❌ Deixe desmarcado e clique em **Enviar** para cancelar e voltar.", "data": { "confirm_apply_suggestions": "Aplicar e salvar essas alterações" } }, "settings": { "title": "Definições", "description": "{deprecation_warning}Ajuste os limiares de detecção, aprendizagem e comportamento avançado. As predefinições funcionam bem para a maioria das configurações.\n\nDefinições sugeridas disponíveis: {suggestions_count}.\nSe for acima de 0, abra as Definições avançadas e use Aplicar valores sugeridos para rever as recomendações.", "data": { "apply_suggestions": "Aplicar valores sugeridos", "device_type": "Tipo de dispositivo", "power_sensor": "Entidade do sensor de potência", "min_power": "Potência mínima (W)", "off_delay": "Atraso de fim de ciclo (s)", "notify_actions": "Acções de notificação", "notify_people": "Atrasar envio até estas pessoas estarem em casa", "notify_only_when_home": "Atrasar notificações até a pessoa seleccionada estar em casa", "notify_fire_events": "Acionar eventos de automatização", "notify_start_services": "Início do Ciclo - Alvos de Notificação", "notify_finish_services": "Término do Ciclo - Alvos de Notificação", "notify_live_services": "Progresso ao vivo – metas de notificação", "notify_before_end_minutes": "Notificação prévia à conclusão (minutos antes do fim)", "notify_title": "Título da notificação", "notify_icon": "Ícone de notificação", "notify_start_message": "Formato da mensagem de início", "notify_finish_message": "Formato da mensagem de conclusão", "notify_pre_complete_message": "Formato da mensagem pré-conclusão", "show_advanced": "Editar definições avançadas (próximo passo)" }, "data_description": { "apply_suggestions": "Assinale esta caixa para copiar os valores sugeridos pelo algoritmo de aprendizagem para o formulário. Reveja antes de guardar.\n\nSugerido (por aprendizagem):\n- min_power: {suggested_min_power} W\n- off_delay: {suggested_off_delay} s\n- watchdog_interval: {suggested_watchdog_interval} s\n- no_update_active_timeout: {suggested_no_update_active_timeout} s\n- profile_match_interval: {suggested_profile_match_interval} s\n- auto_label_confidence: {suggested_auto_label_confidence}\n- duration_tolerance: {suggested_duration_tolerance}\n- profile_duration_tolerance: {suggested_profile_duration_tolerance}\n- profile_match_min_duration_ratio: {suggested_profile_match_min_duration_ratio}\n- profile_match_max_duration_ratio: {suggested_profile_match_max_duration_ratio}\n- start_threshold_w: {suggested_start_threshold_w} W\n- stop_threshold_w: {suggested_stop_threshold_w} W\n- end_energy_threshold: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}", "device_type": "Seleccione o tipo de electrodoméstico (Máquina de lavar, Secadora, Máquina de lavar loiça, Máquina de café, VE). Esta etiqueta é guardada em cada ciclo para melhor organização.", "power_sensor": "A entidade do sensor que reporta a potência em tempo real (em watts). Pode alterar isto a qualquer momento sem perder dados históricos - útil se substituir uma tomada inteligente.", "min_power": "Leituras de potência acima deste limiar (em watts) indicam que o electrodoméstico está a funcionar. Comece com 2W para a maioria dos dispositivos.", "off_delay": "Segundos em que a potência suavizada deve permanecer abaixo do limiar de paragem para marcar a conclusão. Predefinição: 120s.", "notify_actions": "Sequência de acções opcional do Home Assistant para executar nas notificações (scripts, notify, TTS, etc.). Se definido, as acções são executadas antes do serviço de notificação de fallback.", "notify_people": "Entidades de pessoas utilizadas para controlo de presença. Quando activado, o envio de notificações é adiado até pelo menos uma pessoa seleccionada estar em casa.", "notify_only_when_home": "Se activado, adia as notificações até pelo menos uma pessoa seleccionada estar em casa.", "notify_fire_events": "Se activado, aciona eventos do Home Assistant para início e fim de ciclo (ha_washdata_cycle_started e ha_washdata_cycle_ended) para conduzir automatizações.", "notify_start_services": "Um ou mais serviços de notificação para alertar quando um ciclo começa. Deixe em branco para pular as notificações de início.", "notify_finish_services": "Um ou mais serviços de notificação para alertar quando um ciclo termina ou está próximo da conclusão. Deixe em branco para pular as notificações de conclusão.", "notify_live_services": "Um ou mais serviços de notificação para receber atualizações de progresso ao vivo enquanto o ciclo é executado (somente aplicativo complementar móvel). Deixe em branco para pular as atualizações ao vivo.", "notify_before_end_minutes": "Minutos antes do fim estimado do ciclo para acionar uma notificação. Defina como 0 para desactivar. Predefinição: 0.", "notify_title": "Título personalizado para notificações. Suporta o marcador de posição {device}.", "notify_icon": "Ícone a utilizar nas notificações (ex.: mdi:washing-machine). Deixe em branco para enviar sem ícone.", "notify_start_message": "Mensagem enviada quando um ciclo começa. Suporta o marcador de posição {device}.", "notify_finish_message": "Mensagem enviada quando um ciclo termina. Suporta os marcadores de posição {device}, {duration}, {program}, {energy_kwh}, {cost}.", "notify_pre_complete_message": "Texto das atualizações recorrentes do progresso ao vivo enquanto o ciclo é executado. Suporta marcadores de posição {device}, {minutes}, {program}." } }, "notifications": { "title": "Notificações", "description": "Configure canais de notificação, modelos e actualizações opcionais de progresso em tempo real no telemóvel.", "data": { "notify_actions": "Acções de notificação", "notify_people": "Atrasar envio até estas pessoas estarem em casa", "notify_only_when_home": "Atrasar notificações até a pessoa seleccionada estar em casa", "notify_fire_events": "Acionar eventos de automatização", "notify_start_services": "Início do Ciclo - Alvos de Notificação", "notify_finish_services": "Término do Ciclo - Alvos de Notificação", "notify_live_services": "Progresso ao vivo – metas de notificação", "notify_before_end_minutes": "Notificação prévia à conclusão (minutos antes do fim)", "notify_live_interval_seconds": "Intervalo de actualização em tempo real (segundos)", "notify_live_overrun_percent": "Tolerância de excesso de actualizações em tempo real (%)", "notify_live_chronometer": "Temporizador de contagem regressiva do cronômetro", "notify_title": "Título da notificação", "notify_icon": "Ícone de notificação", "notify_start_message": "Formato da mensagem de início", "notify_finish_message": "Formato da mensagem de conclusão", "notify_pre_complete_message": "Formato da mensagem pré-conclusão", "energy_price_entity": "Preço da Energia - Entidade (opcional)", "energy_price_static": "Preço da Energia - Valor estático (opcional)", "go_back": "Voltar sem guardar", "notify_reminder_message": "Formato de mensagem de lembrete", "notify_timeout_seconds": "Dispensar automaticamente após (segundos)", "notify_channel": "Canal de notificação (status/ao vivo/lembrete)", "notify_finish_channel": "Canal de Notificação Concluído" }, "data_description": { "go_back": "Assinale esta opção e clique em Submeter para descartar quaisquer alterações acima e voltar ao menu principal.", "notify_actions": "Sequência de acções opcional do Home Assistant para executar nas notificações (scripts, notify, TTS, etc.). Se definido, as acções são executadas antes do serviço de notificação de fallback.", "notify_people": "Entidades de pessoas utilizadas para controlo de presença. Quando activado, o envio de notificações é adiado até pelo menos uma pessoa seleccionada estar em casa.", "notify_only_when_home": "Se activado, adia as notificações até pelo menos uma pessoa seleccionada estar em casa.", "notify_fire_events": "Se activado, aciona eventos do Home Assistant para início e fim de ciclo (ha_washdata_cycle_started e ha_washdata_cycle_ended) para conduzir automatizações.", "notify_start_services": "Um ou mais serviços de notificação para alertar quando um ciclo começa (por exemplo, notify.mobile_app_my_phone). Deixe em branco para pular as notificações de início.", "notify_finish_services": "Um ou mais serviços de notificação para alertar quando um ciclo termina ou está próximo da conclusão. Deixe em branco para pular as notificações de conclusão.", "notify_live_services": "Um ou mais serviços de notificação para receber atualizações de progresso ao vivo enquanto o ciclo é executado (somente aplicativo complementar móvel). Deixe em branco para pular as atualizações ao vivo.", "notify_before_end_minutes": "Minutos antes do fim estimado do ciclo para acionar uma notificação. Defina como 0 para desactivar. Predefinição: 0.", "notify_live_interval_seconds": "Com que frequência as actualizações de progresso são enviadas durante o funcionamento. Valores mais baixos são mais reactivos mas consomem mais notificações. É imposto um mínimo de 30 segundos - valores abaixo de 30 s são automaticamente arredondados para 30 s.", "notify_live_overrun_percent": "Margem de segurança acima da contagem estimada de actualizações para ciclos longos ou que excedam o previsto (por exemplo, 20% permite 1,2× as actualizações estimadas).", "notify_live_chronometer": "Quando ativado, cada atualização ao vivo inclui uma contagem regressiva do cronômetro até o tempo estimado de término. O cronômetro de notificação diminui automaticamente no dispositivo entre as atualizações (somente aplicativo complementar para Android).", "notify_title": "Título personalizado para notificações. Suporta o marcador de posição {device}.", "notify_icon": "Ícone a utilizar nas notificações (ex.: mdi:washing-machine). Deixe em branco para enviar sem ícone.", "notify_start_message": "Mensagem enviada quando um ciclo começa. Suporta o marcador de posição {device}.", "notify_finish_message": "Mensagem enviada quando um ciclo termina. Suporta os marcadores de posição {device}, {duration}, {program}, {energy_kwh}, {cost}.", "energy_price_entity": "Selecione uma entidade numérica que contenha o preço atual da eletricidade (por exemplo, sensor.electricity_price, input_number.energy_rate). Quando definido, ativa o espaço reservado {cost}. Tem precedência sobre o valor estático se ambos estiverem configurados.", "energy_price_static": "Preço fixo da eletricidade por kWh. Quando definido, ativa o espaço reservado {cost}. Ignorado se uma entidade estiver configurada acima. Adicione o símbolo da sua moeda no modelo de mensagem, por exemplo. {cost} €.", "notify_reminder_message": "O texto do lembrete único enviou o número configurado de minutos antes do término estimado. Diferente das atualizações ao vivo recorrentes acima. Suporta marcadores de posição {device}, {minutes}, {program}.", "notify_timeout_seconds": "Ignore automaticamente as notificações após esses segundos (encaminhadas como 'tempo limite' do aplicativo complementar). Defina como 0 para mantê-los até serem descartados. Padrão: 0.", "notify_channel": "Android canal de notificação de aplicativo complementar para notificações de status, progresso ao vivo e lembretes. O som e a importância de um canal são configurados no aplicativo complementar na primeira vez que o nome do canal é usado - WashData define apenas o nome do canal. Deixe em branco para o padrão do aplicativo.", "notify_finish_channel": "Canal Android separado para o alerta finalizado (também usado pelo lembrete e pelo aviso de espera da lavanderia) para que ele possa ter seu próprio som. Deixe em branco para reutilizar o canal acima.", "notify_pre_complete_message": "Texto das atualizações recorrentes do progresso ao vivo enquanto o ciclo é executado. Suporta marcadores de posição {device}, {minutes}, {program}." } }, "advanced_settings": { "title": "Definições avançadas", "description": "Ajuste os limiares de detecção, aprendizagem e comportamento avançado. As predefinições funcionam bem para a maioria das configurações.", "sections": { "suggestions_section": { "name": "Definições sugeridas", "description": "{suggestions_count} sugestões aprendidas disponíveis. Assinale Aplicar valores sugeridos para rever as alterações propostas antes de guardar.", "data": { "apply_suggestions": "Aplicar valores sugeridos" }, "data_description": { "apply_suggestions": "Assinale esta caixa para abrir um passo de revisão dos valores sugeridos pelo algoritmo de aprendizagem. Nada é guardado automaticamente.\n\nSugerido (por aprendizagem):\n- min_power: {suggested_min_power} W\n- off_delay: {suggested_off_delay} s\n- watchdog_interval: {suggested_watchdog_interval} s\n- no_update_active_timeout: {suggested_no_update_active_timeout} s\n- profile_match_interval: {suggested_profile_match_interval} s\n- auto_label_confidence: {suggested_auto_label_confidence}\n- duration_tolerance: {suggested_duration_tolerance}\n- profile_duration_tolerance: {suggested_profile_duration_tolerance}\n- profile_match_min_duration_ratio: {suggested_profile_match_min_duration_ratio}\n- profile_match_max_duration_ratio: {suggested_profile_match_max_duration_ratio}\n- start_threshold_w: {suggested_start_threshold_w} W\n- stop_threshold_w: {suggested_stop_threshold_w} W\n- end_energy_threshold: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}" } }, "detection_section": { "name": "Deteção e limiares de potência", "description": "Quando o aparelho é considerado LIGADO ou DESLIGADO, limites de energia e temporização para transições de estado.", "data": { "start_duration_threshold": "Duração de debounce de início (s)", "start_energy_threshold": "Porta de energia de início (Wh)", "completion_min_seconds": "Tempo de execução mínimo de conclusão (segundos)", "start_threshold_w": "Limiar de início (W)", "stop_threshold_w": "Limiar de paragem (W)", "end_energy_threshold": "Porta de energia de fim (Wh)", "running_dead_zone": "Zona morta após início (segundos)", "end_repeat_count": "Contagem de repetições de fim", "min_off_gap": "Intervalo mínimo entre ciclos (s)", "sampling_interval": "Intervalo de amostragem (s)" }, "data_description": { "start_duration_threshold": "Ignore picos de potência breves mais curtos do que esta duração (segundos). Filtra picos de arranque (ex.: 60W durante 2s) antes do início real do ciclo. Predefinição: 5s.", "start_energy_threshold": "O ciclo deve acumular pelo menos esta quantidade de energia (Wh) durante a fase de INÍCIO para ser confirmado. Predefinição: 0,005 Wh.", "completion_min_seconds": "Ciclos mais curtos do que isto serão marcados como 'interrompidos', mesmo que terminem naturalmente. Predefinição: 600s.", "start_threshold_w": "A potência deve subir ACIMA deste limiar para INICIAR um ciclo. Defina acima da sua potência em standby. Predefinição: min_power + 1 W.", "stop_threshold_w": "A potência deve cair ABAIXO deste limiar para TERMINAR um ciclo. Defina ligeiramente acima de zero para evitar que ruído provoque fins falsos. Predefinição: 0,6 × min_power.", "end_energy_threshold": "O ciclo só termina se a energia na última janela off-delay estiver abaixo deste valor (Wh). Evita fins falsos se a potência flutuar perto de zero. Predefinição: 0,05 Wh.", "running_dead_zone": "Após o início do ciclo, ignore quedas de potência durante este número de segundos para evitar detecção falsa de fim durante a fase inicial de arranque. Defina como 0 para desactivar. Predefinição: 0s.", "end_repeat_count": "Número de vezes que a condição de fim (potência abaixo do limiar durante off_delay) deve ser satisfeita consecutivamente antes de terminar o ciclo. Valores mais altos evitam fins falsos durante pausas. Predefinição: 1.", "min_off_gap": "Se um ciclo começar dentro deste número de segundos após o fim do anterior, serão FUNDIDOS num único ciclo.", "sampling_interval": "Intervalo mínimo de amostragem em segundos. Atualizações mais rápidas que essa taxa serão ignoradas. Padrão: 30s (2s para máquinas de lavar, lavadoras e secadoras e lava-louças)." } }, "matching_section": { "name": "Correspondência de perfis e aprendizagem", "description": "Com que agressividade o WashData faz corresponder ciclos em execução a perfis aprendidos e quando pedir feedback.", "data": { "profile_match_min_duration_ratio": "Rácio mínimo de duração da correspondência de perfil (0,1-1,0)", "profile_match_interval": "Intervalo de correspondência de perfil (segundos)", "profile_match_threshold": "Limiar de correspondência de perfil", "profile_unmatch_threshold": "Limiar de não-correspondência de perfil", "auto_label_confidence": "Confiança de rotulagem automática (0-1)", "learning_confidence": "Confiança do pedido de feedback (0-1)", "suppress_feedback_notifications": "Suprimir notificações de feedback", "duration_tolerance": "Tolerância de duração (0-0,5)", "smoothing_window": "Janela de suavização (amostras)", "profile_duration_tolerance": "Tolerância de duração da correspondência de perfil (0-0,5)" }, "data_description": { "profile_match_min_duration_ratio": "Rácio mínimo de duração para correspondência de perfil. O ciclo em execução deve ter pelo menos esta fracção da duração do perfil para corresponder. Inferior = correspondência mais cedo. Predefinição: 0,50 (50%).", "profile_match_interval": "Com que frequência (em segundos) tentar a correspondência de perfil durante um ciclo. Valores mais baixos fornecem detecção mais rápida mas usam mais CPU. Predefinição: 300s (5 minutos).", "profile_match_threshold": "Pontuação mínima de similaridade DTW (0,0–1,0) necessária para considerar um perfil como correspondência. Superior = correspondência mais rigorosa, menos falsos positivos. Predefinição: 0,4.", "profile_unmatch_threshold": "Pontuação de similaridade DTW (0,0–1,0) abaixo da qual um perfil previamente correspondido é rejeitado. Deve ser inferior ao limiar de correspondência para evitar oscilações. Predefinição: 0,35.", "auto_label_confidence": "Rotulear automaticamente os ciclos neste nível de confiança ou acima na conclusão (0,0–1,0).", "learning_confidence": "Confiança mínima para pedir verificação do utilizador através de um evento (0,0–1,0).", "suppress_feedback_notifications": "Quando ativado, o WashData ainda rastreará e solicitará feedback internamente, mas não mostrará notificações persistentes solicitando a confirmação dos ciclos. Útil quando os ciclos são sempre detectados corretamente e você acha que os avisos são uma distração.", "duration_tolerance": "Tolerância para estimativas de tempo restante durante um ciclo (0,0–0,5 corresponde a 0–50%).", "smoothing_window": "Número de leituras de potência recentes utilizadas para suavização por média móvel.", "profile_duration_tolerance": "Tolerância utilizada pela correspondência de perfil para variação total de duração (0,0–0,5). Comportamento predefinido: ±25%." } }, "timing_section": { "name": "Temporização, manutenção e depuração", "description": "Watchdog, reposição do progresso, manutenção automática e exposição de entidades de depuração.", "data": { "watchdog_interval": "Intervalo do watchdog (segundos)", "no_update_active_timeout": "Tempo limite sem actualizações (s)", "progress_reset_delay": "Atraso de reinicialização do progresso (segundos)", "auto_maintenance": "Activar manutenção automática", "expose_debug_entities": "Expor entidades de depuração", "save_debug_traces": "Guardar traços de depuração" }, "data_description": { "watchdog_interval": "Segundos entre verificações do watchdog durante o funcionamento. Predefinição: 5s. AVISO: Certifique-se de que é SUPERIOR ao intervalo de actualização do seu sensor para evitar paragens falsas (ex.: se o sensor actualiza a cada 60s, use 65s+).", "no_update_active_timeout": "Para sensores de publicação por alteração: forçar o fim de um ciclo ACTIVO apenas se não chegarem actualizações durante este número de segundos. A conclusão por baixa potência ainda usa o atraso de desligamento.", "progress_reset_delay": "Após um ciclo ser concluído (100%), aguarde este número de segundos em inactividade antes de repor o progresso para 0%. Predefinição: 300s.", "auto_maintenance": "Activar manutenção automática (reparar amostras, fundir fragmentos).", "expose_debug_entities": "Mostrar sensores avançados (Confiança, Fase, Ambiguidade) para depuração.", "save_debug_traces": "Guardar dados detalhados de classificação e traço de potência no histórico (aumenta o uso de armazenamento)." } }, "anti_wrinkle_section": { "name": "Proteção anti-rugas (secadores)", "description": "Ignora rotações do tambor após o ciclo para evitar ciclos fantasma. Apenas secador / máquina lava e seca.", "data": { "anti_wrinkle_enabled": "Escudo anti-vincos (apenas secadora/combinada)", "anti_wrinkle_max_power": "Potência máxima anti-vincos (W) (apenas secadora/combinada)", "anti_wrinkle_max_duration": "Duração máxima anti-vincos (s) (apenas secadora/combinada)", "anti_wrinkle_exit_power": "Potência de saída anti-vincos (W) (apenas secadora/combinada)" }, "data_description": { "anti_wrinkle_enabled": "Ignorar rotações curtas do tambor de baixa potência após o fim de um ciclo para evitar ciclos fantasma (apenas secadora/combinada).", "anti_wrinkle_max_power": "Explosões nesta potência ou abaixo são tratadas como rotações anti-vincos em vez de novos ciclos. Aplica-se apenas quando o Escudo anti-vincos está activado.", "anti_wrinkle_max_duration": "Comprimento máximo da explosão para tratar como rotação anti-vincos. Aplica-se apenas quando o Escudo anti-vincos está activado.", "anti_wrinkle_exit_power": "Se a potência cair abaixo deste nível, sair do modo anti-vincos imediatamente (desligamento real). Aplica-se apenas quando o Escudo anti-vincos está activado." } }, "delay_start_section": { "name": "Deteção de início diferido", "description": "Trata um estado de espera sustentado de baixa potência como 'À espera de iniciar' até o ciclo começar realmente.", "data": { "delay_start_detect_enabled": "Ativar detecção de início atrasado", "delay_confirm_seconds": "Início diferido: tempo de confirmação em espera (s)", "delay_timeout_hours": "Início atrasado: tempo máximo de espera (h)" }, "data_description": { "delay_start_detect_enabled": "Quando ativado, um breve pico de consumo de baixa energia seguido por energia de espera sustentada é detectado como uma partida atrasada. O sensor de estado mostra 'Aguardando início' durante o atraso. Nenhum tempo ou progresso do programa é monitorado até que o ciclo realmente comece. Requer que start_threshold_w seja definido acima da potência do pico de drenagem.", "delay_confirm_seconds": "A potência deve permanecer entre o Limiar de paragem (W) e o Limiar de arranque (W) durante este número de segundos antes de o WashData entrar em 'À espera de iniciar'. Filtra picos breves de navegação em menus. Predefinição: 60 s.", "delay_timeout_hours": "Tempo limite de segurança: se a máquina ainda estiver em “Aguardando para iniciar” após tantas horas, WashData será redefinido para Desligado. Padrão: 8h." } }, "external_triggers_section": { "name": "Disparadores externos, porta e pausa", "description": "Sensor externo opcional de fim de ciclo, sensor de porta para deteção de pausa/limpo e interruptor de corte de energia em pausa.", "data": { "external_end_trigger_enabled": "Activar gatilho externo de fim de ciclo", "external_end_trigger": "Sensor externo de fim de ciclo", "external_end_trigger_inverted": "Inverter lógica do gatilho (acionar quando DESLIGADO)", "door_sensor_entity": "Sensor de porta", "pause_cuts_power": "Corte a energia ao pausar", "switch_entity": "Entidade de comutação (para pausar corte de energia)", "notify_unload_delay_minutes": "Atraso na notificação de espera de lavanderia (min)" }, "data_description": { "external_end_trigger_enabled": "Activar monitorização de um sensor binário externo para acionar a conclusão do ciclo.", "external_end_trigger": "Seleccione uma entidade de sensor binário. Quando este sensor accionar, o ciclo actual terminará com o estado 'concluído'.", "external_end_trigger_inverted": "Por predefinição, o gatilho acciona quando o sensor é LIGADO. Assinale esta caixa para acionar quando o sensor for DESLIGADO.", "door_sensor_entity": "Sensor binário opcional para a porta da máquina (ligado = aberto, desligado = fechado). Quando a porta abre durante um ciclo ativo, WashData confirmará o ciclo como pausado intencionalmente. Após o término do ciclo, se a porta ainda estiver fechada, o estado muda para 'Limpar' até que a porta seja aberta. Nota: fechar a porta NÃO retoma automaticamente um ciclo pausado – a retomada deve ser acionada manualmente por meio do botão Retomar Ciclo ou serviço.", "pause_cuts_power": "Ao pausar por meio do botão Pause Cycle ou serviço, desligue também a entidade de switch configurada. Só entra em vigor se uma entidade de switch estiver configurada para este dispositivo.", "switch_entity": "A entidade switch a ser alternada ao pausar ou retomar. Obrigatório quando 'Cortar energia ao pausar' está ativado.", "notify_unload_delay_minutes": "Envie uma notificação por meio do canal de notificação de término após o término do ciclo e a porta não tiver sido aberta por tantos minutos (requer Sensor de Porta). Defina como 0 para desativar. Padrão: 60 min." } }, "pump_section": { "name": "Monitor da bomba", "description": "Apenas para o tipo de dispositivo bomba. Dispara um evento se um ciclo da bomba ultrapassar esta duração.", "data": { "pump_stuck_duration": "Limite(s) de alerta de bomba presa (somente bomba)" }, "data_description": { "pump_stuck_duration": "Se um ciclo de bomba ainda estiver em execução após esses segundos, um evento ha_washdata_pump_stuck será acionado uma vez. Use isto para detectar um motor emperrado (o funcionamento típico da bomba do reservatório é inferior a 60 s). Padrão: 1800 s (30 min). Apenas tipo de dispositivo de bomba." } }, "device_link_section": { "name": "Link do dispositivo", "description": "Opcionalmente, vincule este dispositivo WashData a um dispositivo Home Assistant existente (por exemplo, o plugue inteligente ou o próprio aparelho). O dispositivo WashData é então mostrado como \"Conectado através\" desse dispositivo. Deixe em branco para manter o WashData como um dispositivo independente.", "data": { "linked_device": "Dispositivo vinculado" }, "data_description": { "linked_device": "Selecione o dispositivo ao qual conectar o WashData. Isso adiciona uma referência 'Conectado via' no registro do dispositivo; WashData mantém seu próprio cartão de dispositivo e entidades. Limpe a seleção para remover o link." } } } }, "diagnostics": { "title": "Diagnóstico e manutenção", "description": "Execute acções de manutenção como fundir ciclos fragmentados ou migrar dados guardados.\n\n**Uso de armazenamento**\n\n- Tamanho do ficheiro: {file_size_kb} KB\n- Ciclos: {cycle_count}\n- Perfis: {profile_count}\n- Traços de depuração: {debug_count}", "menu_options": { "reprocess_history": "Manutenção: reprocessar e optimizar dados", "clear_debug_data": "Limpar dados de depuração (libertar espaço)", "wipe_history": "Limpar TODOS os dados deste dispositivo (irreversível)", "export_import": "Exportar/Importar JSON com definições (copiar/colar)", "menu_back": "← Voltar" } }, "clear_debug_data": { "title": "Limpar dados de depuração", "description": "Tem a certeza de que quer eliminar todos os traços de depuração guardados? Isto libertará espaço mas removerá informação detalhada de classificação de ciclos anteriores." }, "manage_cycles": { "title": "Gerir ciclos", "description": "Ciclos recentes:\n{recent_cycles}", "menu_options": { "auto_label_cycles": "Rotular automaticamente ciclos antigos", "select_cycle_to_label": "Rotular ciclo específico", "select_cycle_to_delete": "Eliminar ciclo", "interactive_editor": "Editor interactivo de fusão/divisão", "trim_cycle_select": "Cortar dados do ciclo", "menu_back": "← Voltar" } }, "manage_cycles_empty": { "title": "Gerir ciclos", "description": "Ainda não foram registados ciclos.", "menu_options": { "auto_label_cycles": "Rotular automaticamente ciclos antigos", "menu_back": "← Voltar" } }, "manage_profiles": { "title": "Gerir perfis", "description": "Resumo do perfil:\n{profile_summary}", "menu_options": { "create_profile": "Criar novo perfil", "edit_profile": "Editar/renomear perfil", "delete_profile_select": "Eliminar perfil", "profile_stats": "Estatísticas do perfil", "cleanup_profile": "Limpar histórico - gráfico e eliminação", "assign_profile_phases_select": "Atribuir intervalos de fase", "menu_back": "← Voltar" } }, "manage_profiles_empty": { "title": "Gerir perfis", "description": "Ainda não foram criados perfis.", "menu_options": { "create_profile": "Criar novo perfil", "menu_back": "← Voltar" } }, "manage_phase_catalog": { "title": "Gerir catálogo de fases", "description": "Catálogo de fases (predefinições para este dispositivo + fases personalizadas):\n{phase_summary}", "menu_options": { "phase_catalog_create": "Criar nova fase", "phase_catalog_edit_select": "Editar fase", "phase_catalog_delete": "Eliminar fase", "menu_back": "← Voltar" } }, "phase_catalog_create": { "title": "Criar fase personalizada", "description": "Crie um nome e descrição de fase personalizados e escolha a que tipo de dispositivo se aplica.", "data": { "target_device_type": "Tipo de dispositivo alvo", "phase_name": "Nome da fase", "phase_description": "Descrição da fase" } }, "phase_catalog_edit_select": { "title": "Editar fase personalizada", "description": "Seleccione uma fase personalizada para editar.", "data": { "phase_name": "Fase personalizada" } }, "phase_catalog_edit": { "title": "Editar fase personalizada", "description": "A editar a fase: {phase_name}", "data": { "phase_name": "Nome da fase", "phase_description": "Descrição da fase" } }, "phase_catalog_delete": { "title": "Eliminar fase personalizada", "description": "Seleccione uma fase personalizada para eliminar. Todos os intervalos atribuídos que utilizam esta fase serão removidos.", "data": { "phase_name": "Fase personalizada" } }, "assign_profile_phases": { "title": "Atribuir intervalos de fase", "description": "Pré-visualização de fase para o perfil: **{profile_name}**\n\n{timeline_svg}\n\n**Intervalos actuais:**\n{current_ranges}\n\nUse as acções abaixo para adicionar, editar, eliminar ou guardar intervalos.", "menu_options": { "assign_profile_phases_add": "Adicionar intervalo de fase", "assign_profile_phases_edit_select": "Editar intervalo de fase", "assign_profile_phases_delete": "Eliminar intervalo de fase", "phase_ranges_clear": "Limpar todos os intervalos", "assign_profile_phases_auto_detect": "Detectar fases automaticamente", "phase_ranges_save": "Guardar e regressar", "menu_back": "← Voltar" } }, "assign_profile_phases_add": { "title": "Adicionar intervalo de fase", "description": "Adicione um intervalo de fase ao rascunho actual.", "data": { "phase_name": "Fase", "start_min": "Minuto de início", "end_min": "Minuto de fim" } }, "assign_profile_phases_edit_select": { "title": "Editar intervalo de fase", "description": "Seleccione um intervalo para editar.", "data": { "range_index": "Intervalo de fase" } }, "assign_profile_phases_edit": { "title": "Editar intervalo de fase", "description": "Actualize o intervalo de fase seleccionado.", "data": { "phase_name": "Fase", "start_min": "Minuto de início", "end_min": "Minuto de fim" } }, "assign_profile_phases_delete": { "title": "Eliminar intervalo de fase", "description": "Seleccione um intervalo para remover do rascunho.", "data": { "range_index": "Intervalo de fase" } }, "assign_profile_phases_auto_detect": { "title": "Fases detectadas automaticamente", "description": "Perfil: **{profile_name}**\n\n{timeline_svg}\n\n**{detected_count} fase(s) detectada(s) automaticamente.** Escolha uma acção abaixo.", "data": { "action": "Acção" } }, "assign_profile_phases_auto_detect_name": { "title": "Nomear fases detectadas", "description": "Perfil: **{profile_name}**\n\n**{detected_count} fase(s) detectada(s):**\n{ranges_summary}\n\nAtribua um nome a cada fase." }, "assign_profile_phases_select": { "title": "Atribuir intervalos de fase", "description": "Seleccione um perfil para configurar intervalos de fase.", "data": { "profile": "Perfil" } }, "profile_stats": { "title": "Estatísticas do perfil", "description": "{stats_table}" }, "create_profile": { "title": "Criar novo perfil", "description": "Crie um novo perfil manualmente ou a partir de um ciclo anterior.\n\nExemplos de nomes de perfil: 'Delicados', 'Intensivo', 'Lavagem rápida'", "data": { "profile_name": "Nome do perfil", "reference_cycle": "Ciclo de referência (opcional)", "manual_duration": "Duração manual (minutos)" } }, "edit_profile": { "title": "Editar perfil", "description": "Seleccione um perfil para renomear", "data": { "profile": "Perfil" } }, "rename_profile": { "title": "Editar detalhes do perfil", "description": "Perfil actual: {current_name}", "data": { "new_name": "Nome do perfil", "manual_duration": "Duração manual (minutos)" } }, "delete_profile_select": { "title": "Eliminar perfil", "description": "Seleccione um perfil para eliminar", "data": { "profile": "Perfil" } }, "delete_profile_confirm": { "title": "Confirmar eliminação do perfil", "description": "⚠️ Isto eliminará permanentemente o perfil: {profile_name}", "data": { "unlabel_cycles": "Remover rótulo dos ciclos que utilizam este perfil" } }, "auto_label_cycles": { "title": "Rotular automaticamente ciclos antigos", "description": "Foram encontrados {total_count} ciclos no total. Perfis: {profiles}", "data": { "confidence_threshold": "Confiança mínima (0,50-0,95)" } }, "select_cycle_to_label": { "title": "Seleccionar ciclo para rotular", "description": "✓ = concluído, ⚠ = retomado, ✗ = interrompido", "data": { "cycle_id": "Ciclo" } }, "select_cycle_to_delete": { "title": "Eliminar ciclo", "description": "⚠️ Isto eliminará permanentemente o ciclo seleccionado", "data": { "cycle_id": "Ciclo a eliminar" } }, "label_cycle": { "title": "Rotular ciclo", "description": "{cycle_info}", "data": { "profile_name": "Perfil", "new_profile_name": "Novo nome de perfil (se estiver a criar)" } }, "post_process": { "title": "Processar histórico (fusão/divisão)", "description": "Limpe o histórico do ciclo mesclando execuções fragmentadas e dividindo ciclos mesclados incorretamente dentro de uma janela de tempo. Insira o número de horas para olhar para trás (use 999999 para todas).", "data": { "time_range": "Janela de retrocesso (horas)", "gap_seconds": "Intervalo de fusão/divisão (segundos)" }, "data_description": { "time_range": "Número de horas para verificar ciclos fragmentados para mesclar. Use 999999 para processar todos os dados históricos.", "gap_seconds": "Limiar para decidir divisão vs. fusão. Lacunas MAIS CURTAS do que isto são fundidas. Lacunas MAIS LONGAS são divididas. Reduza para forçar uma divisão num ciclo fundido incorrectamente." } }, "cleanup_profile": { "title": "Limpar histórico - seleccionar perfil", "description": "Seleccione um perfil para visualizar. Isto gerará um gráfico com todos os ciclos anteriores deste perfil para ajudar a identificar valores atípicos.", "data": { "profile": "Perfil" } }, "cleanup_select": { "title": "Limpar histórico - gráfico e eliminação", "description": "![Gráfico]({graph_url})\n\n**A visualizar {profile_name}**\n\nO gráfico mostra ciclos individuais como linhas coloridas. Identifique valores atípicos (linhas distantes do grupo) e corresponda a sua cor na lista abaixo para os eliminar.\n\n**Seleccione ciclos para eliminar PERMANENTEMENTE:**", "data": { "cycles_to_delete": "Ciclos a eliminar (verificar cores correspondentes)" } }, "interactive_editor": { "title": "Editor interactivo de fusão/divisão", "description": "Seleccione uma acção manual a executar no histórico de ciclos.", "menu_options": { "editor_split": "Dividir um ciclo (encontrar lacunas)", "editor_merge": "Fundir ciclos (juntar fragmentos)", "editor_delete": "Eliminar ciclo(s)", "menu_back": "← Voltar" } }, "editor_select": { "title": "Seleccionar ciclos", "description": "Seleccione o(s) ciclo(s) a processar.\n\n{info_text}", "data": { "selected_cycles": "Ciclos" } }, "editor_configure": { "title": "Configurar e aplicar", "description": "{preview_md}", "data": { "confirm_action": "Acção", "merged_profile": "Perfil resultante", "new_profile_name": "Novo nome de perfil", "confirm_commit": "Sim, confirmo esta acção", "segment_0_profile": "Perfil do segmento 1", "segment_1_profile": "Perfil do segmento 2", "segment_2_profile": "Perfil do segmento 3", "segment_3_profile": "Perfil do segmento 4", "segment_4_profile": "Perfil do segmento 5", "segment_5_profile": "Perfil do segmento 6", "segment_6_profile": "Perfil do segmento 7", "segment_7_profile": "Perfil do segmento 8", "segment_8_profile": "Perfil do segmento 9", "segment_9_profile": "Perfil do segmento 10" } }, "editor_split_params": { "title": "Configuração de divisão", "description": "Ajuste a sensibilidade para dividir este ciclo. Qualquer lacuna inactiva superior a isto causará uma divisão.", "data": { "split_mode": "Método de divisão" } }, "editor_split_auto_params": { "title": "Configuração de divisão automática", "description": "Ajuste a sensibilidade para dividir este ciclo. Qualquer intervalo inativo mais longo do que este irá causar uma divisão.", "data": { "min_gap_seconds": "Limiar do intervalo de divisão (segundos)" } }, "editor_split_manual_params": { "title": "Marcas temporais de divisão manual", "description": "{preview_md}Janela do ciclo: **{cycle_start_wallclock} → {cycle_end_wallclock}** em {cycle_date}.\n\nIntroduza uma ou mais marcas temporais de divisão (`HH:MM` ou `HH:MM:SS`), uma por linha. O ciclo será cortado em cada marca temporal — N marcas temporais produzem N+1 segmentos.", "data": { "split_timestamps": "Carimbos temporais de divisão" } }, "reprocess_history": { "title": "Manutenção: reprocessar e optimizar dados", "description": "Efectua uma limpeza profunda dos dados históricos:\n1. Remove leituras de potência zero (silêncio).\n2. Corrige o tempo/duração do ciclo.\n3. Recalcula todos os modelos estatísticos (envelopes).\n\n**Execute isto para corrigir problemas de dados ou aplicar novos algoritmos.**" }, "wipe_history": { "title": "Limpar histórico (apenas para testes)", "description": "⚠️ Isto eliminará permanentemente TODOS os ciclos e perfis guardados neste dispositivo. Isto não pode ser desfeito!" }, "export_import": { "title": "Exportar/Importar JSON", "description": "Copie/cole ciclos, perfis E definições para este dispositivo. Exporte abaixo ou cole JSON para importar.", "data": { "mode": "Acção", "json_payload": "JSON de configuração completa" }, "data_description": { "mode": "Escolha Exportar para copiar os dados e definições actuais, ou Importar para colar dados exportados de outro dispositivo WashData.", "json_payload": "Para Exportar: copie este JSON (inclui ciclos, perfis e todas as definições afinadas). Para Importar: cole o JSON exportado do WashData." } }, "record_cycle": { "title": "Gravar ciclo", "description": "Grave manualmente um ciclo para criar um perfil limpo sem interferências.\n\nEstado: **{status}**\nDuração: {duration}s\nAmostras: {samples}", "menu_options": { "record_refresh": "Actualizar estado", "record_stop": "Parar gravação (guardar e processar)", "record_start": "Iniciar nova gravação", "record_process": "Processar última gravação (cortar e guardar)", "record_discard": "Descartar última gravação", "menu_back": "← Voltar" } }, "record_process": { "title": "Processar gravação", "description": "![Gráfico]({graph_url})\n\n**O gráfico mostra a gravação bruta.** Azul = Manter, Vermelho = Corte proposto.\n*O gráfico é estático e não actualiza com alterações no formulário.*\n\nGravação parada. Os cortes são alinhados à taxa de amostragem detectada (~{sampling_rate}s).\n\nDuração bruta: {duration}s\nAmostras: {samples}", "data": { "head_trim": "Início do corte (segundos)", "tail_trim": "Fim do corte (segundos)", "save_mode": "Destino de gravação", "profile_name": "Nome do perfil" } }, "learning_feedbacks": { "title": "Feedbacks de aprendizagem", "description": "Feedback pendente: {count}\n\n{pending_table}\n\nSeleccione um pedido de revisão de ciclo para processar.", "menu_options": { "learning_feedbacks_pick": "Rever um feedback pendente", "learning_feedbacks_dismiss_all": "Ignorar todo o feedback pendente", "menu_back": "← Voltar" } }, "learning_feedbacks_pick": { "title": "Selecionar feedback para rever", "description": "Selecione um pedido de revisão de ciclo para abrir.", "data": { "selected_feedback": "Selecionar ciclo para rever" } }, "learning_feedbacks_empty": { "title": "Feedbacks de aprendizagem", "description": "Não foram encontrados pedidos de feedback pendentes.", "menu_options": { "menu_back": "← Voltar" } }, "learning_feedbacks_dismiss_all": { "title": "Dispensar todos os feedbacks pendentes", "description": "Está prestes a dispensar **{count}** pedido(s) de feedback pendente(s). Os ciclos dispensados permanecem no seu histórico, mas não irão contribuir com um novo sinal de aprendizagem. Isto não pode ser desfeito.\n\n✅ Marque a caixa abaixo e clique em **Enviar** para dispensar tudo.\n❌ Deixe desmarcado e clique em **Enviar** para cancelar e voltar.", "data": { "confirm_dismiss_all": "Confirmar: ignorar todos os pedidos de feedback pendentes" } }, "resolve_feedback": { "title": "Resolver feedback", "description": "{comparison_img}{candidates_table}\n**Perfil detectado**: {detected_profile} ({confidence_pct}%)\n**Duração estimada**: {est_duration_min} min\n**Duração real**: {act_duration_min} min\n\n__Escolha uma acção abaixo:__", "data": { "action": "O que gostaria de fazer?", "corrected_profile": "Programa correcto (se estiver a corrigir)", "corrected_duration": "Duração correcta em segundos (se estiver a corrigir)" } }, "trim_cycle_select": { "title": "Cortar ciclo - seleccionar ciclo", "description": "Seleccione um ciclo para cortar. ✓ = concluído, ⚠ = retomado, ✗ = interrompido", "data": { "cycle_id": "Ciclo" } }, "trim_cycle": { "title": "Cortar ciclo", "description": "Janela actual: {trim_summary}\n\n{trim_svg}", "data": { "action": "Acção" } }, "trim_cycle_start": { "title": "Definir início do corte", "description": "Janela de ciclo: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nInício atual: **{current_wallclock}** (+{current_offset_min} min do início do ciclo)\n\nEscolha um novo horário de início usando o seletor de relógio abaixo.", "data": { "trim_start_time": "Novo horário de início", "trim_start_min": "Novo início (minutos desde o início do ciclo)" } }, "trim_cycle_end": { "title": "Definir fim do corte", "description": "Janela de ciclo: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nFim atual: **{current_wallclock}** (+{current_offset_min} min do início do ciclo)\n\nEscolha um novo horário de término usando o seletor de relógio abaixo.", "data": { "trim_end_time": "Novo horário de término", "trim_end_min": "Novo fim (minutos do início do ciclo)" } } }, "error": { "import_failed": "Importação falhou. Cole um JSON de exportação WashData válido.", "select_exactly_one": "Seleccione exatamente um ciclo para esta ação.", "select_at_least_one": "Seleccione pelo menos um ciclo para esta ação.", "select_at_least_two": "Seleccione pelo menos dois ciclos para esta ação.", "profile_exists": "Já existe um perfil com este nome", "rename_failed": "Falha ao renomear o perfil. O perfil pode não existir ou o novo nome já está em uso.", "assignment_failed": "Falha ao atribuir perfil ao ciclo", "duplicate_phase": "Já existe uma fase com este nome.", "phase_not_found": "A fase seleccionada não foi encontrada.", "invalid_phase_name": "O nome da fase não pode estar vazio.", "phase_name_too_long": "O nome da fase é demasiado longo.", "invalid_phase_range": "O intervalo de fase é inválido. O fim deve ser maior que o início.", "invalid_phase_timestamp": "O carimbo de data/hora é inválido. Use o formato AAAA-MM-DD HH:MM ou HH:MM.", "overlapping_phase_ranges": "Os intervalos de fase sobrepõem-se. Ajuste os intervalos e tente novamente.", "incomplete_phase_row": "Cada linha de fase deve incluir uma fase mais valores completos de início/fim para o modo seleccionado.", "timestamp_mode_cycle_required": "Seleccione um ciclo de origem quando usar o modo de carimbo de data/hora.", "no_phase_ranges": "Ainda não há intervalos de fase disponíveis para essa acção.", "feedback_notification_title": "WashData: verificar ciclo ({device})", "feedback_notification_message": "**Dispositivo**: {device}\n**Programa**: {program} ({confidence}% de confiança)\n**Hora**: {time}\n\nO WashData precisa da sua ajuda para verificar este ciclo detectado.\n\nVá a **Definições > Dispositivos e serviços > WashData > Configurar > Feedbacks de aprendizagem** para confirmar ou corrigir este resultado.", "suggestions_ready_notification_title": "WashData: definições sugeridas prontas ({device})", "suggestions_ready_notification_message": "O sensor **Definições sugeridas** reporta agora **{count}** recomendações accionáveis.\n\nPara as rever e aplicar: **Definições > Dispositivos e serviços > WashData > Configurar > Definições avançadas > Aplicar valores sugeridos**.\n\nAs sugestões são opcionais e mostradas para revisão antes de guardar.", "trim_range_invalid": "O início deve ser antes do fim. Ajuste os seus pontos de corte.", "trim_failed": "O corte falhou. O ciclo pode já não existir ou a janela está vazia.", "invalid_split_timestamp": "O carimbo temporal é inválido ou está fora da janela do ciclo. Utilize HH:MM ou HH:MM:SS dentro da janela do ciclo.", "no_split_segments_found": "Não foi possível produzir segmentos válidos a partir destes carimbos temporais. Certifique-se de que cada carimbo temporal está dentro da janela do ciclo e de que os segmentos têm pelo menos 1 minuto.", "auto_tune_suggestion": "{device_type} {device_title} detectou ciclos fantasmas. Alteração sugerida de min_power: {current_min}W -> {new_min}W (não aplicada automaticamente).", "auto_tune_title": "Ajuste automático WashData", "auto_tune_fallback": "{device_type} {device_title} detectou ciclos fantasmas. Alteração sugerida de min_power: {current_min}W -> {new_min}W (não aplicada automaticamente)." }, "abort": { "no_cycles_found": "Nenhum ciclo encontrado", "no_split_segments_found": "Não foram encontrados segmentos divisíveis no ciclo selecionado.", "cycle_not_found": "Não foi possível carregar o ciclo selecionado.", "no_power_data": "Não há dados de traço de potência disponíveis para o ciclo seleccionado.", "no_profiles_found": "Nenhum perfil encontrado. Crie primeiro um perfil.", "no_profiles_for_matching": "Nenhum perfil disponível para correspondência. Crie primeiro perfis.", "no_unlabeled_cycles": "Todos os ciclos já estão rotulados", "no_suggestions": "Ainda não há valores sugeridos disponíveis. Execute alguns ciclos e tente novamente.", "no_predictions": "Sem previsões", "no_custom_phases": "Nenhuma fase personalizada encontrada.", "reprocess_success": "{count} ciclos reprocessados com sucesso.", "debug_data_cleared": "Dados de depuração de {count} ciclos limpos com sucesso." } }, "selector": { "notify_events_option": { "options": { "cycle_start": "Início do ciclo", "cycle_finish": "Fim do ciclo", "cycle_live": "Progresso em tempo real" } }, "common_text": { "options": { "unlabeled": "(Sem rótulo)", "create_new_profile": "Criar novo perfil", "remove_label": "Remover rótulo", "no_reference_cycle": "(Sem ciclo de referência)", "all_device_types": "Todos os tipos de dispositivo", "current_suffix": "(actual)", "editor_select_info": "Seleccione 1 ciclo para dividir, ou 2+ ciclos para fundir.", "editor_select_info_split": "Seleccione 1 ciclo para dividir.", "editor_select_info_merge": "Seleccione 2 ou mais ciclos para unir.", "editor_select_info_delete": "Seleccione 1 ou mais ciclos para eliminar.", "no_cycles_recorded": "Ainda não foram registados ciclos.", "profile_summary_line": "- **{name}**: {count} ciclos, {avg}m méd.", "no_profiles_created": "Ainda não foram criados perfis.", "phase_preview": "Pré-visualização da fase", "phase_preview_no_curve": "A curva média do perfil ainda não está disponível. Execute/rotule mais ciclos para este perfil.", "average_power_curve": "Curva de potência média", "unit_min": "min", "profile_option_fmt": "{name} ({count} ciclos, ~{duration} min méd.)", "profile_option_short_fmt": "{name} ({count} ciclos, ~{duration} min)", "deleted_cycles_from_profile": "Eliminados {count} ciclos de {profile}.", "not_enough_data_graph": "Dados insuficientes para gerar o gráfico.", "no_profiles_found": "Nenhum perfil encontrado.", "cycle_info_fmt": "Ciclo: {start}, {duration} min, Actual: {label}", "top_candidates_header": "### Principais candidatos", "tbl_profile": "Perfil", "tbl_confidence": "Confiança", "tbl_correlation": "Correlação", "tbl_duration_match": "Correspondência de duração", "detected_profile": "Perfil detectado", "estimated_duration": "Duração estimada", "actual_duration": "Duração real", "choose_action": "__Escolha uma acção abaixo:__", "tbl_count": "Contagem", "tbl_avg": "Méd.", "tbl_min": "Mín.", "tbl_max": "Máx.", "tbl_energy_avg": "Energia (méd.)", "tbl_energy_total": "Energia (total)", "tbl_consistency": "Consist.", "tbl_last_run": "Última execução", "graph_legend_title": "Legenda do gráfico", "graph_legend_body": "A faixa azul representa a gama mínima e máxima de consumo de potência observada. A linha mostra a curva de potência média.", "recording_preview": "Pré-visualização da gravação", "trim_start": "Início do corte", "trim_end": "Fim do corte", "split_preview_title": "Pré-visualização da divisão", "split_preview_found_fmt": "Foram encontrados {count} segmentos.", "split_preview_confirm_fmt": "Clique em Confirmar para dividir este ciclo em {count} ciclos separados.", "merge_preview_title": "Pré-visualização da fusão", "merge_preview_joining_fmt": "A fundir {count} ciclos. As lacunas serão preenchidas com leituras de 0W.", "editor_delete_preview_title": "Pré-visualização de eliminação", "editor_delete_preview_intro": "Os ciclos selecionados serão eliminados permanentemente:", "editor_delete_preview_confirm": "Clique em Confirmar para eliminar permanentemente estes registos de ciclos.", "no_power_preview": "*Não há dados de potência disponíveis para pré-visualização.*", "profile_comparison": "Comparação de perfis", "actual_cycle_label": "Este ciclo (real)", "storage_usage_header": "Uso de armazenamento", "storage_file_size": "Tamanho do ficheiro", "storage_cycles": "Ciclos", "storage_profiles": "Perfis", "storage_debug_traces": "Traços de depuração", "overview_suffix": "Visão geral", "phase_preview_for_profile": "Pré-visualização de fase para o perfil", "current_ranges_header": "Intervalos actuais", "assign_phases_help": "Use as acções abaixo para adicionar, editar, eliminar ou guardar intervalos.", "profile_summary_header": "Resumo do perfil", "recent_cycles_header": "Ciclos recentes", "trim_cycle_preview_title": "Pré-visualização do corte do ciclo", "trim_cycle_preview_no_data": "Não há dados de potência disponíveis para este ciclo.", "trim_cycle_preview_kept_suffix": "mantido", "table_program": "Programa", "table_when": "Quando", "table_length": "Duração", "table_match": "Correspondência", "table_profile": "Perfil", "table_cycles": "Ciclos", "table_avg_length": "Duração média", "table_last_run": "Última execução", "table_avg_energy": "Energia média", "table_detected_program": "Programa detetado", "table_confidence": "Confiança", "table_reported": "Reportado", "phase_builtin_suffix": "(Embutido)", "phase_none_available": "Não há fases disponíveis.", "settings_deprecation_warning": "⚠️ **Tipo de dispositivo obsoleto:** {device_type} está programado para remoção em uma versão futura. O pipeline correspondente do WashData não produz resultados confiáveis ​​para esta classe de dispositivo. Sua integração continua funcionando durante o período de descontinuação; para silenciar este aviso, mude **Tipo de dispositivo** abaixo para um dos tipos suportados (Máquina de lavar, Secadora, Combinação de lavadora e secadora, Máquina de lavar louça, Fritadeira de ar, Máquina de fazer pão ou Bomba) ou para **Outro (Avançado)** se o seu aparelho não corresponder a nenhum dos tipos suportados. **Outros (Avançado)** fornece padrões intencionalmente genéricos que não são ajustados para nenhum dispositivo específico, portanto, você mesmo precisará configurar limites, tempos limite e parâmetros correspondentes; todas as suas configurações existentes são preservadas quando você muda.", "phase_other_device_types": "Outros tipos de dispositivos:" } }, "interactive_editor_action": { "options": { "split": "Dividir um ciclo (encontrar lacunas)", "merge": "Fundir ciclos (juntar fragmentos)", "delete": "Eliminar ciclo(s)" } }, "split_mode": { "options": { "auto": "Detetar automaticamente intervalos inativos", "manual": "Carimbos temporais manuais" } }, "diagnostics_action": { "options": { "reprocess_history": "Manutenção: reprocessar e optimizar dados", "clear_debug_data": "Limpar dados de depuração (libertar espaço)", "wipe_history": "Limpar TODOS os dados deste dispositivo (irreversível)", "export_import": "Exportar/Importar JSON com definições (copiar/colar)" } }, "export_import_mode": { "options": { "export": "Exportar todos os dados", "import": "Importar/fundir dados" } }, "manage_cycles_action": { "options": { "auto_label_cycles": "Rotular automaticamente ciclos antigos", "select_cycle_to_label": "Rotular ciclo específico", "select_cycle_to_delete": "Eliminar ciclo", "interactive_editor": "Editor interactivo de fusão/divisão", "trim_cycle": "Cortar dados do ciclo" } }, "manage_profiles_action": { "options": { "create_profile": "Criar novo perfil", "edit_profile": "Editar/renomear perfil", "delete_profile": "Eliminar perfil", "profile_stats": "Estatísticas do perfil", "cleanup_profile": "Limpar histórico - gráfico e eliminação", "assign_phases": "Atribuir intervalos de fase" } }, "manage_phase_catalog_action": { "options": { "create_custom_phase": "Criar nova fase", "edit_custom_phase": "Editar fase", "delete_custom_phase": "Eliminar fase" } }, "assign_profile_phases_action": { "options": { "add_range": "Adicionar intervalo de fase", "edit_range": "Editar intervalo de fase", "delete_range": "Eliminar intervalo de fase", "clear_ranges": "Limpar todos os intervalos", "auto_detect_ranges": "Detectar fases automaticamente", "save_ranges": "Guardar e regressar" } }, "record_cycle_action": { "options": { "refresh_status": "Actualizar estado", "stop_recording": "Parar gravação (guardar e processar)", "start_recording": "Iniciar nova gravação", "process_recording": "Processar última gravação (cortar e guardar)", "discard_recording": "Descartar última gravação" } }, "record_process_save_mode": { "options": { "new_profile": "Criar novo perfil", "existing_profile": "Adicionar a perfil existente", "discard": "Descartar gravação" } }, "resolve_feedback_action": { "options": { "confirm": "Confirmar - detecção correcta", "correct": "Corrigir - escolher programa/duração", "ignore": "Ignorar - falso positivo/ciclo ruidoso", "delete": "Eliminar - remover do histórico" } }, "assign_profile_phases_auto_detect_action": { "options": { "name_phases": "Nomear e aplicar fases", "cancel": "Voltar sem alterações" } }, "trim_cycle_action": { "options": { "set_start": "Definir ponto de início", "set_end": "Definir ponto de fim", "reset": "Repor para duração total", "apply": "Aplicar corte", "cancel": "Cancelar" } }, "device_type": { "options": { "washing_machine": "Máquina de lavar", "dryer": "Secador", "washer_dryer": "Combinação Lavadora e Secadora", "dishwasher": "Máquina de lavar louça", "coffee_machine": "Máquina de café (obsoleta)", "ev": "Veículo elétrico (obsoleto)", "air_fryer": "Fritadeira de ar", "heat_pump": "Bomba de calor (obsoleta)", "bread_maker": "Máquina de fazer pão", "pump": "Bomba / Bomba de depósito", "oven": "Forno (obsoleto)", "other": "Outro (avançado)" } } }, "services": { "label_cycle": { "name": "Rotular ciclo", "description": "Atribua um perfil existente a um ciclo anterior ou remova o rótulo.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData a rotular." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo a rotular." }, "profile_name": { "name": "Nome do perfil", "description": "O nome de um perfil existente (crie perfis no menu Gerir perfis). Deixe em branco para remover o rótulo." } } }, "create_profile": { "name": "Criar perfil", "description": "Crie um novo perfil (autónomo ou baseado num ciclo de referência).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData." }, "profile_name": { "name": "Nome do perfil", "description": "Nome do novo perfil (ex.: 'Intensivo', 'Delicados')." }, "reference_cycle_id": { "name": "ID do ciclo de referência", "description": "ID de ciclo opcional para basear este perfil." } } }, "delete_profile": { "name": "Eliminar perfil", "description": "Elimine um perfil e opcionalmente remova o rótulo dos ciclos que o utilizam.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData." }, "profile_name": { "name": "Nome do perfil", "description": "O perfil a eliminar." }, "unlabel_cycles": { "name": "Remover rótulo dos ciclos", "description": "Remova o rótulo do perfil dos ciclos que utilizam este perfil." } } }, "auto_label_cycles": { "name": "Rotular automaticamente ciclos antigos", "description": "Rotule retroactivamente ciclos sem rótulo usando correspondência de perfil.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData." }, "confidence_threshold": { "name": "Limiar de confiança", "description": "Confiança mínima de correspondência (0,50-0,95) para aplicar rótulos." } } }, "export_config": { "name": "Exportar configuração", "description": "Exporte os perfis, ciclos e definições deste dispositivo para um ficheiro JSON (por dispositivo).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData a exportar." }, "path": { "name": "Caminho", "description": "Caminho de ficheiro absoluto opcional para escrever (predefinição: /config/ha_washdata_export_{entry}.json)." } } }, "import_config": { "name": "Importar configuração", "description": "Importe perfis, ciclos e definições para este dispositivo a partir de um ficheiro JSON de exportação (as definições podem ser substituídas).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData para onde importar." }, "path": { "name": "Caminho", "description": "Caminho absoluto para o ficheiro JSON de exportação a importar." } } }, "submit_cycle_feedback": { "name": "Enviar feedback do ciclo", "description": "Confirme ou corrija um programa detectado automaticamente após um ciclo concluído. Forneça `entry_id` (avançado) ou `device_id` (recomendado).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData (recomendado em vez de entry_id)." }, "entry_id": { "name": "ID de entrada", "description": "O ID de entrada de configuração do dispositivo (alternativa ao device_id)." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo mostrado na notificação/registos de feedback." }, "user_confirmed": { "name": "Confirmar programa detectado", "description": "Defina como verdadeiro se o programa detectado estiver correcto." }, "corrected_profile": { "name": "Perfil corrigido", "description": "Se não confirmar, forneça o nome correcto do perfil/programa." }, "corrected_duration": { "name": "Duração corrigida (segundos)", "description": "Duração corrigida opcional em segundos." }, "notes": { "name": "Notas", "description": "Notas opcionais sobre este ciclo." } } }, "record_start": { "name": "Gravar início do ciclo", "description": "Comece a gravar manualmente um ciclo limpo (ignora toda a lógica de correspondência).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData a gravar." } } }, "record_stop": { "name": "Gravar paragem do ciclo", "description": "Parar a gravação manual.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData para parar a gravação." } } }, "trim_cycle": { "name": "Cortar ciclo", "description": "Corte os dados de potência de um ciclo anterior para uma janela temporal específica.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo a cortar." }, "trim_start_s": { "name": "Início do corte (segundos)", "description": "Manter dados a partir deste deslocamento em segundos. Predefinição: 0." }, "trim_end_s": { "name": "Fim do corte (segundos)", "description": "Manter dados até este deslocamento em segundos. Predefinição = duração total." } } }, "pause_cycle": { "name": "Ciclo de pausa", "description": "Pause o ciclo ativo para um dispositivo WashData.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData a ser pausado." } } }, "resume_cycle": { "name": "Retomar ciclo", "description": "Retome um ciclo pausado para um dispositivo WashData.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData a ser retomado." } } } }, "entity": { "binary_sensor": { "running": { "name": "A funcionar" }, "match_ambiguity": { "name": "Ambiguidade de correspondência" } }, "sensor": { "washer_state": { "name": "Estado", "state": { "off": "Desligado", "idle": "Inactivo", "starting": "A iniciar", "running": "A funcionar", "paused": "Em pausa", "user_paused": "Em pausa pelo utilizador", "ending": "A terminar", "finished": "Concluído", "anti_wrinkle": "Anti-vincos", "delay_wait": "Esperando para começar", "interrupted": "Interrompido", "force_stopped": "Parado forçosamente", "rinse": "Enxaguar", "unknown": "Desconhecido", "clean": "Limpar" } }, "washer_program": { "name": "Programa" }, "time_remaining": { "name": "Tempo restante" }, "total_duration": { "name": "Duração total" }, "cycle_progress": { "name": "Progresso" }, "current_power": { "name": "Potência actual" }, "elapsed_time": { "name": "Tempo decorrido" }, "debug_info": { "name": "Informação de depuração" }, "match_confidence": { "name": "Confiança na correspondência" }, "top_candidates": { "name": "Principais candidatos", "state": { "none": "Nenhum" } }, "current_phase": { "name": "Fase actual" }, "wash_phase": { "name": "Fase" }, "profile_cycle_count": { "name": "Perfil {profile_name} - contagem", "unit_of_measurement": "ciclos" }, "suggestions": { "name": "Definições sugeridas disponíveis" }, "pump_runs_today": { "name": "Funcionamento da bomba (últimas 24 horas)" }, "cycle_count": { "name": "Contagem de ciclos" } }, "select": { "program_select": { "name": "Programa do ciclo", "state": { "auto_detect": "Detecção automática" } } }, "button": { "force_end_cycle": { "name": "Forçar fim do ciclo" }, "pause_cycle": { "name": "Ciclo de pausa" }, "resume_cycle": { "name": "Retomar ciclo" } } }, "exceptions": { "device_id_required": { "message": "É necessário um device_id válido." }, "cycle_id_required": { "message": "É necessário um cycle_id válido." }, "profile_name_required": { "message": "É necessário um profile_name válido." }, "device_not_found": { "message": "Dispositivo não encontrado." }, "no_config_entry": { "message": "Nenhuma entrada de configuração encontrada para o dispositivo." }, "integration_not_loaded": { "message": "Integração não carregada para este dispositivo." }, "cycle_not_found_or_no_power": { "message": "Ciclo não encontrado ou não possui dados de potência." }, "trim_failed_empty_window": { "message": "Corte falhou - ciclo não encontrado, sem dados de potência ou a janela resultante está vazia." }, "trim_invalid_range": { "message": "trim_end_s deve ser maior que trim_start_s." } } }