Le déclencheur TCP/IP écoute les requêtes JSON délimitées par des nouvelles lignes d'un client et demande des actions d'application exposées. Il est conçu pour l'automatisation locale, l'automatisation de réseau local de confiance et la validation de développement. Il se lie par défaut à la boucle de retour et nécessite un jeton avant d'accepter toute commande.

Pour ControlMyNikon, les identifiants d'action exposés actuels sont CameraShoot, CameraToggleConnection et CameraAutoFocus. D'autres actions d'application ne sont pas disponibles pour le déclencheur TCP/IP à moins qu'une version ultérieure ne les expose explicitement.

Avant de commencer

  • Utilisez le déclencheur TCP/IP uniquement avec des clients que vous contrôlez.
  • Gardez l'adresse de liaison à 127.0.0.1 pour les scripts qui s'exécutent sur le même ordinateur.
  • Utilisez une adresse IPv4 de réseau local uniquement sur un réseau privé de confiance.
  • Gardez les actions désactivées pendant que vous testez la connectivité et les jetons.
  • Activez les actions uniquement lorsque le chemin de demande est prouvé.
  • Regénérez le jeton s'il a été partagé avec un client que vous ne considérez plus comme fiable.

Le déclencheur TCP/IP utilise JSON en texte clair et un jeton d'accès. Ne l'exposez pas par le biais du transfert de port du routeur, du Wi-Fi public, des VPN non fiables ou des règles de pare-feu exposées à Internet. Utilisez le déclencheur HTML lorsque vous souhaitez une page de navigateur pour téléphone avec de grands boutons d'action au lieu d'un script ou d'un client TCP/IP personnalisé. Le déclencheur UDP n'est pas prévu.

Contrôles de page

  • Démarrer commence à écouter sur l'adresse de boucle de retour et le port configurés.
  • Arrêter met fin à l'écoute et libère le port.
  • L'adresse de liaison définit l'adresse locale à écouter.
  • Utilisez 127.0.0.1 pour les scripts sur le même ordinateur.
  • Utilisez une adresse IPv4 assignée à cet ordinateur pour les clients de réseau local de confiance.
  • Les adresses génériques telles que 0.0.0.0 ne sont pas prises en charge.
  • Le port définit le port TCP.
  • Actions activées permettent aux demandes d'action acceptées d'exécuter des actions exposées.
  • Actions désactivées vous permettent de tester des commandes sans exécuter d'actions.
  • Jeton montre le jeton de demande requis.
  • Copier le jeton place le jeton dans le presse-papiers.
  • Regénérer le jeton crée un nouveau jeton et invalide l'ancien.
  • L'historique des événements commence avec les identifiants d'action actuellement exposés au déclencheur TCP/IP, puis montre l'état de l'écouteur, les commandes acceptées, les commandes rejetées et les actions demandées.

Si le déclencheur TCP/IP écoute lorsque le profil actuel est enregistré ou que l'application se ferme, ce profil redémarre l'écouteur la prochaine fois. Si l'adresse enregistrée n'est plus assignée à cet ordinateur ou si le port est occupé, le démarrage se poursuit avec le déclencheur TCP/IP arrêté et l'historique des événements explique l'échec.

Format de commande

Les clients envoient un objet JSON par ligne. L'écouteur renvoie une réponse JSON par ligne.

La forme de demande d'action de base est :

{"token":"your-token","command":"action","action":"CameraShoot"}

Une réponse réussie ressemble à :

{"ok":true,"message":"Action requested.","action":"CameraShoot","actions":null,"error":null}

Une réponse rejetée inclut un code d'erreur stable :

{"ok":false,"error":"InvalidToken","message":"Token is invalid.","action":null,"actions":null}

Les premières commandes sont :

  • action demande une action exposée.
  • ping vérifie que l'écouteur et le jeton fonctionnent.
  • actions renvoie les identifiants d'action actuellement exposés au déclencheur TCP/IP.

Client de test Python

Ce script utilise uniquement la bibliothèque standard Python. Démarrez d'abord le déclencheur TCP/IP, puis collez le jeton de la page dans TOKEN. Laissez SEND_ACTION sur False tant que Actions désactivées est activé. Réglez SEND_ACTION sur True uniquement après que ping et actions fonctionnent et que Actions activées est activé. Une copie de ce script est enregistrée dans l'arborescence source à Shared\Common\Triggers\pyscripts\tcpip_trigger_test_client.py. Pour Visual Studio, ouvrez 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
    }))

Sécurité

Le déclencheur TCP/IP peut demander des actions d'application sans saisie clavier locale, scanner, voix ou son. Pour cette raison, il commence désactivé, se lie par défaut à la boucle de retour et nécessite un jeton même sur la boucle de retour.

Actions désactivées bloque l'envoi d'actions mais vous permet toujours de valider JSON, la gestion des jetons et les réponses de commande de base. Utilisez-le lors de la construction ou du test d'un client.

La liaison LAN est un contrôle uniquement de réseau local de confiance. Quiconque peut se connecter à l'écouteur et connaît le jeton peut demander des actions exposées tant que Actions activées est activé. Gardez le jeton privé et régénérez-le après l'avoir partagé avec des scripts ou clients temporaires.

Dépannage

Si Démarrer est désactivé :

  • Vérifiez que le port est compris entre 1 et 65535.
  • Confirmez que le jeton n'est pas vide.
  • Arrêtez tout état d'écouteur précédent avant de changer le port.

Si Démarrer échoue :

  • Un autre processus peut déjà utiliser le port.
  • Choisissez un autre port et réessayez.
  • Vérifiez l'historique des événements pour le message d'échec.

Si un client ne peut pas se connecter :

  • Confirmez que le déclencheur TCP/IP est démarré.
  • Confirmez que le client se connecte à l'adresse de liaison et au port affichés.
  • Pour les scripts sur le même ordinateur, utilisez 127.0.0.1.
  • Pour un autre appareil LAN, utilisez l'adresse IPv4 LAN de l'ordinateur et confirmez que le pare-feu Windows ou les outils de point de terminaison autorisent la connexion entrante.
  • Confirmez que l'adresse de liaison est assignée à cet ordinateur.

Si une demande est rejetée :

  • Confirmez que la demande est un objet JSON sur une seule ligne.
  • Confirmez que le jeton correspond exactement au jeton sur la page.
  • Confirmez que la commande est action, ping ou actions.
  • Confirmez que l'action demandée est l'un des identifiants d'action affichés par la commande actions, comme CameraShoot.
  • Activez Actions avant de vous attendre à ce que les demandes d'action s'exécutent.

Pour le développement de clients Python ou PowerShell, surveillez l'historique des événements pendant les tests. Il enregistre les événements de connexion et de déconnexion du client, les commandes ping et actions acceptées, les JSON rejetés, les jetons manquants ou invalides, les commandes inconnues, les actions inconnues, les actions désactivées et l'envoi d'actions réussi. Le jeton lui-même n'est pas écrit dans l'historique des événements.

Configuration connexe

Utilisez les touches de raccourci lorsque l'entrée au clavier doit demander des actions. Utilisez le scanner lorsque l'entrée de code-barres doit remplir des champs ou déclencher des actions. Utilisez le déclencheur vocal lorsque des phrases prononcées doivent demander des actions. Utilisez le déclencheur sonore lorsque des franchissements de seuil de niveau audio doivent demander des actions.