From 525d735f2163aec55a56db883b770997e10dd33f Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen <paulus@paulusschoutsen.nl>
Date: Thu, 3 Nov 2016 21:58:25 -0700
Subject: [PATCH] Warn if fetching properties takes too long (#4208)

* Warn if fetching properties takes too long

* Update entity.py
---
 homeassistant/helpers/entity.py | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py
index 95ac50770cf..560e944abe6 100644
--- a/homeassistant/helpers/entity.py
+++ b/homeassistant/helpers/entity.py
@@ -1,6 +1,7 @@
 """An abstract class for entities."""
 import asyncio
 import logging
+from timeit import default_timer as timer
 
 from typing import Any, Optional, List, Dict
 
@@ -210,7 +211,15 @@ class Entity(object):
                 #     future support?
                 yield from self.hass.loop.run_in_executor(None, self.update)
 
-        state = STATE_UNKNOWN if self.state is None else str(self.state)
+        start = timer()
+
+        state = self.state
+
+        if state is None:
+            state = STATE_UNKNOWN
+        else:
+            state = str(state)
+
         attr = self.state_attributes or {}
 
         device_attr = self.device_state_attributes
@@ -231,6 +240,13 @@ class Entity(object):
         self._attr_setter('hidden', bool, ATTR_HIDDEN, attr)
         self._attr_setter('assumed_state', bool, ATTR_ASSUMED_STATE, attr)
 
+        end = timer()
+
+        if end - start > 0.2:
+            _LOGGER.warning('Updating state for %s took %.3f seconds. '
+                            'Please report to the developers.', self.entity_id,
+                            end - start)
+
         # Overwrite properties that have been set in the config file.
         attr.update(_OVERWRITE.get(self.entity_id, {}))