Disparador TCP/IP
El Disparador TCP/IP escucha solicitudes JSON delimitadas por nuevas líneas de un cliente y solicita acciones de la aplicación expuestas. Está diseñado para automatización local, automatización en LAN de confianza y validación de desarrollo. Se vincula a loopback por defecto y requiere un token antes de aceptar cualquier comando.
Para ControlMyNikon, los ids de acción expuestos actualmente son CameraShoot, CameraToggleConnection y CameraAutoFocus. Otras acciones de la aplicación no están disponibles para el Disparador TCP/IP a menos que una versión posterior las exponga explícitamente.
Antes de empezar
- Utiliza el Disparador TCP/IP solo con clientes que controlas.
- Mantén la dirección de enlace en 127.0.0.1 para scripts que se ejecutan en la misma computadora.
- Utiliza una dirección IPv4 de LAN solo en una red privada de confianza.
- Mantén las acciones deshabilitadas mientras pruebas la conectividad y los tokens.
- Activa las acciones solo cuando se haya comprobado el camino de solicitud.
- Regenera el token si ha sido compartido con un cliente en el que ya no confías.
El Disparador TCP/IP utiliza JSON en texto plano y un token portador. No lo expongas a través de reenvío de puertos del enrutador, Wi-Fi público, VPN no confiables o reglas de firewall expuestas a Internet. Utiliza el Disparador HTML cuando desees una página de navegador para teléfono con grandes botones de acción en lugar de un script o cliente TCP/IP personalizado. No se planea un Disparador UDP.
Controles de página
- Iniciar comienza a escuchar en la dirección y puerto de loopback configurados.
- Detener finaliza el listener y libera el puerto.
- La dirección de enlace establece la dirección local en la que escuchar.
- Utiliza 127.0.0.1 para scripts en la misma computadora.
- Utiliza una dirección IPv4 asignada a esta computadora para clientes de LAN de confianza.
- Las direcciones comodín como 0.0.0.0 no son compatibles.
- El puerto establece el puerto TCP.
- Acciones habilitadas permiten que las solicitudes de acción aceptadas ejecuten acciones expuestas.
- Acciones deshabilitadas te permiten probar comandos sin ejecutar acciones.
- Token muestra el token de solicitud requerido.
- Copiar token coloca el token en el portapapeles.
- Regenerar token crea un nuevo token e invalida el antiguo.
- El historial de eventos comienza con los ids de acción actualmente expuestos al Disparador TCP/IP, luego muestra el estado del listener, comandos aceptados, comandos rechazados y acciones solicitadas.
Si el Disparador TCP/IP está escuchando cuando se guarda el perfil actual o se cierra la aplicación, ese perfil inicia el listener nuevamente la próxima vez. Si la dirección guardada ya no está asignada a esta computadora o el puerto está ocupado, el inicio continúa con el Disparador TCP/IP detenido y el historial de eventos explica la falla.
Formato de comando
Los clientes envían un objeto JSON por línea. El listener devuelve una respuesta JSON por línea.
La forma básica de la solicitud de acción es:
{"token":"your-token","command":"action","action":"CameraShoot"}
Una respuesta exitosa se ve así:
{"ok":true,"message":"Action requested.","action":"CameraShoot","actions":null,"error":null}
Una respuesta rechazada incluye un código de error estable:
{"ok":false,"error":"InvalidToken","message":"Token is invalid.","action":null,"actions":null}
Los primeros comandos son:
- action solicita una acción expuesta.
- ping verifica que el listener y el token estén funcionando.
- actions devuelve los ids de acción actualmente expuestos al Disparador TCP/IP.
Cliente de prueba de Python
Este script utiliza solo la biblioteca estándar de Python. Inicia el Disparador TCP/IP primero, luego pega el token de la página en TOKEN. Deja SEND_ACTION como False mientras Acciones deshabilitadas esté activado. Establece SEND_ACTION en True solo después de que ping y actions funcionen y Acciones habilitadas esté activado. Una copia de este script se guarda en el árbol de origen en Shared\Common\Triggers\pyscripts\tcpip_trigger_test_client.py. Para Visual Studio, abre Shared\Common\Triggers\pyscripts\TcpIpTriggerPythonClient.sln.
import json
import socket
HOST = "127.0.0.1"
PORT = 50505
TOKEN = "paste-token-from-page"
SEND_ACTION = False
ACTION_ID = "CameraShoot"
def send_command(command):
line = json.dumps(command, separators=(",", ":")) + "\n"
with socket.create_connection((HOST, PORT), timeout=5) as sock:
sock.sendall(line.encode("utf-8"))
response = sock.makefile("r", encoding="utf-8", newline="\n").readline()
return json.loads(response)
print("ping:", send_command({
"token": TOKEN,
"command": "ping"
}))
print("actions:", send_command({
"token": TOKEN,
"command": "actions"
}))
if SEND_ACTION:
print("action:", send_command({
"token": TOKEN,
"command": "action",
"action": ACTION_ID
}))
Seguridad
El Disparador TCP/IP puede solicitar acciones de la aplicación sin entrada de teclado local, escáner, voz o sonido. Por esa razón, comienza deshabilitado, se vincula a loopback por defecto y requiere un token incluso en loopback.
Acciones deshabilitadas bloquean el despacho de acciones pero aún te permiten validar JSON, manejo de tokens y respuestas básicas de comandos. Úsalo mientras construyes o pruebas un cliente.
La vinculación a LAN es control solo de LAN de confianza. Cualquiera que pueda conectarse al listener y conozca el token puede solicitar acciones expuestas mientras Acciones habilitadas esté activado. Mantén el token privado y regénéralo después de compartirlo con scripts o clientes temporales.
Solución de problemas
Si Iniciar está deshabilitado:
- Verifica que el puerto esté entre 1 y 65535.
- Confirma que el token no esté vacío.
- Detén cualquier estado de listener anterior antes de cambiar el puerto.
Si Iniciar falla:
- Otro proceso puede estar utilizando ya el puerto.
- Elige otro puerto y vuelve a intentarlo.
- Verifica el historial de eventos para el mensaje de falla.
Si un cliente no puede conectarse:
- Confirma que el Disparador TCP/IP esté iniciado.
- Confirma que el cliente se conecte a la dirección de enlace y puerto mostrados.
- Para scripts en la misma computadora, utiliza 127.0.0.1.
- Para otro dispositivo de LAN, utiliza la dirección IPv4 de LAN de la computadora y confirma que el firewall de Windows o herramientas de endpoint permitan la conexión entrante.
- Confirma que la dirección de enlace esté asignada a esta computadora.
Si una solicitud es rechazada:
- Confirma que la solicitud sea un objeto JSON en una sola línea.
- Confirma que el token coincida exactamente con el token en la página.
- Confirma que el comando sea action, ping o actions.
- Confirma que la acción solicitada sea uno de los ids de acción mostrados por el comando actions, como CameraShoot.
- Activa las acciones antes de esperar que las solicitudes de acción se ejecuten.
Para el desarrollo de clientes en Python o PowerShell, observa el historial de eventos mientras pruebas. Registra eventos de conexión y desconexión del cliente, comandos de ping y actions aceptados, JSON rechazado, tokens faltantes o inválidos, comandos desconocidos, acciones desconocidas, acciones deshabilitadas y despacho de acciones exitoso. El token en sí no se escribe en el historial de eventos.
Configuración relacionada
Utiliza teclas de acceso rápido cuando la entrada del teclado deba solicitar acciones. Utiliza Escáner cuando la entrada de código de barras deba llenar campos o activar acciones. Utiliza Disparador de voz cuando frases habladas deban solicitar acciones. Utiliza Disparador de sonido cuando los cruces de umbral de nivel de audio deban solicitar acciones.