Exemplo n.º 1
0
    def runConcurrentThread(self):
        try:
            while self.keepProcessing:
                if self.loginFailed == False:
                    if (self.updateFrequency >
                            0.0) and (time.time() > self.next_update_check):
                        self.next_update_check = time.time(
                        ) + self.updateFrequency
                        self.version_check()

                    #We need to get global events that are not device specific
                    lastEvents = Ring.GetDoorbellEvent(self.Ring)
                    if (lastEvents == False):
                        self.errorLog("Error getting events. ")
                        self.retryCount = self.retryCount + 1

                    if (int(self.pluginPrefs.get("maxRetry", 5)) != 0
                            and self.retryCount >= int(
                                self.pluginPrefs.get("maxRetry", 5))):
                        self.errorLog(
                            "Reached max retry attempts.  Won't Refresh from Server. !"
                        )
                        self.errorLog(
                            "You may need to contact Mike for support.  Please post a message at http://forums.indigodomo.com/viewforum.php?f=235"
                        )
                        self.sleep(36000)

                    #Get Device specific Events
                    for dev in indigo.devices.iter("self"):
                        if not dev.enabled:
                            #Skip disabled devices
                            continue

                        #Get the doorbell id for the current device
                        doorbellId = dev.pluginProps["doorbellId"]

                        if (int(self.pluginPrefs.get("maxRetry", 5)) != 0
                                and self.retryCount >= int(
                                    self.pluginPrefs.get("maxRetry", 5))):
                            self.errorLog(
                                "Reached max retry attempts.  Won't Refresh from Server. !"
                            )
                            self.errorLog(
                                "You may need to contact Mike for support.  Please post a message at http://forums.indigodomo.com/viewforum.php?f=235"
                            )
                            self.sleep(36000)

                        #Check to see if we have any global events for this device
                        if len(lastEvents) != 0:
                            for k, v in lastEvents.iteritems():
                                if (str(v.doorbot_id) == str(doorbellId)):
                                    event = v
                                    self.processDeviceEvents(dev, event)
                                    break

                        self._refreshStatesFromHardware(dev)
                        self.restartCount = self.restartCount + 1

                if (self.restartCount > 10000):
                    self.restartCount = 0
                    indigo.server.log(
                        u"Memory Leak Prevention. Restarting Plugin. - This will happen until I find and fix the leak"
                    )
                    serverPlugin = indigo.server.getPlugin(self.pluginId)
                    serverPlugin.restart(waitUntilDone=False)
                    break
                time.sleep(5)
        except self.StopThread:
            self.debugLog("shutdown requested")