If you are using Parcel App, you can use the API. This is now my integration, happy if you can adjust to look it more fancy
Go to the parcel app website and request an API Code. See below in the configuration, where to add.
In the configuration.yaml following
sensor:
- platform: rest
name: Parcel Deliveries
resource: https://api.parcel.app/external/deliveries/?filter_mode=active
method: GET
headers:
api-key: "YOUR_API_CODE"
scan_interval: 300 # alle 5 Minuten
value_template: "{{ value_json.deliveries | length }}"
json_attributes:
- deliveries
template:
- sensor:
- name: "Lieferung 1 Info"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 0 %}
{% set s = d[0].status_code %}
{% set status = {
0: 'β
Lieferung abgeschlossen',
1: 'π§ Keine Updates mehr erwartet',
2: 'π¦ Unterwegs',
3: 'π¬ Abholung erwartet',
4: 'π Wird zugestellt',
5: 'β Nicht gefunden',
6: 'π Zustellung fehlgeschlagen',
7: 'β οΈ Problem β Eingreifen nΓΆtig!',
8: 'π Label erstellt, noch nicht erhalten'
} %}
{{ status.get(s, 'β Unbekannter Status') }}
{% else %}
β³ Keine Lieferung gefunden
{% endif %}
- name: "Lieferung 2 Info"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 1 %}
{% set s = d[1].status_code %}
{% set status = {
0: 'β
Lieferung abgeschlossen',
1: 'π§ Keine Updates mehr erwartet',
2: 'π¦ Unterwegs',
3: 'π¬ Abholung erwartet',
4: 'π Wird zugestellt',
5: 'β Nicht gefunden',
6: 'π Zustellung fehlgeschlagen',
7: 'β οΈ Problem β Eingreifen nΓΆtig!',
8: 'π Label erstellt, noch nicht erhalten'
} %}
{{ status.get(s, 'β Unbekannter Status') }}
{% else %}
β³ Keine Lieferung gefunden
{% endif %}
- name: "Lieferung 3 Info"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 2 %}
{% set s = d[2].status_code %}
{% set status = {
0: 'β
Lieferung abgeschlossen',
1: 'π§ Keine Updates mehr erwartet',
2: 'π¦ Unterwegs',
3: 'π¬ Abholung erwartet',
4: 'π Wird zugestellt',
5: 'β Nicht gefunden',
6: 'π Zustellung fehlgeschlagen',
7: 'β οΈ Problem β Eingreifen nΓΆtig!',
8: 'π Label erstellt, noch nicht erhalten'
} %}
{{ status.get(s, 'β Unbekannter Status') }}
{% else %}
β³ Keine Lieferung gefunden
{% endif %}
- name: "Lieferung 4 Info"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 3 %}
{% set s = d[3].status_code %}
{% set status = {
0: 'β
Lieferung abgeschlossen',
1: 'π§ Keine Updates mehr erwartet',
2: 'π¦ Unterwegs',
3: 'π¬ Abholung erwartet',
4: 'π Wird zugestellt',
5: 'β Nicht gefunden',
6: 'π Zustellung fehlgeschlagen',
7: 'β οΈ Problem β Eingreifen nΓΆtig!',
8: 'π Label erstellt, noch nicht erhalten'
} %}
{{ status.get(s, 'β Unbekannter Status') }}
{% else %}
β³ Keine Lieferung gefunden
{% endif %}
- name: "Lieferung 5 Info"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 4 %}
{% set s = d[4].status_code %}
{% set status = {
0: 'β
Lieferung abgeschlossen',
1: 'π§ Keine Updates mehr erwartet',
2: 'π¦ Unterwegs',
3: 'π¬ Abholung erwartet',
4: 'π Wird zugestellt',
5: 'β Nicht gefunden',
6: 'π Zustellung fehlgeschlagen',
7: 'β οΈ Problem β Eingreifen nΓΆtig!',
8: 'π Label erstellt, noch nicht erhalten'
} %}
{{ status.get(s, 'β Unbekannter Status') }}
{% else %}
β³ Keine Lieferung gefunden
{% endif %}
- sensor:
- name: "Lieferung 1 Name"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 0 %}
{{ d[0].description }}
{% else %}
Lieferung 1
{% endif %}
- name: "Lieferung 2 Name"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 1 %}
{{ d[1].description }}
{% else %}
Lieferung 2
{% endif %}
- name: "Lieferung 3 Name"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 2 %}
{{ d[2].description }}
{% else %}
Lieferung 3
{% endif %}
- name: "Lieferung 4 Name"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 3 %}
{{ d[3].description }}
{% else %}
Lieferung 4
{% endif %}
- name: "Lieferung 5 Name"
state: >
{% set d = state_attr('sensor.parcel_deliveries', 'deliveries') %}
{% if d and d | length > 4 %}
{{ d[4].description }}
{% else %}
Lieferung 5
{% endif %}
And later on for the dashboard:
type: grid
title: π¦ Meine Lieferungen
columns: 2
square: false
cards:
- type: custom:button-card
name: "[[[ return states['sensor.lieferung_1_name'].state; ]]]"
label: "[[[ return states['sensor.lieferung_1_info'].state; ]]]"
show_icon: false
show_name: true
show_label: true
tap_action:
action: more-info
styles:
card:
- padding: 12px
- font-size: 14px
- text-align: left
- border-radius: 12px
- background-color: "#f4f4f4"
- type: custom:button-card
name: "[[[ return states['sensor.lieferung_2_name'].state; ]]]"
label: "[[[ return states['sensor.lieferung_2_info'].state; ]]]"
show_icon: false
show_name: true
show_label: true
tap_action:
action: more-info
styles:
card:
- padding: 12px
- font-size: 14px
- text-align: left
- border-radius: 12px
- background-color: "#f4f4f4"
- type: custom:button-card
name: "[[[ return states['sensor.lieferung_3_name'].state; ]]]"
label: "[[[ return states['sensor.lieferung_3_info'].state; ]]]"
show_icon: false
show_name: true
show_label: true
tap_action:
action: more-info
styles:
card:
- padding: 12px
- font-size: 14px
- text-align: left
- border-radius: 12px
- background-color: "#f4f4f4"
- type: custom:button-card
name: "[[[ return states['sensor.lieferung_4_name'].state; ]]]"
label: "[[[ return states['sensor.lieferung_4_info'].state; ]]]"
show_icon: false
show_name: true
show_label: true
tap_action:
action: more-info
styles:
card:
- padding: 12px
- font-size: 14px
- text-align: left
- border-radius: 12px
- background-color: "#f4f4f4"
- type: custom:button-card
name: "[[[ return states['sensor.lieferung_5_name'].state; ]]]"
label: "[[[ return states['sensor.lieferung_5_info'].state; ]]]"
show_icon: false
show_name: true
show_label: true
tap_action:
action: more-info
styles:
card:
- padding: 12px
- font-size: 14px
- text-align: left
- border-radius: 12px
- background-color: "#f4f4f4"
The result:
For the status, you have to adjust following to have it in English:
0 - completed delivery.
1 - frozen delivery. There were no updates for a long time or something else makes the app believe that it will never be updated in the future.
2 - delivery in transit.
3 - delivery expecting a pickup by the recipient.
4 - out for delivery.
5 - delivery not found.
6 - failed delivery attempt.
7 - delivery exception, something is wrong and requires your attention.
8 - carrier has received information about a package, but has not physically received it yet.