Пример #1
0
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"}
                }
Пример #2
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"
            }
        }
Пример #3
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"]
            }
        }