Herramientas unificadas para gestionar cámaras Foscam: descubrir, configurar, visor y consola CGI
Project description
Foscam Controller
Herramientas unificadas para gestionar cámaras Foscam en la red: descubrimiento, configuración, visor en vivo y consola CGI. Compatible con la API CGI de la mayoría de modelos (FI98xx, C1, R2, etc.).
Instalación con pipx (recomendado)
pipx install .
Tras la instalación tendrás el comando foscam disponible globalmente. Para actualizar o desinstalar:
pipx upgrade foscam-controller
pipx uninstall foscam-controller # desinstalar
Características
- Descubrimiento: Escaneo de la red local para encontrar cámaras Foscam (puertos 80, 88, 8080).
- Configuración: Exportar toda la configuración de una cámara a JSON y aplicarla a otras (con modo dry-run).
- Visor: GUI para ver el stream RTSP en vivo, control PTZ con flechas, snapshot, audio (PyAV o ffplay).
- Consola CGI: Terminal con autocompletado (Tab) para probar cualquier comando de la API.
Requisitos
- Python 3.7+
- Red local con cámaras Foscam (misma subred)
Para el visor con audio: av, sounddevice y opcionalmente ffplay (FFmpeg). Para decodificación por GPU: OpenCV con GStreamer y plugins nvcodec (NVIDIA).
Instalación desde código (desarrollo)
cd foscam_controller
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .
Uso
Con pipx (o tras pip install -e .), usa el comando foscam:
foscam discover
foscam config --ip 192.168.1.6 --user admin --password xxx --save cam.json
foscam view --ip 192.168.1.6 --user admin --password xxx
Desde el directorio del proyecto también puedes usar:
python -m foscam discover
python -m foscam view --ip ... --user ... --password ...
Descubrir cámaras
foscam discover
foscam discover --network 192.168.1.0/24 --workers 100
Obtener configuración
foscam config --ip 192.168.1.6 --user admin --password tu_password [--port 88] [--save cam.json]
Aplicar configuración desde JSON
# Vista previa (recomendado primero)
foscam apply --ip 192.168.1.7 --user admin --password xxx --file cam.json --dry-run
# Aplicar
foscam apply --ip 192.168.1.7 --user admin --password xxx --file cam.json
Visor en vivo
foscam view --ip 192.168.1.6 --user admin --password xxx [--port 88] [--sub] [--nvidia]
- Flechas: mover PTZ (mantener para mover, soltar para parar).
- 0: ir al preset por defecto (ptzReset).
- a / z: subir / bajar volumen de audio.
- Snapshot: guarda una captura.
También puedes ejecutar el visor como módulo:
python -m foscam.viewer --ip 192.168.1.6 --user admin --password xxx [--sub] [--audio-gate-db -38] [--nvidia]
Consola de comandos CGI
foscam console --ip 192.168.1.6 --user admin --password xxx [--port 88]
Dentro de la consola: help, list, doc <comando>, y cualquier comando CGI con parámetros clave=valor. Usa Tab para autocompletar.
Estructura del proyecto
foscam_controller/
├── pyproject.toml # Metadatos y entry point para pip/pipx
├── requirements.txt
├── README.md
├── foscam/
│ ├── __init__.py
│ ├── __main__.py # python -m foscam
│ ├── cli.py # CLI principal (discover, config, apply, view, console)
│ ├── client.py # Cliente HTTP para la API CGI (FoscamClient)
│ ├── discover.py # Descubrimiento de cámaras en la red
│ ├── config_io.py # Lectura/escritura de configuración (JSON)
│ ├── viewer.py # Visor GUI (stream RTSP + PTZ + snapshot + audio)
│ └── cgi_console.py # Consola interactiva para la API CGI
├── scripts/
│ └── publish_to_pypi.sh # Publicar en PyPI (o Test PyPI con --test)
├── foscam_control_repo/ # Repo original (solo referencia)
└── configurador_foscam_repo/ # Repo original (solo referencia)
Uso como biblioteca
from foscam.client import FoscamClient
from foscam.discover import FoscamDiscoverer
from foscam.config_io import FoscamConfigReader, FoscamConfigWriter
# Cliente para una cámara
client = FoscamClient("192.168.1.6", "admin", "password", port=88)
print(client.get_dev_name()) # Información del dispositivo
client.ptz_move("Up") # Mover arriba
client.ptz_stop() # Parar
# Descubrir cámaras
disc = FoscamDiscoverer("192.168.1.0/24")
cameras = disc.discover(show_progress=True)
# Leer y guardar configuración
reader = FoscamConfigReader(client)
config = reader.get_all_config(show_progress=True)
reader.save_to_file("backup.json", config)
# Aplicar configuración
writer = FoscamConfigWriter(client)
writer.apply_from_file("backup.json", dry_run=False)
Seguridad
- No subas archivos JSON de configuración que contengan contraseñas.
- Usa
--dry-runantes de aplicar configuración a producción.
Publicar en PyPI
Para publicar el paquete en PyPI (o en Test PyPI para pruebas):
-
Instalar herramientas:
pip install build twine -
Configurar token de PyPI (en https://pypi.org/manage/account/token/):
export TWINE_USERNAME=__token__ export TWINE_PASSWORD=pypi-xxxxxxxx
-
Publicar:
./scripts/publish_to_pypi.sh # PyPI real ./scripts/publish_to_pypi.sh --test # Test PyPI
Para Test PyPI usa el token de https://test.pypi.org/manage/account/token/
Referencias
- API CGI Foscam: documentación oficial del fabricante (Foscam IPCamera CGI User Guide).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file foscam_controller-0.1.0.tar.gz.
File metadata
- Download URL: foscam_controller-0.1.0.tar.gz
- Upload date:
- Size: 26.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98e3e601f4ffd8e2ee878a523634a0ece32e861d556f63bc131c982e9e4abdd2
|
|
| MD5 |
4fced47d4f5725d08a23ae72612acf22
|
|
| BLAKE2b-256 |
6050d108d509a7a7f8471a3bd0b43a7714efe1377b125fc7540c6c3a42e628fb
|
File details
Details for the file foscam_controller-0.1.0-py3-none-any.whl.
File metadata
- Download URL: foscam_controller-0.1.0-py3-none-any.whl
- Upload date:
- Size: 26.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ccbea879889f3d4f376a1e1df23d6560da1a1b5d264f31b96921ca207073d919
|
|
| MD5 |
fce0328bf6d6e0e584c2bc71db3c8bdd
|
|
| BLAKE2b-256 |
2b82ba33ff4273b1f2e2da1d1424f8d00869b6473bd652cab063f14132482340
|