diff --git a/.coveragerc b/.coveragerc
index dfc13304b199bc37b9197e14e146ef0edfc81815..5b5096ee582c2c4fe14b7a366b292168c1f58845 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1368,6 +1368,7 @@ omit =
     homeassistant/components/velbus/entity.py
     homeassistant/components/velbus/light.py
     homeassistant/components/velbus/sensor.py
+    homeassistant/components/velbus/select.py
     homeassistant/components/velbus/switch.py
     homeassistant/components/velux/__init__.py
     homeassistant/components/velux/cover.py
diff --git a/homeassistant/components/velbus/__init__.py b/homeassistant/components/velbus/__init__.py
index a51cef0a56c0aaceb5d597688cd1a326c93b2cd9..554b16877c723fe73549f8ede16ab5aa1a11fe54 100644
--- a/homeassistant/components/velbus/__init__.py
+++ b/homeassistant/components/velbus/__init__.py
@@ -34,6 +34,7 @@ PLATFORMS = [
     Platform.CLIMATE,
     Platform.COVER,
     Platform.LIGHT,
+    Platform.SELECT,
     Platform.SENSOR,
     Platform.SWITCH,
 ]
diff --git a/homeassistant/components/velbus/select.py b/homeassistant/components/velbus/select.py
new file mode 100644
index 0000000000000000000000000000000000000000..af79b5d12769aa4f1b388ad49201918a307fee84
--- /dev/null
+++ b/homeassistant/components/velbus/select.py
@@ -0,0 +1,47 @@
+"""Support for Velbus select."""
+from velbusaio.channels import SelectedProgram
+
+from homeassistant.components.select import SelectEntity
+from homeassistant.config_entries import ConfigEntry
+from homeassistant.const import EntityCategory
+from homeassistant.core import HomeAssistant
+from homeassistant.helpers.entity_platform import AddEntitiesCallback
+
+from .const import DOMAIN
+from .entity import VelbusEntity
+
+
+async def async_setup_entry(
+    hass: HomeAssistant,
+    entry: ConfigEntry,
+    async_add_entities: AddEntitiesCallback,
+) -> None:
+    """Set up Velbus select based on config_entry."""
+    await hass.data[DOMAIN][entry.entry_id]["tsk"]
+    cntrl = hass.data[DOMAIN][entry.entry_id]["cntrl"]
+    async_add_entities(VelbusSelect(channel) for channel in cntrl.get_all("select"))
+
+
+class VelbusSelect(VelbusEntity, SelectEntity):
+    """Representation of a select option for velbus."""
+
+    _channel: SelectedProgram
+    _attr_entity_category = EntityCategory.CONFIG
+
+    def __init__(
+        self,
+        channel: SelectedProgram,
+    ) -> None:
+        """Initialize a select Velbus entity."""
+        super().__init__(channel)
+        self._attr_options = self._channel.get_options()
+        self._attr_unique_id = f"{self._attr_unique_id}-program_select"
+
+    async def async_select_option(self, option: str) -> None:
+        """Update the program on the module."""
+        await self._channel.set_selected_program(option)
+
+    @property
+    def current_option(self) -> str:
+        """Return the selected option."""
+        return self._channel.get_selected_program()