Skip to content
Merged
30 changes: 23 additions & 7 deletions homeassistant/components/sensor/plex.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@

from homeassistant.components.switch import PLATFORM_SCHEMA
from homeassistant.const import (
CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN)
CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN,
CONF_SSL)
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
import homeassistant.helpers.config_validation as cv
Expand All @@ -24,6 +25,7 @@
DEFAULT_HOST = 'localhost'
DEFAULT_NAME = 'Plex'
DEFAULT_PORT = 32400
DEFAULT_SSL = False

MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=1)

Expand All @@ -35,6 +37,7 @@
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
vol.Optional(CONF_SERVER): cv.string,
vol.Optional(CONF_USERNAME): cv.string,
vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
})


Expand All @@ -48,12 +51,20 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
plex_host = config.get(CONF_HOST)
plex_port = config.get(CONF_PORT)
plex_token = config.get(CONF_TOKEN)
plex_url = 'http://{}:{}'.format(plex_host, plex_port)

add_devices([PlexSensor(
name, plex_url, plex_user, plex_password, plex_server,
plex_token)], True)
plex_url = '{}://{}:{}'.format('https' if config.get(CONF_SSL) else 'http',
plex_host, plex_port)

import plexapi.exceptions

try:
add_devices([PlexSensor(
name, plex_url, plex_user, plex_password, plex_server,
plex_token)], True)
except (plexapi.exceptions.BadRequest, plexapi.exceptions.Unauthorized,
plexapi.exceptions.NotFound) as error:
_LOGGER.error(error)
return

class PlexSensor(Entity):
"""Representation of a Plex now playing sensor."""
Expand All @@ -64,19 +75,24 @@ def __init__(self, name, plex_url, plex_user, plex_password,
from plexapi.myplex import MyPlexAccount
from plexapi.server import PlexServer

cert_session = None

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.

It looks like this is always None. Can this be dropped?


self._name = name
self._state = 0
self._now_playing = []

if plex_token:
self._server = PlexServer(plex_url, plex_token)
self._server = PlexServer(plex_url, plex_token, cert_session)
elif plex_user and plex_password:
user = MyPlexAccount(plex_user, plex_password)
server = plex_server if plex_server else user.resources()[0].name
server = plex_server if plex_server \

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 can go back as well now to clean up the diff.

else user.resources()[0].name
self._server = user.resource(server).connect()
else:
self._server = PlexServer(plex_url)

_LOGGER.info("Plex Sensor Configuration done")

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 log isn't necessary. Home assistant core will already log when each platform is setup.


@property
def name(self):
"""Return the name of the sensor."""
Expand Down