operx-cli 0.11.1__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. {operx_cli-0.11.1/operx_cli.egg-info → operx_cli-0.13.0}/PKG-INFO +47 -3
  2. operx_cli-0.11.1/PKG-INFO → operx_cli-0.13.0/README.md +358 -329
  3. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/AGENTES.md +9 -0
  4. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/__init__.py +1 -1
  5. operx_cli-0.13.0/operx_cli/commands/connect.py +425 -0
  6. operx_cli-0.13.0/operx_cli/forwarding/__init__.py +2 -0
  7. operx_cli-0.13.0/operx_cli/forwarding/buffer.py +90 -0
  8. operx_cli-0.13.0/operx_cli/forwarding/read.py +193 -0
  9. operx_cli-0.13.0/operx_cli/forwarding/run.py +64 -0
  10. operx_cli-0.13.0/operx_cli/forwarding/send.py +114 -0
  11. operx_cli-0.13.0/operx_cli/forwarding/sources.py +306 -0
  12. operx_cli-0.11.1/README.md → operx_cli-0.13.0/operx_cli.egg-info/PKG-INFO +373 -315
  13. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli.egg-info/SOURCES.txt +7 -0
  14. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli.egg-info/requires.txt +1 -0
  15. {operx_cli-0.11.1 → operx_cli-0.13.0}/pyproject.toml +3 -1
  16. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_connect.py +94 -0
  17. operx_cli-0.13.0/tests/test_forward.py +544 -0
  18. operx_cli-0.11.1/operx_cli/commands/connect.py +0 -152
  19. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/agent_guide.py +0 -0
  20. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/api_fields.py +0 -0
  21. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/app.py +0 -0
  22. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/browser_login.py +0 -0
  23. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/client.py +0 -0
  24. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/__init__.py +0 -0
  25. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/account.py +0 -0
  26. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/ambiental.py +0 -0
  27. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/articulos.py +0 -0
  28. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/avisos.py +0 -0
  29. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/campos.py +0 -0
  30. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/chat.py +0 -0
  31. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/common.py +0 -0
  32. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/completar.py +0 -0
  33. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/empresas.py +0 -0
  34. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/inventario.py +0 -0
  35. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/lecturas.py +0 -0
  36. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/muestreo.py +0 -0
  37. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/ordenes.py +0 -0
  38. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/personas.py +0 -0
  39. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/planta.py +0 -0
  40. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/preventivos.py +0 -0
  41. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/raw.py +0 -0
  42. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/registros.py +0 -0
  43. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/reportes.py +0 -0
  44. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/rutinas.py +0 -0
  45. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/search.py +0 -0
  46. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/sst.py +0 -0
  47. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/commands/update.py +0 -0
  48. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/lookup.py +0 -0
  49. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/output.py +0 -0
  50. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/record_completion.py +0 -0
  51. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/self_update.py +0 -0
  52. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/settings.py +0 -0
  53. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/shell.py +0 -0
  54. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/spreadsheet.py +0 -0
  55. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/updates.py +0 -0
  56. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/values.py +0 -0
  57. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli/welcome.py +0 -0
  58. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli.egg-info/dependency_links.txt +0 -0
  59. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli.egg-info/entry_points.txt +0 -0
  60. {operx_cli-0.11.1 → operx_cli-0.13.0}/operx_cli.egg-info/top_level.txt +0 -0
  61. {operx_cli-0.11.1 → operx_cli-0.13.0}/setup.cfg +0 -0
  62. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_agentes.py +0 -0
  63. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_api_campos.py +0 -0
  64. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_app.py +0 -0
  65. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_articulos.py +0 -0
  66. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_campos.py +0 -0
  67. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_cards.py +0 -0
  68. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_chat.py +0 -0
  69. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_client.py +0 -0
  70. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_completar.py +0 -0
  71. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_daily_flows.py +0 -0
  72. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_inventario_lecturas.py +0 -0
  73. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_json_writes.py +0 -0
  74. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_login.py +0 -0
  75. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_logout_and_routes.py +0 -0
  76. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_lookup.py +0 -0
  77. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_more_of_the_api.py +0 -0
  78. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_muestreo.py +0 -0
  79. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_ordenes.py +0 -0
  80. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_output.py +0 -0
  81. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_personas.py +0 -0
  82. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_preventivos.py +0 -0
  83. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_record_completion.py +0 -0
  84. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_registros.py +0 -0
  85. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_rutinas.py +0 -0
  86. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_self_update.py +0 -0
  87. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_settings.py +0 -0
  88. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_shell.py +0 -0
  89. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_spreadsheet.py +0 -0
  90. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_sst_ambiental.py +0 -0
  91. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_updates.py +0 -0
  92. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_values.py +0 -0
  93. {operx_cli-0.11.1 → operx_cli-0.13.0}/tests/test_welcome.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: operx-cli
3
- Version: 0.11.1
3
+ Version: 0.13.0
4
4
  Summary: La línea de comandos de OperX: tu empresa desde la terminal, con tu token de API.
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -8,6 +8,7 @@ Requires-Dist: typer>=0.27
8
8
  Requires-Dist: httpx>=0.28
9
9
  Requires-Dist: keyring>=25
10
10
  Requires-Dist: openpyxl>=3.1
11
+ Requires-Dist: paho-mqtt>=2.2
11
12
  Requires-Dist: prompt_toolkit>=3.0
12
13
  Provides-Extra: test
13
14
  Requires-Dist: pytest>=8; extra == "test"
@@ -224,8 +225,51 @@ operx connect mapear d-7f3k2m planta/comp2/temp --equipo "Compresor 2" --punto "
224
225
  operx connect silenciar d-7f3k2m planta/comp2/temp --hasta "05/11/2026 18:00" --motivo "Mantenimiento"
225
226
  ```
226
227
 
227
- Las claves de los dispositivos no pasan por el CLI: se crean y se ven en la
228
- app, en la pestaña Clave del dispositivo.
228
+ Los indicadores de Connect (la pestaña Indicadores de la app):
229
+
230
+ ```
231
+ operx connect estado --lugar "Planta Yumbo" # cada máquina por su punto peor ahora; --todas, también las que están bien
232
+ operx connect fuera-de-rango --dias 7 # las máquinas con más tiempo fuera de rango
233
+ operx connect limite # los puntos que se acercan a su límite, y en cuántos días
234
+ operx connect disponibilidad --bajo-95 # cuánto llegó de lo que debía enviar cada dispositivo
235
+ operx connect horas --dias 30 # horas de marcha por máquina, desde su horómetro
236
+ operx connect informe --mes octubre --lugar "Planta Yumbo" # el informe del mes
237
+ operx connect informe --mes 2026-10 --pdf informe.pdf # el mismo, en PDF
238
+ ```
239
+
240
+ Comparar máquinas no tiene comando propio: `operx api GET connect/indicators/compare/ -q days=7`.
241
+
242
+ Las claves de los dispositivos se crean y se ven solo en la app, en la
243
+ pestaña Clave del dispositivo: el CLI no las crea ni las muestra.
244
+
245
+ ### Reenviar desde un computador de la planta
246
+
247
+ `operx connect forward` corre en un computador de la planta, sin parar: lee el
248
+ broker de la planta o una carpeta de archivos CSV y lo envía a OperX por HTTPS.
249
+ Lo que no puede enviar queda en ese computador, en orden, hasta que vuelve
250
+ internet.
251
+
252
+ ```sh
253
+ operx connect forward "mqtt://localhost/planta/#" # el broker de la planta
254
+ operx connect forward "mqtts://broker.planta:8883/planta/#" --usuario lector --ca ca.crt
255
+ operx connect forward "C:\scada\exportes" # una carpeta de CSV
256
+ ```
257
+
258
+ - Usa la clave de un dispositivo, no tu sesión: créalo en la app, en Agregar
259
+ dispositivo › «Computador de la planta» (hasta 300.000 valores al día). Ponla en la variable
260
+ `OPERX_DEVICE_KEY`, o te la pide sin mostrarla; nunca va como opción. La
261
+ clave del broker va en `OPERX_BROKER_CLAVE`.
262
+ - Cada tema es un canal (`planta/comp2/temp`); en un JSON, cada clave va bajo
263
+ su tema. De cada canal envía el primer valor de cada minuto.
264
+ - Un CSV lleva una columna Fecha y una columna por canal, o Fecha, Canal y
265
+ Valor. Lee lo nuevo de la carpeta cada 30 segundos.
266
+ - Lo que espera queda en la carpeta de `operx` (o en el archivo de `--datos`),
267
+ hasta 2 millones de valores. Cada minuto escribe una línea con lo leído, lo
268
+ enviado y lo que espera.
269
+ - Para que corra solo al prender el computador: el Programador de tareas de
270
+ Windows o un servicio de systemd, con la clave en `OPERX_DEVICE_KEY` y lo que
271
+ escribe guardado en un archivo. La guía «Desde un computador de la planta»
272
+ de Connect lo explica paso a paso.
229
273
 
230
274
  SG-SST y Ambiental van por empresa: sin `--empresa`, la de tu cuenta. Si
231
275
  llevas el SG-SST o lo ambiental de tus clientes, `operx sst empresas` y