DHL Packstation PIN auslesen und in Home Assistant anzeigen in 3 Schritten

Ich hatte bereits in einem anderen Post geschrieben, dass man sich in Home Assistant so ziemlich alles an Daten anzeigen lassen kann, wonach einem ist. So kann man zum Beispiel auch die DHL Packstation PIN auslesen und sich diese dann im Dashboard vom Home Assistant anzeigen lassen.

In diesem kurzen Beitrag will ich erklรคren, wie ich dies bei mir umgesetzt habe – aber bevor hier eine zu groรŸe Erwartungshaltung oder spรคter nicht erfรผllte Hoffnungen aufkommen: Alles was nun folgt ist definitiv keine Raketenwissenschaft und zรคhlt eher zu der Kategorie Quick & Dirty. Ein Meisterwerk ist es definitiv nicht – aber es funktioniert und erleichtert mir und meiner Frau immer wieder den Alltag – auch, wenn es eigentlich nur eine Kleinigkeit ist (nรคmlich die 4 Ziffern der aktuellen DHL Packstation PIN).

Mein Setup: DHL Packstation PIN auslesen

Um die DHL Packstation auszulesen, kommt bei mir folgendes Setup zum Einsatz:

  1. Ich habe fรผr die DHL Packstation eine separate E-Mail Adresse. Mit dieser E-Mail Adresse melde ich mich bei DHL online an. An diese E-Mail Adresse erhalte ich von DHL alle Packstation relevanten Benachrichtigungen geschickt. Darรผber hinaus nutze ich diese E-Mail Adresse fรผr nichts anderes – also wirklich nichts anderes! Keine Newsletter, keine Shops oder รคhnliches. Nur DHL!
  2. Ich habe einen eigenen Webspace, auf dem ich zum Beispiel eigene PHP-Skripte (Wikipedia: PHP) laufen lassen kann. Mit PHP kann man relativ einfach erhaltene E-Mails auslesen und anhand bestimmter Suchbegriffe Text extrahieren. Da die E-Mails fรผr die DHL Packstation PIN immer gleich aufgebaut ist, kann ich aus einer solchen E-Mail die entsprechende PIN auslesen. Diese PIN speichere ich dann in einer Datenbank, inklusive des Absendedatums der E-Mail, so dass ich immer die aktuellste PIN einfach ermitteln kann. Mit einem weiteren PHP-Skript lese ich diese Datenbank dann wiederum aus und gebe die aktuelle DHL Packstation PIN aus.
  3. In Home Assistant binde ich das zuletzt genannte PHP-Skript dann als externen Inhalt mittels eines Iframes ein, so dass ich in meinem Home Assistant Dashboard immer die aktuellste DHL Packstation PIN angezeigt bekomme!

Das Ganze kann dann in etwa so aussehen, wie im Screenshot Orange umrahmt:

Home Assistant DHL Packstation PIN

Wie du die PIN anzeigst, ist natรผrlich Geschmacksache. Man kรถnnte diese natรผrlich auch viel grรถรŸer ausschreiben und die Information รผber das Absendedatum der E-Mail deutlich kleiner machen. Hiermit habe ich mich aber, zugegeben, als alles einmal funktionierte, nicht mehr beschรคftigt.

Ich stelle hier einfachstes HTML dar – natรผrlich kรถnnte man den Wert der PIN auch an Home Assistant รผbergeben, so dass dieser als Sensor zur Verfรผgung steht. Auch hiermit habe ich mich (noch nicht) befasst. Aber man muss ja noch Ziele haben… ๐Ÿ˜‰

PHP-Code um DHL Packststation PIN auslesen zu kรถnnen

Da ich wirklich nicht sonderlich stolz auf meinen PHP-Code bin (wie gesagt, es ist eher quick&dirty), gebe ich diesen auch nicht komplett an. Im Wesentlichen mรถchte ich mit meinem Code-Schnipsel zeigen, wie man mit PHP die DHL Packstation PIN auslesen kann.

//beginย byย openingย connection
$server = „{your.email.host:143}“;
$username = „your_username“;
$password = „your_secure_password“;
$mboxย =ย imap_open(„$server“,ย „$username“,ย „$password“)ย orย die(imap_last_error());
//getย numberย ofย emails
$numย =ย imap_num_msg($mbox);
if($numย >ย 0)ย {
ย ย ย ย ย ย ย ย //getย from,ย dateย andย subjectย ofย lastย email
ย ย ย ย ย ย ย ย $headerย =ย imap_headerinfo($mbox,ย $num);
ย ย ย ย ย ย ย ย $fromย =ย $header->from;
ย ย ย ย ย ย ย ย foreach($fromย asย $id=>$object)ย {
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย $fromaddressย =ย $object->mailboxย .ย „@“ย .ย $object->host;
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย $subjectย =ย $header->subject;
ย ย ย ย ย ย ย ย $dateย =ย $header->date;
ย ย ย ย ย ย ย ย //readย theย e-mailย bodyย andย subject
ย ย ย ย ย ย ย ย $bodyย =ย imap_body($mbox,ย $num);
ย ย ย ย ย ย ย ย //needle
ย ย ย ย ย ย ย ย $pos_pin=strpos($body,ย “ย lautetย „);
ย ย ย ย ย ย ย ย //positionย ofย PIN
ย ย ย ย ย ย ย ย $body_pin=strip_tags(substr($body,ย $pos_pin+8,ย 11));
ย ย ย ย ย ย ย ย //dateย ofย mail
ย ย ย ย ย ย ย ย $date=date_create($date);
ย ย ย ย ย ย ย ย $date=ย date_format($date,“Y-m-dย H:i:s“);
ย ย ย ย ย ย ย ย //saveย toย DB
ย ย ย ย ย ย ย ย if($body_pinย >ย 0)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย //basicย functionย forย DB
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย insert_pin($body_pin,ย $date);
ย ย ย ย ย ย ย ย }ย elseifย (strpos($subject,ย „neueย Packstationย Sendungย liegtย inย derย Packstation“)>1)ย {
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย //noย PIN-Mail
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย echoย „andereย Mail!“;
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย //deleteย email
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย imap_delete($mbox,ย $num);
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย imap_expunge($mbox);
ย ย ย ย ย ย ย ย }
}ย elseย {
ย ย ย ย ย ย ย ย //noย emails,ย refreshย againย inย 20ย secondsย toย checkย forย new
ย ย ย ย ย ย ย ย header(‚refresh:ย 20‘);
}
//closeย connection
imap_close($mbox);

Wie du siehst, ist es nicht wirklich viel Magie. Aber รผber den gezeigten Code lese ich per Cronjob automatisch die DHL Packstation PIN aus. Diese speichere ich dann mit der nicht dargestellten Funktion insert_pin($body_pin, $date) in meiner Datenbank. Und mit einem weiteren Mini-Skript lasse ich mir wiederum aus dieser Datenbank den letzten Eintrag anzeigen.

DHL Packstation PIN in Home Assistant anzeigen

Wie bereits in meinem letzten Beitrag beschrieben, zeige ich dann die DHL PIN รผber ein Iframe in meinem Dashboard an. Das ganze ich tatsรคchlich nicht mehr als das Datum der E-Mail, in der die PIN enthalten war, als auch die eigentliche PIN:

Home Asisstant DHL Packstation PIN auslesen

 

Zugegeben: Mein PHP-Skript wirkt ein wenig zusammengewรผrfelt, und das ist es eigentlich auch. Tatsรคchlich war ich so froh darรผber, dass mein Proof of Concept funktioniert, dass ich auf jeglichen Feinschliff verzichtet habe. Gegebenenfalls gehe ich das aber bei Zeiten noch einmal an und optimiere den PHP-Code noch etwas.

Sobald DHL die fรผr mich relevanten Textbausteine der der PIN E-Mail รคndert, wird mein PHP-Skript vermutlich nicht mehr funktionieren. Entsprechend werde ich mir hier noch etwas einfallen lassen (mรผssen), um mein Skript etwas robuster zu machen!

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

4 Gedanken zu „DHL Packstation PIN auslesen und in Home Assistant anzeigen in 3 Schritten“

  1. Ist ja schon ganz cool in einem iFrame die PIN zu sehen, aber es ist noch nicht ganz Home-Assistant-nativ. Wenn man sich die PIN รผber die Wohnzimmerlampe morsen oder die Fernseherlautstรคrke auf die letzten beiden Ziffern der PIN stellen will, reicht das nicht. Dann mit der IMAP Integration die Mails in Home Assistant empfangen und mit einem Template aus den relevanten Mails die PIN extrahieren und als Sensor bereitstellen. Damit sind dann auch so unsinnige Just-For-Fun-Szenarien wie eine Weiterleitung als Notification mรถglich.

    Antworten
    • Exakt, deswegen hatte ich danach mal beschrieben, wie man Inhalte von Seiten scrapen kann, um diese Werte dann nativ in Home Assistant zu nutzen (https://smarterkram.de/929/). Ebenso habe ich spรคter die DHL-PIN mal als API-Request von meiner eigenen Mini-API ausgelesen.

      Da DHL die PIN aber gar nicht mehr anbietet, nutze ich davon leider gar nichts mehr.

      Antworten
      • Ah! Sehr schรถn! Danke fรผr den Link. Den anderen Artikel kannte ich noch nicht.

        Gibt es denn sinnvolle Anwendungsszenarien, in denen man etwas mit IMAP per Mail empfรคngt und dort Informationen rauskratzt?

        Antworten
        • Aktuell nutze ich das (leider) gar nicht mehr. Aber man kรถnnte natรผrlich jegliche Art von Sendungsbenachrichtigung interpretieren und Links zum Sendungsverlauf anzeigen, sofern die Mail nicht รคlter als 3 Tage ist bspw. Ad-hoc fรคllt mir aber auch nichts weiteres ein, was fรผr mich aktuell hilfreich sein kรถnnte.

          Antworten

Schreibe einen Kommentar