123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- """
- tradfri devices
- ===============
-
- **Author:**
-
- * Dirk Alders <sudo-dirk@mount-mockery.de>
-
- **Description:**
-
- Emulation of tradfri devices
-
- Communication (MQTT)
-
- tradfri_light {
- | "state": ["ON" / "OFF" / "TOGGLE"]
- | "linkquality": [0...255] lqi
- | "brightness": [0...254]
- | "color_mode": ["color_temp"]
- | "color_temp": ["coolest", "cool", "neutral", "warm", "warmest", 250...454]
- | "color_temp_startup": ["coolest", "cool", "neutral", "warm", "warmest", "previous", 250...454]
- | "update": []
- | }
- +- get {
- | "state": ""
- | }
- +- set {
- "state": ["ON" / "OFF"]
- "brightness": [0...256]
- "color_temp": [250...454]
- "transition": [0...] seconds
- "brightness_move": [-X...0...X] X/s
- "brightness_step": [-X...0...X]
- "color_temp_move": [-X...0...X] X/s
- "color_temp_step": [-X...0...X]
- }
- """
-
- from devices.base import base
- import json
-
-
- class sw(base):
- """A tradfri device with switching functionality
-
- Args:
- mqtt_client (mqtt.mqtt_client): A MQTT Client instance
- topic (str): the base topic for this device
- kwargs (**dict): cd_st=list of devices connected to state
- """
- PROPERTIES = [
- "state",
- ]
- def __init__(self, mqtt_client, topic, **kwargs):
- super().__init__(mqtt_client, topic, **kwargs)
- if getattr(self, 'cd_st', None) is None:
- self.cd_st = []
- self["state"] = "off"
- #
- self.mqtt_client.add_callback(self.topic + '/set', self.__rx_set__)
- self.mqtt_client.add_callback(self.topic + '/get', self.__rx_get__)
-
- def set_state(self, value):
- self.__set__("state", "on" if value else "off")
- self.send_device_status()
-
- def __rx_set__(self, client, userdata, message):
- data = json.loads(message.payload)
- self.logger.info("Received set data: %s", repr(data))
- for key in data:
- self.__set__(key, data[key])
- self.send_device_status()
- if "state" in data:
- for d in self.cd_st:
- d.set_state(data["state"].lower() == "on")
-
- def __rx_get__(self, client, userdata, message):
- self.send_device_status()
-
- def send_device_status(self):
- data = json.dumps(self)
- self.logger.info("Sending status: %s", repr(data))
- self.mqtt_client.send(self.topic, data)
-
-
- class sw_br(sw):
- """A tradfri device with switching and brightness functionality
-
- Args:
- mqtt_client (mqtt.mqtt_client): A MQTT Client instance
- topic (str): the base topic for this device
- """
- PROPERTIES = sw.PROPERTIES + [
- "brightness",
- ]
- def __init__(self, mqtt_client, topic, **kwargs):
- super().__init__(mqtt_client, topic, **kwargs)
- self["brightness"] = 64
-
-
- class sw_br_ct(sw_br):
- """A tradfri device with switching, brightness and colortemp functionality
-
- Args:
- mqtt_client (mqtt.mqtt_client): A MQTT Client instance
- topic (str): the base topic for this device
- """
- PROPERTIES = sw_br.PROPERTIES + [
- "color_temp",
- ]
- def __init__(self, mqtt_client, topic, **kwargs):
- super().__init__(mqtt_client, topic, **kwargs)
- self["color_temp"] = 413
|