【发布时间】:2016-11-11 11:05:03
【问题描述】:
我希望有人对 Smart Shooter 3 及其 API ZeroMQ 有更多经验。
ZeroMQ 似乎是 MQTT 的不同版本,但在发布和订阅主题方面基本上以相同的方式工作。
Smart Shooter 3 是一个程序,旨在控制设置/选项并通过 USB 连接使用 DSLR 相机拍照。
我目前正在尝试向该项目添加其他功能,并且正在尝试收听此ZeroMQ 服务器以获取拍照命令:
import json
import datetime
import argparse
import zmq
def main():
parser = argparse.ArgumentParser("smartshooter-listen.py")
parser.add_argument("-q", "--quiet",
action="store_true",
default=False,
help="enable quiet mode for reduced logging")
parser.add_argument("-n", "--nopings",
action="store_true",
default=False,
help="filter out ping messages")
parser.add_argument("-p", "--publisher",
default="tcp://127.0.0.1:54543",
metavar="ENDPOINT",
help="specify ZMQ address of Smart Shooter publisher")
args = parser.parse_args()
context = zmq.Context()
sub_socket = context.socket(zmq.SUB)
sub_socket.setsockopt(zmq.SUBSCRIBE, b"")
sub_socket.connect(args.publisher)
while (True):
raw = sub_socket.recv()
str_msg = raw.decode("utf-8")
json_msg = json.loads(str_msg)
if args.nopings and json_msg["msg_id"] == "NetworkPingMsg":
continue
print("{0}: {1}".format(datetime.datetime.now(), json_msg["msg_id"]))
if not args.quiet:
print(str_msg)
if __name__ == "__main__":
main()
当我连接到在 Smart Shooter 3 上运行的 ZeroMQ 服务器时,它每 5 秒左右给出一个 msg_type Request, msg_id NetworkPingMsg。当我按拍摄一张照片时,它会更新它以什么ISO值等拍摄照片,但是,没有'请求'拍摄给了一张图片。
我还找到了一个拍照的脚本:
import sys
import json
import argparse
import zmq
def send_shoot(socket):
req = {}
req["msg_type"] = "Request"
req["msg_id"] = "ShootMsg"
req["msg_ref_num"] = 0
req["CameraSelection"] = "All"
socket.send_string(json.dumps(req))
rep = socket.recv()
str_msg = rep.decode("utf-8")
json_msg = json.loads(str_msg)
return json_msg["Result"]
def main():
parser = argparse.ArgumentParser("smartshooter-trigger.py")
parser.add_argument("-r", "--reqrep",
default="tcp://127.0.0.1:54544",
metavar="ENDPOINT",
help="specify ZMQ address of Smart Shooter request/reply server")
args = parser.parse_args()
context = zmq.Context()
req_socket = context.socket(zmq.REQ)
req_socket.connect(args.reqrep)
if not send_shoot(req_socket):
print("Failed to send trigger message", file=sys.stderr)
exit(1)
if __name__ == "__main__":
main()
但是,当我使用它时,DSLR 会拍摄一张照片。在ZeroMQ 上收听此提要时,我现在看到了拍摄图片命令。
有没有可能信息不是通过ZeroMQ 而是仅通过USB 发送的?
我真正要问的是,有没有人可能知道在哪里或我可以找到响应/查看何时通过ZeroMQ 请求图片的代码。
谢谢!
【问题讨论】: