Skip to content

Latest commit

ย 

History

52 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Planzer Parcel Tracker

Release Downloads HACS License

๐Ÿ“ฆ 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.

Contents

Features

  • 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_parcel services, 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

Requirements

  • 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

Installation

HACS (recommended)

  1. Open HACS and search for Planzer.
  2. Install it and restart Home Assistant.

Manual

Copy custom_components/planzer into your config/custom_components/ folder and restart Home Assistant.

Configuration

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.

Which number do I enter?

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.

Options

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.

Dynamic polling

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_parcel service, 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.

Removal

Standard HA removal applies: Settings โ†’ Devices & Services โ†’ Planzer โ†’ โ‹ฎ โ†’ Delete. Nothing is stored on Planzer's side.

Sensors

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.

Parcel status reference

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.

Events

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.

Services

Service Fields Description
planzer.track_parcel tracking_code Start tracking a parcel
planzer.untrack_parcel tracking_code Stop tracking a parcel

Examples

Ready-to-paste automations and dashboard snippets live in examples/, including tracking a new parcel straight from a dashboard.

Community Lovelace cards

Third-party cards that work with this integration's sensors:

Debugging

logger:
  logs:
    custom_components.planzer: debug

Troubleshooting

  • A parcel shows unknown โ€” Planzer does not know the number yet (their API answers 404 until 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 barcode attribute. 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 unknown but 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.

Related integrations

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.

Disclaimer

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.

Contributing

Pull requests and issues are welcome. Please open an issue before submitting a large change.

License

MIT

Releases

Sponsor this project

Packages

Used by

Contributors

Languages