Skip to content

Commit

Permalink
fix(sensor): set timezone of naive date_time alarms
Browse files Browse the repository at this point in the history
Closes #409
  • Loading branch information
alandtse committed Oct 8, 2019
1 parent 5b28532 commit 60d4618
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
4 changes: 3 additions & 1 deletion custom_components/alexa_media/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -429,8 +429,10 @@ async def update_devices(login_obj):
for dev in preferences['devicePreferences']:
if dev['deviceSerialNumber'] == device['serialNumber']:
device['locale'] = dev['locale']
_LOGGER.debug("Locale %s found for %s",
device['timeZoneId'] = dev['timeZoneId']
_LOGGER.debug("Locale %s timezone %s found for %s",
device['locale'],
device['timeZoneId'],
hide_serial(device['serialNumber']))

if 'doNotDisturbDeviceStatusList' in dnd:
Expand Down
2 changes: 2 additions & 0 deletions custom_components/alexa_media/media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,8 @@ async def refresh(self, device=None):
self._cluster_members = device['clusterMembers']
self._bluetooth_state = device['bluetooth_state']
self._locale = device['locale'] if 'locale' in device else 'en-US'
self._timezone = (device['timeZoneId']
if 'timeZoneId' in device else 'UTC')
self._dnd = device['dnd'] if 'dnd' in device else None
await self._set_authentication_details(device['auth_info'])
session = None
Expand Down
18 changes: 15 additions & 3 deletions custom_components/alexa_media/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,21 @@ def __init__(self,
self._all = (sorted(self._n_dict.items(),
key=lambda x: x[1][self._sensor_property])
if self._n_dict else [])
self._all = list(map(self._fix_alarm_date_time, self._all))
_LOGGER.debug("sorting %s", self._all)
self._sorted = list(filter(lambda x: x[1]['status'] == 'ON',
self._all)) if self._all else []
self._next = self._sorted[0][1] if self._sorted else None

def _fix_alarm_date_time(self, value):
import pytz
if self._sensor_property != "date_time" or not value:
return value
naive_time = dt.parse_datetime(value[1][self._sensor_property])
timezone = pytz.timezone(self._client._timezone)
value[1][self._sensor_property] = timezone.localize(naive_time)
return value

async def async_added_to_hass(self):
"""Store register state change callback."""
try:
Expand Down Expand Up @@ -224,7 +235,7 @@ def should_poll(self):
@property
def state(self):
"""Return the state of the sensor."""
return dt.parse_datetime(self._next[self._sensor_property]).replace(
return self._next[self._sensor_property].replace(
tzinfo=LOCAL_TIMEZONE) if self._next else 'None'

@property
Expand Down Expand Up @@ -254,6 +265,7 @@ async def async_update(self):
self._all = (sorted(self._n_dict.items(),
key=lambda x: x[1][self._sensor_property])
if self._n_dict else [])
self._all = list(map(self._fix_alarm_date_time, self._all))
self._sorted = list(filter(lambda x: x[1]['status'] == 'ON',
self._all)) if self._all else []
self._next = self._sorted[0][1] if self._sorted else None
Expand Down Expand Up @@ -291,8 +303,8 @@ def device_state_attributes(self):
'recurrence': self.recurrence,
'total_active': len(self._sorted),
'total_all': len(self._all),
'sorted_active': json.dumps(self._sorted),
'sorted_all': json.dumps(self._all),
'sorted_active': json.dumps(self._sorted, default=str),
'sorted_all': json.dumps(self._all, default=str),
}
return attr

Expand Down

0 comments on commit 60d4618

Please sign in to comment.