Skip to content

Commit

Permalink
Initial support for wifi speakers
Browse files Browse the repository at this point in the history
First steps towards fixing #69, we require feedback
from someone who owns the device to complete it.
  • Loading branch information
rytilahti committed Oct 1, 2017
1 parent e6e72e0 commit f861278
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 1 deletion.
1 change: 1 addition & 0 deletions mirobo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@
from mirobo.fan import Fan
from mirobo.device import Device, DeviceException
from mirobo.discovery import Discovery
from mirobo.wifispeaker import WifiSpeaker
4 changes: 3 additions & 1 deletion mirobo/discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
import inspect
import codecs
from . import (Device, Vacuum, Plug, PlugV1, Strip, AirPurifier, Ceil,
PhilipsEyecare, ChuangmiIr, AirHumidifier, WaterPurifier)
PhilipsEyecare, ChuangmiIr, AirHumidifier, WaterPurifier,
WifiSpeaker)
from typing import Union, Callable, Dict, Optional # noqa: F401


Expand All @@ -31,6 +32,7 @@
"philips-light-bulb": Ceil,
"philips-light-ceil": Ceil,
"philips-light-sread1": PhilipsEyecare,
"xiaomi-wifispeaker-v1": WifiSpeaker, # name needs to be checked
"yeelink-light-": lambda x: other_package_info(
x, "python-yeelight package"),
"lumi-gateway-": lambda x: other_package_info(
Expand Down
79 changes: 79 additions & 0 deletions mirobo/wifispeaker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import warnings
import logging
from .device import Device

_LOGGER = logging.getLogger(__name__)


class WifiSpeakerStatus:
def __init__(self, data):
self.data = data

@property
def device_name(self) -> str:
return self.data["DeviceName"]

@property
def channel(self) -> str:
return self.data["channel_title"]

@property
def state(self) -> str:
# note: this can be enumized when all values are known
return self.data["current_state"]

@property
def hardware_version(self) -> str:
return self.data["hardware_version"]

@property
def play_mode(self):
# note: this can be enumized when all values are known
return self.data["play_mode"]

@property
def track_artist(self) -> str:
return self.data["track_artist"]

@property
def track_title(self) -> str:
return self.data["track_title"]

@property
def track_duration(self) -> str:
return self.data["track_duration"]

@property
def transport_channel(self) -> str:
# note: this can be enumized when all values are known
return self.data["transport_channel"]


class WifiSpeaker(Device):
def __init__(self, *args, **kwargs):
warnings.warn("Please help to complete this by providing more "
"information about possible values for `state`, "
"`play_mode` and `transport_channel`.", stacklevel=2)
super().__init__(*args, **kwargs)

def status(self):
return WifiSpeakerStatus(self.command("get_prop", ["umi"]))

def power(self):
# is this a toggle?
return self.send("power")

def volume_up(self):
return self.send("vol_up")

def volume_down(self):
return self.send("vol_down")

def track_previous(self):
return self.send("previous_track")

def track_next(self):
return self.send("next_track")

def track_location(self):
return self.send("get_prop", ["rel_time"])

0 comments on commit f861278

Please sign in to comment.