Experimenting with magic cube

This commit is contained in:
Thomas Lovén 2019-10-30 09:10:56 +01:00
parent cc8bcd4507
commit 2e4064b46d
3 changed files with 64 additions and 2 deletions

57
appdaemon/apps/cube.py Normal file
View File

@ -0,0 +1,57 @@
from entities import Entities
class Cube(Entities):
def initialize(self):
super().initialize()
self.lights = ['light.taklampa_kontoret', 'switch.varme_mhr', 'switch.varme_mhr_2']
self.register_entity('upside', 'sensor.cube_up', True, 0, {})
self.register_entity('angle', 'sensor.cube_rotaton', True, 0, {})
self.listen_event(self.event, 'deconz_event')
def event(self, ev, data, kwargs):
self.log(ev)
self.log(data)
if data.get('id', None) == 'mi_magic_cube':
side = data.get('event', 0) // 1000
action = data.get('event', 0) % 10
if side < 7 and action == 0: # Push
self.log("Push")
color = ['red', 'blue', 'green', 'yellow', 'purple', 'white']
self.call_service("light/turn_on", entity_id = self.lights[0], color_name = color[side-1])
elif side == 7 and action == 7: # Shake
self.log("Shake")
pass
elif side == 7 and action == 8: # Drop
self.log("Drop")
pass
elif action == side: # Double tap
self.log("Double tap")
if side == 1:
self.toggle(side)
if 0 < side < 7:
self.e['upside'].state = side
self.e['upside'].push()
if data.get('id', None) == 'switch_55':
angle = data.get('event', 0) / 100
oldangle = float(self.e['angle'].state)
newangle = oldangle + angle
newangle = newangle if newangle < 360 else 360
newangle = newangle if newangle > 0 else 0
self.e['angle'].state = f"{newangle:.2f}"
self.e['angle'].push()
self.call_service("light/turn_on", entity_id = self.lights[0], brightness_pct = newangle/3.6)
def toggle(self, light):
self.log("Toggling light")
self.call_service("homeassistant/toggle", entity_id = self.lights[light-1])

3
appdaemon/apps/cube.yaml Normal file
View File

@ -0,0 +1,3 @@
cube:
module: cube
class: Cube

View File

@ -148,9 +148,11 @@ class LightEntity(Entity):
class SwitchEntity(Entity):
def set_state(self, old, new):
if new == True:
if new == "on" or new == True:
self._hass.call_service("switch/turn_on", entity_id = self.entity_id)
self._state = "on"
if new == False:
if new == "off" or new == False:
self._hass.call_service("switch/turn_off", entity_id = self.entity_id)
self._state = "off"
def service_callback(self, data):