An open API service indexing awesome lists of open source software.

https://github.com/techn0phil/vdl-parkings

VDL (Ville De Luxembourg) parkings data integration for Home Assistant
https://github.com/techn0phil/vdl-parkings

custom-integration home-assistant luxembourg parking

Last synced: about 2 months ago
JSON representation

VDL (Ville De Luxembourg) parkings data integration for Home Assistant

Awesome Lists containing this project

README

          

# VDL Parkings – Home Assistant Custom Integration

Home Assistant custom integration to monitor the availability and status of public parkings in Luxembourg city (VDL - Ville De Luxembourg) using the public data from [vdl.lu](https://www.vdl.lu/fr/se-deplacer/en-voiture/parkings-et-pr) website.

> [!WARNING]
> **Beta version** – This integration is in testing phase 🚧
> - Features and entities may change between releases.
> - Use at your own risk and keep regular backups of your Home Assistant configuration.
> - Please [report issues](https://github.com/techn0phil/vdl-parkings/issues) with logs and details.

## Table of contents

- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [HACS (recommended)](#hacs-recommended)
- [Manual installation](#manual-installation)
- [Configuration](#configuration)
- [Provided entities](#provided-entities)
- [Sensor entities](#sensor-entities)
- [Binary sensor entities](#binary-sensor-entities)
- [Zone entities](#zone-entities)
- [Example usage](#example-usage)
- [Simple Lovelace card](#simple-lovelace-card)
- [Conditional notification when a parking has space](#conditional-notification-when-a-parking-has-space)
- [Map view with zones](#map-view-with-zones)
- [Screenshots](#screenshots)
- [FAQ](#faq)
- [Troubleshooting](#troubleshooting)
- [Development and contributions](#development-and-contributions)

## Features

- Cloud polling of the public VDL parking data (no account or API key required, only Internet access).
- Provides sets of entities per parking:
- `sensor` entities:
- Total capacity
- Available spaces
- Occupied spaces
- Occupancy rate as a percentage
- `binary_sensor` entities:
- Open
- Full
- Out of service
- A `zone` entity to expose its geolocation (usable for proximity, automations, maps).
- Configuration via the Home Assistant UI (`config_flow`), no YAML needed.

## Requirements

- Home Assistant Core **2026.3.0** or newer.
- Working Internet connection to reach the VDL public parking API (cloud polling, `iot_class: cloud_polling`).

## Installation

### HACS (recommended)

[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=techn0phil&repository=vdl-parkings&category=integration)

Or:

1. In Home Assistant, go to **HACS β†’ Custom repositories**.
2. Add this repository URL `https://github.com/techn0phil/vdl-parkings` as type **Integration**.
3. Search for **VDL Parkings** in HACS and install it.
4. Restart Home Assistant.
5. Add the integration from **Settings β†’ Devices & Services β†’ Add integration β†’ VDL Parkings**.

### Manual installation

1. Download or clone this repository.
2. Copy the `custom_components/vdl_parkings` folder into your Home Assistant `config/custom_components` directory.
3. Ensure the final path is:
`config/custom_components/vdl_parkings` (folder name must match the domain).
4. Restart Home Assistant.
5. Add the integration from **Settings β†’ Devices & Services β†’ Add integration β†’ VDL Parkings**.

## Configuration

The integration is configured entirely from the UI via a **config flow**.

1. Go to **Settings β†’ Devices & Services β†’ Add integration**.
2. Search for **VDL Parkings**.
3. Follow the onboarding steps to:
- Select which parkings you want to monitor
- Optionally assign areas to selected parkings

At the moment there is no advanced options exposed in the configuration flow.

## Provided entities

For each selected parking, the integration creates multiple entities. The exact entity IDs may vary slightly depending on your Home Assistant server language.

### Sensor entities

| Entity class | Example entity ID | Description |
|---------------------------|----------------------------------------------|------------------------------------------------------|
| `ParkingTotalCapacity` | `sensor._total_capacity` | Total number of parking spaces. |
| `ParkingAvailableSpaces` | `sensor._available_spaces` | Current number of free spaces. |
| `ParkingOccupiedSpaces` | `sensor._occupied_spaces` | Current number of occupied spaces. |
| `ParkingOccupancyRate` | `sensor._occupancy_rate` | Percentage of occupied spaces. |

### Binary sensor entities

| Entity class | Example entity ID | Description |
|-------------------------|---------------------------------------------|-----------------------------------------------------------------------------|
| `ParkingOpen` | `binary_sensor._open` | On when the parking is open, off when closed. |
| `ParkingFull` | `binary_sensor._full` | On when the parking is considered full. |
| `ParkingOutOfService` | `binary_sensor._out_of_service`| On when the parking is out of service, closed for maintenance, etc. |

### Zone entities

- A `zone` is created for each parking to expose its geolocation in the map and for proximity-based automations.
- The zone name matches the parking name.

## Example usage

### Simple Lovelace card

Example: show availability for a single parking using an Entities card:

```yaml
type: entities
title: Parking Royal Hamilius
entities:
- entity: sensor.royal_hamilius_available_spaces
name: Available spaces
- entity: sensor.royal_hamilius_total_capacity
name: Total capacity
- entity: sensor.royal_hamilius_occupied_spaces
name: Occupied spaces
- entity: binary_sensor.royal_hamilius_full
name: Full
- entity: binary_sensor.royal_hamilius_open
name: Open
```

### Conditional notification when a parking has space

```yaml
alias: Notify when parking has space
triggers:
- trigger: numeric_state
entity_id: sensor.royal_hamilius_available_spaces
above: 10
conditions:
- condition: state
entity_id: binary_sensor.royal_hamilius_open
state: "on"
actions:
- action: notify.mobile_app_my_phone
data:
message: "Royal Hamilius has more than 10 free parking spaces."
mode: single
```

### Map view with zones

Once zones are created for each parking, you can add the standard **Map** card in Lovelace and enable the parking zones to visualize all monitored parkings on a map.

## Screenshots

### Integration page

![VDL Integration screenshot](docs/integration.png)

### Parking entities overview

![Parking entities screenshot](docs/entities.png)

### Map view with parking zones

![Parking zones screenshot](docs/map.png)

## FAQ

**Does this integration require an account or API key?**
No. It uses the public data provided by vdl.lu for parking information, so no credentials are required.

**How often is data updated?**
The integration uses cloud polling at a fixed interval of 60 seconds. The effective refresh rate is limited by both the integration and the VDL API update frequency.

**Can I select which parkings to track?**
Yes, the configuration flow allows choosing which parkings to monitor.

**Can I change the polling interval or configure advanced options?**
Not yet. The first versions only provide a minimal UI configuration without extra options. Future releases may add options such as polling interval.

**Does this integration support YAML configuration?**
No. It is UI-only and uses the recommended `config_flow` for setup.

## Troubleshooting

**Integration does not appear in the β€œAdd integration” list**
- Check that the folder is named `vdl_parkings` under `custom_components` and that Home Assistant has been restarted.
- Clear your browser cache or try another browser.

**No entities are created**
- Verify that the config flow has completed successfully and that at least one parking was selected.
- Check **Settings β†’ System β†’ Logs** for errors related to `vdl_parkings`.
- Ensure that your Home Assistant host has working Internet access to reach the VDL API.

**Data seems outdated or not updating**
- Check for rate limiting or connectivity issues in the logs.
- Confirm that the source VDL website/API shows up-to-date information.

**Too many entities / clutter**
- During setup, only select the parkings that you actually need. You can also disable unnecessary entities from the entity settings in Home Assistant.

## Development and contributions

Contributions, bug reports and feature requests are welcome via the [GitHub issue tracker](https://github.com/techn0phil/vdl-parkings/issues). Please include Home Assistant version, integration version, logs and clear reproduction steps when reporting bugs.