mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Merge branch 'pr/616' into dev
This commit is contained in:
commit
79c92cd0c4
89
homeassistant/components/device_tracker/icloud.py
Normal file
89
homeassistant/components/device_tracker/icloud.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
"""
|
||||||
|
homeassistant.components.device_tracker.icloud
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Device tracker platform that supports scanning iCloud devices.
|
||||||
|
|
||||||
|
It does require that your device has beend registered with Find My iPhone.
|
||||||
|
|
||||||
|
Note: that this may cause battery drainage as it wakes up your device to
|
||||||
|
get the current location.
|
||||||
|
|
||||||
|
Note: You may receive an email from Apple stating that someone has logged
|
||||||
|
into your account.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation at
|
||||||
|
https://home-assistant.io/components/device_tracker.icloud/
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import re
|
||||||
|
from homeassistant.const import CONF_USERNAME, CONF_PASSWORD
|
||||||
|
from homeassistant.helpers.event import track_utc_time_change
|
||||||
|
|
||||||
|
SCAN_INTERVAL = 1800
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
REQUIREMENTS = ['https://github.com/picklepete/pyicloud/archive/'
|
||||||
|
'80f6cd6decc950514b8dc43b30c5bded81b34d5f.zip'
|
||||||
|
'#pyicloud==0.8.0']
|
||||||
|
|
||||||
|
|
||||||
|
def setup_scanner(hass, config, see):
|
||||||
|
"""
|
||||||
|
Set up the iCloud Scanner
|
||||||
|
"""
|
||||||
|
from pyicloud import PyiCloudService
|
||||||
|
from pyicloud.exceptions import PyiCloudFailedLoginException
|
||||||
|
from pyicloud.exceptions import PyiCloudNoDevicesException
|
||||||
|
|
||||||
|
# Get the username and password from the configuration
|
||||||
|
username = config[CONF_USERNAME]
|
||||||
|
password = config[CONF_PASSWORD]
|
||||||
|
|
||||||
|
try:
|
||||||
|
_LOGGER.info('Logging into iCloud Account')
|
||||||
|
# Attempt the login to iCloud
|
||||||
|
api = PyiCloudService(username,
|
||||||
|
password,
|
||||||
|
verify=True)
|
||||||
|
except PyiCloudFailedLoginException as error:
|
||||||
|
_LOGGER.exception(
|
||||||
|
'Error logging into iCloud Service: %s' % error
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
def update_icloud(now):
|
||||||
|
"""
|
||||||
|
Authenticate against iCloud and scan for devices.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# The session timeouts if we are not using it so we
|
||||||
|
# have to re-authenticate. This will send an email.
|
||||||
|
api.authenticate()
|
||||||
|
# Loop through every device registered with the iCloud account
|
||||||
|
for device in api.devices:
|
||||||
|
status = device.status()
|
||||||
|
location = device.location()
|
||||||
|
# If the device has a location add it. If not do nothing
|
||||||
|
if location:
|
||||||
|
see(
|
||||||
|
dev_id=re.sub(r"(\s|\W|')",
|
||||||
|
'',
|
||||||
|
status['name']),
|
||||||
|
host_name=status['name'],
|
||||||
|
gps=(location['latitude'], location['longitude']),
|
||||||
|
battery=status['batteryLevel']*100,
|
||||||
|
gps_accuracy=location['horizontalAccuracy']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# No location found for the device so continue
|
||||||
|
continue
|
||||||
|
except PyiCloudNoDevicesException:
|
||||||
|
_LOGGER.info('No iCloud Devices found!')
|
||||||
|
|
||||||
|
track_utc_time_change(
|
||||||
|
hass,
|
||||||
|
update_icloud,
|
||||||
|
second=range(0, 60, SCAN_INTERVAL)
|
||||||
|
)
|
@ -177,3 +177,6 @@ https://github.com/persandstrom/python-verisure/archive/9873c4527f01b1ba1f72ae60
|
|||||||
|
|
||||||
# homeassistant.components.zwave
|
# homeassistant.components.zwave
|
||||||
pydispatcher==2.0.5
|
pydispatcher==2.0.5
|
||||||
|
|
||||||
|
# homeassistant.sensor.icloud
|
||||||
|
https://github.com/picklepete/pyicloud/archive/80f6cd6decc950514b8dc43b30c5bded81b34d5f.zip#pyicloud==0.8.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user