{"version":3,"sources":["jsdelivr-header.js","/npm/homebridge-sonybravia-platform@2.5.2/index.js"],"names":[],"mappings":"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","file":"/npm/homebridge-sonybravia-platform@2.5.2/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/homebridge-sonybravia-platform@2.5.2/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var http = require(\"http\"),\n    async = require(\"async\");\n\nvar TV_Accessory = require('./accessories/TV.js'),\n    VOLUME_Accessory = require('./accessories/Volume.js'),\n    APP_Accessory = require('./accessories/Apps.js'),\n    CHANNEL_Accessory = require('./accessories/Channels.js'),\n    SOURCE_Accessory = require('./accessories/Inputs.js'),\n    EXTRAS_Accessory = require('./accessories/Extras.js'),\n    REMOTE_Accessory = require('./accessories/Remote.js');\n\nvar Accessory,\n    Service,\n    Characteristic;\n\nmodule.exports = function(homebridge) {\n\n    Accessory = homebridge.platformAccessory;\n    Service = homebridge.hap.Service;\n    Characteristic = homebridge.hap.Characteristic;\n\n    homebridge.registerPlatform(\"homebridge-sonybravia-platform\", \"SonyBravia\", SonyBraviaPlatform);\n\n}\n\nfunction SonyBraviaPlatform(log, config, api) {\n    var platform = this;\n\n    //HB\n    this.api = api;\n    this.config = config;\n    this.log = log;\n\n    //Base\n    this.name = config[\"name\"] || \"Sony\";\n    this.psk = encodeURIComponent(config[\"psk\"]);\n    if (!this.psk) throw new Error(\"PSK is required!\");\n    this.ipadress = config[\"ipadress\"];\n    if (!this.ipadress) throw new Error(\"IP Adress is required!\");\n    this.port = config[\"port\"] || 80;\n    this.interval = (config['interval'] * 1000) || 10000;\n    if ((this.interval / 1000) < 10) {\n        this.log(\"Critical interval value! Setting interval to 10 seconds\");\n        this.interval = 10000;\n    }\n    this.inputsEnabled = config[\"inputsEnabled\"] === true;\n    this.offState = config[\"offState\"] || \"HOME\";\n    // Modes: HOME, CHANNEL, OFF\n\n    //Volume\n    this.volumeEnabled = config[\"volumeEnabled\"] === true;\n    this.maxVolume = config[\"maxVolume\"] || 35;\n\n    //Extra Inputs\n    this.extraInputs = config[\"extraInputs\"] || false;\n\n    //Apps\n    this.appsEnabled = config[\"appsEnabled\"] === true;\n    this.homeapp = config[\"homeapp\"];\n\n    //Channels\n    this.channelsEnabled = config[\"channelsEnabled\"] || false;\n    this.channelSource = config[\"channelSource\"] || \"tv:dvbt\";\n    this.favChannel = config[\"favChannel\"];\n\n    //CECs\n    this.detectCEC = config[\"detectCEC\"] === true;\n    this.cecDevices = config[\"cecDevices\"];\n    if (!this.inputsEnabled) {\n        this.detectCEC = false\n    }\n\n    //Remote Control\n    this.remoteControl = config[\"remoteControl\"] || false;\n    this.controlMode = config[\"controlMode\"] || \"BASIC\";\n    //Modes: BASIC, ADVANCED\n\n    //COUNT\n    this.counthdmi = 0;\n    this.countcec = 0;\n    this.countapps = 0;\n    this.countextras = 0;\n    this.countchannels = 0;\n\n    //STORAGE\n    this.storage = require('node-persist');\n    this.storage.initSync({\n        dir: this.api.user.persistPath()\n    });\n\n    //PROMISE\n    this.getContent = function(setPath, setMethod, setParams, setVersion) {\n\n        return new Promise((resolve, reject) => {\n\n            var options = {\n                host: platform.ipadress,\n                port: platform.port,\n                family: 4,\n                path: setPath,\n                method: 'POST',\n                headers: {\n                    'X-Auth-PSK': platform.psk\n                }\n            };\n\n            var post_data = {\n                \"method\": setMethod,\n                \"params\": [setParams],\n                \"id\": 1,\n                \"version\": setVersion\n            };\n\n            var req = http.request(options, function(res) {\n\n                if (res.statusCode < 200 || res.statusCode > 299) {\n                    reject(new Error('Failed to load data, status code: ' + res.statusCode));\n                }\n\n                const body = []\n                res.on('data', (chunk) => body.push(chunk));\n                res.on('end', () => resolve(body.join('')));\n\n            });\n\n            req.on('error', (err) => reject(err))\n\n            req.write(JSON.stringify(post_data));\n            req.end();\n\n        })\n\n    };\n\n}\n\nSonyBraviaPlatform.prototype = {\n\n    accessories: function(callback) {\n\n        var self = this;\n        var accessoriesArray = []\n\n        async.waterfall([\n\n                function(next) {\n                    var tvConfig = {\n                        uri: self.uri,\n                        name: self.name,\n                        psk: self.psk,\n                        ipadress: self.ipadress,\n                        interval: self.interval,\n                        homeapp: self.homeapp,\n                        port: self.port\n                    }\n                    var tvAccessory = new TV_Accessory(self.log, tvConfig, self.api)\n                    accessoriesArray.push(tvAccessory);\n                    next();\n                },\n\n                function(next) {\n                    if (self.remoteControl) {\n                        self.log(\"Getting remote control..\");\n                        var remoteConfig = {\n                            name: self.name,\n                            psk: self.psk,\n                            ipadress: self.ipadress,\n                            port: self.port,\n                            controlMode: self.controlMode\n                        }\n                        var remoteAccessory = new REMOTE_Accessory(self.log, remoteConfig, self.api)\n                        accessoriesArray.push(remoteAccessory);\n                    }\n                    next();\n                },\n\n                function(next) {\n\n                    function fetchAppService(next) {\n\n                        if (self.appsEnabled) {\n\n                            self.log(\"Getting apps...\");\n\n                            if (self.storage.getItem(\"Sony_Apps\")) {\n\n                                self.log(\"Apps found in storage.\");\n                                self.log(\"Note: If you want to refresh the app list, please use the 'Applist' button within the EVE app or delete 'Sony_Apps' file in your persist folder!\");\n                                var response = self.storage.getItem(\"Sony_Apps\");\n                                var result = response.result[0];\n                                self.countapps = response.result[0].length;\n\n                                if (!self.homeapp && !self.storage.getItem(\"Sony_HomeApp\")) {\n                                    self.log(\"No home app found in config and storage. Setting home app to \" + result[0].title + \". The Home App can also be changed within the EVE app!\");\n                                    self.homeapp = result[0].uri;\n                                    self.favappname = result[0].title;\n                                } else if (self.storage.getItem(\"Sony_HomeApp\")) {\n                                    self.homeapp = self.storage.getItem(\"Sony_HomeApp\");\n                                    for (var i = 0; i < result.length; i++) {\n                                        if (self.storage.getItem(\"Sony_HomeApp\") == result[i].uri) {\n                                            self.favappname = result[i].title;\n                                        }\n                                    }\n                                    self.log(\"Home App found in storage. Home App is: \" + self.favappname);\n                                } else {\n                                    for (var i = 0; i < result.length; i++) {\n                                        if (self.homeapp == result[i].uri) {\n                                            self.favappname = result[i].title;\n                                        }\n                                    }\n                                    self.log(\"Home App found in config. Home App is: \" + self.favappname);\n                                }\n\n                                var appListConfig = {\n                                    name: self.name,\n                                    psk: self.psk,\n                                    ipadress: self.ipadress,\n                                    maxApps: response.result[0].length,\n                                    port: self.port,\n                                    interval: self.interval,\n                                    homeapp: self.homeapp,\n                                    favappname: self.favappname,\n                                    offState: self.offState,\n                                    favChannel: self.favChannel,\n                                    channelSource: self.channelSource\n                                }\n\n                                var appListAccessory = new APP_Accessory(self.log, appListConfig, self.api, result)\n                                accessoriesArray.push(appListAccessory);\n\n                                next();\n\n                            } else {\n\n                                self.log(\"No apps in storage. Start requesting.\")\n\n                                self.getContent(\"/sony/appControl\", \"getApplicationList\", \"1.0\", \"1.0\")\n                                    .then((data) => {\n\n                                        var response = JSON.parse(data);\n\n                                        if (\"error\" in response) {\n\n                                            self.log(\"An error occured by getting application list!\");\n\n                                            if (response.error[0] == 7 || response.error[0] == 40005) {\n                                                self.log(\"Please turn on the TV! Trying again...\");\n                                            } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                                self.log(\"Illegal argument!\");\n                                            } else {\n                                                self.log(\"ERROR: \" + JSON.stringify(response));\n                                            }\n\n                                            setTimeout(function() {\n                                                fetchAppService(next);\n                                            }, 10000)\n\n                                        } else {\n\n                                            var result = response.result[0];\n                                            self.countapps = response.result[0].length;\n                                            self.log(\"Caching apps.\")\n                                            self.storage.setItem(\"Sony_Apps\", response)\n\n                                            if (!self.homeapp && !self.storage.getItem(\"Sony_HomeApp\")) {\n                                                self.log(\"No home app found in config and storage. Setting home app to \" + result[0].title + \". The Home App can also be changed within the EVE app!\");\n                                                self.homeapp = result[0].uri;\n                                                self.favappname = result[0].title;\n                                            } else if (self.storage.getItem(\"Sony_HomeApp\")) {\n                                                self.homeapp = self.storage.getItem(\"Sony_HomeApp\");\n                                                for (var i = 0; i < result.length; i++) {\n                                                    if (self.storage.getItem(\"Sony_HomeApp\") == result[i].uri) {\n                                                        self.favappname = result[i].title;\n                                                    }\n                                                }\n                                                self.log(\"Home App found in storage. Home App is: \" + self.favappname);\n                                            } else {\n                                                for (var i = 0; i < result.length; i++) {\n                                                    if (self.homeapp == result[i].uri) {\n                                                        self.favappname = result[i].title;\n                                                    }\n                                                }\n                                                self.log(\"Home App found in config. Home App is: \" + self.favappname);\n                                            }\n\n                                            var appListConfig = {\n                                                name: self.name,\n                                                psk: self.psk,\n                                                ipadress: self.ipadress,\n                                                maxApps: response.result[0].length,\n                                                port: self.port,\n                                                interval: self.interval,\n                                                homeapp: self.homeapp,\n                                                favappname: self.favappname,\n                                                offState: self.offState,\n                                                favChannel: self.favChannel,\n                                                channelSource: self.channelSource\n                                            }\n\n                                            var appListAccessory = new APP_Accessory(self.log, appListConfig, self.api, result)\n                                            accessoriesArray.push(appListAccessory);\n\n                                            next();\n\n                                        }\n\n                                    })\n                                    .catch((err) => {\n                                        self.log(\"Apps: \" + err + \" - Trying again\");\n                                        setTimeout(function() {\n                                            fetchAppService(next);\n                                        }, 10000)\n                                    });\n\n                            }\n\n                        } else {\n                            self.log(\"Apps not enabled. Skipping discovery.\")\n                            next();\n                        }\n\n                    }\n                    fetchAppService(next)\n\n                },\n\n                function(next) {\n\n                    function fetchChannels(next) {\n\n                        if (self.channelsEnabled) {\n\n                            self.log(\"Getting channels...\");\n\n                            if (!self.favChannel && !self.storage.getItem(\"Sony_FavChannel\")) {\n\n                                self.getContent(\"/sony/avContent\", \"getContentList\", {\n                                        \"source\": self.channelSource,\n                                        \"stIdx\": 0\n                                    }, \"1.2\")\n                                    .then((data) => {\n\n                                        var response = JSON.parse(data);\n\n                                        if (\"error\" in response) {\n\n                                            self.log(\"An error occured by setting favourite channel!\");\n\n                                            if (response.error[0] == 7 || response.error[0] == 40005) {\n                                                self.log(\"Please turn on the TV! Trying again...\");\n                                            } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                                self.log(\"Illegal argument!\");\n                                            } else {\n                                                self.log(\"ERROR: \" + JSON.stringify(response));\n                                            }\n\n                                            setTimeout(function() {\n                                                fetchChannels(next);\n                                            }, 10000)\n\n                                        } else {\n\n                                            var name = response.result[0];\n\n                                            for (var i = 0; i <= name.length; i++) {\n\n                                                switch (i) {\n                                                    case 0:\n                                                        self.favChannel = name[0].uri;\n                                                        self.favchannelname = name[0].title;\n                                                        self.channelname = name[0].title;\n                                                        break;\n                                                }\n\n                                            }\n\n                                            self.log(\"No favourite channel found in config and storage. Setting channel to \" + self.favchannelname + \". The channel can also be changed within the EVE app!\");\n\n                                        }\n\n                                    })\n                                    .catch((err) => {\n                                        self.log(\"Favourite Channel: \" + err + \" - Trying again\");\n                                        setTimeout(function() {\n                                            fetchChannels(next);\n                                        }, 10000)\n                                    });\n\n                            } else if (self.storage.getItem(\"Sony_FavChannel\")) {\n\n                                self.favChannel = self.storage.getItem(\"Sony_FavChannel\");\n                                self.favchannelname = self.favChannel.split(\"Name=\").pop();\n                                self.channelname = \"\";\n                                self.log(\"Favourite channel found in storage. Channel is: \" + self.favChannel.split(\"Name=\").pop());\n\n                            } else {\n\n                                self.favchannelname = self.favChannel.split(\"Name=\").pop();\n                                self.channelname = \"\";\n                                self.log(\"Favourite channel found in config. Channel is: \" + self.favchannelname);\n\n                            }\n\n                            self.getContent(\"/sony/avContent\", \"getContentCount\", {\n                                    \"source\": self.channelSource\n                                }, \"1.0\")\n                                .then((data) => {\n\n                                    var response = JSON.parse(data);\n\n                                    if (\"error\" in response) {\n\n                                        self.log(\"An error occured by getting channel list!\");\n\n                                        if (response.error[0] == 7 || response.error[0] == 40005) {\n                                            self.log(\"Please turn on the TV! Trying again...\");\n                                        } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                            self.log(\"Illegal argument!\");\n                                        } else {\n                                            self.log(\"ERROR: \" + JSON.stringify(response));\n                                        }\n\n                                        setTimeout(function() {\n                                            fetchChannels(next);\n                                        }, 10000)\n\n                                    } else {\n\n                                        var channelListConfig = {\n                                            name: self.name,\n                                            psk: self.psk,\n                                            ipadress: self.ipadress,\n                                            maxChannels: response.result[0].count - 1,\n                                            port: self.port,\n                                            interval: self.interval,\n                                            channelSource: self.channelSource,\n                                            homeapp: self.homeapp,\n                                            favChannel: self.favChannel,\n                                            favchannelname: self.favchannelname,\n                                            channelname: self.channelname,\n                                            offState: self.offState\n                                        }\n\n                                        self.countchannels = channelListConfig.maxChannels;\n\n                                        var channelListAccessory = new CHANNEL_Accessory(self.log, channelListConfig, self.api)\n                                        accessoriesArray.push(channelListAccessory);\n\n                                        next();\n\n                                    }\n\n                                })\n                                .catch((err) => {\n                                    self.log(\"Channel: \" + err + \" - Trying again\");\n                                    setTimeout(function() {\n                                        fetchChannels(next);\n                                    }, 10000)\n                                });\n\n                        } else {\n                            self.log(\"Channels not enabled. Skipping discovery.\")\n                            next();\n                        }\n\n                    }\n                    fetchChannels(next)\n\n                },\n\n                function(next) {\n\n                    function fetchSources(next) {\n\n                        if (self.inputsEnabled) {\n\n                            self.log(\"Getting inputs...\")\n\n                            if (self.storage.getItem(\"Sony_Inputs\")) {\n\n                                self.log(\"HDMI inputs found in storage.\");\n\n                                var response = self.storage.getItem(\"Sony_Inputs\");\n                                var result = response.result[0];\n                                self.counthdmi = 0;\n                                self.countcec = 0;\n                                var hdmiArray = []\n\n                                for (var i = 0; i < result.length; i++) {\n\n                                    var toConfig = {\n                                        psk: self.psk,\n                                        ipadress: self.ipadress,\n                                        interval: self.interval,\n                                        homeapp: self.homeapp,\n                                        port: self.port,\n                                        offState: self.offState,\n                                        favChannel: self.favChannel,\n                                        channelSource: self.channelSource\n                                    }\n\n                                    if (result[i].icon == \"meta:hdmi\") {\n\n                                        self.counthdmi += 1;\n\n                                        toConfig[\"name\"] = self.name + \" \" + result[i].title;\n                                        toConfig[\"title\"] = result[i].title;\n                                        toConfig[\"uri\"] = result[i].uri;\n                                        toConfig[\"meta\"] = result[i].icon;\n\n                                        hdmiArray.push(toConfig);\n\n                                    }\n\n                                }\n\n                                next(null, hdmiArray)\n\n                            } else {\n\n                                self.log(\"No HDMI inputs in storage. Start requesting.\")\n\n                                self.getContent(\"/sony/avContent\", \"getCurrentExternalInputsStatus\", \"1.0\", \"1.0\")\n                                    .then((data) => {\n\n                                        var response = JSON.parse(data);\n\n                                        if (\"error\" in response) {\n\n                                            self.log(\"An error occured by getting inputs!\");\n\n                                            if (response.error[0] == 7 || response.error[0] == 40005) {\n                                                self.log(\"Please turn on the TV! Trying again...\");\n                                            } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                                self.log(\"Illegal argument!\");\n                                            } else {\n                                                self.log(\"ERROR: \" + JSON.stringify(response));\n                                            }\n\n                                            setTimeout(function() {\n                                                fetchSources(next);\n                                            }, 10000)\n\n                                        } else {\n\n                                            var result = response.result[0];\n                                            self.log(\"Caching HDMI inputs.\")\n                                            self.storage.setItem(\"Sony_Inputs\", response)\n                                            self.counthdmi = 0;\n                                            self.countcec = 0;\n                                            var hdmiArray = []\n\n                                            for (var i = 0; i < result.length; i++) {\n\n                                                var toConfig = {\n                                                    psk: self.psk,\n                                                    ipadress: self.ipadress,\n                                                    interval: self.interval,\n                                                    homeapp: self.homeapp,\n                                                    port: self.port,\n                                                    offState: self.offState,\n                                                    favChannel: self.favChannel,\n                                                    channelSource: self.channelSource\n                                                }\n\n                                                if (result[i].icon == \"meta:hdmi\") {\n\n                                                    self.counthdmi += 1;\n\n                                                    toConfig[\"name\"] = self.name + \" \" + result[i].title;\n                                                    toConfig[\"title\"] = result[i].title;\n                                                    toConfig[\"uri\"] = result[i].uri;\n                                                    toConfig[\"meta\"] = result[i].icon;\n\n                                                    hdmiArray.push(toConfig);\n\n                                                }\n\n                                            }\n\n                                            next(null, hdmiArray)\n\n                                        }\n\n                                    })\n                                    .catch((err) => {\n                                        self.log(\"Inputs: \" + err + \" - Trying again\");\n                                        setTimeout(function() {\n                                            fetchSources(next);\n                                        }, 10000)\n                                    });\n\n                            }\n\n                        } else {\n                            var hdmiArray;\n                            self.log(\"Inputs not enabled. Skipping discovery.\")\n                            next(null, hdmiArray);\n                        }\n\n                    }\n                    fetchSources(next)\n                },\n\n                function(hdmiArray, next) {\n\n                    function fetchCEC(next) {\n\n                        if (self.detectCEC) {\n\n                            self.log(\"CEC detection is enabled.\")\n\n                            if (self.storage.getItem(\"Sony_CEC\")) {\n\n                                self.log(\"CEC devices found in storage.\");\n                                var response = self.storage.getItem(\"Sony_CEC\");\n                                var result = response.result[0];\n\n                                for (var i = 0; i < result.length; i++) {\n\n                                    if (result[i].icon == \"meta:playbackdevice\") {\n\n                                        self.countcec += 1;\n\n                                        var uri = result[i].uri;\n\n                                        if (self.cecDevices) {\n                                            for (var l = 0; l < self.cecDevices.length; l++) {\n                                                if (self.cecDevices[l].title == result[i].title) {\n                                                    var port = self.cecDevices[l].hdmiport;\n                                                    var customuri = \"extInput:hdmi?port=\" + port;\n                                                }\n                                            }\n                                        } else {\n                                            if (uri.match(\"logicalAddr\")) {\n                                                var port = uri.split(\"port=\")[1].split(\"&logicalAddr=\")[0];\n                                            } else {\n                                                var port = uri.split(\"port=\")[1];\n                                            }\n                                        }\n\n                                        var newuri = \"extInput:hdmi?port=\" + port;\n\n                                        for (var j = 0; j < hdmiArray.length; j++) {\n\n                                            if (hdmiArray[j].uri == newuri) {\n                                                hdmiArray[j].name = self.name + \" \" + result[i].title;\n                                                hdmiArray[j].title = result[i].title;\n                                                hdmiArray[j].uri = result[i].uri;\n                                                hdmiArray[j].meta = result[i].icon;\n                                                if (self.cecDevices) {\n                                                    hdmiArray[j][\"customuri\"] = customuri;\n                                                }\n                                            }\n\n                                        }\n\n                                    }\n\n                                }\n                                next(null, hdmiArray)\n\n                            } else {\n\n                                self.log(\"No CEC devices in storage. Start requesting.\")\n\n                                self.getContent(\"/sony/system\", \"getPowerStatus\", \"1.0\", \"1.0\")\n                                    .then((tvdata) => {\n                                        var tvresponse = JSON.parse(tvdata);\n                                        if (\"error\" in tvresponse) {\n                                            self.log(\"CEC: An error occured by getting TV state\");\n                                            if (response.error[0] == 7 || response.error[0] == 40005) {\n                                                self.log(\"Please turn on the TV! Trying again...\");\n                                            } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                                self.log(\"Illegal argument!\");\n                                            } else {\n                                                self.log(\"ERROR: \" + JSON.stringify(tvresponse));\n                                            }\n                                        } else {\n                                            var status = tvresponse.result[0].status;\n                                            if (status == \"active\") {\n\n                                                self.log(\"TV is ON. Getting CEC devices...\");\n\n                                                self.getContent(\"/sony/avContent\", \"getCurrentExternalInputsStatus\", \"1.0\", \"1.0\")\n                                                    .then((data) => {\n\n                                                        var response = JSON.parse(data);\n\n                                                        if (\"error\" in response) {\n\n                                                            self.log(\"An error occured by getting cec inputs!\");\n\n                                                            if (response.error[0] == 7 || response.error[0] == 40005) {\n                                                                self.log(\"Please turn on the TV! Trying again...\");\n                                                            } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                                                self.log(\"Illegal argument!\");\n                                                            } else {\n                                                                self.log(\"ERROR: \" + JSON.stringify(response));\n                                                            }\n\n                                                            setTimeout(function() {\n                                                                fetchCEC(next);\n                                                            }, 10000)\n\n                                                        } else {\n\n                                                            var result = response.result[0];\n                                                            self.log(\"Caching CEC devices.\")\n                                                            self.storage.setItem(\"Sony_CEC\", response)\n\n                                                            for (var i = 0; i < result.length; i++) {\n\n                                                                if (result[i].icon == \"meta:playbackdevice\") {\n\n                                                                    self.countcec += 1;\n\n                                                                    var uri = result[i].uri;\n\n                                                                    if (uri.match(\"logicalAddr\")) {\n                                                                        var port = uri.split(\"port=\")[1].split(\"&logicalAddr=\")[0];\n                                                                    } else {\n                                                                        var port = uri.split(\"port=\")[1];\n                                                                    }\n\n                                                                    var newuri = \"extInput:hdmi?port=\" + port;\n\n                                                                    for (var j = 0; j < hdmiArray.length; j++) {\n\n                                                                        if (hdmiArray[j].uri == newuri) {\n                                                                            hdmiArray[j].name = self.name + \" \" + result[i].title;\n                                                                            hdmiArray[j].title = result[i].title;\n                                                                            hdmiArray[j].uri = result[i].uri;\n                                                                            hdmiArray[j].meta = result[i].icon;\n                                                                        }\n\n                                                                    }\n\n                                                                }\n\n                                                            }\n                                                            next(null, hdmiArray)\n\n                                                        }\n\n                                                    })\n                                                    .catch((err) => {\n                                                        self.log(\"CEC: \" + err + \" - Trying again\");\n                                                        setTimeout(function() {\n                                                            fetchCEC(next);\n                                                        }, 10000)\n                                                    });\n\n                                            } else if (status == \"standby\") {\n                                                self.log(\"TV seems to be off. TV needs to be turned on for getting CEC devices! Trying again...\");\n                                                setTimeout(function() {\n                                                    fetchCEC(next);\n                                                }, 10000)\n                                            } else {\n                                                self.log(\"CEC: An error occured by getting TV state. Error: \" + JSON.stringify(tvresponse));\n                                                setTimeout(function() {\n                                                    fetchCEC(next);\n                                                }, 10000)\n                                            }\n                                        }\n                                    })\n                                    .catch((tverr) => {\n                                        self.log(\"CEC TV state: \" + tverr + \" - Trying again\");\n                                        setTimeout(function() {\n                                            fetchCEC(next);\n                                        }, 10000)\n                                    });\n\n                            }\n\n                        } else {\n                            self.log(\"CEC detection not enabled. Skipping discovery.\")\n                            next(null, hdmiArray);\n                        }\n\n                    }\n                    fetchCEC(next)\n                },\n\n                function(hdmiArray, next) {\n\n                    async.forEachOf(hdmiArray, function(zone, key, step) {\n\n                        function pushMyAccessories(step) {\n\n                            var hdmiAccessory = new SOURCE_Accessory(self.log, zone, self.api)\n                            accessoriesArray.push(hdmiAccessory);\n                            step()\n\n                        }\n                        pushMyAccessories(step)\n                    }, function(err) {\n                        if (err) next(err)\n                        else next()\n                    })\n\n                },\n\n                function(next) {\n                    function fetchExtras(next) {\n\n                        if (self.extraInputs) {\n\n                            self.log(\"Getting extra inputs...\")\n\n                            if (self.storage.getItem(\"Sony_Inputs\")) {\n\n                                self.log(\"Extra inputs found in storage.\");\n\n                                var response = self.storage.getItem(\"Sony_Inputs\");\n                                var result = response.result[0];\n                                var extraArray = []\n\n                                for (var i = 0; i < result.length; i++) {\n                                    if (result[i].icon == \"meta:scart\" || result[i].icon == \"meta:composite\" || result[i].icon == \"meta:wifidisplay\") {\n\n                                        self.countextras += 1;\n\n                                        var extraConfig = {\n                                            uri: result[i].uri,\n                                            extraname: result[i].title,\n                                            name: self.name,\n                                            psk: self.psk,\n                                            ipadress: self.ipadress,\n                                            interval: self.interval,\n                                            homeapp: self.homeapp,\n                                            port: self.port,\n                                            offState: self.offState,\n                                            favChannel: self.favChannel,\n                                            channelSource: self.channelSource\n                                        }\n\n                                        extraArray.push(extraConfig);\n\n                                    }\n                                }\n\n                                next(null, extraArray)\n\n                            } else {\n\n                                self.log(\"No extra inputs in storage. Start requesting.\")\n\n                                self.getContent(\"/sony/avContent\", \"getCurrentExternalInputsStatus\", \"1.0\", \"1.0\")\n                                    .then((data) => {\n\n                                        var response = JSON.parse(data);\n\n                                        if (\"error\" in response) {\n\n                                            self.log(\"An error occured by getting extra inputs!\");\n\n                                            if (response.error[0] == 7 || response.error[0] == 40005) {\n                                                self.log(\"Please turn on the TV! Trying again...\");\n                                            } else if (response.error[0] == 3 || response.error[0] == 5) {\n                                                self.log(\"Illegal argument!\");\n                                            } else {\n                                                self.log(\"ERROR: \" + JSON.stringify(response));\n                                            }\n\n                                            setTimeout(function() {\n                                                fetchExtras(next);\n                                            }, 10000)\n\n                                        } else {\n\n                                            var result = response.result[0];\n                                            var extraArray = []\n\n                                            for (var i = 0; i < result.length; i++) {\n                                                if (result[i].icon == \"meta:scart\" || result[i].icon == \"meta:composite\" || result[i].icon == \"meta:wifidisplay\") {\n\n                                                    self.countextras += 1;\n\n                                                    var extraConfig = {\n                                                        uri: result[i].uri,\n                                                        extraname: result[i].title,\n                                                        name: self.name,\n                                                        psk: self.psk,\n                                                        ipadress: self.ipadress,\n                                                        interval: self.interval,\n                                                        homeapp: self.homeapp,\n                                                        port: self.port,\n                                                        offState: self.offState,\n                                                        favChannel: self.favChannel,\n                                                        channelSource: self.channelSource\n                                                    }\n\n                                                    extraArray.push(extraConfig);\n\n                                                }\n                                            }\n\n                                            next(null, extraArray)\n\n                                        }\n\n                                    })\n                                    .catch((err) => {\n                                        self.log(\"Extra Inputs: \" + err + \" - Trying again\");\n                                        setTimeout(function() {\n                                            fetchExtras(next);\n                                        }, 10000)\n                                    });\n\n                            }\n\n                        } else {\n                            self.log(\"Extra Inputs not enabled. Skipping discovery.\")\n                            var extraArray;\n                            next(null, extraArray)\n                        }\n\n                    }\n                    fetchExtras(next)\n                },\n\n                function(extraArray, next) {\n                    if (self.extraInputs) {\n                        async.forEachOf(extraArray, function(zone, key, step) {\n\n                            function pushMyExtraAccessories(step) {\n\n                                var extraAccessory = new EXTRAS_Accessory(self.log, zone, self.api)\n                                accessoriesArray.push(extraAccessory);\n                                step()\n\n                            }\n                            pushMyExtraAccessories(step)\n                        }, function(err) {\n                            if (err) next(err)\n                            else next()\n                        })\n                    } else {\n                        next();\n                    }\n                },\n\n                function(next) {\n\n                    if (self.volumeEnabled) {\n\n                        var volConfig = {\n                            uri: self.uri,\n                            name: self.name,\n                            psk: self.psk,\n                            ipadress: self.ipadress,\n                            interval: self.interval,\n                            maxVolume: self.maxVolume,\n                            port: self.port\n                        }\n                        var volAccessory = new VOLUME_Accessory(self.log, volConfig, self.api)\n                        accessoriesArray.push(volAccessory);\n\n                    } else {\n                        self.log(\"Volume not enabled. Skipping discovery.\")\n                    }\n\n                    next();\n                }\n\n            ],\n\n            function(err, result) {\n                if (err) {\n                    callback(err)\n                } else {\n                    self.log(\"Found \" + self.counthdmi + \" HDMI input(s) with \" + self.countcec + \" CEC device(s), \" + self.countextras + \" extra input(s), \" + self.countapps + \" app(s) and \" + self.countchannels + \" channel(s)\");\n                    callback(accessoriesArray);\n                }\n            }\n\n        )\n\n    }\n}\n"]}