{ "config": { "step": { "user": { "title": "Configuração WashData", "description": "Configure sua máquina de lavar ou outro eletrodoméstico.\n\nSensor de potência é necessário.\n\n**Em seguida, você será perguntado se deseja criar seu primeiro perfil.**", "data": { "name": "Nome do dispositivo", "device_type": "Tipo de dispositivo", "power_sensor": "Sensor de potência", "min_power": "Limite Mínimo de Potência (W)" }, "data_description": { "name": "Um nome amigável para este dispositivo (por exemplo, 'Máquina de lavar', 'Lava-louças').", "device_type": "Que tipo de aparelho é esse? Ajuda a personalizar a detecção e a rotulagem.", "power_sensor": "A entidade do sensor que informa o consumo de energia em tempo real (em watts) do seu plugue inteligente.", "min_power": "As leituras de potência acima deste limite (em watts) indicam que o aparelho está funcionando. Comece com 2W para a maioria dos dispositivos." } }, "first_profile": { "title": "Crie o primeiro perfil", "description": "Um **Ciclo** é uma operação completa do seu eletrodoméstico (por exemplo, uma carga de roupa). Um **Perfil** agrupa esses ciclos por tipo (por exemplo, 'Algodão', 'Lavagem Rápida'). A criação de um perfil agora ajuda a integração a estimar a duração imediatamente.\n\nVocê pode selecionar manualmente esse perfil nos controles do dispositivo se ele não for detectado automaticamente.\n\n**Deixe o 'Nome do perfil' vazio para pular esta etapa.**", "data": { "profile_name": "Nome do perfil (opcional)", "manual_duration": "Duração estimada (minutos)" } } }, "error": { "cannot_connect": "Falha ao conectar", "invalid_auth": "Autenticação inválida", "unknown": "Erro inesperado" }, "abort": { "already_configured": "O dispositivo já está configurado" } }, "options": { "step": { "init": { "menu_options": { "learning_feedbacks": "Revisar feedbacks de aprendizagem", "settings": "Configurações", "notifications": "Notificações", "manage_cycles": "Gerenciar ciclos", "manage_profiles": "Gerenciar perfis", "manage_phase_catalog": "Gerenciar catálogo de fases", "record_cycle": "Gravar ciclo (manual)", "diagnostics": "Diagnóstico e manutenção" } }, "apply_suggestions": { "title": "Copiar valores sugeridos", "description": "Isso copiará os valores sugeridos atuais para as suas configurações salvas. Esta é uma ação única e não habilita substituições automáticas.\n\nValores sugeridos para copiar:\n{suggested}", "data": { "confirm": "Confirmar ação de cópia" } }, "apply_suggestions_confirm": { "title": "Revisar 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": "Configurações", "description": "{deprecation_warning}Ajuste limites de detecção, aprendizado e comportamento avançado. Os padrões funcionam bem para a maioria das configurações.\n\nConfigurações sugeridas disponíveis: {suggestions_count}.\nSe estiver acima de 0, abra as Configurações avançadas e use Aplicar valores sugeridos para revisar as recomendações.", "data": { "apply_suggestions": "Aplicar valores sugeridos", "device_type": "Tipo de dispositivo", "power_sensor": "Entidade sensor de potência", "min_power": "Potência mínima (W)", "off_delay": "Atraso de fim de ciclo (s)", "notify_actions": "Ações de notificação", "notify_people": "Atrasar entrega até essas pessoas estarem em casa", "notify_only_when_home": "Atrasar notificações até a pessoa selecionada estar em casa", "notify_fire_events": "Acionar eventos de automaçã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 antecipada (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 configurações avançadas (próxima etapa)" }, "data_description": { "apply_suggestions": "Marque esta caixa para copiar os valores sugeridos pelo algoritmo de aprendizagem no formulário. Revise antes de salvar.\n\nSugerido (pelo aprendizado):\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": "Selecione o tipo de aparelho (Máquina de lavar, Secadora, Lava-louças, Cafeteira, VE). Esta informação é armazenada em cada ciclo para melhor organização.", "power_sensor": "A entidade do sensor que informa a potência em tempo real (em watts). Você pode alterar isso a qualquer momento sem perder dados históricos - útil se você trocar o plugue inteligente.", "min_power": "As leituras de potência acima deste limite (em watts) indicam que o aparelho está funcionando. Comece com 2W para a maioria dos dispositivos.", "off_delay": "Em segundos, a potência suavizada deve permanecer abaixo do limite de parada para marcar a conclusão. Padrão: 120s.", "notify_actions": "Sequência de ações opcional do Home Assistant para notificações (scripts, notify, TTS, etc.). Se definido, as ações serão executadas antes do serviço de notificação de fallback.", "notify_people": "Entidades de pessoas usadas para controle de presença. Quando ativado, a entrega da notificação é adiada até que pelo menos uma pessoa selecionada esteja em casa.", "notify_only_when_home": "Se ativado, atrasa as notificações até que pelo menos uma pessoa selecionada esteja em casa.", "notify_fire_events": "Se habilitado, dispara eventos do Home Assistant para início e fim de ciclo (ha_washdata_cycle_started e ha_washdata_cycle_ended) para acionar automaçõ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 desativar. Padrão: 0.", "notify_title": "Título personalizado para notificações. Suporta o marcador {device}.", "notify_icon": "Ícone para usar nas notificações (ex.: mdi:washing-machine). Deixe em branco para enviar sem ícone.", "notify_start_message": "Mensagem enviada quando um ciclo é iniciado. Suporta o marcador {device}.", "notify_finish_message": "Mensagem enviada quando um ciclo termina. Suporta os marcadores {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 atualizações de progresso ao vivo no celular.", "data": { "notify_actions": "Ações de notificação", "notify_people": "Atrasar entrega até essas pessoas estarem em casa", "notify_only_when_home": "Atrasar notificações até a pessoa selecionada estar em casa", "notify_fire_events": "Acionar eventos de automaçã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 antecipada (minutos antes do fim)", "notify_live_interval_seconds": "Intervalo de atualização ao vivo (segundos)", "notify_live_overrun_percent": "Margem de sobrecarga nas atualizações ao vivo (%)", "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 salvar", "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": "Marque isto e clique em Enviar para descartar quaisquer alterações acima e voltar ao menu principal.", "notify_actions": "Sequência de ações opcional do Home Assistant para notificações (scripts, notify, TTS, etc.). Se definido, as ações serão executadas antes do serviço de notificação de fallback.", "notify_people": "Entidades de pessoas usadas para controle de presença. Quando ativado, a entrega da notificação é adiada até que pelo menos uma pessoa selecionada esteja em casa.", "notify_only_when_home": "Se ativado, atrasa as notificações até que pelo menos uma pessoa selecionada esteja em casa.", "notify_fire_events": "Se habilitado, dispara eventos do Home Assistant para início e fim de ciclo (ha_washdata_cycle_started e ha_washdata_cycle_ended) para acionar automaçõ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 desativar. Padrão: 0.", "notify_live_interval_seconds": "Com que frequência as atualizações de progresso são enviadas durante o ciclo. Valores mais baixos são mais responsivos, mas consomem mais notificações. Um mínimo de 30 segundos é aplicado - valores abaixo de 30s são arredondados automaticamente para 30s.", "notify_live_overrun_percent": "Margem de segurança acima da contagem estimada de atualizações para ciclos longos (por exemplo, 20% permite 1,2x as atualizaçõ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 {device}.", "notify_icon": "Ícone para usar nas notificações (ex.: mdi:washing-machine). Deixe em branco para enviar sem ícone.", "notify_start_message": "Mensagem enviada quando um ciclo é iniciado. Suporta o marcador {device}.", "notify_finish_message": "Mensagem enviada quando um ciclo termina. Suporta os marcadores {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": "Configurações avançadas", "description": "Ajuste limites de detecção, aprendizado e comportamento avançado. Os padrões funcionam bem para a maioria das configurações.", "sections": { "suggestions_section": { "name": "Configurações sugeridas", "description": "{suggestions_count} sugestões aprendidas disponíveis. Marque Aplicar valores sugeridos para revisar as alterações propostas antes de salvar.", "data": { "apply_suggestions": "Aplicar valores sugeridos" }, "data_description": { "apply_suggestions": "Marque esta caixa para abrir uma etapa de revisão dos valores sugeridos pelo algoritmo de aprendizagem. Nada é salvo automaticamente.\n\nSugerido (pelo aprendizado):\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": "Detecção e limites de potência", "description": "Quando o aparelho é considerado LIGADO ou DESLIGADO, limites de energia e temporização das transições de estado.", "data": { "start_duration_threshold": "Duração do debounce de início (s)", "start_energy_threshold": "Porta de energia de início (Wh)", "completion_min_seconds": "Tempo mínimo de execução para conclusão (segundos)", "start_threshold_w": "Limite de início (W)", "stop_threshold_w": "Limite de parada (W)", "end_energy_threshold": "Porta de energia de fim (Wh)", "running_dead_zone": "Zona morta de início (segundos)", "end_repeat_count": "Contagem de repetições para fim", "min_off_gap": "Intervalo mínimo entre ciclos (s)", "sampling_interval": "Intervalo de amostragem (s)" }, "data_description": { "start_duration_threshold": "Ignore breves picos de energia menores que esta duração (segundos). Filtra picos de inicialização (ex.: 60W por 2s) antes do início real do ciclo. Padrã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. Padrão: 0,005 Wh.", "completion_min_seconds": "Ciclos mais curtos que isso serão marcados como 'interrompidos', mesmo que terminem naturalmente. Padrão: 600s.", "start_threshold_w": "A potência deve subir ACIMA deste limite para INICIAR um ciclo. Defina acima da sua potência em espera. Padrão: min_power + 1 W.", "stop_threshold_w": "A potência deve cair ABAIXO deste limite para FINALIZAR um ciclo. Defina um pouco acima de zero para evitar falsos fins por ruído. Padrão: 0,6 × min_power.", "end_energy_threshold": "O ciclo termina somente se a energia na última janela de atraso de fim estiver abaixo deste valor (Wh). Evita fins falsos se a potência flutuar perto de zero. Padrão: 0,05 Wh.", "running_dead_zone": "Após o início do ciclo, ignore quedas de potência durante esses segundos para evitar detecção falsa de fim durante a fase inicial. Defina como 0 para desativar. Padrão: 0s.", "end_repeat_count": "Número de vezes que a condição de fim (potência abaixo do limite durante off_delay) deve ser atendida consecutivamente antes de encerrar o ciclo. Valores mais altos evitam fins falsos durante pausas. Padrão: 1.", "min_off_gap": "Se um ciclo começar poucos segundos após o término do anterior, eles serão MESCLADOS em um ú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 aprendizado", "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": "Proporção mínima de duração para correspondência (0,1-1,0)", "profile_match_interval": "Intervalo de correspondência de perfil (segundos)", "profile_match_threshold": "Limite de correspondência de perfil", "profile_unmatch_threshold": "Limite de não-correspondência de perfil", "auto_label_confidence": "Confiança para rotulagem automática (0-1)", "learning_confidence": "Confiança para solicitação 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 na correspondência de perfil (0-0,5)" }, "data_description": { "profile_match_min_duration_ratio": "Proporção mínima de duração para correspondência de perfil. O ciclo em execução deve ter pelo menos esta fração da duração do perfil para corresponder. Menor = correspondência mais cedo. Padrã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. Padrã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 correspondente. Maior = correspondência mais rigorosa, menos falsos positivos. Padrão: 0,4.", "profile_unmatch_threshold": "Pontuação de similaridade DTW (0,0–1,0) abaixo da qual um perfil anteriormente correspondido é rejeitado. Deve ser menor que o limite de correspondência para evitar oscilações. Padrão: 0,35.", "auto_label_confidence": "Rotule automaticamente os ciclos com essa confiança ou acima dela na conclusão (0,0–1,0).", "learning_confidence": "Confiança mínima para solicitar verificação do usuário via 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 equivale a 0–50%).", "smoothing_window": "Número de leituras de potência recentes usadas para suavização por média móvel.", "profile_duration_tolerance": "Tolerância usada pela correspondência de perfil para variação na duração total (0,0–0,5). Comportamento padrão: ±25%." } }, "timing_section": { "name": "Temporização, manutenção e depuração", "description": "Watchdog, redefiniçã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": "Timeout sem atualização (s)", "progress_reset_delay": "Atraso para redefinição de progresso (segundos)", "auto_maintenance": "Habilitar manutenção automática", "expose_debug_entities": "Expor entidades de depuração", "save_debug_traces": "Salvar rastreamentos de depuração" }, "data_description": { "watchdog_interval": "Segundos entre verificações do watchdog durante a execução. Padrão: 5s. AVISO: Certifique-se de que seja MAIOR que o intervalo de atualização do seu sensor para evitar paradas falsas (ex.: se o sensor atualiza a cada 60s, use 65s+).", "no_update_active_timeout": "Para sensores que publicam apenas em mudança: force o encerramento de um ciclo ATIVO somente se nenhuma atualização chegar durante esse número de segundos. A conclusão com baixo consumo de energia ainda usa o atraso de desligamento.", "progress_reset_delay": "Após a conclusão de um ciclo (100%), aguarde alguns segundos de inatividade antes de redefinir o progresso para 0%. Padrão: 300s.", "auto_maintenance": "Habilita a manutenção automática (reparar amostras, mesclar fragmentos).", "expose_debug_entities": "Mostra sensores avançados (Confiança, Fase, Ambiguidade) para depuração.", "save_debug_traces": "Armazena dados detalhados de classificação e rastreamento de energia no histórico (aumenta o uso de armazenamento)." } }, "anti_wrinkle_section": { "name": "Proteção anti-rugas (secadoras)", "description": "Ignora rotações do tambor após o ciclo para evitar ciclos fantasma. Apenas secadora / lava e seca.", "data": { "anti_wrinkle_enabled": "Escudo anti-amasso (somente secadora)", "anti_wrinkle_max_power": "Potência máxima do anti-amasso (W)", "anti_wrinkle_max_duration": "Duração máxima do anti-amasso (s)", "anti_wrinkle_exit_power": "Potência de saída do anti-amasso (W)" }, "data_description": { "anti_wrinkle_enabled": "Ignora rotações curtas de baixa potência do tambor após o término de um ciclo para evitar ciclos fantasmas (somente secadora/lava-e-seca).", "anti_wrinkle_max_power": "Rajadas com esta potência ou abaixo são tratadas como rotações anti-amasso em vez de novos ciclos. Aplica-se apenas quando o Escudo Anti-amasso está ativado.", "anti_wrinkle_max_duration": "Duração máxima da rajada para tratar como rotação anti-amasso. Aplica-se apenas quando o Escudo Anti-amasso está ativado.", "anti_wrinkle_exit_power": "Se a potência cair abaixo deste nível, sai do modo anti-amasso imediatamente (desligamento real). Aplica-se apenas quando o Escudo Anti-amasso está ativado." } }, "delay_start_section": { "name": "Detecção de início adiado", "description": "Trata o modo de espera sustentado de baixa potência como 'Aguardando para iniciar' até o ciclo realmente começar.", "data": { "delay_start_detect_enabled": "Ativar detecção de início atrasado", "delay_confirm_seconds": "Início adiado: 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 Limite de parada (W) e Limite de início (W) por esse número de segundos antes de o WashData entrar em 'Aguardando para iniciar'. Filtra picos breves da navegação pelo menu. Padrã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": "Gatilhos externos, porta e pausa", "description": "Sensor externo opcional de fim de ciclo, sensor de porta para detectar pausa/limpo e interruptor de corte de energia ao pausar.", "data": { "external_end_trigger_enabled": "Habilitar 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 ao desligar)", "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": "Habilita o monitoramento de um sensor binário externo para acionar a conclusão do ciclo.", "external_end_trigger": "Selecione uma entidade de sensor binário. Quando este sensor for acionado, o ciclo atual terminará com o status 'concluído'.", "external_end_trigger_inverted": "Por padrão, o gatilho é acionado quando o sensor é LIGADO. Marque 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 de bomba", "description": "Somente para o tipo de dispositivo bomba. Dispara um evento se um ciclo da bomba ultrapassar essa 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 ações de manutenção, como mesclar ciclos fragmentados ou migrar dados armazenados.\n\n**Uso de armazenamento**\n\n- Tamanho do arquivo: {file_size_kb} KB\n- Ciclos: {cycle_count}\n- Perfis: {profile_count}\n- Rastreamentos de depuração: {debug_count}", "menu_options": { "reprocess_history": "Manutenção: reprocessar e otimizar dados", "clear_debug_data": "Limpar dados de depuração (liberar espaço)", "wipe_history": "Limpar TODOS os dados deste dispositivo (irreversível)", "export_import": "Exportar/Importar JSON com configurações (copiar/colar)", "menu_back": "← Voltar" } }, "clear_debug_data": { "title": "Limpar dados de depuração", "description": "Tem certeza de que deseja excluir todos os rastreamentos de depuração armazenados? Isso liberará espaço, mas removerá informações detalhadas de classificação de ciclos anteriores." }, "manage_cycles": { "title": "Gerenciar ciclos", "description": "Ciclos recentes:\n{recent_cycles}", "menu_options": { "auto_label_cycles": "Rotular automaticamente ciclos anteriores", "select_cycle_to_label": "Rotular ciclo específico", "select_cycle_to_delete": "Excluir ciclo", "interactive_editor": "Editor interativo de mesclar/dividir", "trim_cycle_select": "Recortar dados do ciclo", "menu_back": "← Voltar" } }, "manage_cycles_empty": { "title": "Gerenciar ciclos", "description": "Nenhum ciclo registrado ainda.", "menu_options": { "auto_label_cycles": "Rotular automaticamente ciclos anteriores", "menu_back": "← Voltar" } }, "manage_profiles": { "title": "Gerenciar perfis", "description": "Resumo dos perfis:\n{profile_summary}", "menu_options": { "create_profile": "Criar novo perfil", "edit_profile": "Editar/renomear perfil", "delete_profile_select": "Excluir perfil", "profile_stats": "Estatísticas de perfil", "cleanup_profile": "Limpar histórico - gráfico e exclusão", "assign_profile_phases_select": "Atribuir intervalos de fase", "menu_back": "← Voltar" } }, "manage_profiles_empty": { "title": "Gerenciar perfis", "description": "Nenhum perfil criado ainda.", "menu_options": { "create_profile": "Criar novo perfil", "menu_back": "← Voltar" } }, "manage_phase_catalog": { "title": "Gerenciar catálogo de fases", "description": "Catálogo de fases (padrõ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": "Excluir fase", "menu_back": "← Voltar" } }, "phase_catalog_create": { "title": "Criar fase personalizada", "description": "Crie um nome e uma descrição de fase personalizados e escolha a qual tipo de dispositivo ela 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": "Selecione uma fase personalizada para editar.", "data": { "phase_name": "Fase personalizada" } }, "phase_catalog_edit": { "title": "Editar fase personalizada", "description": "Editando fase: {phase_name}", "data": { "phase_name": "Nome da fase", "phase_description": "Descrição da fase" } }, "phase_catalog_delete": { "title": "Excluir fase personalizada", "description": "Selecione uma fase personalizada para excluir. Quaisquer intervalos atribuídos usando esta fase serão removidos.", "data": { "phase_name": "Fase personalizada" } }, "assign_profile_phases": { "title": "Atribuir intervalos de fase", "description": "Visualização de fase do perfil: **{profile_name}**\n\n{timeline_svg}\n\n**Intervalos atuais:**\n{current_ranges}\n\nUse as ações abaixo para adicionar, editar, excluir ou salvar intervalos.", "menu_options": { "assign_profile_phases_add": "Adicionar intervalo de fase", "assign_profile_phases_edit_select": "Editar intervalo de fase", "assign_profile_phases_delete": "Excluir intervalo de fase", "phase_ranges_clear": "Limpar todos os intervalos", "assign_profile_phases_auto_detect": "Detectar fases automaticamente", "phase_ranges_save": "Salvar e voltar", "menu_back": "← Voltar" } }, "assign_profile_phases_add": { "title": "Adicionar intervalo de fase", "description": "Adicione um intervalo de fase ao rascunho atual.", "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": "Selecione um intervalo para editar.", "data": { "range_index": "Intervalo de fase" } }, "assign_profile_phases_edit": { "title": "Editar intervalo de fase", "description": "Atualize o intervalo de fase selecionado.", "data": { "phase_name": "Fase", "start_min": "Minuto de início", "end_min": "Minuto de fim" } }, "assign_profile_phases_delete": { "title": "Excluir intervalo de fase", "description": "Selecione 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 ação abaixo.", "data": { "action": "Açã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": "Selecione um perfil para configurar os intervalos de fase.", "data": { "profile": "Perfil" } }, "profile_stats": { "title": "Estatísticas de 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', 'Pesados', '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": "Selecione um perfil para renomear", "data": { "profile": "Perfil" } }, "rename_profile": { "title": "Editar detalhes do perfil", "description": "Perfil atual: {current_name}", "data": { "new_name": "Nome do perfil", "manual_duration": "Duração manual (minutos)" } }, "delete_profile_select": { "title": "Excluir perfil", "description": "Selecione um perfil para excluir", "data": { "profile": "Perfil" } }, "delete_profile_confirm": { "title": "Confirmar exclusão do perfil", "description": "⚠️ Isso excluirá permanentemente o perfil: {profile_name}", "data": { "unlabel_cycles": "Remover rótulo dos ciclos que usam este perfil" } }, "auto_label_cycles": { "title": "Rotular automaticamente ciclos anteriores", "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": "Selecione o ciclo para rotular", "description": "✓ = concluído, ⚠ = retomado, ✗ = interrompido", "data": { "cycle_id": "Ciclo" } }, "select_cycle_to_delete": { "title": "Excluir ciclo", "description": "⚠️ Isso excluirá permanentemente o ciclo selecionado", "data": { "cycle_id": "Ciclo para excluir" } }, "label_cycle": { "title": "Rotular ciclo", "description": "{cycle_info}", "data": { "profile_name": "Perfil", "new_profile_name": "Novo nome de perfil (se estiver criando)" } }, "post_process": { "title": "Processar histórico (mesclar/dividir)", "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 retroação (horas)", "gap_seconds": "Limite de mesclagem/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": "Limite para decidir entre divisão e mesclagem. Lacunas MENORES que isso são mescladas. Lacunas MAIORES que isso são divididas. Reduza este valor para forçar a divisão de um ciclo mesclado incorretamente." } }, "cleanup_profile": { "title": "Limpar histórico - selecione o perfil", "description": "Selecione um perfil para visualizar. Isso gerará um gráfico mostrando todos os ciclos anteriores deste perfil para ajudar a identificar valores discrepantes.", "data": { "profile": "Perfil" } }, "cleanup_select": { "title": "Limpar histórico - gráfico e exclusão", "description": "![Gráfico]({graph_url})\n\n**Visualizando {profile_name}**\n\nO gráfico mostra ciclos individuais como linhas coloridas. Identifique os discrepantes (linhas afastadas do grupo) e combine suas cores na lista abaixo para excluí-los.\n\n**Selecione os ciclos para excluir PERMANENTEMENTE:**", "data": { "cycles_to_delete": "Ciclos para excluir (verifique as cores correspondentes)" } }, "interactive_editor": { "title": "Editor interativo de mesclar/dividir", "description": "Selecione uma ação manual para executar no histórico do seu ciclo.", "menu_options": { "editor_split": "Dividir um ciclo (encontrar lacunas)", "editor_merge": "Mesclar ciclos (unir fragmentos)", "editor_delete": "Excluir ciclo(s)", "menu_back": "← Voltar" } }, "editor_select": { "title": "Selecionar ciclos", "description": "Selecione o(s) ciclo(s) a serem processados.\n\n{info_text}", "data": { "selected_cycles": "Ciclos" } }, "editor_configure": { "title": "Configurar e aplicar", "description": "{preview_md}", "data": { "confirm_action": "Ação", "merged_profile": "Perfil resultante", "new_profile_name": "Novo nome de perfil", "confirm_commit": "Sim, confirmo esta açã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 intervalo ocioso maior que isso 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 ocioso maior do que este causará uma divisão.", "data": { "min_gap_seconds": "Limite do intervalo de divisão (segundos)" } }, "editor_split_manual_params": { "title": "Carimbos de data/hora de divisão manual", "description": "{preview_md}Janela do ciclo: **{cycle_start_wallclock} → {cycle_end_wallclock}** em {cycle_date}.\n\nInsira um ou mais carimbos de data/hora de divisão (`HH:MM` ou `HH:MM:SS`), um por linha. O ciclo será cortado em cada carimbo de data/hora — N carimbos de data/hora produzem N+1 segmentos.", "data": { "split_timestamps": "Timestamps de divisão" } }, "reprocess_history": { "title": "Manutenção: reprocessar e otimizar dados", "description": "Executa 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 isso para corrigir problemas de dados ou aplicar novos algoritmos.**" }, "wipe_history": { "title": "Limpar histórico (somente para testes)", "description": "⚠️ Isso excluirá permanentemente TODOS os ciclos e perfis armazenados neste dispositivo. Esta ação não pode ser desfeita!" }, "export_import": { "title": "Exportar/Importar JSON", "description": "Copie/cole ciclos, perfis e configurações para este dispositivo. Exporte abaixo ou cole JSON para importar.", "data": { "mode": "Ação", "json_payload": "JSON de configuração completa" }, "data_description": { "mode": "Escolha Exportar para copiar dados e configurações atuais ou Importar para colar dados exportados de outro dispositivo WashData.", "json_payload": "Para exportar: copie este JSON (inclui ciclos, perfis e todas as configurações ajustadas). Para importar: cole o JSON exportado do WashData." } }, "record_cycle": { "title": "Gravar ciclo", "description": "Grave manualmente um ciclo para criar um perfil limpo e sem interferências.\n\nStatus: **{status}**\nDuração: {duration}s\nAmostras: {samples}", "menu_options": { "record_refresh": "Atualizar status", "record_stop": "Parar gravação (salvar e processar)", "record_start": "Iniciar nova gravação", "record_process": "Processar última gravação (recortar e salvar)", "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 é atualizado com alterações no formulário.*\n\nA gravação foi interrompida. Os cortes são alinhados à taxa de amostragem detectada (~{sampling_rate}s).\n\nDuração bruta: {duration}s\nAmostras: {samples}", "data": { "head_trim": "Corte do início (segundos)", "tail_trim": "Corte do fim (segundos)", "save_mode": "Destino de salvamento", "profile_name": "Nome do perfil" } }, "learning_feedbacks": { "title": "Feedbacks de aprendizagem", "description": "Feedback pendente: {count}\n\n{pending_table}\n\nSelecione uma solicitação de revisão de ciclo para processar.", "menu_options": { "learning_feedbacks_pick": "Revisar um feedback pendente", "learning_feedbacks_dismiss_all": "Descartar todo o feedback pendente", "menu_back": "← Voltar" } }, "learning_feedbacks_pick": { "title": "Selecionar feedback para revisar", "description": "Selecione uma solicitação de revisão de ciclo para abrir.", "data": { "selected_feedback": "Selecionar ciclo para revisar" } }, "learning_feedbacks_empty": { "title": "Feedbacks de aprendizagem", "description": "Nenhuma solicitação de feedback pendente foi encontrada.", "menu_options": { "menu_back": "← Voltar" } }, "learning_feedbacks_dismiss_all": { "title": "Dispensar todos os feedbacks pendentes", "description": "Você está prestes a dispensar **{count}** solicitações de feedback pendentes. Os ciclos dispensados permanecem no seu histórico, mas não contribuirão com novo sinal de aprendizagem. Isso 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: descartar todas as solicitações 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 ação abaixo:__", "data": { "action": "O que você gostaria de fazer?", "corrected_profile": "Programa correto (se estiver corrigindo)", "corrected_duration": "Duração correta em segundos (se estiver corrigindo)" } }, "trim_cycle_select": { "title": "Recortar ciclo - selecione o ciclo", "description": "Selecione um ciclo para recortar. ✓ = concluído, ⚠ = retomado, ✗ = interrompido", "data": { "cycle_id": "Ciclo" } }, "trim_cycle": { "title": "Recortar ciclo", "description": "Janela atual: {trim_summary}\n\n{trim_svg}", "data": { "action": "Ação" } }, "trim_cycle_start": { "title": "Definir início do recorte", "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 recorte", "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": "Falha na importação. Cole um JSON de exportação WashData válido.", "select_exactly_one": "Selecione exatamente um ciclo para esta ação.", "select_at_least_one": "Selecione pelo menos um ciclo para esta ação.", "select_at_least_two": "Selecione pelo menos dois ciclos para esta ação.", "profile_exists": "Já existe um perfil com este nome", "rename_failed": "Falha ao renomear 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 selecionada não foi encontrada.", "invalid_phase_name": "O nome da fase não pode ficar vazio.", "phase_name_too_long": "O nome da fase é muito 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 se sobrepõem. Ajuste os intervalos e tente novamente.", "incomplete_phase_row": "Cada linha de fase deve incluir uma fase mais os valores completos de início/fim para o modo selecionado.", "timestamp_mode_cycle_required": "Selecione um ciclo de origem ao usar o modo de carimbo de data/hora.", "no_phase_ranges": "Ainda não há intervalos de fase disponíveis para essa ação.", "feedback_notification_title": "WashData: verificar ciclo ({device})", "feedback_notification_message": "**Dispositivo**: {device}\n**Programa**: {program} ({confidence}% de confiança)\n**Horário**: {time}\n\nWashData precisa da sua ajuda para verificar este ciclo detectado.\n\nVá para **Configurações > Dispositivos e serviços > WashData > Configurar > Feedbacks de aprendizagem** para confirmar ou corrigir este resultado.", "suggestions_ready_notification_title": "WashData: configurações sugeridas prontas ({device})", "suggestions_ready_notification_message": "O sensor **Configurações sugeridas** agora exibe **{count}** recomendações acionáveis.\n\nPara revisá-las e aplicá-las: **Configurações > Dispositivos e serviços > WashData > Configurar > Configurações avançadas > Aplicar valores sugeridos**.\n\nAs sugestões são opcionais e mostradas para revisão antes de salvar.", "trim_range_invalid": "O início deve ser antes do fim. Ajuste seus pontos de recorte.", "trim_failed": "O recorte falhou. O ciclo pode não existir mais ou a janela está vazia.", "invalid_split_timestamp": "O timestamp é inválido ou está fora da janela do ciclo. Use 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 desses timestamps. Verifique se cada timestamp está dentro da janela do ciclo e se os segmentos têm pelo menos 1 minuto de duração.", "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": "Nenhum segmento divisível foi encontrado no ciclo selecionado.", "cycle_not_found": "Não foi possível carregar o ciclo selecionado.", "no_power_data": "Não há dados de rastreamento de energia disponíveis para o ciclo selecionado.", "no_profiles_found": "Nenhum perfil encontrado. Crie um perfil primeiro.", "no_profiles_for_matching": "Nenhum perfil disponível para correspondência. Crie perfis primeiro.", "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 ao vivo" } }, "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 dispositivos", "current_suffix": "(atual)", "editor_select_info": "Selecione 1 ciclo para dividir ou 2 ou mais ciclos para mesclar.", "editor_select_info_split": "Selecione 1 ciclo para dividir.", "editor_select_info_merge": "Selecione 2 ou mais ciclos para mesclar.", "editor_select_info_delete": "Selecione 1 ou mais ciclos para excluir.", "no_cycles_recorded": "Nenhum ciclo registrado ainda.", "profile_summary_line": "- **{name}**: {count} ciclos, {avg}m de média", "no_profiles_created": "Nenhum perfil criado ainda.", "phase_preview": "Pré-visualização de 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}m de média)", "profile_option_short_fmt": "{name} ({count} ciclos, ~{duration}m)", "deleted_cycles_from_profile": "{count} ciclo(s) excluído(s) 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}m, Atual: {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 ação abaixo:__", "tbl_count": "Contagem", "tbl_avg": "Média", "tbl_min": "Mínimo", "tbl_max": "Máx.", "tbl_energy_avg": "Energia (média)", "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 o intervalo de consumo de energia mínimo e máximo observado. A linha mostra a curva de potência média.", "recording_preview": "Pré-visualização da gravação", "trim_start": "Início do recorte", "trim_end": "Fim do recorte", "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 mesclagem", "merge_preview_joining_fmt": "Unindo {count} ciclos. As lacunas serão preenchidas com leituras de 0W.", "editor_delete_preview_title": "Prévia de exclusão", "editor_delete_preview_intro": "Os ciclos selecionados serão excluídos permanentemente:", "editor_delete_preview_confirm": "Clique em Confirmar para excluir permanentemente esses registros de ciclos.", "no_power_preview": "*Não há dados de energia 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 arquivo", "storage_cycles": "Ciclos", "storage_profiles": "Perfis", "storage_debug_traces": "Rastreamentos de depuração", "overview_suffix": "Visão geral", "phase_preview_for_profile": "Pré-visualização de fase para o perfil", "current_ranges_header": "Intervalos atuais", "assign_phases_help": "Use as ações abaixo para adicionar, editar, excluir ou salvar intervalos.", "profile_summary_header": "Resumo dos perfis", "recent_cycles_header": "Ciclos recentes", "trim_cycle_preview_title": "Pré-visualização do recorte 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 detectado", "table_confidence": "Confiança", "table_reported": "Informado", "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": "Mesclar ciclos (unir fragmentos)", "delete": "Excluir ciclo(s)" } }, "split_mode": { "options": { "auto": "Detectar automaticamente intervalos ociosos", "manual": "Timestamps manuais" } }, "diagnostics_action": { "options": { "reprocess_history": "Manutenção: reprocessar e otimizar dados", "clear_debug_data": "Limpar dados de depuração (liberar espaço)", "wipe_history": "Limpar TODOS os dados deste dispositivo (irreversível)", "export_import": "Exportar/Importar JSON com configurações (copiar/colar)" } }, "export_import_mode": { "options": { "export": "Exportar todos os dados", "import": "Importar/mesclar dados" } }, "manage_cycles_action": { "options": { "auto_label_cycles": "Rotular automaticamente ciclos anteriores", "select_cycle_to_label": "Rotular ciclo específico", "select_cycle_to_delete": "Excluir ciclo", "interactive_editor": "Editor interativo de mesclar/dividir", "trim_cycle": "Recortar dados do ciclo" } }, "manage_profiles_action": { "options": { "create_profile": "Criar novo perfil", "edit_profile": "Editar/renomear perfil", "delete_profile": "Excluir perfil", "profile_stats": "Estatísticas de perfil", "cleanup_profile": "Limpar histórico - gráfico e exclusã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": "Excluir fase" } }, "assign_profile_phases_action": { "options": { "add_range": "Adicionar intervalo de fase", "edit_range": "Editar intervalo de fase", "delete_range": "Excluir intervalo de fase", "clear_ranges": "Limpar todos os intervalos", "auto_detect_ranges": "Detectar fases automaticamente", "save_ranges": "Salvar e voltar" } }, "record_cycle_action": { "options": { "refresh_status": "Atualizar status", "stop_recording": "Parar gravação (salvar e processar)", "start_recording": "Iniciar nova gravação", "process_recording": "Processar última gravação (recortar e salvar)", "discard_recording": "Descartar última gravação" } }, "record_process_save_mode": { "options": { "new_profile": "Criar novo perfil", "existing_profile": "Adicionar ao perfil existente", "discard": "Descartar gravação" } }, "resolve_feedback_action": { "options": { "confirm": "Confirmar - detecção correta", "correct": "Corrigir - escolher programa/duração", "ignore": "Ignorar - ciclo falso positivo/ruído", "delete": "Excluir - 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": "Redefinir para duração total", "apply": "Aplicar recorte", "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 da máquina de lavar a ser rotulado." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo a ser rotulado." }, "profile_name": { "name": "Nome do perfil", "description": "O nome de um perfil existente (crie perfis no menu Gerenciar Perfis). Deixe em branco para remover o rótulo." } } }, "create_profile": { "name": "Criar perfil", "description": "Crie um novo perfil (autônomo ou baseado em um ciclo de referência).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar." }, "profile_name": { "name": "Nome do perfil", "description": "Nome do novo perfil (ex.: 'Pesados', 'Delicados')." }, "reference_cycle_id": { "name": "ID do ciclo de referência", "description": "ID de ciclo opcional para basear este perfil." } } }, "delete_profile": { "name": "Excluir perfil", "description": "Exclua um perfil e, opcionalmente, remova o rótulo dos ciclos que o utilizam.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar." }, "profile_name": { "name": "Nome do perfil", "description": "O perfil a ser excluído." }, "unlabel_cycles": { "name": "Remover rótulo dos ciclos", "description": "Remove o rótulo do perfil dos ciclos que o utilizam." } } }, "auto_label_cycles": { "name": "Rotular automaticamente ciclos anteriores", "description": "Rotule retroativamente ciclos não rotulados usando correspondência de perfil.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar." }, "confidence_threshold": { "name": "Limite 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 configurações deste dispositivo para um arquivo JSON (por dispositivo).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar a exportar." }, "path": { "name": "Caminho", "description": "Caminho de arquivo absoluto opcional para gravação (o padrão é /config/ha_washdata_export_{entry}.json)." } } }, "import_config": { "name": "Importar configuração", "description": "Importe perfis, ciclos e configurações para este dispositivo a partir de um arquivo de exportação JSON (as configurações podem ser substituídas).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar para importar." }, "path": { "name": "Caminho", "description": "Caminho absoluto para o arquivo JSON de exportação a ser importado." } } }, "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 da 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/registros de feedback." }, "user_confirmed": { "name": "Confirmar programa detectado", "description": "Defina como verdadeiro se o programa detectado estiver correto." }, "corrected_profile": { "name": "Perfil corrigido", "description": "Se não for confirmado, forneça o nome correto do perfil/programa." }, "corrected_duration": { "name": "Duração corrigida (segundos)", "description": "Duração corrigida opcional em segundos." }, "notes": { "name": "Observações", "description": "Observações opcionais sobre este ciclo." } } }, "record_start": { "name": "Gravar início do ciclo", "description": "Inicia a gravação manual de um ciclo limpo (ignora toda a lógica de correspondência).", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar a ser gravado." } } }, "record_stop": { "name": "Gravar parada do ciclo", "description": "Interrompe a gravação manual.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo da máquina de lavar para parar a gravação." } } }, "trim_cycle": { "name": "Recortar ciclo", "description": "Recorta os dados de potência de um ciclo anterior para uma janela de tempo específica.", "fields": { "device_id": { "name": "Dispositivo", "description": "O dispositivo WashData." }, "cycle_id": { "name": "ID do ciclo", "description": "O ID do ciclo a ser recortado." }, "trim_start_s": { "name": "Início do recorte (segundos)", "description": "Mantém os dados a partir deste deslocamento em segundos. Padrão: 0." }, "trim_end_s": { "name": "Fim do recorte (segundos)", "description": "Mantém os dados até este deslocamento em segundos. Padrã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": "Em funcionamento" }, "match_ambiguity": { "name": "Ambiguidade de correspondência" } }, "sensor": { "washer_state": { "name": "Estado", "state": { "off": "Desligado", "idle": "Ocioso", "starting": "Iniciando", "running": "Em funcionamento", "paused": "Pausado", "user_paused": "Pausado pelo usuário", "ending": "Encerrando", "finished": "Concluído", "anti_wrinkle": "Anti-amasso", "delay_wait": "Esperando para começar", "interrupted": "Interrompido", "force_stopped": "Parada forçada", "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 atual" }, "elapsed_time": { "name": "Tempo decorrido" }, "debug_info": { "name": "Informações de depuração" }, "match_confidence": { "name": "Confiança na correspondência" }, "top_candidates": { "name": "Principais candidatos", "state": { "none": "Nenhum" } }, "current_phase": { "name": "Fase atual" }, "wash_phase": { "name": "Fase" }, "profile_cycle_count": { "name": "Contagem de ciclos de {profile_name}", "unit_of_measurement": "ciclos" }, "suggestions": { "name": "Configuraçõ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 sem dados de potência." }, "trim_failed_empty_window": { "message": "Recorte falhou - ciclo não encontrado, sem dados de energia ou a janela resultante está vazia." }, "trim_invalid_range": { "message": "trim_end_s deve ser maior que trim_start_s." } } }