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