def setTerminalTime(self, timestr='2018-01-01 00:00:00'): ''' 设置终端的时间 :param self 必须 :param timestr 格式化的时间字符串,如需另传时间 一定要按照默认值的格式 :return flag bool型 :example flag = setTerminalTime(self) ''' data = {} local_datetime = datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S") time_num = long(time.mktime(local_datetime.timetuple()) * 1000.0) data["utcTimeMillis"] = time_num data["timeZone"] = "Asia/Shanghai" data["gmt"] = "GMT+08:00" data["isTimeOffsetEnable"] = False data["beginTime"] = "" data["endTime"] = "" data["timeOffsetValue"] = 0 flag = sendSetCommand(self, Constant.WHAT_TIME_ZONE, 0, Constant.ACTION_MODIFY, 0, data=data, timeout=5, describe="setTerminalTime") return flag
def listTransferOver(self, identifier='', name='', planListUrl='', thumbnailUrl=''): '''. 结束传输 :param1 self 必须 :param2 identifier type:str 唯一标识码 :param3 name type:str 播放清单的名称 :param4 planListUrl type:str planlist的路径 :param5 thumbnailUrl type:str 播放缩略图路径 :return flag bool型 是否结束传输成功 :example flag = Listtransfer_over(self,identifier,name,planListUrl,thumbnailUrl) ''' data = { "playImmediately": True, "confirmedInfos": { "identifier": identifier, "name": name, "planListUrl": planListUrl, "thumbnailUrl": thumbnailUrl } } print data flag = sendSetCommand(self, Constant.WHAT_PLAYLIST, Constant.TYPE_WHAT_PLAYLIST, Constant.ACTION_END, 0, data=data, timeout=4, describe="结束传输") return flag
def setInnerSource_Manual(self, offsetX=-1, offsetY=-1): ''' 设置内部源相关配置 :param self: :param offsetX: 偏移X :param offsetY: 偏移Y :return: flag 是否成功 :example flag = setInnerSource_Manual(self, offsetX=10, offsetY=10) ''' data = {} data["type"] = "VIDEO_CONTROL" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["videoMode"] = 1 data["videoSource"] = 0 # 内部 if offsetX != -1: data["offsetX"] = offsetX if offsetY != -1: data["offsetY"] = offsetY flag = sendSetCommand(self, Constant.WHAT_VIDEO_CONTROL, Constant.TYPE_VIDEO_CONTROL, Constant.ACTION_SET, 0, data=data, describe="setInnerSource_Manual", applyTo=["T2-4G", "T2", "T4", "T6", "T8"]) return flag
def setHDMISource_Manual(self, offsetX=-1, offsetY=-1, isscale=None): ''' 设置HDMI源相关配置 :param self: :param offsetX: 偏移X :param offsetY: 偏移Y :param isScale: 是否缩放,true为全屏缩放,false为不缩放 :return: flag 是否成功 :example flag = setHDMISource_Manual(self, offsetX=10, offsetY=10, isScale=True) ''' data = {} data["type"] = "VIDEO_CONTROL" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["videoMode"] = 1 data["videoSource"] = 1 # HDMI if offsetX != -1: data["offsetX"] = offsetX if offsetY != -1: data["offsetY"] = offsetY if isscale: data["isScale"] = isscale flag = sendSetCommand(self, Constant.WHAT_VIDEO_CONTROL, Constant.TYPE_VIDEO_CONTROL, Constant.ACTION_SET, 0, data=data, describe="setHDMISource_Manual", applyTo=["T2-4G", "T2", "T4", "T6", "T8"]) return flag
def restart_IMMEDIATELY(self): ''' 手动立即重启 :param1 self 必须 :return flag bool型 是否下发成功 :example flag = restart_IMMEDIATELY(self) ''' source = {"type": 0, "platform": 1} data = { "type": "REBOOT", "source": source, "executionType": "IMMEDIATELY", "reason": "Just to test", "conditions": [] } flag = sendSetCommand(self, Constant.WHAT_SYS_ADVANCED, Constant.TYPE_REBOOT, Constant.ACTION_SET, 0, data=data, timeout=5, describe="restart_IMMEDIATELY") return flag
def setVolume_Auto(self, condition_list=[]): ''' 自动设置音量 :param self: :param conditions: 按照条件执行的任务集合,我们支持多个任务。 :return: flag 是否成功 :example flag = setVolume_Auto(self, condition_list=[['0', time, True, '60.0', '2017-09-01 00:00:00', '4016-06-06 24:00:00']]) ''' data = {} data["type"] = "VOLUME" source = {} source["type"] = 0 source["platform"] = 4 data["source"] = source data["enable"] = True conditions = get_conditions(condition_list) data["conditions"] = conditions print data flag = sendSetCommand(self, Constant.WHAT_VOLUME, Constant.TYPE_POLICY, Constant.ACTION_SET, 0, data=data, describe="setVolume_Auto") return flag
def setVideoInfo_Auto(self, offsetX=-1, offsetY=-1, isScale=None, inside=None, hdmi=None): ''' 设置自定义分辨率 :param self: :param isScale: 是否缩放,true为全屏缩放,false为不缩放 :param offsetX: 偏移X :param offsetY: 偏移Y :param inside:object 内部源任务列表 cron String cron表达式,用户表示开始时间和重复 source int 视频源 SOURCE_INSIDE 内部 0, SOURCE_HDMI HDMI 1 enable boolean 该条定时任务是否生效 :param hdmi:object hdmi任务列表 cron String cron表达式,用户表示开始时间和重复 source int 视频源 SOURCE_INSIDE 内部 0, SOURCE_HDMI HDMI 1 enable boolean 该条定时任务是否生效 :return: flag 是否成功 :example flag = setVideoInfo_Auto(self, offsetX=10, offsetY=10, isScale=True, inside=[['4,5,6,7', time, True]], hdmi=[['0', time, True]]) ''' data = {} data["type"] = "VIDEO_CONTROL" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["videoMode"] = 2 # 定时 if offsetX != -1: data["offsetX"] = offsetX if offsetY != -1: data["offsetY"] = offsetY if isScale: data["isScale"] = isScale conditions = [] if inside: conditions = get_conditions(Constant.SOURCE_INSIDE, inside) if hdmi: conditions = get_conditions(Constant.SOURCE_HDMI, hdmi, conditions) if conditions: data["conditions"] = conditions print data flag = sendSetCommand(self, Constant.WHAT_VIDEO_CONTROL, Constant.TYPE_VIDEO_CONTROL, Constant.ACTION_SET, 0, data=data, describe="setVideoInfo_Auto", applyTo=["T2-4G", "T2", "T4", "T6", "T8"]) return flag
def setBrightnessInfo_Auto(self, timing_list=None, auto_list=None): ''' 设置亮度调节方案 :param self: :param timing_list: object 定时任务列表 type number 1:定时调节 cron string array 重复次数,每条条件使用cron表达式数组表示,当为数组时,cron表达式之间使用或的关系 args object 亮度调节参数,定时调试时args为亮度百分比 startTime string 策略有效期开始时间yyyy-MM-dd HH:mm:ss endTime string 策略有效期结束时间yyyy-MM-dd HH:mm:ss ,永久有效的时间为4016-06-06 23:59:59 :param auto_list: object 自动任务列表 type number 2:自动调节 cron string array 重复次数,每条条件使用cron表达式数组表示,当为数组时,cron表达式之间使用或的关系 args object 自动调节时args为自动调节参数 格式: "args":[maxEnvBrightness,minEnvBrightness,maxScreenBrightness,minScreenBrightness,segmentCount] startTime string 策略有效期开始时间yyyy-MM-dd HH:mm:ss endTime string 策略有效期结束时间yyyy-MM-dd HH:mm:ss ,永久有效的时间为4016-06-06 23:59:59 :return: flag 是否成功 :example flag = setVideoInfo_Auto(self, offsetX=10, offsetY=10, isScale=True, inside=[['4,5,6,7', time, True]], hdmi=[['0', time, True]]) ''' data = {} data["type"] = "BRIGHTNESS" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["enable"] = True # 当前数据的时间戳,为后期可能使用 data["timeStamp"] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) # 获取条件集合 conditions = [] segmentconfig = {} if timing_list: conditions = get_timeconditions(timing_list, conditions) # if auto_list: # conditions, segmentconfig = get_autoconditions(auto_list, conditions) data["conditions"] = conditions if segmentconfig: data["segmentconfig"] = segmentconfig print data flag = sendSetCommand(self, Constant.WHAT_SCREEN_BRIGHTNESS, Constant.TYPE_POLICY, Constant.ACTION_SET, 0, data=data, describe="setBrightnessInfo_Auto") return flag
def openCloseScreenAuto(self, open=[], close=[]): ''' 设置自动开关屏策略 :param1 self 必须 :param2 open 二维列表 外层表示有N条策略,内层是每条策略的具体内容 内层列表 第一位【 0:每天 1:周日 2:周一 3:周二 ... 7:周六 "1,2,3":周日/周一/周二 】 第二位 字符串 eg:: "15:16":15点16分 "15:16:17":15点16分17秒 第三位 bool型 Ture 或者 False :param3 close 同上 :return flag bool型 是否下发成功 :example flag = openCloseScreenAuto(self,open=[[0,'15:20',True],[]],close=[["1,2","14:20:45",False]]) ''' conditions = [] if open: cron_open = {} for li in open: cron, flag = getCron(li) cron_open["cron"] = [cron] cron_open["action"] = "OPEN" cron_open["enable"] = flag conditions.append(cron_open) if close: cron_close = {} for li in close: cron, flag = getCron(li) cron_close["cron"] = [cron] cron_close["action"] = "CLOSE" cron_close["enable"] = flag conditions.append(cron_close) source = {} source["type"] = 0 source["platform"] = 1 data = {} data["type"] = "SCREENPOWER" data["source"] = source data["enable"] = True data["conditions"] = conditions # print data flag = sendSetCommand(self, Constant.WHAT_SCREEN_POWER, Constant.TYPE_POLICY, Constant.ACTION_SET, 0, data=data, describe='openCloseScreenAuto') return flag
def setScreenPowerModel_MANUALLY(self): ''' 设置开关屏的模式为 手动 :parma self 必须 :return flag bool型 :example flag = setScreenPowerModel_MANUALLY(self) ''' data = {} data["type"] = "SCREENPOWER" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["mode"] = "MANUALLY" flag = sendSetCommand(self,Constant.WHAT_SCREEN_POWER,Constant.TYPE_MODE,Constant.ACTION_SET,0,data=data,describe="changeScreenPowerModel_MANUALLY") return flag
def listStop(self, identifier=''): ''' 清单停止播放 :param1 self 必须 :param2 identifier type:str 唯一标识码 :return flag bool型 是否停止播放成功 :example flag = ListStop(self,identifier='') ''' data = {"identifier": identifier} flag = sendSetCommand(self, Constant.WHAT_PLAYLIST, 0x02, Constant.ACTION_STOP, 0, data=data, timeout=4, describe="清单停止播放") return flag
def listDelete(self, identifier='', name=''): ''' 清单删除 :param1 self 必须 :param2 identifier type:str 唯一标识码 :param3 name 清单名称 :return flag bool型 是否停止播放成功 :example flag = ListDelete(self,identifier='' ,name=''): ''' data = {"solutions": [{"identifier": identifier, "name": name}]} flag = sendSetCommand(self, Constant.WHAT_PLAYLIST, 0x01, Constant.ACTION_DELETE, 0, data=data, timeout=4, describe="清单删除") return flag
def setVideoControl_HDMI_Priority(self): ''' 设置视频源控制模式为 HDMI优先 :parma self 必须 :return flag bool型 :example flag = setVideoControl_hdmi_priority(self) ''' data = {} data["type"] = "VIDEO_CONTROL" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["videoMode"] = 0 flag = sendSetCommand(self, Constant.WHAT_VIDEO_CONTROL, Constant.TYPE_VIDEO_CONTROL, Constant.ACTION_SET, 0, data=data, describe="setVideoControl_HDMI_Priority", applyTo=["T2-4G", "T2", "T4", "T6", "T8"]) return flag
def setManualModel(self): ''' :param self: 必须 :return: flag bool example: flag = setManualModel(self) ''' ntp = False lora = False data = {} data["type"] = "NET_TIMING" data["source"] = {"type": 1, "platform": 1} data["enable"] = True data["ntp"] = {"enable": ntp, "server": "ntp1.aliyun.com"} data["lora"] = {"address": 1, "channel": 23, "enable": lora, "mode": "MASTER", "groupId": "novad101"} data["gps"] = {"enable": False} data["compatibility"] = {"supportLoraInfo": True} flag = sendSetCommand(self, Constant.WHAT_NET_TIMING, 0, Constant.ACTION_SET, 0, data=data, describe="setNTPModel") return flag
def setBrightnessModel(self, model): ''' 设置亮度控制模式 :parma self 必须 :parma model 控制模式 手动:MANUALLY 自动:AUTO :return flag bool型 :example flag = setBrightnessModel(self, 'AUTO') ''' data = {} data["type"] = "SCREEN_BRIGHTNESS" source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["mode"] = model flag = sendSetCommand(self, Constant.WHAT_SCREEN_BRIGHTNESS, Constant.TYPE_MODE, Constant.ACTION_SET, 0, data=data, describe="setBrightnessModel:" + model) return flag
def bindLite(self, sn, data): #绑定vonnoxlite identifier = get_playerIdentifier(Server_address, info["token"]) if identifier: data = copy.deepcopy(data) data["data"]["playerList"][0]["identifier"] = identifier data["data"]["playerList"][0]["playerIdentifier"] = sn.upper() # print identifier+":"+sn.upper() flag = sendSetCommand(self, Constant.WHAT_PLAYER_BINDING, Constant.TYPE_VNNOX_BINDINFO, Constant.ACTION_SET, 0, data=data, sns=[sn], timeout=8, describe="绑定lite播放器") # print flag else: print "未获取到identifier" return
def setCustomResolution(self, width, height): ''' 设置自定义分辨率 :param self: :param width: 显示屏宽度 :param height: 显示屏高度 :return: flag 是否成功 ''' # 设置自定义分辨率 data_cus = {} data_cus["width"] = width data_cus["height"] = height data_cus["displayMode"] = 1 # 默认 DISPLAY_INTERFACE_TV flag = sendSetCommand(self, Constant.WHAT_SYS_ADVANCED, Constant.TYPE_CUSTOM_RESOLUTION, Constant.ACTION_SET, 0, data=data_cus, describe="setCustomResolution", applyTo=["T1", "T2", "T3", "T4", "T6", "T8"]) return flag
def setCurrentResolution(self, resolutionValue): ''' 设置系统分辨率 :param self: :param resolutionValue: 分辨率的值 :return: flag 是否成功 ''' # 设置系统分辨率 data_cus = {} data_cus["displayMode"] = 1 # 默认 DISPLAY_INTERFACE_TV data_cus["resolutionValue"] = resolutionValue flag = sendSetCommand(self, Constant.WHAT_SYS_ADVANCED, Constant.TYPE_CURRENT_RESOLUTION, Constant.ACTION_SET, 0, data=data_cus, describe="setCurrentResolution", applyTo=["T2-4G", "T1-4G"]) return flag
def careRegister(self, url, username): ''' 将等陆的终端注册至指定的节点和用户下 :param self 必须 url 字符串 eg:care.novaicare.com 注意不用写"http://" username 字符串 care的用户名 :return flag bool型 :example flag = careRegister(self,"10.20.8.161","chenyongfa") ''' data = {} data["state"] = True data['url'] = url data['username'] = username flag = True for sn in self.sns: flag1 = sendSetCommand(self, Constant.WHAT_MONITOR, Constant.TYPE_CARE, Constant.ACTION_SET, 0, data=data, sns=[sn], timeout=20, describe="registerCare") if not flag1: flag = False else: print sn + "注册care命令发送成功" # time.sleep(3) # n = len(self.sns)/4 # for i in range(n+1): # flag1 = sendSetCommand(self,Constant.WHAT_MONITOR,Constant.TYPE_CARE,Constant.ACTION_SET,0,data=data,sns=(self.sns)[i*4:(i+1)*4],timeout=20,describe="registerCare") # if not flag1: # flag = False # time.sleep(3) return flag
def setHDMIResolution(self, width, height): ''' 设置HDMI分辨率 :param self: :param width: 显示屏宽度 :param height: 显示屏高度 :return: flag 是否成功 ''' # 设置HDMI分辨率 data_cus = {} data_cus["width"] = width data_cus["height"] = height data_cus["fieldRate"] = 50 # 场频,即刷新频率 默认50 flag = sendSetCommand(self, Constant.WHAT_VIDEO_CONTROL, Constant.TYPE_EDID, Constant.ACTION_SET, 0, data=data_cus, describe="setHDMIResolution", timeout=10, applyTo=["T2", "T2-4G", "T4", "T6", "T8"]) return flag
def setVolume_Manual(self, ratio): ''' 手动设置音量 :param self: :param ratio: 音量百分比 :return: flag 是否成功 :example flag = setVolume_Manual(self, ratio=50) ''' data = {} source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["ratio"] = ratio flag = sendSetCommand(self, Constant.WHAT_VOLUME, 0, Constant.ACTION_SET, 0, data=data, describe="setVolume_Manual") return flag
def openScreenManual(self): ''' 手动开屏 :parma self 必须 :return flag bool型 (命令是否发送成功) :example flag = openScreenManual(self) ''' data = { "type": "SCREENPOWER", "source": { "type": 1, "platform": 1 }, "state": "OPEN" } flag = sendSetCommand(self, Constant.WHAT_SCREEN_POWER, Constant.TYPE_MANUAL, Constant.ACTION_SET, 0, data=data, describe="openScreen") return flag
def setNTPModel(self, node="cn"): ''' 设置为NTP对时模式 :param self 必须 :param node 对时服务器 "cn" 或者 "us" :return flag bool型 :example flag = careRegister(self,"10.20.8.161","chenyongfa") ''' ntp = True lora = False data = {} data["type"] = "NET_TIMING" data["source"] = {"type": 1, "platform": 1} data["enable"] = True if "cn" in node.lower(): data["ntp"] = {"enable": ntp, "server": "ntp1.aliyun.com"} else: data["ntp"] = {"enable": True, "server": "http://us.ntp.org.cn"} data["lora"] = { "address": 1, "channel": 23, "enable": lora, "mode": "MASTER", "groupId": "novad101" } data["gps"] = {"enable": False} data["compatibility"] = {"supportLoraInfo": True} flag = sendSetCommand(self, Constant.WHAT_NET_TIMING, 0, Constant.ACTION_SET, 0, data=data, timeout=3, describe="setNTPModel") return flag
def restart_CONDITIONS(self, conditions=[]): ''' 设置自动重启策略 :param1 self 必须 :param2 conditions 二维列表 外层表示有N条策略,内层是每条策略的具体内容 内层列表 第一位【 0:每天 1:周日 2:周一 3:周二 ... 7:周六 "1,2,3":周日/周一/周二 】 第二位 字符串 eg:: "15:16":15点16分 "15:16:17":15点16分17秒 第三位 bool型 Ture 或者 False :return flag bool型 是否下发成功 :example flag = restart_CONDITIONS(self,conditions=[[0,'15:20',True],["2,3",'16:20',False]]) ''' conditions_temp = [] for i in range(len(conditions)): li = {} cron, flag = getCron(conditions[i]) li["cron"] = [cron] li["enable"] = flag conditions_temp.append(li) source = {"type": 0, "platform": 1} data = { 'type': "REBOOT", 'source': source, 'executionType': "BY_CONDITIONS", 'reason': "Just to test", 'conditions': conditions_temp } flag = sendSetCommand(self, Constant.WHAT_SYS_ADVANCED, Constant.TYPE_REBOOT, Constant.ACTION_SET, 0, data=data, timeout=1, describe="set_restart") return flag
def setBrightness_Manual(self, ratio): ''' 手动设置亮度 :param self: :param ratio: 音量百分比 :return: flag 是否成功 :example flag = setBrightness_Manual(self, ratio=50) ''' data = {} source = {} source["type"] = 0 source["platform"] = 1 data["source"] = source data["ratio"] = ratio print data flag = sendSetCommand(self, Constant.WHAT_SCREEN_BRIGHTNESS, Constant.TYPE_MANUAL, Constant.ACTION_SET, 0, data=data, describe="setBrightness_Manual") return flag
def update(self, type="", sns=None): if type == "APP": UPath = os.path.abspath("../file/update/APP") for i in os.listdir(UPath): if "UPDATE_APP" in i: filename = i elif type == "OS3128": UPath = os.path.abspath("../file/update/OS3128") for i in os.listdir(UPath): if "UPDATE_OS" in i: filename = i elif type == "OS3368": UPath = os.path.abspath("../file/update/OS3368") for i in os.listdir(UPath): if "UPDATE_OS" in i: filename = i else: raise RuntimeError("update方法的type参数有误") if not filename: print "升级文件目录下没有" + type + "升级包" return False filepath = UPath + "/" + filename source = "/cache/" + filename '''上传升级文件''' flag = uploadFile(self, user="******", file=filepath, ftpdir="", sns=sns) if flag: print type + "升级文件全部上传成功" else: print type + "升级文件未全部上传成功" if type == "APP": version = re.findall(r"UPDATE_APP_(.+?).nuzip", filename)[0] setConf("data", "appversion", version) elif type == "OS3128": version = re.findall(r"UPDATE_OS_(.+?).nuzip", filename)[0] setConf("data", "os3128version", version) elif type == "OS3368": version = re.findall(r"UPDATE_OS_(.+?).nuzip", filename)[0] setConf("data", "os3368version", version) size = os.path.getsize(filepath) md5 = getFileMd5(filepath) data = {} data["type"] = "UPDATE" data["source"] = {"type": 0, "platform": 1} tasks = [] task = {} task["packageType"] = "NUZIP" task["version"] = version task["executionType"] = "IMMEDIATELY" if type == "APP": task["updateType"] = "UPDATE" task["startupAfterInstalled"] = True task["startupAfterBoot"] = True task["conditions"] = [] task["source"] = source task["size"] = int(size) task["md5"] = md5 tasks.append(task) data["tasks"] = tasks print data result = sendSetCommand(self, Constant.WHAT_UPDATE, 0, Constant.ACTION_UPDATE, 0, sns=sns, data=data, timeout=120, describe=type + "升级命令") return result
def confScreen(self, portNumber=1, width=64, height=32, xCount=1, yCount=1, xOffset=0, yOffset=0, orders=[1], portIndex=0): ''' 设置配屏信息 :param1 self 必须 :param2 portNumber 网口数量(1-2) :param3 width 接收卡大小宽度 :param4 height 接收卡大小高度 :param5 xCount X方向上接收卡个数 :param6 yCount Y方向上接收卡个数 :param7 xOffset X轴偏移 :param8 yOffset Y轴偏移 :param9 orders 连接顺序 (0-7) :param10 portIndex 网口序号(0-1) :return flag bool型 是否下发成功 :example1 flag = screenConf(self,portNumber=1,width=64,height=32,xCount=1,yCount=1,xOffset=0,yOffset=0,orders=[1],portIndex=0) :example2 flag = screenConf(self,portNumber=2,width=64,height=32,xCount=1,yCount=1,xOffset=0,yOffset=0,orders=[1],portIndex=1) ''' data = { "screenAttributes": [{ "id": 0, "screenSource": 0, "xCount": xCount, "yCount": yCount, "xOffset": xOffset, "yOffset": yOffset, "portNumber": portNumber, "orders": orders, "scanInfos": [{ "width": width, "height": height, "x": 0, "y": 0, "xInPort": 0, "yInPort": 0, "portIndex": portIndex, "connectIndex": 0 }] }] } flag = sendSetCommand(self, Constant.WHAT_SCREEN_ATTRIBUTE, Constant.TYPE_SCREEN_ATTR, Constant.ACTION_SET, 0, data=data, timeout=10, describe="screenConf") return flag