feat(vida): ritmo também define a sensibilidade dos sensores

O servidor manda "ritmo calmo|normal|agitado" ao celular junto com o
humor, e o rosto ajusta limiares e quantos estímulos precisa:

- calmo: limiares 50% mais altos, 3 sustos seguidos para reagir, o dobro
  de sons e 4 movimentos para acordar, 3 disparos do PIR em 2 min;
- normal: reage a barulho alto e movimento forte, 2 movimentos ou os
  sons configurados para acordar;
- agitado: limiares 40% mais baixos, reage a qualquer som ou movimento
  (com reações variadas) e acorda no primeiro estímulo.

A madrugada silenciosa continua valendo por cima. Com o modo vida
desligado o celular volta ao "normal" (só os Ajustes).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
julio
2026-10-06 17:39:14 -03:00
co-authored by Claude Opus 5.5
parent dd40c730be
commit 9e09df40e2
6 changed files with 141 additions and 52 deletions
+16
View File
@@ -80,6 +80,22 @@ class VidaTest(unittest.TestCase):
self.assertNotEqual(self.v.agir(noite + 180), 'dormir')
self.assertEqual(self.v.agir(noite + 180 + 11 * 60), 'dormir')
def test_ritmo_vira_sensibilidade(self):
self.v.configurar({'ritmo': 'calmo'})
self.assertIn('ritmo calmo', self.ordens)
self.assertFalse(self.v.pir_acorda(DIA)) # calmo: 3 disparos do PIR em 2 min
self.assertFalse(self.v.pir_acorda(DIA + 30))
self.assertTrue(self.v.pir_acorda(DIA + 60))
self.assertFalse(self.v.pir_acorda(DIA + 400)) # os antigos expiraram
self.v.configurar({'ritmo': 'agitado'})
self.assertTrue(self.v.pir_acorda(DIA + 500)) # agitado: um basta
self.ordens.clear()
self.v.tick(DIA + 505)
self.assertIn('ritmo agitado', self.ordens) # reenviado junto com o humor
self.v.configurar({'ligado': False})
self.assertIn('ritmo normal', self.ordens)
self.assertTrue(self.v.pir_acorda(DIA + 600)) # desligado: comportamento de sempre
def test_horario_da_madrugada(self):
from controle_pc import madrugada
h = lambda hora: time.mktime((2026, 10, 6, hora, 10, 0, 0, 0, -1))