Skip to content
This repository has been archived by the owner on Apr 23, 2022. It is now read-only.

Commit

Permalink
Fixed sensor not updating from coordinator
Browse files Browse the repository at this point in the history
  • Loading branch information
jacokok committed May 23, 2021
1 parent 89a1394 commit dca95b4
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 28 deletions.
13 changes: 3 additions & 10 deletions custom_components/warzone/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,20 @@
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
import logging
from .const import CLIENT, CONF_PASSWORD, CONF_USERNAME, DOMAIN
from .const import CONF_PASSWORD, CONF_USERNAME, DOMAIN
from .lib import Login

_LOGGER = logging.getLogger(__name__)

PLATFORMS = ["sensor"]

async def async_setup(hass: HomeAssistant, config: dict):
hass.data[DOMAIN] = {}
if DOMAIN not in config:
return True
"""Cannot setup using YAML"""
return True


async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up warzone from a config entry."""
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {
CLIENT: await Login(entry.data.get(CONF_USERNAME), entry.data.get(CONF_PASSWORD)),
}
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
return True

Expand All @@ -32,5 +26,4 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)

return unload_ok
return unload_ok
3 changes: 1 addition & 2 deletions custom_components/warzone/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
from homeassistant.exceptions import HomeAssistantError
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
from .lib import Login
from .lib import Platform
from .lib import Login, Platform
from .const import CONF_POLLING_INTERVAL, DOMAIN, CONF_PASSWORD, CONF_PLATFORM, CONF_PROFILE, CONF_USERNAME, PLATFORM_TYPES, POLLING_INTERVAL

_LOGGER = logging.getLogger(__name__)
Expand Down
3 changes: 1 addition & 2 deletions custom_components/warzone/const.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""Constants for the warzone integration."""
DOMAIN = "warzone"
CLIENT = "client"

DOMAIN = "warzone"
CONF_USERNAME = "username"
CONF_PASSWORD = "password"
CONF_PLATFORM = "platform"
Expand Down
33 changes: 19 additions & 14 deletions custom_components/warzone/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,40 @@
from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import DOMAIN, HomeAssistant
from .const import CLIENT, CONF_POLLING_INTERVAL, DOMAIN, CONF_PLATFORM, CONF_PROFILE, POLLING_INTERVAL, PULL_TIMEOUT
from .lib import Platform, Title, Mode
from .const import CONF_POLLING_INTERVAL, DOMAIN, CONF_PLATFORM, CONF_PROFILE, POLLING_INTERVAL, PULL_TIMEOUT, CONF_USERNAME, CONF_PASSWORD
from .lib import Platform, Title, Mode, Login

import async_timeout

from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
DataUpdateCoordinator
DataUpdateCoordinator,
UpdateFailed
)

_LOGGER = logging.getLogger(__name__)

async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities
) -> None:
client = hass.data[DOMAIN][entry.entry_id][CLIENT]
profile = entry.data.get(CONF_PROFILE)
platform = Platform(entry.data.get(CONF_PLATFORM))
username = entry.data.get(CONF_USERNAME)
password = entry.data.get(CONF_PASSWORD)
sensors = []

async def async_update_data():
with async_timeout.timeout(PULL_TIMEOUT):
results = await client.SearchPlayers(platform, profile, limit=1)
me = results[0]
profileResults = await me.profile(Title.ModernWarfare, Mode.Warzone)
finalResults = profileResults["lifetime"]["mode"]["br"]["properties"]
finalResults["level"] = profileResults["level"]
return finalResults
try:
client = await Login(username, password)
results = await client.SearchPlayers(platform, profile, limit=1)
me = results[0]
profileResults = await me.profile(Title.ModernWarfare, Mode.Warzone)
finalResults = profileResults["lifetime"]["mode"]["br"]["properties"]
finalResults["level"] = profileResults["level"]
return finalResults
except Exception as exception:
raise UpdateFailed(exception)

polling = entry.options.get(CONF_POLLING_INTERVAL, POLLING_INTERVAL)

Expand All @@ -48,18 +54,17 @@ async def async_update_data():

for idx, ent in enumerate(coordinator.data):
sensors.append(
WarzoneSensor(coordinator, ent, coordinator.data[ent], profile)
WarzoneSensor(coordinator, ent, profile)
)
async_add_entities(sensors, True)


class WarzoneSensor(CoordinatorEntity, SensorEntity):
"""Representation of a Sensor."""

def __init__(self, coordinator, sensor, state, profile):
def __init__(self, coordinator, sensor, profile):
"""Initialize the sensor."""
super().__init__(coordinator)
self._state = state
self._sensor = sensor
self._profile = profile

Expand All @@ -71,4 +76,4 @@ def name(self):
@property
def state(self):
"""Return the state of the sensor."""
return self._state
return self.coordinator.data[self._sensor]

0 comments on commit dca95b4

Please sign in to comment.