2.0.0
What's new
- Carrier-agnostic parcel status (
ParcelStatus) — every parcel now carries a canonicalstatusvalue (registered,in_transit,out_for_delivery,at_pickup_point,delivered,returning,problem,unknown). The original DPD description is preserved on the parcel'sraw_statusattribute. - Parcel events on the HA event bus — the coordinator fires
dpd_parcel_registeredwhen a new barcode appears anddpd_parcel_status_changedwhen a known barcode's normalised status changes. Both events carry the full normalised parcel payload. Events are suppressed on the very first refresh after start-up. - Parcels sorted by delivery date — every bucket is now ordered: active incoming and outgoing ascending on
planned_from, delivered descending ondelivered_at. Parcels without a parseable timestamp always sort to the end. - Translated UI labels — entity names, unit-of-measurement (
parcels→pakkettenin Dutch HA) and icons are sourced fromstrings.json+translations/{en,nl}.json+icons.json. Your HA language drives the labels automatically. - Cleaner device & friendly names — each DPD account becomes a device named
DPD (<your-email>)with entities likeDPD (account@example.com) Incoming parcels. Disambiguates multi-account setups out of the box. examples/folder — ready-to-paste automations (new parcel, out for delivery, ParcelShop pickup, delivery-window TTS) and dashboards (active-parcels grid, summary glance, next-delivery countdown).- Reliable per-parcel sensor cleanup — delivered parcels are now removed deterministically from the entity registry by the summary sensor instead of via a self-remove that occasionally raced and left a permanent "unavailable" ghost.
- Resilient auth flow — when DPD's auth service is temporarily down (5xx + HTML maintenance page), the integration now surfaces a clean
ConfigEntryNotReadyso HA retries with backoff, instead of crashing withorjson.JSONDecodeError.
⚠️ Breaking changes & how to fix them
1. Friendly names changed
| Was (≤ 1.3.x) | Is now (2.0.0) |
|---|---|
DPD Incoming Parcels |
DPD (account@example.com) Incoming parcels |
DPD Parcel <barcode> |
DPD (account@example.com) Parcel <barcode> |
DPD Next Delivery |
DPD (account@example.com) Next delivery |
DPD Outgoing Parcels |
DPD (account@example.com) Outgoing parcels |
DPD Delivered Parcels |
DPD (account@example.com) Delivered parcels |
Entity IDs are preserved for existing installs. Templates that reference sensor.dpd_incoming_parcels etc. keep working as-is.
What to fix: Lovelace cards and Markdown templates that hard-code the friendly name need the new pattern, or switch to the entity ID with the friendly_name attribute.
2. Per-parcel sensor state is the normalised enum, not the raw DPD description
| Was | Is now |
|---|---|
state == "PARCEL_OUT_FOR_DELIVERY" |
state == "out_for_delivery" |
state == "IN_TRANSIT" |
state == "in_transit" |
state == "DELIVERED" |
state == "delivered" |
What to fix: Automations triggering on the per-parcel sensor state need the new canonical ParcelStatus value. See the parcel-status reference in the README for the full mapping. The original raw value is still available on raw_status.
3. Outgoing summary attribute renamed: shipments → parcels
The outgoing summary sensor's list now lives on the parcels attribute, matching every other DPD summary sensor.
What to fix: Replace state_attr('sensor.dpd_..._outgoing_parcels', 'shipments') with state_attr(..., 'parcels').
4. Custom unit-of-measurement is now translated
The hard-coded parcels unit is replaced by a translated one (parcels in English HA, pakketten in Dutch HA).
What to fix: Templates comparing unit_of_measurement == 'parcels' should also accept the Dutch variant, or compare entity IDs instead. Long-term statistics may emit a one-time "unit cannot be converted" warning after upgrading on Dutch HA — fix via Developer Tools → Statistics → Update statistic unit or ignore until rows roll out.