Skip to content
Merged
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions homeassistant/components/switch/wemo.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
https://home-assistant.io/components/switch.wemo/
"""
import logging
from datetime import datetime, timedelta

from homeassistant.components.switch import SwitchDevice
from homeassistant.const import (
Expand Down Expand Up @@ -109,12 +110,33 @@ def device_state_attributes(self):

if self.insight_params or (self.coffeemaker_mode is not None):
attr[ATTR_CURRENT_STATE_DETAIL] = self.detail_state
attr['current_power_w'] = \

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't expect the coffee machine will support these new attributes - so I'd change this so that you only retrieve these attributes for the insight device.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just the existing switch attribute divided by 1000.

At some point we'll change the switch attribute to be W rather than mW anyway. So this is only really helpful until we do that.

My suggestion would be to remove it

self.insight_params['currentpower'] / 1000
attr['today_power_mW_min'] = self.insight_params['todaymw']
attr['total_power_mW_min'] = self.insight_params['totalmw']

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is duplicated - but it's also a duplicate of the existing current_power_mwh property of the switch - so you can just remove these - and depend on the switch attributes.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will remove in favour of the incorrectly labeled existing ones

attr['on_time_most_recent'] = \
WemoSwitch.as_uptime(self.insight_params['onfor'])
attr['on_time_today'] = \
WemoSwitch.as_uptime(self.insight_params['ontoday'])
attr['on_time_total'] = \
WemoSwitch.as_uptime(self.insight_params['ontotal'])
attr['power_threshold_w'] = \
self.insight_params['powerthreshold'] / 1000

if self.coffeemaker_mode is not None:
attr[ATTR_COFFEMAKER_MODE] = self.coffeemaker_mode

return attr

@staticmethod
def as_uptime(_seconds):
"""Format seconds into uptime string in the format: 00d 00h 00m 00s."""
uptime = datetime(1, 1, 1) + timedelta(seconds=_seconds)
return "{:0>2d}d {:0>2d}h {:0>2d}m {:0>2d}s".format(uptime.day-1,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not use the timedelta object directly? It supports days, hours etc https://docs.python.org/3/library/datetime.html#datetime.timedelta

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm probably doing something stupid (python noob), but when I try that I get this:

>>> from datetime import datetime, timedelta
>>> uptime = timedelta(days=0,seconds=86401,hours=0,minutes=0)
>>> print ("{:0>2d}d {:0>2d}h {:0>2d}m {:0>2d}s".format(uptime.days, uptime.hours, uptime.minutes, uptime.seconds))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'datetime.timedelta' object has no attribute 'hours'

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh you're right, I was wrong. Looks like timedelta converts it all to seconds.

uptime.hour,
uptime.minute,
uptime.second)

@property
def current_power_mwh(self):
"""Current power usage in mWh."""
Expand Down