class cScript(cDiscoverScriptTemplate): """ WikiDoc:Doc WikiDoc:Context:Scripts WikiDoc:Page:Scripts-Discover-Kira WikiDoc:TOCTitle:Discover Kira = Script Discover Keene Kira = The Kira discover script discover Keene Kira Infrared transmitter devices. You can filter the discover result by passing the following parameters:: <div style="overflow:auto; "> {| class="wikitable" ! align="left" | Attribute ! align="left" | Description |- |timeout |Specifies the timout for discover |}</div> WikiDoc:End """ class cScriptSettings(cBaseScriptSettings): def __init__(self,oScript): cBaseScriptSettings.__init__(self,oScript) self.aScriptIniSettings.fTimeOut = 10.0 def __init__(self): cDiscoverScriptTemplate.__init__(self) self.uSubType = u'Keene Kira' self.aResults = [] self.aThreads = [] self.oReq = QueryDict() def Init(self,uScriptName,uScriptFile=u''): """ Init function for the script :param string uScriptName: The name of the script (to be passed to all scripts) :param uScriptFile: The file of the script (to be passed to all scripts) """ cDiscoverScriptTemplate.Init(self, uScriptName, uScriptFile) self.oScriptConfig.dDefaultSettings['TimeOut']['active'] = "enabled" def GetHeaderLabels(self): return ['$lvar(5029)','$lvar(5035)','$lvar(6002)'] def ListDiscover(self): dArgs = {} dArgs["onlyonce"] = 0 dArgs["ipversion"] = "IPv4Only" aDevices = {} self.Discover(**dArgs) for aDevice in self.aResults: uTageLine=aDevice.sFoundIP+aDevice.uFoundHostName+aDevice.uFoundPort if aDevices.get(uTageLine) is None: aDevices[uTageLine]=aDevice self.AddLine([aDevice.sFoundIP,aDevice.uFoundHostName,aDevice.uFoundPort],aDevice) return def CreateDiscoverList_ShowDetails(self,instance): uText= u"$lvar(5029): %s \n" \ u"$lvar(6002): %s \n" \ u"$lvar(5035): %s \n"\ u"\n"\ u"%s" % (instance.oDevice.sFoundIP,instance.oDevice.uFoundPort,instance.oDevice.uFoundHostName,instance.oDevice.sData) ShowMessagePopUp(uMessage=uText) def Discover(self,**kwargs): self.oReq.clear() uConfigName = kwargs.get('configname',self.uConfigName) oSetting = self.GetSettingObjectForConfigName(uConfigName=uConfigName) self.oReq.bReturnPort = ToBool(kwargs.get('returnport',"0")) fTimeOut = ToFloat(kwargs.get('timeout',oSetting.aScriptIniSettings.fTimeOut)) uIPVersion = kwargs.get('ipversion',"IPv4Only") bOnlyOnce = ToBool(kwargs.get('onlyonce',"1")) Logger.debug (u'Try to discover device by Kira Discovery (%s)' % uIPVersion) del self.aResults[:] del self.aThreads[:] try: oThread = None if uIPVersion == "IPv4Only" or uIPVersion == "All" or (uIPVersion == "Auto" and Globals.uIPAddressV6 == ""): oThread = cThread_Discover_Kira(bOnlyOnce=bOnlyOnce,oReq=self.oReq,uIPVersion="IPv4Only", fTimeOut=fTimeOut, oCaller=self) self.aThreads.append(oThread) self.aThreads[-1].start() if uIPVersion == "IPv6Only" or uIPVersion == "All" or (uIPVersion == "Auto" and Globals.uIPAddressV6 != ""): oThread = cThread_Discover_Kira(bOnlyOnce=bOnlyOnce, oReq=self.oReq, uIPVersion="IPv6Only", fTimeOut=fTimeOut, oCaller=self) self.aThreads.append(oThread) self.aThreads[-1].start() for oT in self.aThreads: oT.join() if len(self.aResults)>0: return {"Host":self.aResults[0].sFoundIP, "Hostname": self.aResults[0].uFoundHostName, 'Exception': None} else: Logger.warning(u'Kira Discover: No device found' ) return {"Host": "", "Hostname": "", 'Exception': None} except Exception as e: LogError(u'Error on discover uPnP',e) return {"Host": "", "Hostname": "", 'Exception': e} @classmethod def GetConfigJSONforParameters(cls,dDefaults): return {"Name": {"type": "string", "order":0, "title": "$lvar(6013)", "desc": "$lvar(6014)", "key": "name", "default":"" }, "IP Version": {"type": "scrolloptions","order":4, "title": "$lvar(6037)", "desc": "$lvar(6038)", "key": "ipversion", "default":"IPv4Only", "options":["IPv4Only","IPv6Only","All","Auto"]}, "TimeOut": {"type": "numericfloat", "order":6, "title": "$lvar(6019)", "desc": "$lvar(6020)", "key": "timeout", "default":"15.0"} }
class cScript(cDiscoverScriptTemplate): """ WikiDoc:Doc WikiDoc:Context:Scripts WikiDoc:Page:Scripts-Discover-UPNP WikiDoc:TOCTitle:Discover UPNP = Script Discover UPNP = The UPNP discover script discover devices which runs a upnp server. You can filter the discover result by passing the following parameters:: <div style="overflow:auto; "> {| class="wikitable" ! align="left" | Attribute ! align="left" | Description |- |discovermanufacturer |Discover models only from a specific manufacturer |- |discovermodels |Discover specific models |- |discoverprettyname |Some devices reports a pretty name (like mac address, or IP addrees, a a further name). You can specify to discover just aspecific preetty name |- |servicetypes |Specifies the servicetypes for discover (eg.: upnp:rootdevice) |- |ipversion |Specifies which IPVersion to use for discovery: Could be IPv4Only,IPv6Only,All,Auto. Auto prefers IPv6, if available |- |timeout |Specifies the timout for discover |}</div> Blank options will not be used. You could eg use the pretty name just to match a specific device, or just the manufacturer name to match all devices in the network of this manufacturer. WikiDoc:End """ class cScriptSettings(cBaseScriptSettings): def __init__(self, oScript): cBaseScriptSettings.__init__(self, oScript) self.aScriptIniSettings.fTimeOut = 15.0 def __init__(self): cDiscoverScriptTemplate.__init__(self) self.uSubType = u'UPNP' self.bStopWait = False self.aResults = [] self.aThreads = [] self.oReq = QueryDict() def Init(self, uScriptName, uScriptFile=u''): cDiscoverScriptTemplate.Init(self, uScriptName, uScriptFile) self.oScriptConfig.dDefaultSettings['TimeOut']['active'] = "enabled" def GetHeaderLabels(self): return [ '$lvar(5029)', '$lvar(5035)', '$lvar(5030)', '$lvar(5031)', '$lvar(5032)', '$lvar(SCRIPT_DISC_UPNP_1)' ] def ListDiscover(self): dArgs = {} dArgs["onlyonce"] = 0 dArgs["servicetypes"] = "ssdp:all" dArgs["ipversion"] = "All" aDevices = {} self.Discover(**dArgs) for aDevice in self.aResults: uTageLine = aDevice.sFoundIP + aDevice.uFoundHostName + aDevice.uFoundManufacturer + aDevice.uFoundModel + aDevice.uFoundFriendlyName + aDevice.uFoundServiceType if aDevices.get(uTageLine) is None: aDevices[uTageLine] = aDevice self.AddLine([ aDevice.sFoundIP, aDevice.uFoundHostName, aDevice.uFoundManufacturer, aDevice.uFoundModel, aDevice.uFoundFriendlyName, aDevice.uFoundServiceType ], aDevice) return def CreateDiscoverList_ShowDetails(self, instance): uText= u"$lvar(5029): %s \n" \ u"$lvar(5035): %s \n" \ u"$lvar(5030): %s \n"\ u"$lvar(5031): %s \n"\ u"$lvar(5032): %s \n"\ u"$lvar(SCRIPT_DISC_UPNP_1): %s \n"\ u"\n"\ u"%s\n"\ u"\n"\ u"%s" % (instance.oDevice.sFoundIP,instance.oDevice.uFoundHostName,instance.oDevice.uFoundManufacturer,instance.oDevice.uFoundModel,instance.oDevice.uFoundFriendlyName,instance.oDevice.uFoundServiceType,instance.oDevice.sData,instance.oDevice.uResult) ShowMessagePopUp(uMessage=uText) def Discover(self, **kwargs): self.oReq.clear() uConfigName = kwargs.get('configname', self.uConfigName) oSetting = self.GetSettingObjectForConfigName(uConfigName=uConfigName) self.oReq.uManufacturer = kwargs.get('manufacturer', "") self.oReq.uModels = kwargs.get('models', "") self.oReq.uFriendlyName = kwargs.get('prettyname', "") self.oReq.bReturnPort = ToBool(kwargs.get('returnport', "0")) fTimeOut = ToFloat( kwargs.get('timeout', oSetting.aScriptIniSettings.fTimeOut)) uParST = kwargs.get('servicetypes', "ssdp:all") uIPVersion = kwargs.get('ipversion', "IPv4Only") aST = uParST.split(',') bOnlyOnce = ToBool(kwargs.get('onlyonce', "1")) Logger.debug( u'Try to discover %s device by UPNP: Models: %s , PrettyName: %s ' % (self.oReq.uManufacturer, self.oReq.uModels, self.oReq.uFriendlyName)) del self.aResults[:] del self.aThreads[:] try: for uST in aST: oThread = None if uIPVersion == "IPv4Only" or uIPVersion == "All" or ( uIPVersion == "Auto" and Globals.uIPAddressV6 == ""): oThread = cThread_Discover_UPNP(bOnlyOnce=bOnlyOnce, oReq=self.oReq, uIPVersion="IPv4Only", fTimeOut=fTimeOut, uST=uST, oCaller=self) self.aThreads.append(oThread) self.aThreads[-1].start() if uIPVersion == "IPv6Only" or uIPVersion == "All" or ( uIPVersion == "Auto" and Globals.uIPAddressV6 != ""): oThread = cThread_Discover_UPNP(bOnlyOnce=bOnlyOnce, oReq=self.oReq, uIPVersion="IPv6Only", fTimeOut=fTimeOut, uST=uST, oCaller=self) self.aThreads.append(oThread) self.aThreads[-1].start() for oT in self.aThreads: oT.join() if len(self.aResults) > 0: return { "Host": self.aResults[0].sFoundIP, "Hostname": self.aResults[0].uFoundHostName, "Model": self.aResults[0].uFoundModel, "FriendlyName": self.aResults[0].uFoundFriendlyName, "Manufacturer": self.aResults[0].uFoundManufacturer, "ServiceType": self.aResults[0].uFoundServiceType, "IPVersion": self.aResults[0].uIPVersion, 'Exception': None } else: Logger.warning(u'No device found device %s:%s:%s' % (self.oReq.uManufacturer, self.oReq.uModels, self.oReq.uFriendlyName)) return { "Host": "", "Hostname": "", "Model": "", "FriendlyName": "", "Manufacturer": "", "ServiceType": "", "IPVersion": "", 'Exception': None } except Exception as e: LogError(u'Error on discover uPnP', e) return { "Host": "", "Hostname": "", "Model": "", "FriendlyName": "", "Manufacturer": "", "ServiceType": "", "IPVersion": "", 'Exception': e } @classmethod def GetConfigJSONforParameters(cls, dDefaults): return { "Manufacturer": { "type": "string", "order": 0, "title": "$lvar(6013)", "desc": "$lvar(6014)", "key": "manufacturer", "default": "" }, "Models": { "type": "string", "order": 1, "title": "$lvar(6015)", "desc": "$lvar(6016)", "key": "models", "default": "" }, "PrettyName": { "type": "string", "order": 2, "title": "$lvar(6017)", "desc": "$lvar(6018)", "key": "prettyname", "default": "" }, "ServiceTypes": { "type": "string", "order": 3, "title": "$lvar(6023)", "desc": "$lvar(6024)", "key": "servicetypes", "default": "urn:dial-multiscreen-org:service:dial:1,urn:schemas-upnp-org:service:AVTransport:1" }, "IP Version": { "type": "scrolloptions", "order": 4, "title": "$lvar(6037)", "desc": "$lvar(6038)", "key": "ipversion", "default": "IPv4Only", "options": ["IPv4Only", "IPv6Only", "All", "Auto"] }, "TimeOut": { "type": "numericfloat", "order": 6, "title": "$lvar(6019)", "desc": "$lvar(6020)", "key": "timeout", "default": "15.0" } }
class cScript(cDiscoverScriptTemplate): """ WikiDoc:Doc WikiDoc:Context:Scripts WikiDoc:Page:Scripts-Discover-EISCP WikiDoc:TOCTitle:Discover EISCP = Script Discover EISCP = The EISCP discover script discover ONKYO devices which supports the EISCP protocol. You can filter the discover result by passing the following parameters:: <div style="overflow:auto; "> {| class="wikitable" ! align="left" | Attribute ! align="left" | Description |- |models |Discover only specific Onkyo models |- |timeout |Specifies the timout for discover |}</div> Blank options will not be used. WikiDoc:End """ class cScriptSettings(cBaseScriptSettings): def __init__(self, oScript): cBaseScriptSettings.__init__(self, oScript) self.aScriptIniSettings.fTimeOut = 10.0 def __init__(self): cDiscoverScriptTemplate.__init__(self) self.uSubType = u'EISCP (Onkyo)' self.aResults = [] self.aThreads = [] self.oReq = QueryDict() self.bOnlyOnce = True self.uIPVersion = "Auto" def Init(self, uScriptName, uScriptFile=u''): """ Init function for the script :param string uScriptName: The name of the script (to be passed to all scripts) :param uScriptFile: The file of the script (to be passed to all scripts) """ cDiscoverScriptTemplate.Init(self, uScriptName, uScriptFile) self.oScriptConfig.dDefaultSettings['TimeOut']['active'] = "enabled" def GetHeaderLabels(self): return ['$lvar(5029)', '$lvar(6002)', '$lvar(5031)', '$lvar(5032)'] def ListDiscover(self): dArgs = {} dArgs["onlyonce"] = 0 dArgs["ipversion"] = "All" aDevices = {} self.Discover(**dArgs) for aDevice in self.aResults: uTageLine = aDevice.sFoundIP + aDevice.uFoundModel + aDevice.uFoundIdentifier if aDevices.get(uTageLine) is None: aDevices[uTageLine] = aDevice self.AddLine([ aDevice.sFoundIP, aDevice.uFoundPort, aDevice.uFoundModel, aDevice.uFoundIdentifier ], aDevice) return def CreateDiscoverList_ShowDetails(self, instance): uText= u"$lvar(5029): %s \n"\ u"$lvar(6002): %s \n"\ u"$lvar(5031): %s \n"\ u"$lvar(5032): %s \n"\ u"\n"\ u"%s" % (instance.oDevice.sFoundIP,instance.oDevice.uFoundPort,instance.oDevice.uFoundModel,instance.oDevice.uFoundIdentifier,instance.oDevice.sData) ShowMessagePopUp(uMessage=uText) def Discover(self, **kwargs): self.oReq.clear() uConfigName = kwargs.get('configname', self.uConfigName) oSetting = self.GetSettingObjectForConfigName(uConfigName=uConfigName) fTimeOut = ToFloat( kwargs.get('timeout', oSetting.aScriptIniSettings.fTimeOut)) self.oReq.uModels = kwargs.get('models', "") bOnlyOnce = ToBool(kwargs.get('onlyonce', "1")) uIPVersion = kwargs.get('ipversion', "IPv4Only") Logger.debug(u'Try to discover Onkyo device by EISCP: Models: %s ' % self.oReq.uModels) del self.aResults[:] del self.aThreads[:] try: oThread = None if uIPVersion == "IPv4Only" or uIPVersion == "All" or ( uIPVersion == "Auto" and Globals.uIPAddressV6 == ""): oThread = cThread_Discover_EISCP(bOnlyOnce=bOnlyOnce, oReq=self.oReq, uIPVersion="IPv4Only", fTimeOut=fTimeOut, oCaller=self) self.aThreads.append(oThread) self.aThreads[-1].start() if uIPVersion == "IPv6Only" or uIPVersion == "All" or ( uIPVersion == "Auto" and Globals.uIPAddressV6 != ""): oThread = cThread_Discover_EISCP(bOnlyOnce=bOnlyOnce, oReq=self.oReq, uIPVersion="IPv6Only", fTimeOut=fTimeOut, oCaller=self) self.aThreads.append(oThread) self.aThreads[-1].start() for oT in self.aThreads: oT.join() if len(self.aResults) > 0: return { 'Model': self.aResults[0].uFoundModel, 'Host': self.aResults[0].sFoundIP, 'Port': self.aResults[0].uFoundPort, 'Category': self.aResults[0].uFoundCategory, 'Exception': None } else: Logger.warning(u'No device found Models: %s' % self.oReq.uModels) return { 'Model': '', 'Host': '', 'Port': '', 'Category': '', 'Exception': None } except Exception as e: Logger.debug(u'No EISCP device found, possible timeout') return { 'Model': '', 'Host': '', 'Port': '', 'Category': '', 'Exception': e } @classmethod def GetConfigJSONforParameters(cls, dDefaults): return { "TimeOut": { "type": "numericfloat", "active": "enabled", "order": 0, "title": "$lvar(6019)", "desc": "$lvar(6020)", "key": "timeout", "default": "2.0" }, "Models": { "type": "string", "active": "enabled", "order": 1, "title": "$lvar(SCRIPT_DISC_EISCP_1)", "desc": "$lvar(SCRIPT_DISC_EISCP_2)", "key": "models", "default": "" }, "IP Version": { "type": "scrolloptions", "order": 4, "title": "$lvar(6037)", "desc": "$lvar(6038)", "key": "ipversion", "default": "IPv4Only", "options": ["IPv4Only", "IPv6Only", "All", "Auto"] } }