Exemplo n.º 1
0
    def _refreshStatesFromHardware(self, dev):
        try:
            doorbellId = dev.pluginProps["doorbellId"]
            #self.debugLog(u"Getting data for Doorbell : %s" % doorbellId)
            doorbell = Ring.GetDevice(self.Ring, doorbellId)
            if doorbell is None:
                self.errorLog("Failed to get devices from Ring.com")
                return

            #Always update the battery level.  In the event we dont have motion but the battery level

            if hasattr(doorbell, 'batterylevel'):
                try:
                    self.updateStateOnServer(dev, "batteryLevel",
                                             doorbell.batterylevel)
                except:
                    self.de(dev, "batteryLevel")

            try:
                self.updateStateOnServer(dev, "name", doorbell.description)
            except:
                self.de(dev, "name")
            try:
                self.updateStateOnServer(dev, "firmware",
                                         doorbell.firmware_version)
            except:
                self.de(dev, "firmware")
            try:
                self.updateStateOnServer(dev, "model", doorbell.kind)
            except:
                self.de(dev, "model")
            if (doorbell.state is not None):
                try:
                    dev.updateStateOnServer("onOffState", doorbell.state)
                except:
                    self.de(dev, "onOffState")

            #Process Events for specific device
            events = Ring.GetDoorbellEventsforId(self.Ring, doorbellId)

            if (events != None):
                #self.debugLog("Device Event(s) found!  Event Id: %s" % str(events.id))
                self.processDeviceEvents(dev, events)
            self.retryCount = 0
        except Exception as err:
            self.retryCount = self.retryCount + 1
            exc_type, exc_obj, exc_tb = sys.exc_info()
            Ring.logTrace(self.Ring, "Update Error", {
                'Error': str(err),
                'Line': str(exc_tb.tb_lineno)
            })

            self.errorLog(
                "Failed to get correct event data for deviceID:%s. Will keep retrying until max attempts (%s) reached"
                % (doorbellId, self.pluginPrefs.get("maxRetry", 5)))
            self.errorLog("Error: %s, Line:%s" % (err, str(exc_tb.tb_lineno)))