๐ฆ Part of ha-parcel-integrations, a family of package-tracking integrations for Home Assistant that all publish the same parcel format, statuses and events, so they plug into cross-carrier automations and the optional Parcel Aggregator. Browse the other carriers on the website.
๐ฌ Questions or feedback? Join the discussion on the Home Assistant community.
A custom Home Assistant integration that tracks your Planzer parcels in Switzerland and Liechtenstein ๐จ๐ญ๐ฑ๐ฎ. No account is needed โ you enter the shipment number yourself, just like on the Planzer tracking site.
Planzer is a Swiss logistics operator and, for most households, the carrier behind IKEA Switzerland home deliveries โ so if your IKEA order is on its way, this is the integration that follows it.
Planzer Paket delivers across the whole of Switzerland and the Principality of Liechtenstein. Cross-border shipments are not part of that service โ they run through Planzer Transport AG on a different, account-only system, which this integration cannot read.
- Features
- Requirements
- Installation
- Configuration
- Options
- Dynamic polling
- Removal
- Sensors
- Parcel status reference
- Events
- Services
- Examples
- Debugging
- Troubleshooting
- Related integrations
- Disclaimer
- Contributing
- License
- Track any number of Planzer parcels by shipment number โ no account needed
- Paste an IKEA order number (
98765.0012345678) and the shipment number is derived for you - Per-parcel sensor with the canonical status (
registered/in_transit/out_for_delivery/delivered/ โฆ), the carrier's own status text, the expected delivery day, weight and dimensions, and a tracking deep-link - Summary sensors: incoming parcels, next delivery, recently delivered parcels
- Read-only Deliveries calendar with the expected delivery windows
planzer.track_parcel/planzer.untrack_parcelservices, so a dashboard button can add a parcel- Events + device triggers for no-code automations (parcel registered, status changed, delivered, delivery time changed)
- Opt-in per-parcel status history
- Manual refresh button and a diagnostic last-update sensor
- A parcel delivered by Planzer Paket in Switzerland or Liechtenstein
- Its shipment number, or the IKEA Switzerland order number it came from โ no account needed
- Open HACS and search for Planzer.
- Install it and restart Home Assistant.
Copy custom_components/planzer into your config/custom_components/ folder and restart Home Assistant.
Add the integration via Settings โ Devices & Services โ Add Integration โ Planzer. There is nothing to fill in: the hub is created immediately (Planzer tracking needs no account).
Then add parcels via the integration's Configure dialog, the planzer.track_parcel service, or a dashboard button.
| You have | Enter | Notes |
|---|---|---|
A Planzer shipment number, e.g. 12345678 |
as-is | A bare number, usually 8 digits. |
An IKEA CH order number, e.g. 98765.0012345678 |
either form | The part after the dot, without its leading zeros, is the shipment number โ the integration derives it for you. |
Spaces and dashes are stripped, so pasting straight from an email works.
Open Configure on the integration entry:
| Section | Option | Default | Description |
|---|---|---|---|
| Parcels | Add / remove | โ | Manage the tracked tracking codes. Changes apply immediately, no restart. |
| Delivered parcels | Filter by / amount | last 7 days | How long delivered parcels stay visible on the delivered sensor. |
| Parcel history | Include status history | off | Adds a history attribute per parcel with each status update. |
Instead of polling Planzer at the same rate around the clock, the integration adjusts its own cadence to what your tracked parcels are actually doing:
- Quiet hours โ no polling between 00:00โ06:00 local time, aside from one catch-up check at each end of that window (around midnight and around 6 AM).
- Hot (every 15 minutes) โ as soon as a tracked parcel is
out_for_delivery, starting an hour before its expected delivery time (or immediately if no time is known). - Mid (every 45 minutes) โ any other in-progress parcel.
- Fully stopped โ nothing is tracked, or every tracked parcel has been
delivered. Adding a parcel back (via the options dialog, the
planzer.track_parcelservice, or a dashboard button) resumes polling immediately. - A small, fixed per-hub offset is added on top, so not every Planzer hub out there polls at exactly the same second.
This is not user-configurable โ it is the only polling behaviour this integration has.
Standard HA removal applies: Settings โ Devices & Services โ Planzer โ โฎ โ Delete. Nothing is stored on Planzer's side.
| Entity | Description |
|---|---|
sensor.planzer_incoming_parcels |
Number of active tracked parcels, full list under the parcels attribute |
sensor.planzer_parcel_<code> |
One per tracked parcel; state is the canonical status, attributes carry the full normalised parcel |
sensor.planzer_next_delivery |
Earliest expected delivery moment across all active parcels |
sensor.planzer_delivered_parcels |
Recently delivered parcels (see the retention option) |
sensor.planzer_last_successful_update |
Diagnostic: when Planzer was last polled successfully |
A delivered parcel moves from its per-parcel sensor to the delivered sensor automatically.
The status field is the carrier-agnostic enum shared by the whole integration family:
| Status | Meaning |
|---|---|
registered |
Recorded by Planzer (Erfasst) |
in_transit |
Handed over to the network (รbergeben) |
out_for_delivery |
With the courier (In Zustellung) |
delivered |
Delivered (Zugestellt) |
problem |
Planzer flagged the shipment, or a delivery attempt failed |
unknown |
Not yet registered, or a status we have not mapped yet |
Planzer runs no parcel-shop network, so at_pickup_point never occurs; returning has not been observed either.
The carrier's own human-readable text is always available as raw_status.
The integration fires these on the event bus (also available as device triggers on the Planzer device):
| Event | When |
|---|---|
planzer_parcel_registered |
A new parcel appears in the active list |
planzer_parcel_status_changed |
A parcel's canonical status changes (old_status / new_status in the payload), except the final hop to delivered |
planzer_parcel_delivered |
A parcel is delivered |
planzer_parcel_delivery_time_changed |
The expected delivery window changes |
Every payload is the full normalised parcel plus the hub's device_id. Events are suppressed on the first refresh after start-up.
| Service | Fields | Description |
|---|---|---|
planzer.track_parcel |
tracking_code |
Start tracking a parcel |
planzer.untrack_parcel |
tracking_code |
Stop tracking a parcel |
Ready-to-paste automations and dashboard snippets live in examples/, including tracking a new parcel straight from a dashboard.
Third-party cards that work with this integration's sensors:
logger:
logs:
custom_components.planzer: debug- A parcel shows
unknownโ Planzer does not know the number yet (their API answers404until the shipment is registered), or the number is wrong. It picks up automatically once registered. - You entered an IKEA order number and nothing happens โ check the sensor's
barcodeattribute. It should show only the part after the dot, without leading zeros (98765.0012345678โ12345678). The full order number is not a valid shipment number. - The status is
unknownbut the tracking site shows progress โ this integration is still pre-1.0 and Planzer's full status vocabulary has not been observed. The log will carry an Unrecognised Planzer status warning; please report it. - A status logs "Unrecognised Planzer status" โ please open an issue with the logged line so the mapping can be extended.
This integration is part of ha-parcel-integrations โ a family of parcel-carrier integrations that all publish the same canonical parcel format, statuses and events.
- Parcel Aggregator rolls every installed carrier up into one set of sensors.
- Browse the organisation for the current list of supported carriers.
This is an independent, community-built project. It is not affiliated with, endorsed by, sponsored by, or supported by Planzer, Home Assistant, or any other third party referenced in this project. Please don't contact Planzer for support with this integration.
All third-party trademarks, trade names, product names, logos, and other brand assets are the property of their respective owners. References to them are solely to identify the relevant carrier or service and do not imply affiliation, sponsorship, or endorsement. Nothing in this project grants or implies any licence or right to use third-party brand assets.
This integration may rely on public, unofficial, or undocumented carrier interfaces, accessed with your own account or API key where required. These may change or be withdrawn without notice and may be subject to Planzer's terms. Data is sent only to Planzer's own services or those of its group; this project operates no servers of its own. You are responsible for ensuring that your use complies with applicable law and those terms. Use is at your own risk; see the licence for warranty limitations.
This integration uses the same public tracking endpoint as the Planzer consumer tracking site.
Pull requests and issues are welcome. Please open an issue before submitting a large change.