Magichue(as known as Magichome, FluxLED, etc.) is a cheap smart led bulb that you can controll hue/saturation/brightnes and power over WiFi. They are available at Amazon or other online web shop.
I tested this library with RGBWWCW(v7), RGB(v8), RGBWW(v8) bulbs.
Now it is possible to use Remote API !
Rainbow cross-fade.
import time
import magichue
user = 'username@example.com'
password = 'password'
api = magichue.RemoteAPI.login_with_user_password(user=user, password=password)
light = api.get_online_bulbs()[0]
# local_device_ips = magichue.discover_bulbs()
# light = magichue.LocalLight(local_device_ips[0])
if not light.on:
light.on = True
if light.is_white:
light.is_white = False
light.rgb = (0, 0, 0)
light.brightness = 255
light.saturation = 1
for hue in range(1000):
light.hue = hue / 1000
time.sleep(0.05)
$ pip install python-magichue
You have to login and register your bulb with MagicHome account in advance.
api = magichue.RemoteAPI.login_with_user_password(user='xxx', password='xxx')
print(api.token) # you can show TOKEN and save it.
It is recommended to use token string.
TOKEN = 'xxx'
api = magichue.RemoteAPI.login_with_token(TOKEN)
TOKEN = 'xxx'
api = magichue.RemoteAPI.login_with_token(TOKEN)
light = RemoteLight(api=api, macaddr='xxx')
from magichue import discover_bulbs, LocalLight
addrs = discover_bulbs() # returns list of bulb address
light = magichue.LocalLight(addrs[0])
from magichue import RemoteAPI
TOKEN = 'xxx'
api = magichue.RemoteAPI.login_with_token(TOKEN)
online_bulbs = api.get_online_bulbs()
light = online_bulbs[0]
# Getting online device information.
online_devices = api.get_online_devices()
# It is also possible to retrieve all device info binded with your account.
all_devices = api.get_all_devices()
print(light.on) # => True if light is on else False
light.on = True
light.on = False
# or
light.turn_on()
light.turn_off()
This shows a tuple of current RGB.
print(light.rgb)
or access individually.
print(light.r)
print(light.g)
print(light.b)
If your bulbs support white leds, you can change brightness(0-255) of white leds.
To use white led,
light.is_white = True
# light.is_white = False # This disables white led.
If white led is enabled, you can't change color of bulb!
So, you need to execute light.is_white = False
before changing color.
light.cw = 0
light.w = 255
light.w = 0
light.cw = 255
light.rgb = (128, 0, 32)
or
light.r = 200
light.g = 0
light.b = 32
light.hue = 0.3
light.saturation = 0.6
light.brightness = 255
hue, saturation are float value from 0 to 1. brightness is a integer value from 0 to 255. These variables are also readable.
Stripe bulb doesn't seem to allow jump to another color when you change color. To disable fading effect,
light.rgb = (128, 0, 20) # It fades
light.allow_fading = False # True by default
light.rgb = (20, 0, 128) # Jumps
print(light.get_current_time())
Magichue blub has a built-in flash patterns.
To check current mode, just
print(light.mode.name) # string name of mode
print(light.mode.value) # integer value
and changing modes,
light.mode = magichue.RAINBOW_CROSSFADE
These are built-in modes.
RAINBOW_CROSSFADE
RED_GRADUALLY
GREEN_GRADUALLY
BLUE_GRADUALLY
YELLOW_GRADUALLY
BLUE_GREEN_GRADUALLY
PURPLE_GRADUALLY
WHITE_GRADUALLY
RED_GREEN_CROSSFADE
RED_BLUE_CROSSFADE
GREEN_BLUE_CROSSFADE
RAINBOW_STROBE
GREEN_STROBE
BLUE_STROBE
YELLOW_STROBE
BLUE_GREEN_STROBE
PURPLE_STROBE
WHITE_STROBE
RAINBOW_FLASH
NORMAL
speed is a float value from 0 to 1.
print(light.speed)
light.speed = 0.5 # set speed to 50%
You can create custom light flash patterns.
mode
- MODE_JUMP
- MODE_GRADUALLY
- MODE_STROBE
speed A float value 0 to 1
colors A list of rgb(tuple or list) which has less than 17 length.
from magichue import (
CustomMode,
MODE_JUMP,
)
# Creating Mode
mypattern1 = CustomMode(
mode=MODE_JUMP,
speed=0.5,
colors=[
(128, 0, 32),
(100, 20, 0),
(30, 30, 100),
(0, 0, 50)
]
)
# Apply Mode
light.mode = mypattern1
Other features are in development.
Putting this snippet to begging of your code, this library outputs debug log.
import loggging
logging.basicConfig(level=logging.DEBUG)