1342 lines
77 KiB
JSON
1342 lines
77 KiB
JSON
{
|
||
"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": "\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": "\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."
|
||
}
|
||
}
|
||
}
|