TCP/IP Trigger hört auf zeilengetrennte JSON-Anfragen von einem Client und fordert freigegebene App-Aktionen an. Es ist für lokale Automatisierung, vertrauenswürdige LAN-Automatisierung und Entwicklungsvalidierung konzipiert. Standardmäßig bindet es an die Loopback-Adresse und benötigt ein Token, bevor es einen Befehl akzeptiert.

Für ControlMyNikon sind die aktuellen freigegebenen Aktions-IDs CameraShoot, CameraToggleConnection und CameraAutoFocus. Andere App-Aktionen sind für TCP/IP Trigger nicht verfügbar, es sei denn, eine spätere Version gibt sie ausdrücklich frei.

Bevor Sie beginnen

  • Verwenden Sie TCP/IP Trigger nur mit Clients, die Sie kontrollieren.
  • Halten Sie die Bind-Adresse auf 127.0.0.1 für Skripte, die auf demselben Computer ausgeführt werden.
  • Verwenden Sie eine LAN-IPv4-Adresse nur in einem vertrauenswürdigen privaten Netzwerk.
  • Halten Sie Aktionen deaktiviert, während Sie die Konnektivität und Tokens testen.
  • Aktivieren Sie Aktionen nur, wenn der Anforderungsweg nachgewiesen ist.
  • Regenerieren Sie das Token, wenn es mit einem Client geteilt wurde, dem Sie nicht mehr vertrauen.

TCP/IP Trigger verwendet Klartext-JSON und ein Bearer-Token. Setzen Sie es nicht durch Router-Portweiterleitung, öffentliches WLAN, untrusted VPNs oder internetgerichtete Firewall-Regeln aus. Verwenden Sie HTML Trigger, wenn Sie eine Telefonbrowserseite mit großen Aktionsschaltflächen anstelle eines Skripts oder eines benutzerdefinierten TCP/IP-Clients wünschen. UDP Trigger ist nicht geplant.

Seitensteuerungen

  • Start beginnt mit dem Hören auf der konfigurierten Loopback-Adresse und dem Port.
  • Stop beendet den Listener und gibt den Port frei.
  • Bind-Adresse legt die lokale Adresse fest, auf der gehört werden soll.
  • Verwenden Sie 127.0.0.1 für Skripte auf demselben Computer.
  • Verwenden Sie eine IPv4-Adresse, die diesem Computer zugewiesen ist, für vertrauenswürdige LAN-Clients.
  • Wildcard-Adressen wie 0.0.0.0 werden nicht unterstützt.
  • Port legt den TCP-Port fest.
  • Aktionen aktiviert erlaubt akzeptierte Aktionsanforderungen, freigegebene Aktionen auszuführen.
  • Aktionen deaktiviert ermöglicht es Ihnen, Befehle zu testen, ohne Aktionen auszuführen.
  • Token zeigt das erforderliche Anforderungstoken an.
  • Token kopieren platziert das Token in die Zwischenablage.
  • Token regenerieren erstellt ein neues Token und macht das alte ungültig.
  • Die Ereignishistorie beginnt mit den Aktions-IDs, die derzeit für TCP/IP Trigger freigegeben sind, und zeigt dann den Listener-Zustand, akzeptierte Befehle, abgelehnte Befehle und angeforderte Aktionen an.

Wenn TCP/IP Trigger hört, wenn das aktuelle Profil gespeichert wird oder die App geschlossen wird, startet dieses Profil den Listener beim nächsten Mal erneut. Wenn die gespeicherte Adresse nicht mehr diesem Computer zugewiesen ist oder der Port beschäftigt ist, wird der Start mit TCP/IP Trigger gestoppt, und die Ereignishistorie erklärt den Fehler.

Befehlsformat

Clients senden ein JSON-Objekt pro Zeile. Der Listener gibt eine JSON-Antwort pro Zeile zurück.

Die grundlegende Form der Aktionsanforderung ist:

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

Eine erfolgreiche Antwort sieht so aus:

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

Eine abgelehnte Antwort enthält einen stabilen Fehlercode:

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

Die ersten Befehle sind:

  • action fordert eine freigegebene Aktion an.
  • ping überprüft, ob der Listener und das Token funktionieren.
  • actions gibt die Aktions-IDs zurück, die derzeit für TCP/IP Trigger freigegeben sind.

Python-Testclient

Dieses Skript verwendet nur die Python-Standardbibliothek. Starten Sie zuerst TCP/IP Trigger, und fügen Sie dann das Token von der Seite in TOKEN ein. Lassen Sie SEND_ACTION auf False, während Aktionen deaktiviert sind. Setzen Sie SEND_ACTION auf True, nachdem ping und actions funktionieren und Aktionen aktiviert sind. Eine Kopie dieses Skripts wird im Quellbaum unter Shared\Common\Triggers\pyscripts\tcpip_trigger_test_client.py gespeichert. Für Visual Studio öffnen Sie 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
    }))

Sicherheit

TCP/IP Trigger kann App-Aktionen ohne lokale Tastatur-, Scanner-, Sprach- oder Audioeingabe anfordern. Aus diesem Grund startet es deaktiviert, bindet standardmäßig an die Loopback-Adresse und benötigt ein Token, selbst bei Loopback.

Aktionen deaktiviert blockiert die Aktionsausführung, lässt Ihnen jedoch die Validierung von JSON, Token-Verwaltung und grundlegende Befehlsantworten zu. Verwenden Sie es, während Sie einen Client erstellen oder testen.

LAN-Bindung ist nur für vertrauenswürdige LAN-Kontrolle. Jeder, der sich mit dem Listener verbinden kann und das Token kennt, kann freigegebene Aktionen anfordern, während Aktionen aktiviert sind. Halten Sie das Token privat und regenerieren Sie es, nachdem Sie es mit temporären Skripten oder Clients geteilt haben.

Fehlerbehebung

Wenn Start deaktiviert ist:

  • Überprüfen Sie, ob der Port zwischen 1 und 65535 liegt.
  • Bestätigen Sie, dass das Token nicht leer ist.
  • Stoppen Sie jeden vorherigen Listener-Zustand, bevor Sie den Port ändern.

Wenn Start fehlschlägt:

  • Ein anderer Prozess könnte bereits den Port verwenden.
  • Wählen Sie einen anderen Port und versuchen Sie es erneut.
  • Überprüfen Sie die Ereignishistorie auf die Fehlermeldung.

Wenn ein Client keine Verbindung herstellen kann:

  • Bestätigen Sie, dass TCP/IP Trigger gestartet ist.
  • Bestätigen Sie, dass der Client mit der angezeigten Bind-Adresse und dem Port verbindet.
  • Für Skripte auf demselben Computer verwenden Sie 127.0.0.1.
  • Für ein anderes LAN-Gerät verwenden Sie die LAN-IPv4-Adresse des Computers und bestätigen Sie, dass die Windows-Firewall oder Endpunkt-Tools die eingehende Verbindung zulassen.
  • Bestätigen Sie, dass die Bind-Adresse diesem Computer zugewiesen ist.

Wenn eine Anfrage abgelehnt wird:

  • Bestätigen Sie, dass die Anfrage ein JSON-Objekt in einer einzigen Zeile ist.
  • Bestätigen Sie, dass das Token genau mit dem Token auf der Seite übereinstimmt.
  • Bestätigen Sie, dass der Befehl action, ping oder actions ist.
  • Bestätigen Sie, dass die angeforderte Aktion eine der Aktions-IDs ist, die durch den Befehl actions angezeigt werden, wie CameraShoot.
  • Aktivieren Sie Aktionen, bevor Sie erwarten, dass Aktionsanforderungen ausgeführt werden.

Für die Entwicklung von Python- oder PowerShell-Clients beobachten Sie die Ereignishistorie während des Testens. Sie protokolliert Client-Verbindungs- und Trennereignisse, akzeptierte ping- und actions-Befehle, abgelehnte JSON, fehlende oder ungültige Tokens, unbekannte Befehle, unbekannte Aktionen, deaktivierte Aktionen und erfolgreiche Aktionsausführungen. Das Token selbst wird nicht in die Ereignishistorie geschrieben.

Verwandte Einrichtung

Verwenden Sie Hotkeys, wenn die Tastatureingabe Aktionen anfordern soll. Verwenden Sie Scanner, wenn die Barcodeeingabe Felder ausfüllen oder Aktionen auslösen soll. Verwenden Sie Voice Trigger, wenn gesprochene Phrasen Aktionen anfordern sollen. Verwenden Sie Sound Trigger, wenn Audiopegelüberschreitungen Aktionen anfordern sollen.