Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,7 @@ omit =
homeassistant/components/sensor/uber.py
homeassistant/components/sensor/upnp.py
homeassistant/components/sensor/ups.py
homeassistant/components/sensor/uscis.py
homeassistant/components/sensor/vasttrafik.py
homeassistant/components/sensor/viaggiatreno.py
homeassistant/components/sensor/waqi.py
Expand Down
87 changes: 87 additions & 0 deletions homeassistant/components/sensor/uscis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
"""
Support for USCIS Case Status.

For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.uscis/
"""

import logging
from datetime import timedelta
import voluptuous as vol

from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.helpers import config_validation as cv
from homeassistant.const import CONF_FRIENDLY_NAME


_LOGGER = logging.getLogger(__name__)

REQUIREMENTS = ['uscisstatus==0.1.1']

DEFAULT_NAME = "USCIS"

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_FRIENDLY_NAME, default=DEFAULT_NAME): cv.string,
vol.Required('case_id'): cv.string,
})


def setup_platform(hass, config, add_devices, discovery_info=None):
"""Setting the platform in HASS and Case Information."""
uscis = UscisSensor(config['case_id'], config[CONF_FRIENDLY_NAME])
uscis.update()
if uscis.valid_case_id:
add_devices([uscis])
else:
_LOGGER.error("Setup USCIS Sensor Fail"
" check if your Case ID is Valid")


class UscisSensor(Entity):
"""USCIS Sensor will check case status on daily basis."""

MIN_TIME_BETWEEN_UPDATES = timedelta(hours=24)

CURRENT_STATUS = "current_status"
LAST_CASE_UPDATE = "last_update_date"

def __init__(self, case, name):
"""Initialize the sensor."""
self._state = None
self._case_id = case
self._attributes = None
self.valid_case_id = None
self._name = name

@property
def name(self):
"""Return the name."""
return self._name

@property
def state(self):
"""Return the state."""
return self._state

@property
def device_state_attributes(self):
"""Return the state attributes."""
return self._attributes

@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self):
"""Using Request to access USCIS website and fetch data."""
import uscisstatus
try:
status = uscisstatus.get_case_status(self._case_id)
self._attributes = {
self.CURRENT_STATUS: status['status']
}
self._state = status['date']
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 do you return the date as state? The status looks like more important to me. I don't know USCIS. ;-) Could you provide some example output here?

Copy link
Copy Markdown
Contributor

@arsaboo arsaboo Apr 10, 2018

Choose a reason for hiding this comment

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

@syssi The date indicates last update. The actual status is quite verbose and beyond the 255 chars limit. More importantly, the status update text may not be very useful for automation. Here's an example of a status message:
On March 8, 2018, we accepted the fingerprint fee for your Form I-485, Application to Register Permanent Residence or Adjust Status, Receipt Number SRCxyz. Our Texas Service Center location is working on your case. We mailed you a notice describing how we will process your case. Please follow the instructions in the notice. If you move, go to USCIS website to give us your new mailing address.

self.valid_case_id = True

except ValueError:
_LOGGER("Please Check that you have valid USCIS case id")
self.valid_case_id = False
3 changes: 3 additions & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1262,6 +1262,9 @@ upcloud-api==0.4.2
# homeassistant.components.sensor.ups
upsmychoice==1.0.6

# homeassistant.components.sensor.uscis
uscisstatus==0.1.1

# homeassistant.components.camera.uvc
uvcclient==0.10.1

Expand Down