feat(sono): madrugada silenciosa e N sons para acordar

Antes um único som acima do limiar, um quadro de movimento ou um pulso
do PIR acordavam o rosto; deitado na cama, ele acordava toda hora.

- Som: precisa de `somAcordar` barulhos (padrão 3) em 1 minuto; o mesmo
  barulho comprido conta uma vez.
- Madrugada silenciosa (padrão 23h às 7h, configurável): movimento,
  rastreamento, PIR e modo presença não acordam; só barulho ALTO
  repetido, toque ou conversa.
- Vida: de madrugada não acorda sozinho e volta a dormir mesmo com gente
  se mexendo, a não ser que alguém tenha interagido nos últimos 10 min.
- Painel: grupo "Sono e madrugada" nos Ajustes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
julio
2026-10-06 04:48:11 -03:00
co-authored by Claude Opus 5.5
parent 5fcd038861
commit dd40c730be
8 changed files with 135 additions and 22 deletions
+7 -1
View File
@@ -30,6 +30,12 @@
function idade(d: number) {
return d === 0 ? 'nasceu hoje' : d === 1 ? '1 dia de vida' : `${d} dias de vida`;
}
const horarioNoite = $derived.by(() => {
const c = estado.appConfig;
const ini = typeof c?.noiteInicio === 'number' ? c.noiteInicio : 23;
const fim = typeof c?.noiteFim === 'number' ? c.noiteFim : 7;
return `Das ${ini}h às ${fim}h. Gente se mexendo não acorda; carinho e conversa sim`;
});
const detalheFigurinhas = $derived(
v ? [`${v.emojis_hoje} de ${v.config.max_emojis_dia} hoje`, MOTIVOS[v.pode_criar] ?? v.pode_criar].filter(Boolean).join(' · ') : '',
);
@@ -104,7 +110,7 @@
</span>
{/snippet}
</Linha>
<Linha icone={Moon} cor="#5e5ce6" rotulo="Dormir à noite" detalhe="Das 23h às 7h, se não tiver ninguém por perto">
<Linha icone={Moon} cor="#5e5ce6" rotulo="Dormir à noite" detalhe={horarioNoite}>
{#snippet acessorio()}
<Interruptor rotulo="Dormir à noite" checked={v.config.noite} onchange={(l) => configurarVida({ noite: l })} />
{/snippet}