diff --git a/homeassistant/components/device_tracker/bluetooth_tracker.py b/homeassistant/components/device_tracker/bluetooth_tracker.py
index 2ca519d225c4a8442fed3e26c7136c1b0a1ded5a..217df0aacd47b04a6bf1465c79941dc2e8f2c45f 100644
--- a/homeassistant/components/device_tracker/bluetooth_tracker.py
+++ b/homeassistant/components/device_tracker/bluetooth_tracker.py
@@ -12,7 +12,8 @@ import homeassistant.helpers.config_validation as cv
 from homeassistant.helpers.event import track_point_in_utc_time
 from homeassistant.components.device_tracker import (
     YAML_DEVICES, CONF_TRACK_NEW, CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL,
-    load_config, PLATFORM_SCHEMA, DEFAULT_TRACK_NEW, SOURCE_TYPE_BLUETOOTH)
+    load_config, PLATFORM_SCHEMA, DEFAULT_TRACK_NEW, SOURCE_TYPE_BLUETOOTH,
+    DOMAIN)
 import homeassistant.util.dt as dt_util
 
 _LOGGER = logging.getLogger(__name__)
@@ -79,7 +80,13 @@ def setup_scanner(hass, config, see, discovery_info=None):
 
     request_rssi = config.get(CONF_REQUEST_RSSI, False)
 
-    def update_bluetooth(now):
+    def update_bluetooth():
+        """Update Bluetooth and set timer for the next update."""
+        update_bluetooth_once()
+        track_point_in_utc_time(
+            hass, update_bluetooth, dt_util.utcnow() + interval)
+
+    def update_bluetooth_once():
         """Lookup Bluetooth device and update status."""
         try:
             if track_new:
@@ -99,9 +106,14 @@ def setup_scanner(hass, config, see, discovery_info=None):
                 see_device(mac, result, rssi)
         except bluetooth.BluetoothError:
             _LOGGER.exception("Error looking up Bluetooth device")
-        track_point_in_utc_time(
-            hass, update_bluetooth, dt_util.utcnow() + interval)
 
-    update_bluetooth(dt_util.utcnow())
+    def handle_update_bluetooth(call):
+        """Update bluetooth devices on demand."""
+        update_bluetooth_once()
+
+    update_bluetooth()
+
+    hass.services.register(
+        DOMAIN, "bluetooth_tracker_update", handle_update_bluetooth)
 
     return True