import requests import time DOMAIN = "ptz_camera" ATTR_HOST = "host" ATTR_PROFILE = "profile" DEFAULT_HOST = "192.168.77.237" DEFAULT_PROFILE = "Profile_1" ATTR_PAN_TIME = "pan_time" DEFAULT_PANT_TIME = 0.1 ATTR_MOVE_TIME = "move_time" DEFAULT_MOVE_TIME = 0.05 DEFAULT_HEADERS = {'Content-Type':'application/soap+xml;charset=UTF8'} def setup(hass, config): def stop(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) print(host) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) xml = """ Profile_1 true true """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) def move_left(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) move_time = call.data.get(ATTR_MOVE_TIME, DEFAULT_MOVE_TIME) xml = """ Profile_1 """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) time.sleep(move_time) stop(call) def move_right(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) move_time = call.data.get(ATTR_MOVE_TIME, DEFAULT_MOVE_TIME) xml = """ Profile_1 """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) time.sleep(move_time) stop(call) def move_up(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) move_time = call.data.get(ATTR_MOVE_TIME, DEFAULT_MOVE_TIME) xml = """ Profile_1 """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) time.sleep(move_time) stop(call) def move_down(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) move_time = call.data.get(ATTR_MOVE_TIME, DEFAULT_MOVE_TIME) xml = """ Profile_1 """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) time.sleep(move_time) stop(call) def move_origin_pan(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) xml = """ Profile_1 """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) def move_origin_tilt(call): host = call.data.get(ATTR_HOST, DEFAULT_HOST) profile = call.data.get(ATTR_PROFILE, DEFAULT_PROFILE) xml = """ Profile_1 """ r = requests.post('http://'+host+'/onvif/PTZ', data=xml, headers=DEFAULT_HEADERS) def move_origin(call): pan_time = call.data.get(ATTR_PAN_TIME, DEFAULT_PANT_TIME) move_origin_pan(call) time.sleep(pan_time) move_origin_tilt(call) hass.services.register(DOMAIN, "move_left", move_left) hass.services.register(DOMAIN, "move_right", move_right) hass.services.register(DOMAIN, "move_up", move_up) hass.services.register(DOMAIN, "move_down", move_down) hass.services.register(DOMAIN, "stop", stop) hass.services.register(DOMAIN, "move_origin", move_origin) hass.services.register(DOMAIN, "move_origin_pan", move_origin_pan) hass.services.register(DOMAIN, "move_origin_tilt", move_origin_tilt) # Return boolean to indicate that initialization was successfully. return True