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 Home Assistant.

Produktempfehlungen

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.

    • 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.

      • 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?

        • 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.

Die Kommentare sind geschlossen.