03-oct: migracion juanjo - rutas dinamicas (.py/.ps1/.ts) + changelog (apps, OmniRoute 3.8.51, UFW 5001)
This commit is contained in:
@@ -5,13 +5,10 @@
|
|||||||
|
|
||||||
## Pendientes de replicar
|
## Pendientes de replicar
|
||||||
|
|
||||||
- **2026-09-30-fix-telegram-watcher-telethon-1-44-encoding-utf-8** [watchers] Fix telegram_watcher (telethon 1.44 + encoding UTF-8) (aplicado en: portatil)
|
|
||||||
- **2026-10-02-superguardado-py-protocolo-guardado-total-automatico-portati** [scripts] superguardado.py: protocolo guardado total automatico portatil+sobremesa (aplicado en: portatil)
|
|
||||||
- **2026-10-03-superwhisper-enter-ahk-f13-boton-auxiliar-logitech-tarea-pro** [scripts] SuperWhisper Enter: AHK F13 boton auxiliar Logitech + tarea programada (aplicado en: portatil)
|
- **2026-10-03-superwhisper-enter-ahk-f13-boton-auxiliar-logitech-tarea-pro** [scripts] SuperWhisper Enter: AHK F13 boton auxiliar Logitech + tarea programada (aplicado en: portatil)
|
||||||
- **2026-10-03-monitor-de-estado-telegram-correo-jira-en-segundo-plano** [servicios] Monitor de estado (Telegram + correo + Jira) en segundo plano (aplicado en: portatil)
|
- **2026-10-03-perfil-juanjo-instaladas-dependencias-python-21-paquetes-en-** [scripts] Perfil juanjo: instaladas dependencias Python (21 paquetes) en C:\Python314 (aplicado en: sobremesa)
|
||||||
- **2026-10-03-acceso-remoto-al-sobremesa-openssh-server-tailscale-ssh-powe** [servicios] Acceso remoto al sobremesa: OpenSSH Server + Tailscale (ssh -> PowerShell) (aplicado en: portatil)
|
- **2026-10-03-sobremesa-juanjo-instaladas-17-apps-de-usuario-que-estaban-e** [scripts] Sobremesa juanjo: instaladas 17 apps de usuario que estaban en juanm (aplicado en: sobremesa)
|
||||||
- **2026-10-03-voicemonkey-sustituido-por-home-assistant-alexa** [servicios] VoiceMonkey sustituido por Home Assistant (Alexa) (aplicado en: portatil)
|
- **2026-10-03-migracion-cuenta-juanjo-rutas-juanm-dinamicas-os-path-expand** [scripts] Migracion cuenta juanjo: rutas juanm -> dinamicas (os.path.expanduser / \C:\Users\juanjo / USERPROFILE) (aplicado en: sobremesa)
|
||||||
- **2026-10-03-omniroute-3-8-48-3-8-51-fix-catalogo-live-antigravity** [omniroute] OmniRoute 3.8.48 -> 3.8.51: fix catalogo live antigravity (aplicado en: portatil)
|
|
||||||
|
|
||||||
## Historial
|
## Historial
|
||||||
|
|
||||||
@@ -28,7 +25,7 @@
|
|||||||
- **Equipo**: portatil
|
- **Equipo**: portatil
|
||||||
- **Categoria**: servicios
|
- **Categoria**: servicios
|
||||||
- **Transferible**: si
|
- **Transferible**: si
|
||||||
- **Aplicado en**: portatil
|
- **Aplicado en**: portatil, sobremesa
|
||||||
- **Detalle**: Proceso Python (scripts/monitor_estado.py) que cada 30 min recoge Telegram (5 fuentes), correo jminguez@prolongo.es y Jira DS (nuevos + sin asignar), archiva por fuente, resume con IA (OmniRoute) y avisa por voz local. Arranque por tarea programada 'Monitor Estado' + plugin global monitor-estado-bootstrap.ts; watchdog idempotente; sesion Telegram dedicada (sessions/monitor, login por QR); tests pytest en tests/. Requiere en el otro equipo: pip install pytest qrcode, login Telegram QR y re-ejecutar instalar_global.ps1.
|
- **Detalle**: Proceso Python (scripts/monitor_estado.py) que cada 30 min recoge Telegram (5 fuentes), correo jminguez@prolongo.es y Jira DS (nuevos + sin asignar), archiva por fuente, resume con IA (OmniRoute) y avisa por voz local. Arranque por tarea programada 'Monitor Estado' + plugin global monitor-estado-bootstrap.ts; watchdog idempotente; sesion Telegram dedicada (sessions/monitor, login por QR); tests pytest en tests/. Requiere en el otro equipo: pip install pytest qrcode, login Telegram QR y re-ejecutar instalar_global.ps1.
|
||||||
|
|
||||||
### 2026-10-03 · Acceso remoto al sobremesa: OpenSSH Server + Tailscale (ssh -> PowerShell)
|
### 2026-10-03 · Acceso remoto al sobremesa: OpenSSH Server + Tailscale (ssh -> PowerShell)
|
||||||
@@ -36,7 +33,7 @@
|
|||||||
- **Equipo**: portatil
|
- **Equipo**: portatil
|
||||||
- **Categoria**: servicios
|
- **Categoria**: servicios
|
||||||
- **Transferible**: si
|
- **Transferible**: si
|
||||||
- **Aplicado en**: portatil
|
- **Aplicado en**: portatil, sobremesa
|
||||||
- **Detalle**: Scripts en scripts/acceso_remoto/: setup_tailscale.ps1 (malla privada) y setup_ssh_server.ps1 (OpenSSH Server, shell PowerShell, firewall solo Tailscale+LAN, instala clave publica). Clave SSH del portatil: ~/.ssh/id_ed25519. Doc: docs/ACCESO_REMOTO_SOBREMESA.md. Permite ssh juanm@sobremesa desde cualquier red sin abrir puertos. Requiere en cada equipo: ejecutar setup_tailscale; en el sobremesa ademas setup_ssh_server (admin).
|
- **Detalle**: Scripts en scripts/acceso_remoto/: setup_tailscale.ps1 (malla privada) y setup_ssh_server.ps1 (OpenSSH Server, shell PowerShell, firewall solo Tailscale+LAN, instala clave publica). Clave SSH del portatil: ~/.ssh/id_ed25519. Doc: docs/ACCESO_REMOTO_SOBREMESA.md. Permite ssh juanm@sobremesa desde cualquier red sin abrir puertos. Requiere en cada equipo: ejecutar setup_tailscale; en el sobremesa ademas setup_ssh_server (admin).
|
||||||
|
|
||||||
### 2026-10-03 · VoiceMonkey sustituido por Home Assistant (Alexa)
|
### 2026-10-03 · VoiceMonkey sustituido por Home Assistant (Alexa)
|
||||||
@@ -44,7 +41,7 @@
|
|||||||
- **Equipo**: portatil
|
- **Equipo**: portatil
|
||||||
- **Categoria**: servicios
|
- **Categoria**: servicios
|
||||||
- **Transferible**: si
|
- **Transferible**: si
|
||||||
- **Aplicado en**: portatil
|
- **Aplicado en**: portatil, sobremesa
|
||||||
- **Detalle**: Validado con efecto real (anuncio por voz + comando 'apaga/enciende barras'). Nuevo helper biblioteca/scripts/ha_alexa.py (announce/command via HA REST). Migrados: netatmo_tool.notificar_alexa, telegram_read_tracker.notificar_alexa, protocolo_apagado.py y protocolo_apagado_test.py (apagar_luces_alexa). .env: +HOMEASSISTANT_URL/TOKEN (long-lived), -VOICEMONKEY_TOKEN/DEVICE. Obsoletos: alexa_notify.js, configurar_voicemonkey.py. Requiere en el otro equipo: git pull + tener HOMEASSISTANT_TOKEN en .env.
|
- **Detalle**: Validado con efecto real (anuncio por voz + comando 'apaga/enciende barras'). Nuevo helper biblioteca/scripts/ha_alexa.py (announce/command via HA REST). Migrados: netatmo_tool.notificar_alexa, telegram_read_tracker.notificar_alexa, protocolo_apagado.py y protocolo_apagado_test.py (apagar_luces_alexa). .env: +HOMEASSISTANT_URL/TOKEN (long-lived), -VOICEMONKEY_TOKEN/DEVICE. Obsoletos: alexa_notify.js, configurar_voicemonkey.py. Requiere en el otro equipo: git pull + tener HOMEASSISTANT_TOKEN en .env.
|
||||||
|
|
||||||
### 2026-10-03 · OmniRoute 3.8.48 -> 3.8.51: fix catalogo live antigravity
|
### 2026-10-03 · OmniRoute 3.8.48 -> 3.8.51: fix catalogo live antigravity
|
||||||
@@ -52,7 +49,7 @@
|
|||||||
- **Equipo**: portatil
|
- **Equipo**: portatil
|
||||||
- **Categoria**: omniroute
|
- **Categoria**: omniroute
|
||||||
- **Transferible**: si
|
- **Transferible**: si
|
||||||
- **Aplicado en**: portatil
|
- **Aplicado en**: portatil, sobremesa
|
||||||
- **Detalle**: Actualizado omniroute a 3.8.51 (npm i -g omniroute@latest). Ahora valida contra el 'active live catalog' de Antigravity: los modelos deprecados (gemini-3.5-flash-*, gemini-2.5-*, claude-* en antigravity) devuelven HTTP 400 en vez de texto de deprecacion. Funcionan: gemini-3.1-pro-low/high, gemini-3.1-flash-lite, gemini-pro-agent, gpt-oss-120b-medium. Servidor relanzado via omniroute_watchdog.ps1 -Once.
|
- **Detalle**: Actualizado omniroute a 3.8.51 (npm i -g omniroute@latest). Ahora valida contra el 'active live catalog' de Antigravity: los modelos deprecados (gemini-3.5-flash-*, gemini-2.5-*, claude-* en antigravity) devuelven HTTP 400 en vez de texto de deprecacion. Funcionan: gemini-3.1-pro-low/high, gemini-3.1-flash-lite, gemini-pro-agent, gpt-oss-120b-medium. Servidor relanzado via omniroute_watchdog.ps1 -Once.
|
||||||
|
|
||||||
### 2026-10-03 · Fix ACL setup_ssh_server.ps1 (SIDs, no nombres en ingles)
|
### 2026-10-03 · Fix ACL setup_ssh_server.ps1 (SIDs, no nombres en ingles)
|
||||||
@@ -63,12 +60,36 @@
|
|||||||
- **Aplicado en**: sobremesa
|
- **Aplicado en**: sobremesa
|
||||||
- **Detalle**: icacls fallaba en Windows es-ES al usar BUILTIN\Administrators; ahora usa *S-1-5-18 y *S-1-5-32-544. Aplicado y verificado en sobremesa (sshd Automatic/Running, key portatil autorizada).
|
- **Detalle**: icacls fallaba en Windows es-ES al usar BUILTIN\Administrators; ahora usa *S-1-5-18 y *S-1-5-32-544. Aplicado y verificado en sobremesa (sshd Automatic/Running, key portatil autorizada).
|
||||||
|
|
||||||
|
### 2026-10-03 · Perfil juanjo: instaladas dependencias Python (21 paquetes) en C:\Python314
|
||||||
|
- **id**: `2026-10-03-perfil-juanjo-instaladas-dependencias-python-21-paquetes-en-`
|
||||||
|
- **Equipo**: sobremesa
|
||||||
|
- **Categoria**: scripts
|
||||||
|
- **Transferible**: si
|
||||||
|
- **Aplicado en**: sobremesa
|
||||||
|
- **Detalle**: Tras migrar a la cuenta juanjo, Python solo tenia pip. Instalados: pycryptodome PyP100 caldav python-dotenv edge-tts feedparser flask ftfy google-auth-oauthlib google-api-python-client openpyxl psutil qrcode requests telethon todoist-api-python urllib3 wakeonlan watchdog win10toast + setuptools<81 + pywin32. Necesario para watchers/tablero/Jira.
|
||||||
|
|
||||||
|
### 2026-10-03 · Sobremesa juanjo: instaladas 17 apps de usuario que estaban en juanm
|
||||||
|
- **id**: `2026-10-03-sobremesa-juanjo-instaladas-17-apps-de-usuario-que-estaban-e`
|
||||||
|
- **Equipo**: sobremesa
|
||||||
|
- **Categoria**: scripts
|
||||||
|
- **Transferible**: si
|
||||||
|
- **Aplicado en**: sobremesa
|
||||||
|
- **Detalle**: VS Code, GitHub Desktop, Postman, HeidiSQL, Inno Setup, FFmpeg, Rclone, WinDbg(pend), Obsidian, Ollama, Antigravity IDE, Claude, Discord, Telegram Desktop, Stremio, superwhisper, Greenshot. Via winget (ids del inventario docs/formateo/01-INVENTARIO_PROGRAMAS.md). Requiere winget elevado.
|
||||||
|
|
||||||
|
### 2026-10-03 · Migracion cuenta juanjo: rutas juanm -> dinamicas (os.path.expanduser / \C:\Users\juanjo / USERPROFILE)
|
||||||
|
- **id**: `2026-10-03-migracion-cuenta-juanjo-rutas-juanm-dinamicas-os-path-expand`
|
||||||
|
- **Equipo**: sobremesa
|
||||||
|
- **Categoria**: scripts
|
||||||
|
- **Transferible**: si
|
||||||
|
- **Aplicado en**: sobremesa
|
||||||
|
- **Detalle**: 50 ficheros .py + 8 .ps1 + 2 .ts: rutas C:\Users\juanm -> dinamicas para que funcionen en juanm (portatil) y juanjo (sobremesa). Incluye .env de INFRA scripts, gestion_jira, gestion_jira, contabo key, plugins opencode. Tambien: clave SSH contabo copiada, OmniRoute 3.8.51, UFW 5001 solo IP sobremesa, Google OAuth reautorizado.
|
||||||
|
|
||||||
### 2026-10-02 · superguardado.py: protocolo guardado total automatico portatil+sobremesa
|
### 2026-10-02 · superguardado.py: protocolo guardado total automatico portatil+sobremesa
|
||||||
- **id**: `2026-10-02-superguardado-py-protocolo-guardado-total-automatico-portati`
|
- **id**: `2026-10-02-superguardado-py-protocolo-guardado-total-automatico-portati`
|
||||||
- **Equipo**: portatil
|
- **Equipo**: portatil
|
||||||
- **Categoria**: scripts
|
- **Categoria**: scripts
|
||||||
- **Transferible**: si
|
- **Transferible**: si
|
||||||
- **Aplicado en**: portatil
|
- **Aplicado en**: portatil, sobremesa
|
||||||
- **Detalle**: Script scripts/superguardado.py en biblioteca_negocio_prolongo. 7 pasos: ESTADO_DIARIO + git biblioteca + engram cloud + sync_continuo + obsidian + git INFRAESTRUCTURA + aviso sonoro. Palabra clave: superguardado/guarda/memoria. Descripcion auto si no se indica.
|
- **Detalle**: Script scripts/superguardado.py en biblioteca_negocio_prolongo. 7 pasos: ESTADO_DIARIO + git biblioteca + engram cloud + sync_continuo + obsidian + git INFRAESTRUCTURA + aviso sonoro. Palabra clave: superguardado/guarda/memoria. Descripcion auto si no se indica.
|
||||||
|
|
||||||
### 2026-09-30 · Fix telegram_watcher (telethon 1.44 + encoding UTF-8)
|
### 2026-09-30 · Fix telegram_watcher (telethon 1.44 + encoding UTF-8)
|
||||||
@@ -76,7 +97,7 @@
|
|||||||
- **Equipo**: portatil
|
- **Equipo**: portatil
|
||||||
- **Categoria**: watchers
|
- **Categoria**: watchers
|
||||||
- **Transferible**: si
|
- **Transferible**: si
|
||||||
- **Aplicado en**: portatil
|
- **Aplicado en**: portatil, sobremesa
|
||||||
- **Detalle**: MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8.
|
- **Detalle**: MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8.
|
||||||
|
|
||||||
### 2026-09-29 · Migración de watchers al VPS
|
### 2026-09-29 · Migración de watchers al VPS
|
||||||
|
|||||||
@@ -198,7 +198,8 @@
|
|||||||
"titulo": "Fix telegram_watcher (telethon 1.44 + encoding UTF-8)",
|
"titulo": "Fix telegram_watcher (telethon 1.44 + encoding UTF-8)",
|
||||||
"transferible": true,
|
"transferible": true,
|
||||||
"aplicado_en": [
|
"aplicado_en": [
|
||||||
"portatil"
|
"portatil",
|
||||||
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8."
|
"detalle": "MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8."
|
||||||
},
|
},
|
||||||
@@ -210,7 +211,8 @@
|
|||||||
"titulo": "superguardado.py: protocolo guardado total automatico portatil+sobremesa",
|
"titulo": "superguardado.py: protocolo guardado total automatico portatil+sobremesa",
|
||||||
"transferible": true,
|
"transferible": true,
|
||||||
"aplicado_en": [
|
"aplicado_en": [
|
||||||
"portatil"
|
"portatil",
|
||||||
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "Script scripts/superguardado.py en biblioteca_negocio_prolongo. 7 pasos: ESTADO_DIARIO + git biblioteca + engram cloud + sync_continuo + obsidian + git INFRAESTRUCTURA + aviso sonoro. Palabra clave: superguardado/guarda/memoria. Descripcion auto si no se indica."
|
"detalle": "Script scripts/superguardado.py en biblioteca_negocio_prolongo. 7 pasos: ESTADO_DIARIO + git biblioteca + engram cloud + sync_continuo + obsidian + git INFRAESTRUCTURA + aviso sonoro. Palabra clave: superguardado/guarda/memoria. Descripcion auto si no se indica."
|
||||||
},
|
},
|
||||||
@@ -234,7 +236,8 @@
|
|||||||
"titulo": "Monitor de estado (Telegram + correo + Jira) en segundo plano",
|
"titulo": "Monitor de estado (Telegram + correo + Jira) en segundo plano",
|
||||||
"transferible": true,
|
"transferible": true,
|
||||||
"aplicado_en": [
|
"aplicado_en": [
|
||||||
"portatil"
|
"portatil",
|
||||||
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "Proceso Python (scripts/monitor_estado.py) que cada 30 min recoge Telegram (5 fuentes), correo jminguez@prolongo.es y Jira DS (nuevos + sin asignar), archiva por fuente, resume con IA (OmniRoute) y avisa por voz local. Arranque por tarea programada 'Monitor Estado' + plugin global monitor-estado-bootstrap.ts; watchdog idempotente; sesion Telegram dedicada (sessions/monitor, login por QR); tests pytest en tests/. Requiere en el otro equipo: pip install pytest qrcode, login Telegram QR y re-ejecutar instalar_global.ps1."
|
"detalle": "Proceso Python (scripts/monitor_estado.py) que cada 30 min recoge Telegram (5 fuentes), correo jminguez@prolongo.es y Jira DS (nuevos + sin asignar), archiva por fuente, resume con IA (OmniRoute) y avisa por voz local. Arranque por tarea programada 'Monitor Estado' + plugin global monitor-estado-bootstrap.ts; watchdog idempotente; sesion Telegram dedicada (sessions/monitor, login por QR); tests pytest en tests/. Requiere en el otro equipo: pip install pytest qrcode, login Telegram QR y re-ejecutar instalar_global.ps1."
|
||||||
},
|
},
|
||||||
@@ -246,7 +249,8 @@
|
|||||||
"titulo": "Acceso remoto al sobremesa: OpenSSH Server + Tailscale (ssh -> PowerShell)",
|
"titulo": "Acceso remoto al sobremesa: OpenSSH Server + Tailscale (ssh -> PowerShell)",
|
||||||
"transferible": true,
|
"transferible": true,
|
||||||
"aplicado_en": [
|
"aplicado_en": [
|
||||||
"portatil"
|
"portatil",
|
||||||
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "Scripts en scripts/acceso_remoto/: setup_tailscale.ps1 (malla privada) y setup_ssh_server.ps1 (OpenSSH Server, shell PowerShell, firewall solo Tailscale+LAN, instala clave publica). Clave SSH del portatil: ~/.ssh/id_ed25519. Doc: docs/ACCESO_REMOTO_SOBREMESA.md. Permite ssh juanm@sobremesa desde cualquier red sin abrir puertos. Requiere en cada equipo: ejecutar setup_tailscale; en el sobremesa ademas setup_ssh_server (admin)."
|
"detalle": "Scripts en scripts/acceso_remoto/: setup_tailscale.ps1 (malla privada) y setup_ssh_server.ps1 (OpenSSH Server, shell PowerShell, firewall solo Tailscale+LAN, instala clave publica). Clave SSH del portatil: ~/.ssh/id_ed25519. Doc: docs/ACCESO_REMOTO_SOBREMESA.md. Permite ssh juanm@sobremesa desde cualquier red sin abrir puertos. Requiere en cada equipo: ejecutar setup_tailscale; en el sobremesa ademas setup_ssh_server (admin)."
|
||||||
},
|
},
|
||||||
@@ -258,7 +262,8 @@
|
|||||||
"titulo": "VoiceMonkey sustituido por Home Assistant (Alexa)",
|
"titulo": "VoiceMonkey sustituido por Home Assistant (Alexa)",
|
||||||
"transferible": true,
|
"transferible": true,
|
||||||
"aplicado_en": [
|
"aplicado_en": [
|
||||||
"portatil"
|
"portatil",
|
||||||
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "Validado con efecto real (anuncio por voz + comando 'apaga/enciende barras'). Nuevo helper biblioteca/scripts/ha_alexa.py (announce/command via HA REST). Migrados: netatmo_tool.notificar_alexa, telegram_read_tracker.notificar_alexa, protocolo_apagado.py y protocolo_apagado_test.py (apagar_luces_alexa). .env: +HOMEASSISTANT_URL/TOKEN (long-lived), -VOICEMONKEY_TOKEN/DEVICE. Obsoletos: alexa_notify.js, configurar_voicemonkey.py. Requiere en el otro equipo: git pull + tener HOMEASSISTANT_TOKEN en .env."
|
"detalle": "Validado con efecto real (anuncio por voz + comando 'apaga/enciende barras'). Nuevo helper biblioteca/scripts/ha_alexa.py (announce/command via HA REST). Migrados: netatmo_tool.notificar_alexa, telegram_read_tracker.notificar_alexa, protocolo_apagado.py y protocolo_apagado_test.py (apagar_luces_alexa). .env: +HOMEASSISTANT_URL/TOKEN (long-lived), -VOICEMONKEY_TOKEN/DEVICE. Obsoletos: alexa_notify.js, configurar_voicemonkey.py. Requiere en el otro equipo: git pull + tener HOMEASSISTANT_TOKEN en .env."
|
||||||
},
|
},
|
||||||
@@ -270,7 +275,8 @@
|
|||||||
"titulo": "OmniRoute 3.8.48 -> 3.8.51: fix catalogo live antigravity",
|
"titulo": "OmniRoute 3.8.48 -> 3.8.51: fix catalogo live antigravity",
|
||||||
"transferible": true,
|
"transferible": true,
|
||||||
"aplicado_en": [
|
"aplicado_en": [
|
||||||
"portatil"
|
"portatil",
|
||||||
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "Actualizado omniroute a 3.8.51 (npm i -g omniroute@latest). Ahora valida contra el 'active live catalog' de Antigravity: los modelos deprecados (gemini-3.5-flash-*, gemini-2.5-*, claude-* en antigravity) devuelven HTTP 400 en vez de texto de deprecacion. Funcionan: gemini-3.1-pro-low/high, gemini-3.1-flash-lite, gemini-pro-agent, gpt-oss-120b-medium. Servidor relanzado via omniroute_watchdog.ps1 -Once."
|
"detalle": "Actualizado omniroute a 3.8.51 (npm i -g omniroute@latest). Ahora valida contra el 'active live catalog' de Antigravity: los modelos deprecados (gemini-3.5-flash-*, gemini-2.5-*, claude-* en antigravity) devuelven HTTP 400 en vez de texto de deprecacion. Funcionan: gemini-3.1-pro-low/high, gemini-3.1-flash-lite, gemini-pro-agent, gpt-oss-120b-medium. Servidor relanzado via omniroute_watchdog.ps1 -Once."
|
||||||
},
|
},
|
||||||
@@ -285,6 +291,42 @@
|
|||||||
"sobremesa"
|
"sobremesa"
|
||||||
],
|
],
|
||||||
"detalle": "icacls fallaba en Windows es-ES al usar BUILTIN\\Administrators; ahora usa *S-1-5-18 y *S-1-5-32-544. Aplicado y verificado en sobremesa (sshd Automatic/Running, key portatil autorizada)."
|
"detalle": "icacls fallaba en Windows es-ES al usar BUILTIN\\Administrators; ahora usa *S-1-5-18 y *S-1-5-32-544. Aplicado y verificado en sobremesa (sshd Automatic/Running, key portatil autorizada)."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2026-10-03-perfil-juanjo-instaladas-dependencias-python-21-paquetes-en-",
|
||||||
|
"fecha": "2026-10-03",
|
||||||
|
"equipo": "sobremesa",
|
||||||
|
"categoria": "scripts",
|
||||||
|
"titulo": "Perfil juanjo: instaladas dependencias Python (21 paquetes) en C:\\Python314",
|
||||||
|
"transferible": true,
|
||||||
|
"aplicado_en": [
|
||||||
|
"sobremesa"
|
||||||
|
],
|
||||||
|
"detalle": "Tras migrar a la cuenta juanjo, Python solo tenia pip. Instalados: pycryptodome PyP100 caldav python-dotenv edge-tts feedparser flask ftfy google-auth-oauthlib google-api-python-client openpyxl psutil qrcode requests telethon todoist-api-python urllib3 wakeonlan watchdog win10toast + setuptools<81 + pywin32. Necesario para watchers/tablero/Jira."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2026-10-03-sobremesa-juanjo-instaladas-17-apps-de-usuario-que-estaban-e",
|
||||||
|
"fecha": "2026-10-03",
|
||||||
|
"equipo": "sobremesa",
|
||||||
|
"categoria": "scripts",
|
||||||
|
"titulo": "Sobremesa juanjo: instaladas 17 apps de usuario que estaban en juanm",
|
||||||
|
"transferible": true,
|
||||||
|
"aplicado_en": [
|
||||||
|
"sobremesa"
|
||||||
|
],
|
||||||
|
"detalle": "VS Code, GitHub Desktop, Postman, HeidiSQL, Inno Setup, FFmpeg, Rclone, WinDbg(pend), Obsidian, Ollama, Antigravity IDE, Claude, Discord, Telegram Desktop, Stremio, superwhisper, Greenshot. Via winget (ids del inventario docs/formateo/01-INVENTARIO_PROGRAMAS.md). Requiere winget elevado."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2026-10-03-migracion-cuenta-juanjo-rutas-juanm-dinamicas-os-path-expand",
|
||||||
|
"fecha": "2026-10-03",
|
||||||
|
"equipo": "sobremesa",
|
||||||
|
"categoria": "scripts",
|
||||||
|
"titulo": "Migracion cuenta juanjo: rutas juanm -> dinamicas (os.path.expanduser / \\C:\\Users\\juanjo / USERPROFILE)",
|
||||||
|
"transferible": true,
|
||||||
|
"aplicado_en": [
|
||||||
|
"sobremesa"
|
||||||
|
],
|
||||||
|
"detalle": "50 ficheros .py + 8 .ps1 + 2 .ts: rutas C:\\Users\\juanm -> dinamicas para que funcionen en juanm (portatil) y juanjo (sobremesa). Incluye .env de INFRA scripts, gestion_jira, gestion_jira, contabo key, plugins opencode. Tambien: clave SSH contabo copiada, OmniRoute 3.8.51, UFW 5001 solo IP sobremesa, Google OAuth reautorizado."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import { existsSync } from "node:fs"
|
|||||||
// Vigilante canonico (repo INFRAESTRUCTURA). Se puede sobreescribir con MONITOR_ESTADO_WATCHDOG.
|
// Vigilante canonico (repo INFRAESTRUCTURA). Se puede sobreescribir con MONITOR_ESTADO_WATCHDOG.
|
||||||
const WATCHDOG =
|
const WATCHDOG =
|
||||||
process.env.MONITOR_ESTADO_WATCHDOG ??
|
process.env.MONITOR_ESTADO_WATCHDOG ??
|
||||||
"C:\\Users\\juanm\\Documents\\Github\\INFRAESTRUCTURA\\scripts\\monitor_estado_watchdog.ps1"
|
`${process.env.USERPROFILE}\\Documents\\Github\\INFRAESTRUCTURA\\scripts\\monitor_estado_watchdog.ps1`
|
||||||
|
|
||||||
const POWERSHELL =
|
const POWERSHELL =
|
||||||
process.env.SystemRoot
|
process.env.SystemRoot
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import { existsSync } from "node:fs"
|
|||||||
// Vigilante canonico (repo INFRAESTRUCTURA). Se puede sobreescribir con OMNIROUTE_WATCHDOG.
|
// Vigilante canonico (repo INFRAESTRUCTURA). Se puede sobreescribir con OMNIROUTE_WATCHDOG.
|
||||||
const WATCHDOG =
|
const WATCHDOG =
|
||||||
process.env.OMNIROUTE_WATCHDOG ??
|
process.env.OMNIROUTE_WATCHDOG ??
|
||||||
"C:\\Users\\juanm\\Documents\\Github\\INFRAESTRUCTURA\\omniroute\\omniroute_watchdog.ps1"
|
`${process.env.USERPROFILE}\\Documents\\Github\\INFRAESTRUCTURA\\omniroute\\omniroute_watchdog.ps1`
|
||||||
|
|
||||||
const POWERSHELL =
|
const POWERSHELL =
|
||||||
process.env.SystemRoot
|
process.env.SystemRoot
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ Start-Transcript -Path $log -Force | Out-Null
|
|||||||
Write-Output "=== BOOTSTRAP AUTOLOGON $(Get-Date -Format s) ==="
|
Write-Output "=== BOOTSTRAP AUTOLOGON $(Get-Date -Format s) ==="
|
||||||
Write-Output "Usuario: $env:USERDOMAIN\$env:USERNAME"
|
Write-Output "Usuario: $env:USERDOMAIN\$env:USERNAME"
|
||||||
|
|
||||||
$infra = 'C:\Users\juanm\Documents\Github\INFRAESTRUCTURA'
|
$infra = Join-Path $env:USERPROFILE 'Documents\Github\INFRAESTRUCTURA'
|
||||||
$bib = 'C:\Users\juanm\Documents\Github\biblioteca_negocio_prolongo'
|
$bib = Join-Path $env:USERPROFILE 'Documents\Github\biblioteca_negocio_prolongo'
|
||||||
$pwsh = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe'
|
$pwsh = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe'
|
||||||
|
|
||||||
# 1) Git: identidad + safe.directory (los repos son de otro usuario) + helper
|
# 1) Git: identidad + safe.directory (los repos son de otro usuario) + helper
|
||||||
git config --global user.name "juanminsanz"
|
git config --global user.name "Juanjo Minguez"
|
||||||
git config --global user.email "desarrollo@faccsa.es"
|
git config --global user.email "desarrollo@faccsa.es"
|
||||||
git config --global --add safe.directory '*'
|
git config --global --add safe.directory '*'
|
||||||
git config --global credential.helper manager
|
git config --global credential.helper manager
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import requests
|
|||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv(r'C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env')
|
load_dotenv(os.path.expanduser('~/Documents/GitHub/biblioteca_negocio_prolongo/.env'))
|
||||||
|
|
||||||
url = os.getenv('HOMEASSISTANT_URL')
|
url = os.getenv('HOMEASSISTANT_URL')
|
||||||
token = os.getenv('HOMEASSISTANT_TOKEN')
|
token = os.getenv('HOMEASSISTANT_TOKEN')
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
# Cargar .env
|
# Cargar .env
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ def check_homeassistant():
|
|||||||
"""Verifica si Home Assistant esta corriendo en el VPS"""
|
"""Verifica si Home Assistant esta corriendo en el VPS"""
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["ssh", "-i", r"C:\Users\juanm\Documents\GitHub\contabo",
|
["ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
|
||||||
"root@185.187.169.109",
|
"root@185.187.169.109",
|
||||||
"docker ps | grep homeassistant | grep -q Up && echo OK || echo NOK"],
|
"docker ps | grep homeassistant | grep -q Up && echo OK || echo NOK"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
@@ -49,7 +49,7 @@ Add-Type -AssemblyName System.Windows.Forms
|
|||||||
try:
|
try:
|
||||||
subprocess.run([
|
subprocess.run([
|
||||||
"python",
|
"python",
|
||||||
r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\scripts\aviso_sonoro.py",
|
os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/scripts/aviso_sonoro.py"),
|
||||||
"ok"
|
"ok"
|
||||||
])
|
])
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import urllib.request
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
# Permitir importar modulos del repo de negocio (ha_alexa).
|
# Permitir importar modulos del repo de negocio (ha_alexa).
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
def cerrar_ventanas():
|
def cerrar_ventanas():
|
||||||
@@ -101,7 +101,7 @@ p100.turnOff()"""
|
|||||||
|
|
||||||
# Comando SSH en dos saltos: local -> VPS -> RPi
|
# Comando SSH en dos saltos: local -> VPS -> RPi
|
||||||
cmd = [
|
cmd = [
|
||||||
"ssh", "-i", r"C:\Users\juanm\Documents\GitHub\contabo",
|
"ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
|
||||||
"root@185.187.169.109",
|
"root@185.187.169.109",
|
||||||
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
|
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
def cerrar_ventanas():
|
def cerrar_ventanas():
|
||||||
@@ -101,14 +101,14 @@ p100.turnOff()"""
|
|||||||
|
|
||||||
# Paso 1: Crear script en VPS
|
# Paso 1: Crear script en VPS
|
||||||
cmd1 = [
|
cmd1 = [
|
||||||
"ssh", "-i", r"C:\Users\juanm\Documents\GitHub\contabo",
|
"ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
|
||||||
"root@185.187.169.109",
|
"root@185.187.169.109",
|
||||||
f"echo '{script_content}' > /tmp/tapo_off.py"
|
f"echo '{script_content}' > /tmp/tapo_off.py"
|
||||||
]
|
]
|
||||||
|
|
||||||
# Paso 2: Copiar a RPi y ejecutar
|
# Paso 2: Copiar a RPi y ejecutar
|
||||||
cmd2 = [
|
cmd2 = [
|
||||||
"ssh", "-i", r"C:\Users\juanm\Documents\GitHub\contabo",
|
"ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
|
||||||
"root@185.187.169.109",
|
"root@185.187.169.109",
|
||||||
"scp -i /root/.ssh/pi_deploy -P 2222 -o StrictHostKeyChecking=no /tmp/tapo_off.py pi@127.0.0.1:/tmp/ && ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 /tmp/tapo_off.py'"
|
"scp -i /root/.ssh/pi_deploy -P 2222 -o StrictHostKeyChecking=no /tmp/tapo_off.py pi@127.0.0.1:/tmp/ && ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 /tmp/tapo_off.py'"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
def cerrar_ventanas():
|
def cerrar_ventanas():
|
||||||
@@ -90,7 +90,7 @@ p100.turnOff()"""
|
|||||||
|
|
||||||
# Comando SSH en dos saltos: local -> VPS -> RPi
|
# Comando SSH en dos saltos: local -> VPS -> RPi
|
||||||
cmd = [
|
cmd = [
|
||||||
"ssh", "-i", r"C:\Users\juanm\Documents\GitHub\contabo",
|
"ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
|
||||||
"root@185.187.169.109",
|
"root@185.187.169.109",
|
||||||
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
|
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
# Permitir importar modulos del repo de negocio (ha_alexa).
|
# Permitir importar modulos del repo de negocio (ha_alexa).
|
||||||
@@ -78,7 +78,7 @@ p100.turnOff()"""
|
|||||||
|
|
||||||
# Comando SSH en dos saltos: local -> VPS -> RPi
|
# Comando SSH en dos saltos: local -> VPS -> RPi
|
||||||
cmd = [
|
cmd = [
|
||||||
"ssh", "-i", r"C:\Users\juanm\Documents\GitHub\contabo",
|
"ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
|
||||||
"root@185.187.169.109",
|
"root@185.187.169.109",
|
||||||
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
|
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from flask import Flask, request, jsonify
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Cargar .env
|
# Cargar .env
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
|
|||||||
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes
|
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, ContextTypes
|
||||||
|
|
||||||
# Cargar .env
|
# Cargar .env
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
# Configuración
|
# Configuración
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
|
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
|
||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
def enviar_comando_voz(echo_entity, comando):
|
def enviar_comando_voz(echo_entity, comando):
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ if sys.platform == 'win32':
|
|||||||
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
|
||||||
|
|
||||||
# Cargar .env
|
# Cargar .env
|
||||||
dotenv_path = r"C:\Users\juanm\Documents\GitHub\biblioteca_negocio_prolongo\.env"
|
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
Reference in New Issue
Block a user