Skip to content

Releases: ha-parcel-integrations/ha-dpd

2.7.0

Choose a tag to compare

@peternijssen peternijssen released this 18 Jul 14:44

New features

  • A dedicated "parcel delivered" eventdpd_parcel_delivered fires the moment an incoming parcel is delivered, with a matching device trigger. The final hop now fires this instead of a generic status change.

📦 See every supported carrier — new ones land regularly.

2.6.1

Choose a tag to compare

@peternijssen peternijssen released this 16 Jul 16:26

Bug fixes

  • New tracking event recognised — the SPE ("Status parcel - Information") event now maps to in transit instead of logging an unrecognised-status warning (#4).

2.6.0

Choose a tag to compare

@peternijssen peternijssen released this 13 Jul 17:12

New features

  • Automations for parcels you send back — two new events, dpd_outgoing_parcel_status_changed and dpd_outgoing_parcel_delivered, now fire for your outgoing/return parcels, and both are available as no-code device triggers.

Bug fixes

  • All entities load reliably again — the first data fetch now runs during setup, so a transient error no longer leaves you with only part of the entities.
  • Richer diagnostics — the diagnostics download now also includes the outgoing-delivered parcel list.

2.5.0

Choose a tag to compare

@peternijssen peternijssen released this 09 Jul 19:43

New features

  • Delivered outgoing parcels sensor — a new Outgoing delivered parcels sensor shows outgoing shipments (including returns you send back to a shop) that have recently been delivered, alongside the existing active Outgoing parcels sensor. It honours the same delivered-parcels window (last N days / N most recent) as the incoming delivered sensor, matching the naming used by the other carriers.

2.4.0

Choose a tag to compare

@peternijssen peternijssen released this 04 Jul 16:15

New features

  • Device triggers and a refresh button — build no-code automations that fire when a parcel is registered, changes status, or gets a new expected delivery time, and add a button to poll DPD on demand.
  • Deliveries calendar — a per-account calendar entity showing your incoming parcels on their expected delivery day, ready to overlay on your own calendar.
  • Diagnostic "Last successful update" sensor — alert on a silently stale integration.

Improvements

  • A DPD outage no longer pushes you into re-authentication, and re-authentication is guarded against binding the entry to a different account.
  • A failed detail fetch is retried once the parcel's status moves.
  • Refresh-interval options are translated, and shared wording is aligned with the other carriers.

2.3.0

Choose a tag to compare

@peternijssen peternijssen released this 30 Jun 13:38

What's new

  • Parcel history (optional) — enable Parcel history in the integration options to add a history attribute to every parcel: the full status timeline (timestamp, status, and the original DPD text), capped to the most recent 20 events. Off by default, and kept out of the long-term recorder database.
  • New "Awaiting pickup" sensor — parcels that have arrived at a DPD ParcelShop and are ready to collect are now counted separately from those still on their way to the shop. Returns and failed delivery attempts are now recognised as statuses too.

2.2.0

Choose a tag to compare

@peternijssen peternijssen released this 27 Jun 14:43

What's new

  • Delivery-time updates as an event — the coordinator now fires dpd_parcel_delivery_time_changed when DPD revises a known parcel's expected delivery window (planned_from or planned_to) to a value that differs from the previous one. Particularly useful on the day of delivery when DPD narrows the all-day window to a precise hour via Follow My Parcel. Wire it up with the new examples/automations/notify_when_delivery_time_changes.yaml to get a push notification the moment the ETA shifts.

2.1.0

Choose a tag to compare

@peternijssen peternijssen released this 25 Jun 17:33

What's new

  • Configurable refresh interval — the options flow now lets you pick how often the integration checks DPD: 15 / 30 / 60 / 120 / 240 minutes (default 30). A slower cadence is gentler on DPD's API. Changes take effect immediately, no Home Assistant restart needed.
  • Recipient name on every parcel — every parcel now carries a receiver field with the name the parcel is addressed to. Useful in multi-person households for routing notifications to the right person, e.g. "Bob's parcel is out for delivery". Also exposed as an attribute on the Next delivery sensor. Fetched lazily from DPD's per-parcel detail endpoint, so it may be null on the very first refresh after a new barcode appears.
  • Weight and dimensions on every parcel — every parcel now exposes weight (kg) and dimensions ({length, width, height, text} in cm, with text a pre-formatted "L x W x H cm" string). Both are fetched from the same per-parcel detail endpoint as the recipient name and are also injected onto the original DPD payload under raw so power users can still read the native values.

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.

2.0.0b2

2.0.0b2 Pre-release
Pre-release

Choose a tag to compare

@peternijssen peternijssen released this 22 Jun 20:23

Bug fixes

  • DPD's narrow delivery window (top-level deliveryTimeFrom / deliveryTimeTo) is now respected. Active out-for-delivery parcels show the real hour range (e.g. 21:03–22:03) instead of the whole-day 00:00–23:59 fallback.
  • The raw DPD payload exposed under each parcel's raw attribute is no longer mutated — derived fields (plannedDeliveryFrom / plannedDeliveryTo) have been removed. Use the carrier-agnostic planned_from / planned_to instead.