Example #1
0
    def __init__(self):
        self.version = 0
        self.hwVersion = None
        self.devices = []
        self.sensors = []
        self.rawEnabled = False
        self.rawEnabledAt = 0
        self.dev = Adapter(self, Board.rf433Port())
        deviceNode = DeviceNode(self.dev)
        self.deviceManager = DeviceManager(self.context)
        for d in self.deviceManager.retrieveDevices('433'):
            p = d.params()
            if 'type' not in p:
                continue
            if p['type'] == 'sensor':
                device = SensorNode()
                self.sensors.append(device)
            elif p['type'] == 'device':
                device = DeviceNode(self.dev)
                self.devices.append(device)
            else:
                continue
            device.setNodeId(d.id())
            device.setParams(p)
            self.deviceManager.addDevice(device)

        self.deviceManager.finishedLoading('433')
        self.dev.queue(
            RF433Msg('V', success=self.__version, failure=self.__noVersion))
        self.dev.queue(
            RF433Msg('H', success=self.__hwVersion,
                     failure=self.__noHWVersion))
        self.live = TelldusLive(self.context)
Example #2
0
	def loadAccessories(self):
		self.accessories[1] = HapBridgeAccessory()
		deviceManager = DeviceManager(HapConnection.HTTPDServer.context)
		for device in deviceManager.retrieveDevices():
			if not device.confirmed():
				continue
			self.deviceAdded(device)
	def onMessage(self, client, userdata, msg):
		try:
			#topic = msg.topic
			payload = msg.payload

			#topicType = topic.split('/')[-1]
			deviceManager = DeviceManager(userdata.context)
			
			device_id = int(msg.topic.split('/')[-2])
			device = deviceManager.device(device_id)
			deviceType = userdata.getDeviceType(device)
			if not deviceType:
				return

			userdata.debug(json.dumps({
				'type': 'command',
				'device_id': device_id,
				'device_type': deviceType,
				'command': payload
			}))

			if deviceType == 'light':
				payload = json.loads(payload)
				if 'brightness' in payload:
					if int(payload['brightness']) == 0:
						device.command(
							Device.TURNOFF, 
							origin = 'mqtt_hass'
						)
					else:
						device.command(
							Device.DIM, 
							value = int(payload['brightness']), 
							origin = 'mqtt_hass'
						)
				else:
					device.command(
						Device.TURNON if payload['state'].upper() == 'ON' \
						else Device.TURNOFF, 
						value = 255, 
						origin = 'mqtt_hass'
					)

			elif deviceType == 'switch':
				device.command(
					Device.TURNON if payload.upper() == 'ON' \
					else Device.BELL if payload.upper() == 'BELL' \
					else Device.TURNOFF, 
					origin = 'mqtt_hass'
				)

			elif deviceType == 'cover':
				device.command(
					Device.UP if payload.upper() == 'OPEN' \
					else Device.DOWN if payload.upper() == 'CLOSE' else \
					Device.STOP, 
					origin = 'mqtt_hass'
				)
		except Exception as e:
			userdata.debug('onMessage exception %s' % str(e))
Example #4
0
    def __init__(self):
        self.running = False
        #self.runningJobsLock = threading.Lock() #TODO needed?
        self.jobsLock = threading.Lock()
        self.maintenanceJobsLock = threading.Lock()
        self.maintenanceJobs = []
        self.lastMaintenanceJobId = 0
        self.runningJobs = {}  #id:s as keys
        self.settings = Settings('telldus.scheduler')
        Application().registerShutdown(self.stop)
        Application().registerMaintenanceJobHandler(
            self.addMaintenanceJobGeneric)
        self.timezone = self.settings.get('tz', 'UTC')
        self.latitude = self.settings.get('latitude', '55.699592')
        self.longitude = self.settings.get('longitude', '13.187836')
        self.jobs = []
        self.fetchLocalJobs()
        self.live = TelldusLive(self.context)
        self.deviceManager = DeviceManager(self.context)
        if self.live.isRegistered():
            #probably not practically possible to end up here
            self.requestJobsFromServer()

        self.thread = threading.Thread(target=self.run)
        self.thread.start()
Example #5
0
  def run_discovery(self):
    self.debug('discover devices')
    try:
      # publish devices
      publishedDevices = [self.publish_hub_device()]
      deviceManager = DeviceManager(self.context)
      devices = deviceManager.retrieveDevices()
      for device in devices:
        try:
          self.debug(json.dumps({
            'deviceId': device.id(),
            'type': self.getDeviceType(device),
            'name': device.name(),
            'isDevice': device.isDevice(),
            'isSensor': device.isSensor(),
            'methods': device.methods(),
            'battery': device.battery(),
            'parameters': device.allParameters() if hasattr(device, 'allParameters') else device.parameters(),
            'typeStr': device.typeString(),
            'sensors': device.sensorValues(),
            'state': device.state()
          }))
          publishedDevices.extend(self.discovery(device))
        except Exception as e:
          self.debug('run_discovery device exception %s' % str(e))

      for type, devId, fullId in list(set(self.getKnownDevices()) - set(publishedDevices)):
        self.remove_discovery(type, devId, fullId)

      self.setKnownDevices(publishedDevices)
    except Exception as e:
      self.debug('run_discovery exception %s' % str(e))
Example #6
0
 def __init__(self):
     self.sensor = YRSensor()
     deviceManager = DeviceManager(self.context)
     deviceManager.addDevice(self.sensor)
     deviceManager.finishedLoading('yr')
     Application().registerScheduledTask(self.__requestWeather,
                                         hours=1,
                                         runAtOnce=True)
	def __init__(self):
		self.loaded = False
		self.armState = None
		self.alarmDevice = AlarmDevice()
		deviceManager = DeviceManager(self.context)
		deviceManager.addDevice(self.alarmDevice)
		self.devices = {}
		Application().registerScheduledTask(fn=self.__fetch, minutes=10, runAtOnce=True)
Example #8
0
 def discover(self):
     deviceManager = DeviceManager(self.context)
     for light in self.lifxClient.get_devices():
         try:
             device = LifxDevice(light)
         except Exception:
             continue
         deviceManager.addDevice(device)
     deviceManager.finishedLoading('lifx')
Example #9
0
    def __init__(self):
        self.scenes = {}

        self.deviceManager = DeviceManager(self.context)
        for sceneId in self.config('scenes'):
            device = SceneDevice(sceneId)
            self.scenes[sceneId] = device
            self.deviceManager.addDevice(device)
        self.deviceManager.finishedLoading('scene')
		def parseValues(overview):
			# Running in the main thread
			deviceManager = DeviceManager(self.context)

			self.armState = overview.get('armState', {}).get('statusType', '')
			# Main box
			if self.alarmDevice.updateStatus(overview['armState']):
				# Send signal
				self.verisureArmStateChanged(overview['armState']['date'], overview['armState']['statusType'], overview['armState']['name'], overview['armState']['changedVia'])

			# Door/Window sensors
			for door in overview.get('doorWindow', {}).get('doorWindowDevice', []):
				deviceLabel = door['deviceLabel']
				if deviceLabel not in self.devices:
					device = DoorWindowDevice(door)
					self.devices[deviceLabel] = device
					deviceManager.addDevice(device)
				else:
					device = self.devices[deviceLabel]
				device.updateStatus(door)

			# Climate values
			for climate in overview.get('climateValues', []):
				deviceLabel = climate['deviceLabel']
				if deviceLabel not in self.devices:
					device = ClimateDevice(climate)
					self.devices[deviceLabel] = device
					deviceManager.addDevice(device)
				else:
					device = self.devices[deviceLabel]
				device.updateValues(climate)

			# Smart plugs
			for plug in overview.get('smartPlugs', []):
				deviceLabel = plug['deviceLabel']
				if deviceLabel not in self.devices:
					device = SmartPlugDevice(plug, self)
					self.devices[deviceLabel] = device
					deviceManager.addDevice(device)
				else:
					device = self.devices[deviceLabel]
				device.updateValues(plug)

			# Door locks
			for lock in overview.get('doorLockStatusList', []):
				deviceLabel = lock['deviceLabel']
				if deviceLabel not in self.devices:
					device = DoorLockDevice(lock)
					self.devices[deviceLabel] = device
					deviceManager.addDevice(device)
				else:
					device = self.devices[deviceLabel]
				device.updateStatus(lock)

			if self.loaded == False:
				deviceManager.finishedLoading('verisure')
				self.loaded = True
 def __init__(self):
     self.lastCheckedDate = None
     self.device = HolidayDevice()
     deviceManager = DeviceManager(self.context)
     deviceManager.addDevice(self.device)
     deviceManager.finishedLoading('holiday')
     Application().registerScheduledTask(self.checkDay,
                                         minutes=1,
                                         runAtOnce=False)
    def __init__(self):
        self.deviceManager = DeviceManager(self.context)

        self.client = mqtt.Client('telldus')
        self.client.on_connect = self.onConnect
        self.client.on_message = self.onMessage
        self.client.on_publish = self.onPublish
        self.client.on_subscribe = self.onSubscribe
        if self.config('hostname') != '':
            self.connect()
Example #13
0
 def __scanDevices(self):
     l = soco.discover()
     if l is None:
         # No found, this could be an error. Don't remove all old. Try to check them manually
         self.__loadCached()
         return
     deviceManager = DeviceManager(self.context)
     for s in l:
         deviceManager.addDevice(SonosDevice(s))
     deviceManager.finishedLoading('sonos')
Example #14
0
    def __init__(self):
        # The devicemanager is a globally manager handling all device types
        self.deviceManager = DeviceManager(self.context)

        # Load all devices this plugin handles here. Individual settings for the devices
        # are handled by the devicemanager
        self.deviceManager.addDevice(DummyDevice())

        # When all devices has been loaded we need to call finishedLoading() to tell
        # the manager we are finished. This clears old devices and caches
        self.deviceManager.finishedLoading('dummy')
Example #15
0
	def __init__(self):
		self.devices = []
		self.deviceManager = DeviceManager(self.context)
		for d in self.deviceManager.retrieveDevices('group'):
			p = d.params()
			device = GroupDevice()
			self.devices.append(device)
			device.setNodeId(d.id())
			device.setParams(p)
			self.deviceManager.addDevice(device)
		self.deviceManager.finishedLoading('group')
		self.live = TelldusLive(self.context)
Example #16
0
	def __init__(self):
		self.devices = []
		self.deviceManager = DeviceManager(self.context)  # pylint: disable=too-many-function-args
		for oldDevice in self.deviceManager.retrieveDevices('group'):
			params = oldDevice.params()
			device = GroupDevice()
			self.devices.append(device)
			device.setNodeId(oldDevice.id())
			device.setParams(params)
			self.deviceManager.addDevice(device)
		self.deviceManager.finishedLoading('group')
		self.live = TelldusLive(self.context)  # pylint: disable=too-many-function-args
Example #17
0
 def createTrigger(self, type, **kwargs):  # pylint: disable=W0622
     if type == 'blockheater':
         trigger = BlockheaterTrigger(factory=self,
                                      manager=self.triggerManager,
                                      deviceManager=DeviceManager(
                                          self.context),
                                      **kwargs)
         self.blockheaterTriggers.append(trigger)
         return trigger
     if type == 'time':
         return TimeTrigger(manager=self.triggerManager, **kwargs)
     if type == 'suntime':
         return SuntimeTrigger(manager=self.triggerManager, **kwargs)
     return None
Example #18
0
 def __init__(self):
     self.deviceManager = DeviceManager(self.context)
     self.username = None
     self.ssdp = None
     config = self.config('bridge')
     self.activated = config.get('activated', False)
     self.username = config.get('username', '')
     self.bridge = config.get('bridge', '')
     self.state = Hue.STATE_NO_BRIDGE
     self.lights = {}
     self.ssdp = SSDP(self.context)
     if self.activated:
         Application().queue(self.selectBridge, config.get('bridge'))
     Application().registerScheduledTask(self.update, minutes=1)
 def __init__(self):
     self.deviceManager = DeviceManager(self.context)
     self.sensors = {}
     self.loaded = False
     self.clientId = ''
     self.clientSecret = ''
     config = self.config('oauth')
     self.accessToken = config.get('accessToken', '')
     self.refreshToken = config.get('refreshToken', '')
     if self.accessToken is not '':
         self.configuration['oauth'].activated = True
     self.tokenTTL = config.get('tokenTTL', 0)
     Application().registerScheduledTask(self.__requestNewValues,
                                         minutes=10,
                                         runAtOnce=True)
    def __init__(self):
        # The devicemanager is a globally manager handling all device types
        self.deviceManager = DeviceManager(self.context)

        # Load all devices this plugin handles here. Individual settings for the devices
        # are handled by the devicemanager
        self.sensor = TemperatureSensor()
        self.deviceManager.addDevice(self.sensor)

        # When all devices has been loaded we need to call finishedLoading() to tell
        # the manager we are finished. This clears old devices and caches
        self.deviceManager.finishedLoading('temperature')

        Application().registerScheduledTask(self.updateValues,
                                            minutes=1,
                                            runAtOnce=True)
 def createTrigger(self, type, **kwargs):
     if type == 'blockheater':
         trigger = BlockheaterTrigger(factory=self,
                                      manager=self.triggerManager,
                                      deviceManager=DeviceManager(
                                          self.context),
                                      **kwargs)
         self.blockheaterTriggers.append(trigger)
         return trigger
     if type == 'time':
         trigger = TimeTrigger(manager=self.triggerManager, **kwargs)
         return trigger
     if type == 'suntime':
         trigger = SuntimeTrigger(manager=self.triggerManager, **kwargs)
         return trigger
     return None
    def discover(self):
        self.discovered_flag = False
        self._debug('Discovering devices ...')

        self.devices = self.staticDevices + []
        devMgr = DeviceManager(self.context)
        for device in devMgr.retrieveDevices():
            haDevs = devs.createDevices(device, self.hub, self._buildTopic,
                                        self.config('use_via'))
            self._debug('Discovered %s' %
                        json.dumps(self._debugDevice(device, haDevs)))
            for haDev in haDevs:
                self.devices.append(haDev)

        self.discovered_flag = True
        self._debug('Discovered %s devices' % len(self.devices))
        Application().queue(self.cleanupDevices)
Example #23
0
    def __init__(self):
        self.last_sent_data = None
        self.stop_ping_loop = threading.Event()

        self.deviceManager = DeviceManager(self.context)

        Application().registerShutdown(self.shutdown)

        settings = Settings('tellduslive.config')
        self.uuid = settings['uuid']

        self.logHandler = ShellyLogger(self.uuid)
        LOGGER.addHandler(self.logHandler)

        self.setupPing()

        LOGGER.info('Init Shelly ' + __version__)
        self._initPyShelly()
Example #24
0
 def __loadCached(self):
     deviceManager = DeviceManager(self.context)
     l = deviceManager.retrieveDevices('sonos')
     if len(l) == 0:
         # No cached, retry search in 10 minutes
         timer = Timer(600, self.__scanDevices)
         timer.daemon = True
         timer.start()
         return
     for dev in l:
         ip = dev.params().get('ip_address', None)
         if ip is None:
             continue
         try:
             s = soco.SoCo(ip)
             s.uid  # Will throw exception if not available
             deviceManager.addDevice(SonosDevice(s))
         except ConnectionError:
             continue
    def __init__(self):
        self.version = 0
        self.hwVersion = None
        self.devices = []
        self.sensors = []
        self.rawEnabled = False
        self.rawEnabledAt = 0
        self.dev = Adapter(self, Board.rf433Port())
        self.deviceManager = DeviceManager(self.context)
        self.registerSensorCleanup()
        for dev in self.deviceManager.retrieveDevices('433'):
            params = dev.params()
            if 'type' not in params:
                continue
            if params['type'] == 'sensor':
                device = SensorNode()
                self.sensors.append(device)
            elif params['type'] == 'device':
                device = DeviceNode(self.dev)  # pylint: disable=R0204
                self.devices.append(device)
            else:
                continue
            device.setNodeId(dev.id())
            device.setParams(params)
            if params['type'] == 'sensor':
                # already loaded, keep it that way!
                device._packageCount = 7  # pylint: disable=W0212
                device._sensorValues = dev._sensorValues  # pylint: disable=W0212
                device.batteryLevel = dev.batteryLevel
                if hasattr(dev, 'declaredDead'):
                    device.declaredDead = dev.declaredDead

            self.deviceManager.addDevice(device)

        self.deviceManager.finishedLoading('433')
        self.dev.queue(
            RF433Msg('V', success=self.__version, failure=self.__noVersion))
        self.dev.queue(
            RF433Msg('H', success=self.__hwVersion,
                     failure=self.__noHWVersion))
        self.live = TelldusLive(self.context)
 def __init__(self):
     self.deviceManager = DeviceManager(self.context)
     self.devices = None
     thread = Thread(target=self.detectBroadlink,
                     name="Detect Broadlink Devices")
     thread.start()
Example #27
0
 def __init__(self):
     self.deviceManager = DeviceManager(self.context)
     self.sensor = None
     Application().registerScheduledTask(self.__requestNewValue,
                                         minutes=1,
                                         runAtOnce=True)
 def loadDevices(self):
     deviceManager = DeviceManager(self.context)
     for dev in TPLinkSmartHomeProtocol.discover():
         plug = SmartPlug(dev['ip'])
         deviceManager.addDevice(TPLinkDevice(plug))
     deviceManager.finishedLoading('tplink')
Example #29
0
 def tearDown(self):
     deviceManager = DeviceManager(self.context)
     deviceManager.removeDevicesByType('shelly')
Example #30
0
 def __init__(self):
     self.deviceManager = DeviceManager(self.context)
     self.lifxClient = lifx.Client()
     Timer(2.0, self.discover).start()