diff --git a/homeassistant/components/sensor/dovado.py b/homeassistant/components/sensor/dovado.py
index 1e1bf785760339add79953c6986b07f9d60ed5cb..6a3745c0334b666bd3f39d52dc10d9aa7893c6c9 100644
--- a/homeassistant/components/sensor/dovado.py
+++ b/homeassistant/components/sensor/dovado.py
@@ -16,12 +16,13 @@ from homeassistant.util import slugify
 import homeassistant.helpers.config_validation as cv
 from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD,
                                  CONF_HOST, CONF_PORT,
-                                 CONF_SENSORS, STATE_UNKNOWN)
+                                 CONF_SENSORS, STATE_UNKNOWN,
+                                 DEVICE_DEFAULT_NAME)
 from homeassistant.components.sensor import (DOMAIN, PLATFORM_SCHEMA)
 
 _LOGGER = logging.getLogger(__name__)
 
-REQUIREMENTS = ['dovado==0.1.15']
+REQUIREMENTS = ['dovado==0.4.0']
 
 MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=30)
 
@@ -101,21 +102,20 @@ class Dovado:
     @property
     def name(self):
         """Name of the router."""
-        return self.state["product name"]
+        return self.state.get("product name", DEVICE_DEFAULT_NAME)
 
     @Throttle(MIN_TIME_BETWEEN_UPDATES)
     def update(self):
         """Update device state."""
         _LOGGER.info("Updating")
         try:
-            self.state = self._dovado.query_state()
+            self.state.update(self._dovado.state or {})
             self.state.update(
-                connected=self.state["modem status"] == "CONNECTED")
+                connected=self.state.get("modem status") == "CONNECTED")
             _LOGGER.debug("Received: %s", self.state)
             return True
         except OSError as error:
-            _LOGGER.error("Could not contact the router: %s", error)
-            return False
+            _LOGGER.warning("Could not contact the router: %s", error)
 
 
 class DovadoSensor(Entity):
@@ -140,8 +140,10 @@ class DovadoSensor(Entity):
     def state(self):
         """Return the sensor state."""
         key = SENSORS[self._sensor][0]
-        result = self._dovado.state[key]
-        if self._sensor == SENSOR_NETWORK:
+        result = self._dovado.state.get(key)
+        if not result:
+            return STATE_UNKNOWN
+        elif self._sensor == SENSOR_NETWORK:
             match = re.search(r"\((.+)\)", result)
             return match.group(1) if match else STATE_UNKNOWN
         elif self._sensor == SENSOR_SIGNAL:
@@ -152,8 +154,7 @@ class DovadoSensor(Entity):
         elif self._sensor == SENSOR_SMS_UNREAD:
             return int(result)
         elif self._sensor in [SENSOR_UPLOAD, SENSOR_DOWNLOAD]:
-            gib = pow(2, 30)
-            return round(int(result) / gib, 1)
+            return round(float(result) / 1e6, 1)
         else:
             return result
 
diff --git a/requirements_all.txt b/requirements_all.txt
index cfe45f4d608baabc4ba409cf69f7ba04d2411a8f..c501b5e29a5f306ee15db7ca3e007c0e5b57222a 100755
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -112,7 +112,7 @@ dlipower==0.7.165
 dnspython3==1.15.0
 
 # homeassistant.components.sensor.dovado
-dovado==0.1.15
+dovado==0.4.0
 
 # homeassistant.components.sensor.dsmr
 dsmr_parser==0.6