Skip to content

2.0.0

Choose a tag to compare

@peternijssen peternijssen released this 24 Jun 21:53

What's new

  • Carrier-agnostic parcel status (ParcelStatus) — every parcel now carries a canonical status value (registered, in_transit, out_for_delivery, at_pickup_point, delivered, returning, problem, unknown). The original DPD description is preserved on the parcel's raw_status attribute.
  • Parcel events on the HA event bus — the coordinator fires dpd_parcel_registered when a new barcode appears and dpd_parcel_status_changed when 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 on delivered_at. Parcels without a parseable timestamp always sort to the end.
  • Translated UI labels — entity names, unit-of-measurement (parcelspakketten in Dutch HA) and icons are sourced from strings.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 like DPD (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 ConfigEntryNotReady so HA retries with backoff, instead of crashing with orjson.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: shipmentsparcels

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.