+class TuyaLight(Light):
+ ids_by_mac = {
+ '68:C6:3A:DE:1A:94': '8844664268c63ade1a94',
+ '68:C6:3A:DE:27:1A': '8844664268c63ade271a',
+ '68:C6:3A:DE:1D:95': '8844664268c63ade1d95',
+ '68:C6:3A:DE:19:B3': '8844664268c63ade19b3',
+ '80:7D:3A:77:3B:F5': '07445340807d3a773bf5',
+ '80:7D:3A:58:37:02': '07445340807d3a583702',
+ }
+ keys_by_mac = {
+ '68:C6:3A:DE:1A:94': '237f19b1b3d49c36',
+ '68:C6:3A:DE:27:1A': '237f19b1b3d49c36',
+ '68:C6:3A:DE:1D:95': '04b90fc5cd7625d8',
+ '68:C6:3A:DE:19:B3': '2d601f2892f1aefd',
+ '80:7D:3A:77:3B:F5': '27ab921fe4633519',
+ '80:7D:3A:58:37:02': '8559b5416bfa0c05',
+ }
+
+ def __init__(self, name: str, mac: str, keywords: str = "") -> None:
+ from subprocess import Popen, PIPE
+ super().__init__(name, mac, keywords)
+ mac = mac.upper()
+ if mac not in TuyaLight.ids_by_mac or mac not in TuyaLight.keys_by_mac:
+ raise Exception(f'{mac} is unknown; add it to ids_by_mac and keys_by_mac')
+ self.devid = TuyaLight.ids_by_mac[mac]
+ self.key = TuyaLight.keys_by_mac[mac]
+ try:
+ pid = Popen(['maclookup', mac], stdout=PIPE)
+ ip = pid.communicate()[0]
+ ip = ip[:-1]
+ except Exception:
+ ip = '0.0.0.0'
+ self.bulb = tt.BulbDevice(self.devid, ip, local_key=self.key)
+
+ def turn_on(self) -> bool:
+ self.bulb.turn_on()
+ return True
+
+ def turn_off(self) -> bool:
+ self.bulb.turn_off()
+ return True
+
+ def get_status(self) -> Dict[str, Any]:
+ return self.bulb.status()
+
+ def is_on(self) -> bool:
+ s = self.get_status()
+ return s['dps']['1']
+
+ def is_off(self) -> bool:
+ return not self.is_on()
+
+ def get_dimmer_level(self) -> Optional[int]:
+ s = self.get_status()
+ return s['dps']['3']
+
+ def set_dimmer_level(self, level: int) -> bool:
+ self.bulb.set_brightness(level)
+ return True
+
+ def make_color(self, color: str) -> bool:
+ self.bulb.set_colour(255,0,0)
+ return True
+
+