superguardado: fixes pi_bot (offset persistente, unit systemd) + voz.py (desconectar chromecast) + lecciones 27-31
This commit is contained in:
@@ -71,3 +71,18 @@
|
||||
25. **Bot de Telegram en la Pi**: Responde a `estado`, `temperatura`, `tv`, `alarma`, `youtube`, `panorama`. Usa `requests` para getUpdates (long polling) y `sendMessage`/`sendPhoto` para responder.
|
||||
|
||||
26. **Alerta de temperatura**: Monitor en background (cada 5 min) que envía alerta si supera el umbral (80°C default).
|
||||
|
||||
### Bugfixes (02 agosto tarde)
|
||||
|
||||
27. **El bot corría una copia vieja (unit systemd)**: `pi-bot.service` apuntaba a `/home/pi/minipc/pi_bot.py` (raíz, sin `limpiar`), mientras el código nuevo estaba en `/home/pi/minipc/vigilancia/pi_bot.py`. El comando `limpiar` no funcionaba porque el bot que corría NO lo tenía. Al desplegar archivos nuevos hay que **revisar el unit de systemd** (`systemctl cat pi-bot` / `tv-api`). Fix: actualizar `WorkingDirectory` y `ExecStart` a `vigilancia/` + `daemon-reload` + restart.
|
||||
|
||||
28. **Telegram reprocesa en ráfaga al perder el offset**: El bot guardaba `offset` solo en memoria. Al reiniciar (offset=None) `getUpdates` devuelve **todos los updates pendientes no confirmados** y los re-ejecuta de golpe (disparó `panorama`, `tv`, `youtube`, `limpieza` repetidos). Fix: **persistir el offset** en un archivo (`bot.offset`) con `cargar_offset()`/`guardar_offset()`, guardando tras cada update. Al desplegar, capturar el último update con `getUpdates?offset=-1` para no reprocesar.
|
||||
|
||||
29. **pychromecast en proceso long-running deja zeroconf roto**: El comando `tv` generaba el audio (`anuncio.mp3`) pero la TV no reproducía: `AssertionError: Zeroconf instance loop must be running, was it already stopped?` y `Failed to connect to service ... retrying`. Causa: cada `get_chromecasts()` deja al objeto `Chromecast` con threads de reconexión que usan un zeroconf ya parado tras `stop_discovery()`. Funciona en proceso limpio pero falla en tv-api long-running. Fix: **desconectar cada cast** (`cast.disconnect()`) antes de `stop_discovery()` en los 3 puntos (`anuncio_en_teles`, `youtube_en_teles`, `anuncio_simple`).
|
||||
|
||||
### Acceso a la Pi
|
||||
|
||||
30. **SSH por password con paramiko**: Desde el portátil la llave no está configurada para `pi`, pero `user pi / password raspberry` funciona via paramiko a `192.168.50.187` (y `.251`). El sudo necesita `echo 'raspberry' | sudo -S <cmd>`. Para escribir archivos con `sudo tee` sin romper el quoting, usar **base64**: `echo <b64> | base64 -d > archivo`.
|
||||
|
||||
31. **stdout de tv-api en systemd está buffered**: Los `print()` de tv_api no salen en `journalctl` hasta flush. Para ver el resultado del casting, usar un proceso limpio o logear a archivo.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user