from __future__ import print_function import pysony import time import six import argparse parser = argparse.ArgumentParser(prog="set_zoom") parser.add_argument("zoom", type=int, help="Set Zoom to specific value (0-100)") parser.add_argument("-n", "--nudge", action="store_true", dest="nudge", help="keep nudging position after an initial adjustment") parser.add_argument("-p", "--print", action="store_true", dest="print", help="print current zoom info and quit") parser.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="be verbose when setting zoom") parser.add_argument("-t", "--timeout", type=float, default=10.0, dest="timeout", help="Timeout in X seconds") options = parser.parse_args() print("Searching for camera...") search = pysony.ControlPoint() cameras = search.discover() # cameras = ['http://192.168.122.1:8080'] if len(cameras): print("Found: %s" % cameras[0]) camera = pysony.SonyAPI(QX_ADDR=cameras[0]) else: print("No camera found, aborting") quit() # For those cameras which need it mode = camera.getAvailableApiList() if 'startRecMode' in (mode['result'])[0]: camera.startRecMode() time.sleep(5) direction = None movement = None timeout = options.timeout + time.time() if not options.print: print("Setting Zoom to %d" % options.zoom) while timeout > time.time(): mode = camera.getEvent(["false"], version='1.0') if mode and 'result' in mode.keys(): status = mode['result'][2] if options.verbose: print(status) if options.print: print("Zoom currently %d" % status['zoomPosition']) break if direction == None: if options.zoom > status['zoomPosition']: direction = 'in' else: direction = 'out' resp = camera.actZoom(param=[direction, 'start']) # evaluate position to see if we reached/passed target if direction == 'in' and options.zoom <= status['zoomPosition']: resp = camera.actZoom(param=[direction, 'stop']) break if direction == 'out' and options.zoom >= status['zoomPosition']: resp = camera.actZoom(param=[direction, 'stop']) break while options.nudge and timeout > time.time(): mode = camera.getEvent(["false"], version='1.0') if mode and 'result' in mode.keys(): status = mode['result'][2] if options.verbose: print("Nudge:") print(status) # nudge position if options.zoom > status['zoomPosition']: direction = 'in' resp = camera.actZoom(param=[direction, '1shot']) elif options.zoom < status['zoomPosition']: direction = 'out' resp = camera.actZoom(param=[direction, '1shot']) time.sleep(1)