diff --git a/homeassistant/components/android_ip_webcam/binary_sensor.py b/homeassistant/components/android_ip_webcam/binary_sensor.py
index 377ecfec667..82d18d0ca3d 100644
--- a/homeassistant/components/android_ip_webcam/binary_sensor.py
+++ b/homeassistant/components/android_ip_webcam/binary_sensor.py
@@ -1,6 +1,6 @@
 """Support for Android IP Webcam binary sensors."""
 from homeassistant.components.binary_sensor import (
-    DEVICE_CLASS_MOTION,
+    BinarySensorDeviceClass,
     BinarySensorEntity,
 )
 
@@ -22,32 +22,18 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
 class IPWebcamBinarySensor(AndroidIPCamEntity, BinarySensorEntity):
     """Representation of an IP Webcam binary sensor."""
 
+    _attr_device_class = BinarySensorDeviceClass.MOTION
+
     def __init__(self, name, host, ipcam, sensor):
         """Initialize the binary sensor."""
         super().__init__(host, ipcam)
 
         self._sensor = sensor
         self._mapped_name = KEY_MAP.get(self._sensor, self._sensor)
-        self._name = f"{name} {self._mapped_name}"
-        self._state = None
-        self._unit = None
-
-    @property
-    def name(self):
-        """Return the name of the binary sensor, if any."""
-        return self._name
-
-    @property
-    def is_on(self):
-        """Return true if the binary sensor is on."""
-        return self._state
+        self._attr_name = f"{name} {self._mapped_name}"
+        self._attr_is_on = None
 
     async def async_update(self):
         """Retrieve latest state."""
         state, _ = self._ipcam.export_sensor(self._sensor)
-        self._state = state == 1.0
-
-    @property
-    def device_class(self):
-        """Return the class of this device, from component DEVICE_CLASSES."""
-        return DEVICE_CLASS_MOTION
+        self._attr_is_on = state == 1.0
diff --git a/homeassistant/components/android_ip_webcam/sensor.py b/homeassistant/components/android_ip_webcam/sensor.py
index 4bef3848617..5690dab0937 100644
--- a/homeassistant/components/android_ip_webcam/sensor.py
+++ b/homeassistant/components/android_ip_webcam/sensor.py
@@ -40,38 +40,26 @@ class IPWebcamSensor(AndroidIPCamEntity, SensorEntity):
 
         self._sensor = sensor
         self._mapped_name = KEY_MAP.get(self._sensor, self._sensor)
-        self._name = f"{name} {self._mapped_name}"
-        self._state = None
-        self._unit = None
-
-    @property
-    def name(self):
-        """Return the name of the sensor, if any."""
-        return self._name
-
-    @property
-    def native_unit_of_measurement(self):
-        """Return the unit the value is expressed in."""
-        return self._unit
-
-    @property
-    def native_value(self):
-        """Return the state of the sensor."""
-        return self._state
+        self._attr_name = f"{name} {self._mapped_name}"
+        self._attr_native_value = None
+        self._attr_native_unit_of_measurement = None
 
     async def async_update(self):
         """Retrieve latest state."""
         if self._sensor in ("audio_connections", "video_connections"):
             if not self._ipcam.status_data:
                 return
-            self._state = self._ipcam.status_data.get(self._sensor)
-            self._unit = "Connections"
+            self._attr_native_value = self._ipcam.status_data.get(self._sensor)
+            self._attr_native_unit_of_measurement = "Connections"
         else:
-            self._state, self._unit = self._ipcam.export_sensor(self._sensor)
+            (
+                self._attr_native_value,
+                self._attr_native_unit_of_measurement,
+            ) = self._ipcam.export_sensor(self._sensor)
 
     @property
     def icon(self):
         """Return the icon for the sensor."""
-        if self._sensor == "battery_level" and self._state is not None:
-            return icon_for_battery_level(int(self._state))
+        if self._sensor == "battery_level" and self._attr_native_value is not None:
+            return icon_for_battery_level(int(self._attr_native_value))
         return ICON_MAP.get(self._sensor, "mdi:eye")
diff --git a/homeassistant/components/android_ip_webcam/switch.py b/homeassistant/components/android_ip_webcam/switch.py
index bdbb37e7661..3adb958c4ff 100644
--- a/homeassistant/components/android_ip_webcam/switch.py
+++ b/homeassistant/components/android_ip_webcam/switch.py
@@ -39,22 +39,12 @@ class IPWebcamSettingsSwitch(AndroidIPCamEntity, SwitchEntity):
 
         self._setting = setting
         self._mapped_name = KEY_MAP.get(self._setting, self._setting)
-        self._name = f"{name} {self._mapped_name}"
-        self._state = False
-
-    @property
-    def name(self):
-        """Return the name of the node."""
-        return self._name
+        self._attr_name = f"{name} {self._mapped_name}"
+        self._attr_is_on = False
 
     async def async_update(self):
         """Get the updated status of the switch."""
-        self._state = bool(self._ipcam.current_settings.get(self._setting))
-
-    @property
-    def is_on(self):
-        """Return the boolean response if the node is on."""
-        return self._state
+        self._attr_is_on = bool(self._ipcam.current_settings.get(self._setting))
 
     async def async_turn_on(self, **kwargs):
         """Turn device on."""
@@ -66,7 +56,7 @@ class IPWebcamSettingsSwitch(AndroidIPCamEntity, SwitchEntity):
             await self._ipcam.record(record=True)
         else:
             await self._ipcam.change_setting(self._setting, True)
-        self._state = True
+        self._attr_is_on = True
         self.async_write_ha_state()
 
     async def async_turn_off(self, **kwargs):
@@ -79,7 +69,7 @@ class IPWebcamSettingsSwitch(AndroidIPCamEntity, SwitchEntity):
             await self._ipcam.record(record=False)
         else:
             await self._ipcam.change_setting(self._setting, False)
-        self._state = False
+        self._attr_is_on = False
         self.async_write_ha_state()
 
     @property