Het zal jullie niet ontgaan zijn dat fotografie een hobby van mij is. Ik maak als sinds 1967 foto's en vanaf 1977 heel intensief.
In die tijd had ik veel foto's aan de muur en ontwikkelde ze ook in mijn donkere kamer. De spullen om de foto's af te drukken heb ik nog en
ook nog de fotowissellijstjes aan de muur. Maar afdrukken en wisselen van de foto's is ook niet alles. In het begin had ik een klein digitaal fotolijstje,
iets van 10" groot. Grotere lijstjes zijn eigenlijk niet te betalen, dus ik ging een aantal jaren geleden opzoek naar een andere oplossing.
Deze oplossing moest op een Raspberry Pi, een kleine computer, draaien. In die tijd was de enige oplossing die mij bevredigde FEH. Hiermee kon ik op mijn Raspberry Pi foto's afspelen.
Die foto's konden op mijn netwerkschijf staan.
For the people who can't read Dutch, on The Digital Picture Frame site there is a clear description in English.
Rond 2019 liep ik tegen het programma PI3D aan. Dit was een in Python geschreven programma, waarmee je ook foto's kon tonen via een Rasperry Pi op een monitor. Dit programma heb ik gevonden via Wolfgang Männel van The Digital Picture Frame. Meer over de ontwikkeling is te lezen op deze pagina.
Het programma voldeed aan mijn wensen, totdat ik erachter kwam dat in het voorjaar van 2021 een nieuwe versie geschreven. Een versie met meer mogelijkheden dan de vorige versie. Of je die mogelijkheden allemaal gebruik, dat is een tweede, maar het is een klasse programma. Het wordt momenteel verder ontwikkeld door drie mensen, namelijk Paddy, Helge en Jeff. De software is beschikbaar via Github picframe
Behalve dat het een fantastisch programma is, kan je een en ander ook nog vanaf je iPhone, iPad of Mac bedienen. Via Android werkt het ook, maar daar heb ik weinig kas van gegeten. Als je behalve een Raspberry Pi ook nog een extra Raspberry Pi gebruikt met Home Assistant erop, kan je het digitale fotolijstje ook met die App bedienen en zelfs integreren je je Apple Woning App. Op deze pagina zal ik een en ander uitleggen. Het startpunt daarbij is een Raspberry Pi met Raspberry Pi OS erop. Weet je niet hoe dat moet dan zijn er verschillende sites. Op de site van Wolfgang is een en ander te lezen. Als ik het hieronder heb over Pi, dan bedoel ik natuurlijk de Raspberry Pi! Let er ook op dat je de "Raspberry Pi OS with Desktop” hebt geïnstalleerd, zo niet installeer deze dan! Meer informatie over het installeren van het Operating System (OS) op je Raspberry Pi lees je hier.
Als je nog niet beschikt over een Pi schaf dan de versie 4B aan, deze is nieuwer en heeft wat meer power onder de motorkap. Versie 4 komt in verschillende versies m.b.t. het geheugen, namelijk 2GB, 4GB of 8GB. Zelf heb ik er een met 2GB, dat voldoende is. Voor €20,- meer heb je een Pi met 4 Gb intern geheugen. Let wel op dat de voeding voor een Pi 4 minimaal 3A kan leveren bij 5V. Is dat niet zo, dan werkt de Pi niet of niet goed. Heb je nog niets, dan kan je het beste een Starter Kit aanschaffen, compleet met voeding (min. 3A), MicroSD kaartje (16Gb), verloop kabeltje micro-HDMI naar HDMI en een behuizing. SOS-Solutions in Eindhoven levert o.a. deze setjes.
Behalve de Pi heb je natuurlijk ook een scherm nodig waarop je de diashow kan afspelen. Ik gebruik hiervoor een 24" IPS-scherm met één HDMI-ingang om de Pi aan te sluiten. Verder is het handig dat de voet te demonteren is en dat er op de achterkant van het scherm VESA-aansluitingen zijn. Hiermee kan je het scherm eventueel aan de muur bevestigen. Het bevestigen kan met een muurbeugel, maar ook aan een schilderij ophangsysteem.
Wil je het fotolijstje straks ook met het programma Home Assistant bedienen, dan heb je nog een tweede Raspberry Pi nodig. Met de Home Assistant, kan je je slimme lampen bedienen, maar ook je audiovisuele apparatuur. Ben je geen echte hobbyist, dan is Home Assistant eenvoudiger dan bijvoorbeeld Domoticz. Daarbij komt verder dat PictureFrame goed kan samenwerken met Home Assistant. Home Assistant beschikt over een web interface maar ook over een app voor op je smartphone of tablet.
Als je de Pi hebt geïnstalleerd moet je nog wat zaken regelen op je Pi. Hiervoor moet je connectie maken met de Pi. Er zijn meerdere mogelijkheden:
Probeer ook eerst op je router het IP adres van je Pi te vinden. Het kan zijn dat je software de naam raspberrypi toont. Is dat niet het geval, kijk dan welk ip adres het kortste online is. Als je de gebruikersnaam niet gewijzigd hebt, dan is die pi
Geef daarna het wachtwoord in. Heb je het niet gewijzigd, dan is dat raspberry
Systeem updates and basis configuratieAls je een en ander vanaf je computer doet, dan kan je de teksten kopieëren en plakken.
Als je bij de installatie van het OS de overscan niet hebt uitgezet, dan moet je dat alsnog doen.
Geef dan eerst het volgende in:
Geef vervolgens in het terminal scherm het volgende in.
Deze actie duurt even, want er worden nu updates opgehaald. Als het klaar is open je het configuratie programma van je Pi.
Maak de volgende aanpassingen:
Ga Terug en beëindig (Finish) het programma. Reboot het systeem. Na ongeveer twee minuten is het systeem gestart, maak dan opnieuw verbinding met je Pi met:
Nadat je de basis software hebt geïnstalleerd op je Pi is er nog één ding dat je moet doen en dat is de PictureFrame software installeren. Mijn favoriet, zoals hier boven beschreven is “Pi3D PictureFrame”. Deze software is in maart 2021 helemaal herschreven en werkt op de Pi 2,3 en 4. De installatie voor de Pi 4 is anders dan voor de Pi 2 en 3. Deze worden hieronder apart beschreven.
Pi 4Start weer de Terminal op en kopieer en plak het volgende:
In de raspi-config module, ga naar 6 Advanced Options > A2 GL Driver > Kies G2 GL Fake KMS.
Verlaat de configuratie settings en geef het volgende in:
Vergeet vooral niet de punt achter de -i te plaatsen!
Je krijgt nu drie vragen voor de basisconfiguratie. Wil je niets wijzigen geef dan telkens enter. Je kan later nog altijd de instellingen wijzigen.
Op je scherm zie je nu:
Je kan nu het programma testen. Zorg wel dat je nu een monitor hebt aangesloten op je Pi. Het commando moet je op de Pi zelf uitvoeren! Doe je dat niet dan krijg je een foutmelding dat er geen monitor is aangesloten!
Als er nog geen afbeeldingen staan in~/Pictures, dan wordt de "no image found" afbeelding getoond. Maar het is een goed teken, dat je de afbeelding ziet! Met "CTRL+C" kan je de slide show stoppen.
Start weer de Terminal op en kopieer en plak het volgende:
In de raspi-config module, ga naar 6 Advanced Options > A2 GL Driver > Kies G1 (Legacy).
Verlaat de configuratie instellingen en geef het volgende in:
Vergeet vooral niet de punt achter de -i te plaatsen!
Je krijgt nu drie vragen voor de basisconfiguratie. Wil je niets wijzigen geef dan telkens enter. Je kan later nog altijd de settings wijzigen.
Op je scherm zie je nu:
Je kan nu het programma testen. Zorg wel dat je nu een monitor hebt aangesloten op je Pi. Het commando moet je op de Pi zelf uitvoeren! Doe je dat niet dan krijg je een foutmelding dat er geen monitor is aangesloten!
Als er nog geen afbeeldingen staan in~/Pictures, dan wordt de "no image found" afbeelding getoond. Maar het is een goed teken, dat je de afbeelding ziet! Met "CTRL+C" kan je de slide show stoppen.
Voor we verder gaan zet eerst wat afbeeldingen in je /Pictures map op je Pi. PictureFrame kan de volgende bestandstype lezen : PG, JPEG, PNG, HEIC en HEIF, dus plaats alleen
bestanden met die extensie in de map /Pictures.
Bij installatie van PicFrame zijn er een aantal mappen aangemaakt.
De hoofdmap heet "picframe_data”. Hierin staan weer drie andere mappen en een bestand. Ga nu naar de map config. Hierin staat het bestand "configuration.yaml".
Dat bestand wordt gelezen als je het programma start. Aan de hand van de instellingen in het bestand weet PicFrame wat hij moet doen. Het bestand is logisch opgebouwd en bevat 4 secties, namelijk
viewer, model, MQTT en HTTP. Met de standaard instellingen werkt het programma al goed, maar misschien wil je de tijd aanpassen dat een foto getoond wordt. Hiervoor moet je het configuratie bestand aanpassen.
Open het bestand in een editor, bijvoorbeeld nano, de standaard editor op je Pi.
Met shuffle wordt aangegeven dat de afbeelding willekeurige keurige volgorde worden getoond bij het herladen van de bestanden. De standaardwaarde is True. Wil je dat niet, dan vervang True door False.
Met time_delay wordt aangegeven wat de tijd, in seconden, is tussen twee afbeeldingen. De standaardwaarde is 200.0 sec. Dit is iets meer dan 3 minuten (200/60). Wil je de afbeeldingen langer of korter tonen, pas dan de tijd aan
Met fade_time wordt aangegeven wat de tijd, in seconden, is tussen de overgang (overlap) tussen twee afbeeldingen. De standaardwaarde is 10.0 sec.
Met reshuffle_num wordt aangegeven na hoeveel keer afspelen van de diashow afbeeldingen opnieuw gehusseld mooeten worden. Staat de waarde op 1 dan wordt elke keer na het beeïndigen van de diashow de afbeelding opnieuwe gehusseld. Staat de waarde op 5, dan wordt deze pas na 5 keer afspelen gehusseld. De standaardwaarde is 1.
Met fit wordt aangegeven of de afbeelding moet passen op het scherm waarop de diashow wordt afgespeeld. Staat de waarde op True, dan wordt de hele afbeelding getoond, wat kan leiden tot zwarte balken. Staat de waarde op False, dan wordt de afbeelding uigerekt. De standaardwaarde is False. Opmerking: Indien mat_images op True staat, zie je geen verschil.
Met show_text kan je metadata van de afbeelding op je scherm zien. Wil je geen tekst zien zet dan niets tussen "". De standaard is alle tekst tonen.
Met mat_images kan je aangeven dat er een gekleurde rand om de afbeelding komt, als deze niet op je scherm passen. Het heeft iets weg van een passe partout. De kleur wordt bepaald aan de hand van de kleuren van je afbeelding. De standaard is True. Er komt bij de standaard instelling telkens een verschillende rand om de afbeelding met mat_type kan je een keuze maken welke je wilt gebruiken.
Met recent_n kan je aangeven dat de nieuwste afbeeldingen eerst moeten worden getoond. Voeg je afbeeldingen toe en de afspeellijst wordt gehusseld, dan kan je met deze instelling aangeven welke foto's eerst worden getoond. Hierbij wordt gekeken naar de datum waarde in de EXIF-gegevens. Staat de recent_n op 10 dan worden de afbeeldingen die nieuwer zijn dan de huidige datum -10 dagen het eerst afgespeeld, daarna volgt de rest. Er wordt gekeken naar de Exif-datum en niet naar de datum van het bestand!
Er zijn nog meer instellingen aan te passen, zoals portrait_pairs. Als deze waarde op True staan dan worden, indien ze er zijn, twee portret afbeeldingen naast elkaar getoond. De standaardwaarde is False.
Bovenstaande foto toont mijn overgrootouders rond 1900. Met portrait_pairs op True worden ze naast elkaar getoond. Let ook op de gekleurde achtergrond om de foto, deze komt overeen met de bedekking van mijn muur.
Met de hierboven beschreven handelingen kan je een prachtige diashow afdraaien op een groter scherm dan een 10" klant-en-klaar gekocht fotolijstje. Met nog wat extra software kan je het fotolijstje met bijvoorbeeld een smartphone, tablet of computer bedienen. Dat laatste is iets onhandiger, maar moet ook gaan. Zelf beschik ik over Apple spul, dus ik zal me beperkt houden tot een beschrijving hiervan. Je kan zelfs je fotolijstje bedienen met de HomeAssistant app, maar daarvoor moet je op een andere Raspberry Pi eerst HomeAssistant installeren. Bijeffect hierbij is, dat je dan, op een Apple device, je fotolijstje ook via de woning app kan bedienen, maar ook lampen en schakelaars, die niet HomeKit compatibel zijn ;). Hieronder eerst hoe je met wat extra software voor op je Pi, waar je de software voor het fotolijstje op hebt draaien. met bijvoorbeeld een smartphone opdrachten kan versturen.
Wil je het fotolijstje van afstand bedienen, bijvoorbeeld volgende foto of de diashow pauzeren dan moet je op de Pi waarop picframe is geïnstalleerd Mosquitto installeren. Mosquitto leest commando's die naar het programma PicFrame worden gestuurd en als het correcte commando's zijn, dan worden ze uitgevoerd. Om Mosquitto te installeren start je Terminal weer op en maak je connectie met je PI, via het commando:
Vervolgens voer je de onderstaande opdracht uit om je OS up-to-date te krijgen:
Daarna kunnen wij Mosquitto installeren (server en client) :
Wil je controleren of de Mosquitto server werkt, geef dan het onderstaande commando in.
Wil je controleren of het werkt? Geef dan het volgende commando in.
Open nu een tweede terminal scherm naar je PI en stuur daar de volgende melding naar jezelf.
Als alles goed werkt dan zie je op het eerste terminal scherm de volgende tekst: "frame_channel Hello Digital Picture Frame". Als je de melding ziet dan kan je verder gaan om je fotolijstje met de Mosquitto server te verbinden.
Mosquitto & PictureFrameOm je fotolijstje te laten luisteren naar een aantal MQTT-opdrachten, moet je de software van het fotolijstje vertellen, dat hij dat moet doen. Hiervoor moet je het configuratie bestand configuration.yaml aanpassen in wel in de sectie mqtt.
Zorg ervoor dat de instellingen overeenkomen, zoals hieronder is aangegeven. Gebruik je een en ander niet van buiten dan is er geen gebruikersnaam, wachtwoord en tls nodig. Wil je toch gebruik maken van een gebruikersnaam en wachtwoord? Kijk dan even op deze site!
mqtt:
use_mqtt: True
server: "localhost"
port: 1883
login: ""
password: ""
tls: ""
device_id: "picframe"
In onderstaande tabel staan de commando's die je via MQTT kan versturen. De eerste zijn de schakelaars of knoppen, daaronder de commando's met een waarde. We gaan ervan uit dat je in het configuratie bestand configuration.yaml voor device_id: "picframe" hebt gekozen.
Schakelaars
Waarden: (values:)
We zijn nu zover dat we opdrachten naar ons fotolijstje kunnen sturen. Het eenvoudigste gaat dat via een SSH-script. Deze kan je binnen Opdrachten (Shortcuts) op een iPhone, iPad of Mac definiëren. Je moet dan wel bij opdrachten, via instellingen, het uitvoeren van SSH-scripts toestaan. Wil je bijvoorbeeld de monitor uitzetten, dan moet je het volgende commando naar je fotolijstje sturen. Dit commando gaat trouwens direct naar je Pi en niet naar de Mosquitto server.
De monitor wordt nu uitgeschakeld. Wil je hem weer aanzetten, dan stuur je het onderstaande commando.
De monitor gaat nu weer aan! Wil je de volgende afbeelding hebben, dan stuur je dit naar het fololijstje en in dit geval via Mosquitto.
Als het fotolijstje het commando heeft ontvangen, dan verschijnt de volgende afbeelding. In bovenstaand commando zie je de tekst homeassistant staan. Dit heeft niets met de applicatie homeassistant te maken, maar is een kleine onoplettendheid van de maker van de software. Want zoals je hieronder ziet, om naar een andere map te gaan moet je picframe gebruiken, wat ook logischer is, want het is de naam van het programma dat wij gebruiken. Maar goed een schoonheidsfoutje mag.
Binnen opdrachten heb ik nu de volgende knoppen gedefinieerd. Je zal je afvragen, hoe doe ik dat nu? Dat zal ik je nu vertellen. Open de opdrachten app en druk op het plusje om een opdracht toe te voegen. Klik vervolgens op voeg taak toe. Bovenin verschijnt nu een zoekvenster, geef daar ssh in. Je krijgt nu één regel met de tekst Voer script uit via SSH. Klik op die regel. Je krijgt dan onderstaand scherm.
Vul bij 1 nu het script in dat je wilt uitvoeren, bijvoorbeeld:
Bij 2 moet je het IP-nummer van je PI ingeven. Bij mij is dat 192.168.178.45 . Het poortnummer laat je op 22 staan. Bij 3 geef je de gebruikersnaam op, die je hebt gekozen bij het installeren van de Pi, meestal is dat pi. Authenticatie laat je op wachtwoord staan en bij 4 geef je het wachtwoord in dat je hebt gekozen. Geef de opdracht ook nog een naam. Doe dat bovenin bij de grijze tekst "Voer script uit via...". Klik op gereed en vervolgens op het kruisje rechtsboven. De opdracht is nu toegevoegd.
Je kan ook je fotolijstje met een Android app bedienen. Zelf heb ik er geen ervaring mee, maar Wolfgang heeft op deze pagina het een en ander beschreven. Hij gebruikt hiervoor de app MQTT Dash. Alvorens je de App kan gebruiken moet je Mosquitto geïnstalleerd hebben en de aanpassingen in de configuration.yaml hebben aangebracht, zoals hierboven beschreven.
In onderstaande tabel staan de commando's die je via SSH kan versturen. De eerste zijn de schakelaars of knoppen, daaronder de commando' met een waarde. We gaan ervan uit dat je in het configuratie bestand configuration.yaml voor device_id: "picframe" hebt gekozen.
Schakelaars
Waarden: (values:)
Voorbeelden
Hieronder zie je een ssh-script dat de tijd tussen twee afbeeldingen op 30 minuten (1800 seconden) zet.
Op je Pi, kan je in de map ~/Pictures weer mappen maken waar in je ook afbeeldingen plaatst. Stel je hebt onder de hoofdmap een map /Architectuur, /Bloemen en /Mensen. Vervolgens heb je in ~/Pictures en de onderliggende sub mappen afbeeldingen staan, dan worden de afbeeldingen uit alle mappen getoond. Heb je nu aangegeven dat je alleen afbeeldingen uit de map /Mensen wilt hebben, dan worden alleen de afbeeldingen uit die map getoond en eventuele onderliggende mappen. Wil je als je pictureframe opstart direct beginnen met afbeeldingen uit de map /Mensen, dan moet je het configuratie bestand aanpassen en bij pic_dir: "~/Pictures/Mensen" invullen. Je kan natuurlijk ook via een MQTT commando de map wijzigen.
Als je de Pi hebt gekoppeld aan je WiFi netwerk en je wilt afbeeldingen van je NAS tonen zonder dat je ze telkens overzet naar je Pi, dan is dat ook mogelijk. Ik heb dit jaren aan het draaien gehad, maar opeens gaf het problemen. Je moet in ieder geval geregeld hebben dat de schijf op map die je wilt delen op je NAS toegankelijk is vanaf een andere computer. Vervolgens heb ik op mijn Pi het bestand fstab aangepast. Dat doe je met het commando sudo nano /etc/fstab. Bij mij heb ik de volgende regel onderaan toegevoegd:
Hierbij verwijst het stuk //192.168.178.35/Public/PhotoFrame naar de plaats op mijn netwerkschijf waarop de afbeeldingen staan die ik wil delen. Verder verwijst /home/pi/Pictures naar de plek waar ik de afbeeldingen op mij Pi kan zien. Het laatste deel heeft te maken met de verbinding opties. Als ik vervolgens op mij Pi het commando: sudo mount -a uitvoer dan wordt er eventueel gevraagd naar een gebruikersnaam/wachtwoord. Als dat correct is, dan zie je in de map /home/pi/Pictures de bestanden die ook op //192.168.178.35/Public/PhotoFrame staan. Bij mij heeft dit altijd goed gewerkt. Alleen de laatste keren zag PictureFrame helaas geen bestanden. Ik heb nu tijdelijk even de bestanden op de Pi gezet.