Skip to content

Commit

Permalink
Device support of the Xiaomi PM2.5 Air Quality Monitor introduced. Fixes
Browse files Browse the repository at this point in the history
 #70.
  • Loading branch information
syssi committed Oct 12, 2017
1 parent eda0993 commit b9831dd
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
1 change: 1 addition & 0 deletions miio/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from miio.chuangmi_ir import ChuangmiIr
from miio.fan import Fan
from miio.wifispeaker import WifiSpeaker
from miio.airqualitymonitor import AirQualityMonitor
from miio.yeelight import Yeelight
from miio.device import Device, DeviceException
from miio.discovery import Discovery
65 changes: 65 additions & 0 deletions miio/airqualitymonitor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import logging
from collections import defaultdict
from .device import Device

_LOGGER = logging.getLogger(__name__)


class AirQualityMonitorStatus:
def __init__(self, data):
# ['power': 'on', 'aqi': 34, 'battery': 0, 'usb_state': 'on']
self.data = data

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

@property
def is_on(self) -> bool:
return self.power == "on"

@property
def usb_power(self) -> bool:
return self.data["usb_state"] == "on"

@property
def aqi(self) -> int:
return self.data["aqi"]

@property
def battery(self) -> int:
return self.data["battery"]


class AirQualityMonitor(Device):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def status(self):
"""Return device status."""

properties = ['power', 'aqi', 'battery', 'usb_state']

values = self.send(
"get_prop",
properties
)

properties_count = len(properties)
values_count = len(values)
if properties_count != values_count:
_LOGGER.debug(
"Count (%s) of requested properties does not match the "
"count (%s) of received values.",
properties_count, values_count)

return AirQualityMonitorStatus(
defaultdict(lambda: None, zip(properties, values)))

def on(self):
"""Power on."""
return self.send("set_power", ["on"])

def off(self):
"""Power off."""
return self.send("set_power", ["off"])

0 comments on commit b9831dd

Please sign in to comment.