The 100 best digital picture frames on amazon
The 100 best digital picture frames on amazon
The 100 best digital picture frames on amazon
The 100 best digital picture frames on amazon

Wie du die Anzahl der Bil­der auf dei­nem Bil­der­rah­men in Home Assis­tent anzei­gen kannst

-

Ich bin immer wie­der über­rascht, was man mit der Open Source Home Assi­stant Soft­ware alles machen kann.

Eine Infor­ma­ti­on, die mich schon immer inter­es­siert hat, ist die Anzahl an Fotos, die sich aktu­ell auf mei­nem digi­ta­len Bil­der­rah­men befin­den.  Mit Home Assi­stant und MQTT ist das kin­der­leicht umzu­set­zen.

Die nach­fol­gen­de Anlei­tung setzt vor­aus, dass du Home Assi­stant und einen MQTT Bro­ker wie z.B. Cloud­MQTT ein­ge­rich­tet hast.

Wenn du dich hier­über erst noch schlau machen willst, dann lies mei­nen Arti­kel "Die Anwe­sen­heits­er­ken­nung von Home Assis­tent für das auto­ma­ti­sche Ein-/Aus­­schal­­ten des Bil­der­rah­mens nut­zen".

Mit Python rich­tig rech­nen

Der Python Befehl os.walk lässt sich in vie­len Berei­chen sehr fle­xi­bel ein­set­zen.

os.walk() gibt die Datei­na­men in einem Ver­zeich­nis wie­der, indem es ein Ver­zeich­nis ent­we­der hoch- oder run­ter "spa­ziert".

Bei dem Spa­zier­gang wer­den auch die Datei­en in Unter­ver­zeich­nis­sen berück­sich­tigt. Das Ergeb­nis kann man in Fol­ge nut­zen, um die Anzahl der Datei­en in einem Ver­zeich­nis zu ermit­teln.

Aller­dings funk­tio­nier­te das nicht rich­tig, als ich den os.walk Befehl aus­pro­bier­te. Die Anzahl der Objek­te in mei­nem Bil­der­ver­zeich­nis zeig­te in macOS rund 1300 an, aber in die­ser Zahl waren auch die Unter­ver­zeich­nis­se (rund 150) ent­hal­ten. os.walk behaup­te­te jedoch, über 2500 Datei­en zu zäh­len. Das konn­te aber nicht sein.

Aber ich hat­te schnell einen Ver­dacht.

So sehr ich Apple Com­pu­ter schät­ze, hat das macOS Betriebs­sys­tem die manch­mal unan­ge­neh­me Eigen­art beim Zugriff auf ein Netz­lauf­werk ver­steck­te Datei­en zu hin­ter­las­sen. (Win­dows ist da auch nicht ganz unschul­dig, man den­ke nur an die ver­steck­ten "thumbs.db" Datei­en, die bei Bil­der­ver­zeich­nis­sen auto­ma­tisch erstellt wer­den.)

Und aus wel­chem Grund auch immer, wer­den die­se ver­steck­ten Datei­en von os.walk() mit­ge­zählt.

Wenn man das aber weiß, ist die Lösung ein­fach.

Die Datei­en haben ein ".App­le­Dou­ble" Namens­be­stand­teil, der es ein­fach macht, sie zu iden­ti­fi­zie­ren. Die Datei­en sieht man aber nur in Linux, nicht in macOS. Ich muss­te also ein­fach mit "." mar­kier­te ver­steck­te Datei­en aus­schlie­ßen. Resi­lio Sync scheint auch noch ".sync" Datei­en zu kre­ieren, die eben­falls aus­ge­schlos­sen wer­den müs­sen.

Die­ser Aus­schluss wird als Bedin­gung defi­niert, womit man dann nur ech­te JPG Datei­en zählt.

if ext in ('.jpg') and not '.AppleDouble' in root and not name.startswith('.') and not '.sync' in root:

Nach­dem das geklärt ist, muss als ers­tes das fol­gen­de Python Skript in das Haupt­ver­zeich­nis des Rasp­berry Pis dei­nes Bil­der­rah­mens gelegt wer­den.

Den nach­fol­gen­den Code ein­fach kopie­ren oder von hier her­un­ter­la­den. Spei­che­re die Datei als count_images.py.

Set­ze dei­nen Benut­zer­na­men und Pass­word von Cloud­MQTT ein (sie­he oben erwähn­ter Arti­kel). Gib dein zu durch­su­chen­des Ver­zeich­nis statt "our­pho­tos" ein.

  1. #!/usr/bin/env python3
  2.  
  3. import paho.mqtt.client as mqtt
  4. import os
  5.  
  6. client = mqtt.Client()
  7. client.username_pw_set( "username" , "password" )
  8.  
  9. client.connect("m23.cloudmqtt.com", 17905, 60)
  10.  
  11. client.publish("frame/images/available", "online")
  12.  
  13. searchdir = r"/home/pi/Pictures/ourphotos"  # your search starts in this directory (your root) 
  14.  
  15. image_count = 0
  16. for root, dirs, files in os.walk(searchdir):
  17.     for name in files:
  18.         ext = os.path.splitext(name)[1].lower()
  19.         if ext in ('.jpg') and not '.AppleDouble' in root and not name.startswith('.') and not '.sync' in root:  # check the extension
  20.             image_count += 1
  21.  
  22. image_count = "{:,}".format(image_count)
  23.  
  24. print(image_count)
  25.  
  26. client.publish("frame/images", image_count)

Die Anzahl der gefun­de­nen Bil­der wird per MQTT im Topic "frame/images" gesen­det.

Um die Zahl stünd­lich zu aktua­li­sie­ren, musst du eine Zei­le in Crontab hin­zu­fü­gen.

crontab -e

Und dann ergänzt du:

0 */1 * * * python3 /home/pi/count_images.py

Nach dem Spei­chern und Schlie­ßen soll­test du den Rasp­berry Pi ein­mal neu star­ten.

Jetzt müs­sen wir noch Home Assi­stant sagen, wie die­ser Sen­sor auf­ge­grif­fen und ange­zeigt wer­den soll.

Den Bil­der­zäh­ler in Home Assi­stant ein­fü­gen

Füge die­sen Absatz zu dei­ner configuration.yaml hin­zu:

#MQTT Sensor
sensor:
  - platform: mqtt
    name: "image_count_frame"
    state_topic: "frame/images"
    unit_of_measurement: 'Photos'
    availability_topic: "frame/images/available"
    payload_available: "online"
    payload_not_available: "offline"

Star­te Home Assi­stant neu und über­prü­fe die Device Sta­tes.

Im Front­end von Home Assi­stant defi­niert ihr jetzt die Enti­ty, wie z.B.:

entities:
  - entity: sensor.image_count_frame
    icon: 'mdi:camera-burst'
    name: Number of images
show_header_toggle: false
title: Digital Picture Frame
type: entities

Star­te jetzt Home Assi­stant neu. Je nach dei­ner Ein­stel­lung im Crontab kann es bis zu einer Stun­de dau­ern bis der Wert ange­zeigt wird.

Herz­li­chen Glück­wunsch! Das war doch nicht schwer, oder?