diff --git a/homeassistant/components/netatmo/manifest.json b/homeassistant/components/netatmo/manifest.json
index 7d84641874a67ce5143de0d352dd901fafbb843b..3860c70bbea7061c13ef7799982ae22915471e4d 100644
--- a/homeassistant/components/netatmo/manifest.json
+++ b/homeassistant/components/netatmo/manifest.json
@@ -12,5 +12,5 @@
   "integration_type": "hub",
   "iot_class": "cloud_polling",
   "loggers": ["pyatmo"],
-  "requirements": ["pyatmo==7.6.0"]
+  "requirements": ["pyatmo==8.0.0"]
 }
diff --git a/homeassistant/components/netatmo/sensor.py b/homeassistant/components/netatmo/sensor.py
index 10114a75f63de432b5760929ff7d95cad2b3b520..2f99b866cf2d6fd13a7f5e036f80a986443b1f06 100644
--- a/homeassistant/components/netatmo/sensor.py
+++ b/homeassistant/components/netatmo/sensor.py
@@ -447,17 +447,16 @@ class NetatmoWeatherSensor(NetatmoBase, SensorEntity):
                     }
                 )
 
-    @property
-    def available(self) -> bool:
-        """Return entity availability."""
-        return self.state is not None
-
     @callback
     def async_update_callback(self) -> None:
         """Update the entity's state."""
         if (
-            state := getattr(self._module, self.entity_description.netatmo_name)
-        ) is None:
+            not self._module.reachable
+            or (state := getattr(self._module, self.entity_description.netatmo_name))
+            is None
+        ):
+            if self.available:
+                self._attr_available = False
             return
 
         if self.entity_description.netatmo_name in {
@@ -475,6 +474,7 @@ class NetatmoWeatherSensor(NetatmoBase, SensorEntity):
         else:
             self._attr_native_value = state
 
+        self._attr_available = True
         self.async_write_ha_state()
 
 
@@ -519,7 +519,6 @@ class NetatmoClimateBatterySensor(NetatmoBase, SensorEntity):
         if not self._module.reachable:
             if self.available:
                 self._attr_available = False
-                self._attr_native_value = None
             return
 
         self._attr_available = True
@@ -565,9 +564,15 @@ class NetatmoSensor(NetatmoBase, SensorEntity):
     @callback
     def async_update_callback(self) -> None:
         """Update the entity's state."""
+        if not self._module.reachable:
+            if self.available:
+                self._attr_available = False
+            return
+
         if (state := getattr(self._module, self.entity_description.key)) is None:
             return
 
+        self._attr_available = True
         self._attr_native_value = state
 
         self.async_write_ha_state()
@@ -777,7 +782,6 @@ class NetatmoPublicSensor(NetatmoBase, SensorEntity):
                     self.entity_description.key,
                     self._area_name,
                 )
-                self._attr_native_value = None
 
             self._attr_available = False
             return
diff --git a/requirements_all.txt b/requirements_all.txt
index 6aa342698ee3645c1e07afa32e04c11393fe8bcf..ed88077bd08c4509c3a520b0c2c9d5f17b92552f 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -1637,7 +1637,7 @@ pyasuswrt==0.1.21
 pyatag==0.3.5.3
 
 # homeassistant.components.netatmo
-pyatmo==7.6.0
+pyatmo==8.0.0
 
 # homeassistant.components.apple_tv
 pyatv==0.14.3
diff --git a/requirements_test_all.txt b/requirements_test_all.txt
index 51eabc118cc30c3baf758cbb209dd0d04f2c1a1c..fee1c76b9f40649c1d4bc2e83f38a604864b71ec 100644
--- a/requirements_test_all.txt
+++ b/requirements_test_all.txt
@@ -1253,7 +1253,7 @@ pyasuswrt==0.1.21
 pyatag==0.3.5.3
 
 # homeassistant.components.netatmo
-pyatmo==7.6.0
+pyatmo==8.0.0
 
 # homeassistant.components.apple_tv
 pyatv==0.14.3
diff --git a/tests/components/netatmo/fixtures/getstationsdata.json b/tests/components/netatmo/fixtures/getstationsdata.json
index 10c3ca85e06c2c96bbaf56255ae8e4aba5da7c64..b0da08206998892500b1215437acbe72187e2e18 100644
--- a/tests/components/netatmo/fixtures/getstationsdata.json
+++ b/tests/components/netatmo/fixtures/getstationsdata.json
@@ -475,22 +475,12 @@
             "last_setup": 1558709954,
             "data_type": ["Temperature", "Humidity"],
             "battery_percent": 27,
-            "reachable": true,
+            "reachable": false,
             "firmware": 50,
             "last_message": 1644582699,
             "last_seen": 1644582699,
             "rf_status": 68,
-            "battery_vp": 4678,
-            "dashboard_data": {
-              "time_utc": 1644582648,
-              "Temperature": 9.4,
-              "Humidity": 57,
-              "min_temp": 6.7,
-              "max_temp": 9.8,
-              "date_max_temp": 1644534223,
-              "date_min_temp": 1644569369,
-              "temp_trend": "up"
-            }
+            "battery_vp": 4678
           },
           {
             "_id": "12:34:56:80:c1:ea",
diff --git a/tests/components/netatmo/snapshots/test_diagnostics.ambr b/tests/components/netatmo/snapshots/test_diagnostics.ambr
index cd547481de96c9008b0c7c97e587005c0a84f38c..f1c54901445035670f5e25139a805a1ae352e8f3 100644
--- a/tests/components/netatmo/snapshots/test_diagnostics.ambr
+++ b/tests/components/netatmo/snapshots/test_diagnostics.ambr
@@ -561,26 +561,28 @@
             'access_doorbell',
             'access_presence',
             'read_bubendorff',
+            'read_bfi',
             'read_camera',
             'read_carbonmonoxidedetector',
             'read_doorbell',
             'read_homecoach',
             'read_magellan',
+            'read_mhs1',
             'read_mx',
             'read_presence',
             'read_smarther',
             'read_smokedetector',
             'read_station',
             'read_thermostat',
-            'read_mhs1',
             'write_bubendorff',
+            'write_bfi',
             'write_camera',
             'write_magellan',
+            'write_mhs1',
             'write_mx',
             'write_presence',
             'write_smarther',
             'write_thermostat',
-            'write_mhs1',
           ]),
           'type': 'Bearer',
         }),
diff --git a/tests/components/netatmo/test_sensor.py b/tests/components/netatmo/test_sensor.py
index 00cec6f8aa087f595e785b7172ea65d7494052a9..ce35873c3e5ce216b13419eada42bf4d71dbbab6 100644
--- a/tests/components/netatmo/test_sensor.py
+++ b/tests/components/netatmo/test_sensor.py
@@ -10,8 +10,8 @@ from homeassistant.helpers import entity_registry as er
 from .common import TEST_TIME, selected_platforms
 
 
-async def test_weather_sensor(hass: HomeAssistant, config_entry, netatmo_auth) -> None:
-    """Test weather sensor setup."""
+async def test_indoor_sensor(hass: HomeAssistant, config_entry, netatmo_auth) -> None:
+    """Test indoor sensor setup."""
     with patch("time.time", return_value=TEST_TIME), selected_platforms(["sensor"]):
         assert await hass.config_entries.async_setup(config_entry.entry_id)
 
@@ -25,6 +25,18 @@ async def test_weather_sensor(hass: HomeAssistant, config_entry, netatmo_auth) -
     assert hass.states.get(f"{prefix}pressure").state == "1014.5"
 
 
+async def test_weather_sensor(hass: HomeAssistant, config_entry, netatmo_auth) -> None:
+    """Test weather sensor unreachable."""
+    with patch("time.time", return_value=TEST_TIME), selected_platforms(["sensor"]):
+        assert await hass.config_entries.async_setup(config_entry.entry_id)
+
+        await hass.async_block_till_done()
+
+    prefix = "sensor.villa_outdoor_"
+
+    assert hass.states.get(f"{prefix}temperature").state == "unavailable"
+
+
 async def test_public_weather_sensor(
     hass: HomeAssistant, config_entry, netatmo_auth
 ) -> None: