ID.nl logo
Zo kun je programmeren in Python - Deel 5
© Reshift Digital
Zekerheid & gemak

Zo kun je programmeren in Python - Deel 5

In de href="https://computertotaal.nl/artikelen/pc/zo-kun-je-programmeren-in-python-deel-4/" rel="noopener noreferrer" target="_blank">vorige les</a> toonden we allerlei manieren om de uitvoer van tekst op het scherm aan te passen. In deze les zetten we de stap van je scherm naar bestanden: we gaan gegevens uit bestanden lezen en naar bestanden schrijven. Daarnaast leer je reageren op exceptions: foutmeldingen die Python je geeft als er iets misgaat.

Twee lessen geleden gebruikte je de functie input om wat de gebruiker op zijn toetsenbord intypt te registreren. En in de vorige les toonden we je hoe je met de functie print uitvoer op het scherm toont. Maar in- en uitvoer kan ook via bestanden verlopen. Laten we eens kijken hoe dat gaat.

Hier kun je les vier bekijken.

We beperken ons in deze les tot het lezen en schrijven van tekstbestanden. Je kunt ook met binaire bestanden werken, die willekeurige data in een andere vorm dan tekst kunnen bevatten, maar dat is wat meer werk omdat je de data nog moet interpreteren. Voor de rest werkt dit hetzelfde.

Een tekstbestand lezen

We tonen hier in een voorbeeld hoe je op een Linux-machine zoals een Raspberry Pi met Raspberry Pi OS (tot voor kort Raspbian geheten) het bestand met de lijst van gebruikers uitleest. Ook op macOS werkt dit voorbeeld. Gebruik je Windows, maak dan zelf een bestand aan met de inhoud die we in ons voorbeeld tonen en pas de locatie van het te openen bestand aan in je Python-code.

De eenvoudigste manier om een volledig tekstbestand uit te lezen en op het scherm te tonen, heeft maar twee regels nodig:

with open('/etc/passwd', 'rt') as bestand:

print(bestand.read())

In de eerste regel openen we het bestand met de functie open. Het eerste argument is het bestand dat we willen openen. We hebben hier een volledig pad gebruikt: '/etc/passwd'. Als je een bestand wilt lezen dat in dezelfde directory staat als waarin je de Python-interpreter hebt opgestart, hoef je geen volledig pad door te geven: de bestandsnaam volstaat dan. Met het tweede argument 'rt' geven we aan dat we het bestand willen lezen en dat het om een tekstbestand gaat.

De constructie met with is wat Python een ‘context manager’ noemt. In het with-blok heb je toegang tot het object bestand dat het geopende bestand voorstelt. Na het with-blok wordt het bestand automatisch gesloten, zodat je het niet meer kunt lezen. Dit lijkt vanzelfsprekend, maar dat is het niet: ook zonder with kun je bestanden openen, maar als je dan het bestand na gebruik vergeet te sluiten, kan dit tot problemen leiden. Werk dus nooit met bestanden zonder with.

In de tweede regel roepen we de functie read op het object bestand aan. Deze functie geeft de volledige inhoud van het tekstbestand terug als een string, die we dan met print op het scherm tonen. Op een typisch Linux-systeem ziet de uitvoer er als volgt uit (we tonen hier maar enkele regels):

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

Enzovoort

Een tekstbestand regel voor regel lezen

Maar wat als we niet het hele bestand in één keer willen inlezen, maar regel voor regel, bijvoorbeeld omdat we willen testen of de regels aan specifieke voorwaarden voldoen? Geen probleem, ook dat is in Python heel eenvoudig. In plaats van de functie read op je bestand toe te passen, ga je dan met een for-lus door de elementen van het bestand. Het tekstbestand dat je van de functie open terugkrijgt, gedraagt zich immers als een lijst met als elementen de opeenvolgende regels in het bestand.

Een string splitsen

Maar als we die regels een voor een gaan inlezen, moeten we er ook iets mee doen. Zoals je ziet, bevat het bestand /etc/passwd op elke regel allerlei informatie over de gebruiker, telkens afgescheiden door een dubbele punt. We willen elk van die gegevens afzonderlijk uitlezen. Dat gaat eenvoudig met de functie split die we op een string kunnen uitvoeren. Bijvoorbeeld:

>>> 'root:x:0:0:root:/root:/bin/bash'.split(':')

['root', 'x', '0', '0', 'root', '/root', '/bin/bash']

Je ziet hier dat we aan de functie split het teken meegeven dat de verschillende componenten van de string afscheidt: ':'. Het resultaat is een lijst met strings die onderdeel uitmaken van onze lange string, zonder de afscheidingstekens ':'.

De opeenvolgende componenten in de regels van het bestand /etc/passwd hebben overigens de volgende betekenis: gebruikersnaam, ongebruikt, ID van de gebruiker, ID van de groep, volledige gebruikersnaam, persoonlijke map van de gebruiker, shell van de gebruiker.

Een lijst uitpakken

Je kunt nu naar de elementen in de gesplitste string verwijzen met een index, bijvoorbeeld:

>>> informatie = 'root:x:0:0:root:/root:/bin/bash'.split(':')

>>> informatie[0]

'root'

>>> informatie[6]

'/bin/bash'

Maar dat is niet heel duidelijk. Zo willen we informatie[0] eigenlijk gebruiker noemen en informatie[6] de naam shell geven. Gelukkig kun je in Python de elementen van een lijst eenvoudig in één keer aan enkele variabelen toekennen. Dat heet unpacking. In ons voorbeeld gaat dat als volgt:

>>> gebruiker, *_, naam, directory, shell = 'root:x:0:0:root:/root:/bin/bash'.split(':')

>>> gebruiker

'root'

>>> _

['x', '0', '0']

>>> naam

'root'

>>> directory

'/root'

>>> shell

'/bin/bash'

De notatie * gebruik je om een willekeurig aantal elementen uit te pakken. Omdat we in dit geval niet in deze elementen geïnteresseerd zijn, kennen we ze toe aan de variabele met de naam _, vandaar dat we bij het uitpakken *_ gebruiken. We konden dit hier ook vervangen door gebruiker, _, _, _, naam, directory, shell.

Gegevens uit een tekstbestand filteren

Dan weet je nu genoeg om de volgende opdracht uit te voeren: lees het bestand met wachtwoorden regel per regel in en als de shell geen '/usr/sbin/nologin' of '/bin/false' is, toon je de gebruikersnaam, volledige gebruikersnaam en persoonlijke map.

De code ziet er als volgt uit:

with open('/etc/passwd', 'rt') as bestand:

for regel in bestand:

gebruiker, *_, naam, directory, shell = regel.strip().split(':')

if shell not in ['/bin/false', '/usr/sbin/nologin']:

print(' {1} ({0}): {2} ({3})'.format(gebruiker, naam, directory, shell))

We openen dus het bestand /etc/passwd als tekstbestand om te lezen. Voor elke regel in het bestand pakken we de verschillende elementen uit in enkele variabelen. We kijken dan of de shell niet gelijk is aan de twee eerdergenoemde shells. Als aan die voorwaarde is voldaan, tonen we de gebruiker, zijn volledige naam, zijn persoonlijke map en zijn shell.

Er is slechts één nieuwigheid in deze code: de functie strip. Die verwijdert witruimte en nieuwe regels aan het begin en het einde van een string. Dat hebben we hier nodig omdat de shell op het einde van de regel staat en er daar dus een teken voor een nieuwe regel komt. Zonder die aanroep van strip zou de vergelijking in de regel erna niet werken.

Naar een tekstbestand schrijven

Naar een tekstbestand schrijven, verloopt op een vergelijkbare manier als een tekstbestand lezen. We beginnen een with-blok waarin we het bestand openen en daarin schrijven we naar het bestand:

with open('bestand.txt', 'wt') as bestand:

bestand.write('Dit is de eerste regel.\n')

bestand.write('Dit is de tweede regel.\n')

bestand.write('Dit is de derde regel.\n')

Op het einde van elke regel moet je zelf een teken voor een nieuwe regel toevoegen: \n. Een andere manier om een regel naar een tekstbestand te schrijven, is met de functie print, die automatisch een nieuwe regel toevoegt:

print('Dit is de eerste regel.', file=bestand)

Merk op dat we het bestand openen met als tweede argument 'wt', waarmee we aangeven dat we naar het bestand willen schrijven. Op deze manier overschrijven we alle al bestaande inhoud van het bestand, dus let hiermee op!

Als je deze situatie wilt vermijden, kun je open aanroepen met de bestandsmodus 'xt'. Als het bestand nog niet bestaat, doet die hetzelfde als 'wt': je kunt naar het bestand schrijven. Maar als het bestand al bestaat, krijg je een foutmelding:

with open('bestand.txt', 'xt') as bestand:

print('Dit is een test.', file=bestand)

with open('bestand.txt', 'xt') as bestand:

print('Dit is nog een test.', file=bestand)

Traceback (most recent call last):

File "<pyshell>", line 1, in <module>

FileExistsError: [Errno 17] File exists: 'bestand.txt'

Een andere interessante bestandsmodus is 'at' (van ‘append’): hiermee voeg je aan het einde van een bestaand tekstbestand regels toe.

Exceptions afhandelen

In het voorbeeld hierboven zou je waarschijnlijk de foutmelding dat het bestand al bestaat op een nettere manier willen afhandelen. Wat we tot nu toe een foutmelding genoemd hebben, heet in Python een exception. Er bestaan verschillende types exceptions en in je Python-code kun je eenvoudig het optreden van exceptions afvangen. Dat gaat als volgt:

try:

with open('bestand.txt', 'xt') as bestand:

print('Dit is nog een test.', file=bestand)

except FileExistsError:

print('FOUT: Het bestand bestaat al.')

De code binnen het try-blok wordt uitgevoerd zoals normaal. Maar als er binnen dit blok een exception voorkomt, gaat het programma door naar het except-blok. Daarin hebben we aangegeven dat we alleen in de exceptions van het type FileExistsError geïnteresseerd zijn. In het geval er zo een voorkomt, tonen we onze eigen foutmelding. Daarna gaat het programma verder na het except-blok.

Als je meerdere types exceptions wilt afvangen, voeg je meerdere except-blokken toe met elk het andere type exception. Als je voor meerdere types exceptions dezelfde code wilt uitvoeren, dan zet je die exceptions tussen haakjes, zoals hier:

except (ZeroDivisionError, ValueError):

En als je op alle mogelijke exceptions hetzelfde wilt reageren, voeg je gewoon een except-blok zonder de naam van een exception toe, al is dat niet zo vaak zinvol.

Samenvatting

In deze les hebben we geleerd hoe we tekstbestanden kunnen inlezen en strings in onderdelen kunnen splitsen. Ook in de andere richting kun je nu met tekstbestanden werken: je kunt willekeurige tekst naar een bestand schrijven. En doordat je hebt geleerd hoe je exceptions kunt afvangen, hoeven de gebruikers van je programma geen cryptische foutmeldingen van Python meer te krijgen. Omdat je met deze kennis al complexere Python-programma’s kunt schrijven, leer je in de volgende les hoe je je programma meer kunt structureren in functies en modules.

Opdracht

Vraag de gebruiker om een regel zoals root:x:0:0:root:/root:/bin/bash voor gebruik in een wachtwoordbestand op te geven. Schrijf de belangrijkste elementen van de regel naar een afzonderlijke regel in een bestand, in de vorm: Gebruiker: root Naam: root Directory: /root Shell: /bin/bash Zorg dat je programma een heldere foutmelding geeft als de regel niet de correcte vorm voor een wachtwoordbestand heeft.

Uitwerking

regel = input('Voer een regel voor het wachtwoordbestand in: ') try: gebruiker, _, _, _, naam, directory, shell = regel.strip().split(':') with open('wachtwoordbestand', 'wt') as bestand: print('Gebruiker: {}'.format(gebruiker), file=bestand) print('Naam: {}'.format(naam), file=bestand) print('Directory: {}'.format(directory), file=bestand) print('Shell: {}'.format(shell), file=bestand) except ValueError: print('Voer de regel in de volgende vorm in:') print('gebruiker:x:0:0:naam:directory:shell') Dit is een rechtstreekse combinatie van alles wat je in deze les geleerd hebt. Let op: we hebben hier wel gebruiker, _, _, _, naam, directory, shell nodig en niet de kortere versie gebruiker, *_, naam, directory, shell. Met die laatste regel garanderen we immers niet dat de regel uit exact zeven elementen bestaat.

Cheatsheet

exception: een foutmelding in Python pad: de locatie van een bestand, met alle bovenliggende directorynamen erbij

▼ Volgende artikel
Meta test betaalde abonnementen voor WhatsApp, Facebook en Instagram
© ER | ID.nl
Huis

Meta test betaalde abonnementen voor WhatsApp, Facebook en Instagram

Meta gaat tests uitvoeren met betaalde abonnementen voor WhatsApp, Facebook en Instagram, zo heeft het bedrijf laten weten.

Dat liet Meta weten aan TechCrunch. In ruil voor betaalde abonnementen op bovengenoemde apps krijgen mensen toegang tot extra functies, al zijn die nog niet uit de doeken gedaan. De reguliere versies van de platforms moeten wel gratis beschikbaar blijven.

De precieze opties die mensen die betalen voor WhatsApp, Facebook of Instagram krijgen is niet bekend, maar Meta heeft het over "speciale features en meer controle over hoe men deelt en connecties maakt".

Manus en Vibes

Eén van de dingen die mogelijk onder de abonnementen gaan vallen, is Manus, een AI-agent die pas is aangeschaft door Meta voor ongeveer 2 miljard dollar. Manus moet geïntegreerd worden in Meta-producten, maar ook los beschikbaar komen. Op Instagram wordt er naar verluidt al gewerkt aan een shortcut naar de AI-tool.

Meta wil de abonnementen ook voor andere AI-features testen, zoals het genereren van videocontent in Vibes. Deze AI-videotool is nu nog gratis beschikbaar, maar het is de bedoeling dat extra opties via een abonnement beschikbaar komen.

Op Instagram zou een abonnement gebruikelijks wellicht de mogelijkheid kunnen geven om mensen die men volgt te bekijken die niet terug volgen. Ook zou het mogelijk een optie worden om een Story te bekijken zonder dat de persoon die het heeft geplaatst ziet dat deze door de persoon in kwestie is bekeken.

Meta wil de komende maanden de abonnementen testen, en niets is nog zeker - ook niet eventuele prijzen voor abonnementen. Duidelijk is in ieder geval dat het bedrijf hiermee gaat experimenteren.

Nieuw op ID: het complete plaatje

Misschien valt het je op dat er vanaf nu ook berichten over games, films en series op onze site verschijnen. Dat is een bewuste stap. Wij geloven dat technologie niet stopt bij hardware; het gaat uiteindelijk om wat je ermee beleeft. Daarom combineren we onze expertise in tech nu met het laatste nieuws over entertainment. Dat doen we met de gezichten die mensen kennen van Power Unlimited, dé experts op het gebied van gaming en streaming. Zo helpen we je niet alleen aan de beste tv, smartphone of laptop, maar vertellen we je ook direct wat je erop moet kijken of spelen. Je vindt hier dus voortaan de ideale mix van hardware én content.

▼ Volgende artikel
Je oude Windows-pc als thuisserver: zo zet je Jellyfin en Syncthing op
© ID.nl
Huis

Je oude Windows-pc als thuisserver: zo zet je Jellyfin en Syncthing op

Heb je nog een oudere pc of laptop, dan is het zonde om deze ongebruikt te laten. Je kunt hem namelijk eenvoudig omvormen tot een veelzijdige thuisserver. Wat dacht je van een mediaserver of een synchronisatietool, beide gratis, opensource en beschikbaar voor vrijwel elk platform?

In dit artikel

Je hebt een nieuwe pc gekocht, maar je oude Windows-computer is vaak nog prima bruikbaar. Met gratis servertools maak je er een thuisserver van, bijvoorbeeld voor streamen, een (s)ftp-server, een NAS-omgeving, domotica of het blokkeren van advertenties en trackers. Veel oplossingen draaien direct op Windows. En wil je toch iets met Linux, dan kan dat vaak ook via WAMP, WSL2 of Docker Desktop.

In dit artikel houden we het bewust bij twee gratis opensource-servers die rechtstreeks op Windows draaien: Jellyfin en Syncthing. Je leest hoe je je pc klaarzet met een schone Windows-installatie, een vaste netwerkplek en een vast intern ip-adres. Daarna richt je Jellyfin in als mediaserver met bibliotheken, gebruikers en apps voor tv en telefoon. Ook stel je Syncthing in als 'private cloud' waarmee je bestanden direct tussen je eigen apparaten synchroniseert. Tot slot laten we zien hoe je beide ook op je mobiel gebruikt, eventueel buiten je thuisnetwerk, en welke instellingen helpen om snelheid, opslag en veiligheid in balans te houden.

Lees ook: Nieuwe laptop kopen? Zo kies je een laptop die jaren meegaat

Voorbereiding

Voor je begint, is het verstandig om je (oude) computer goed voor te bereiden met een schoon besturingssysteem. Installeer bij voorkeur Windows 10 of 11 opnieuw. Dit doe je via Instellingen / Systeem / Systeemherstel, waar je PC opnieuw instellen kiest en eventueel Alles verwijderen selecteert.

Update daarna het systeem via Instellingen / Windows Update / Naar updates zoeken en controleer ook of alle drivers up-to-date zijn. Dit kan handmatig door met rechts op de Windows-startknop te klikken, Apparaatbeheer te openen, met rechts op een apparaat te klikken en Stuurprogramma bijwerken te kiezen. Je kunt eventueel tijdelijk de gratis tool Driver Booster (let wel op voor extra software) installeren om snel verouderde drivers te detecteren, al raden we wel aan om ze handmatig te downloaden (van de websites van de fabrikant).

Plaats je pc liefst dicht bij de router of zeker op een plek met een stabiele verbinding, bij voorkeur via een ethernetkabel. Geef je computer ook een vast intern ip-adres, zodat het niet telkens wijzigt. Dit kun je instellen via Instellingen / Netwerk en internet: kies Ethernet (of Wi-Fi, en klik daarna op het juiste netwerk) en klik bij IP-toewijzing op Bewerken, waarna je Handmatig kiest en geschikte waarden invult.

Controleer bovendien of er genoeg opslagruimte beschikbaar is, zeker als je grote mediabestanden wilt bewaren. Schakel ten slotte energiebesparende slaapstanden uit wanneer de server continu actief moet blijven. Open Instellingen / Systeem / Aan/uit en zet alle opties bij Time-outs voor scherm, slaapstand en sluimerstand op Nooit.

Driver Booster: een snelle manier om verouderde drivers op te sporen - maar het downloaden doe je van die drivers doe je bij voorkeur zelf, vanaf de website van de fabrikant.

Jellyfin installeren

We starten met een wat complexere installatie, deze van mediaserver Jellyfin. Hiermee bouw je een Netflix-achtige omgeving voor films, series en muziek. De server biedt vrijwel alle functies van een modern mediacenter, van metadata en transcodering tot streaming met ondersteuning voor meerdere gebruikers, zonder beperkingen of betaalde upgrades. Op https://demo.jellyfin.org kun je een online demo bekijken.

Spreekt dit je aan, dan kun je meteen aan de installatie beginnen. Download de serversoftware via https://jellyfin.org/downloads/windows, klik op AMD64 en haal het bijbehorende exe-bestand op. Installeer het met een dubbelklik. Tijdens de setup kies je bij voorkeur Basic Install (Recommended) om toegangsproblemen bij mappen te vermijden. Bevestig met Next (twee keer) en kies een lege installatie- en datamap. Klik opnieuw op Next (twee keer) en sluit af met Install en daarna Close.

Je kunt de server nu starten via het Windows-startmenu (Jellyfin Tray App) of via het bureaubladpictogram. In het Windows-systeemvak verschijnt dan het bijbehorende pictogram. Klik er met rechts op om de server te starten, te stoppen, te openen of om de logs te bekijken. Plaats hier een vinkje bij Autostart. Je kunt de server ook 'handmatig' openen door in je browser het adres http://localhost:8096 in te voeren.

Een Basic Install is de aanbevolen optie (om machtigingsproblemen te vermijden).

Jellyfin: basisconfiguratie

Bij de eerste keer opstarten verschijnt een instelgids. Vul een korte servernaam in en kies de weergavetaal, bijvoorbeeld Nederlands. Klik op Volgende en maak een beheeraccount aan met een gebruikersnaam en wachtwoord (twee keer). Klik nogmaals op Volgende om je mediabibliotheken te beheren.

Klik op Mediabibliotheek toevoegen, kies het gewenste inhoudstype, zoals Films, Muziek, Series of Homevideo's en foto's, en geef een weergavenaam op. Klik daarna op het plusje bij Mappen en selecteer een of meer mediamappen voor deze bibliotheek. Je kunt ook verwijzen naar gedeelde netwerkmappen via het UNC-pad, zoals \\nas\media.

Bevestig met OK om de bibliotheek aan te maken. Op dezelfde manier kun je vervolgens extra mediabibliotheken toevoegen.

Kies een passend inhoudstype voor je mediabibliotheken.

Jellyfin: bibliotheekinstellingen

Klik nu eerst op het knopje met de drie puntjes bij een toegevoegde bibliotheek. Naast voor de hand liggende opties als Hernoemen en Verwijderen vind je hier onder meer ook Bibliotheek beheren, met instellingen die deels afhangen van het gekozen inhoudstype. Sommige, zoals Voorkeurstaal voor downloads, spreken voor zich, maar een optie als Ingesloten titels boven bestandsnamen verkiezen vraagt wellicht enige toelichting. Deze is namelijk vooral handig als de bestandsnamen van je media de inhoud niet duidelijk weergeven.

Een andere optie is nog Nfo bij Metadata-opslag: activeer deze als je wilt dat Jellyfin de metadata en afbeeldingen opslaat in de mediamappen zelf in plaats van in de programmamap. Bij films kun je bovendien bepalen van welke diensten afbeeldingen mogen worden gedownload en of deze in de mediamappen bewaard moeten blijven. Er zijn verder opties voor het tonen van hoofdstukafbeeldingen en het zogeheten trickplay, wat bijvoorbeeld handig is tijdens het spoelen, maar wel meer rekenkracht vergt.

Afhankelijk van het inhoudstype zijn er best veel opties voor je bibliotheek.

Jellyfin: gebruikersbeheer

Terug in het venster met je bibliotheken klik je op Volgende en stel je de voorkeurstaal (Dutch; Flemish) en regio in (Netherlands of Belgium). In het volgende scherm laat je het vinkje staan bij Externe verbindingen met deze server toestaan als je ook buiten je netwerk toegang wilt tot je mediaserver. Rond af met Voltooien en meld je aan.

Via de knop linksboven kun je diverse instellingen aanpassen. Open Controlepaneel voor allerlei technische informatie over je serverinstallatie. Bij Gebruikers kun je anderen, bijvoorbeeld gezinsleden, toegang geven tot Jellyfin. Klik op de plusknop, vul een naam en wachtwoord in en bepaal tot welke mediabibliotheken de gebruiker toegang heeft. Klik op het knopje met de drie puntjes naast een gebruiker en kies Gebruiker bewerken om de machtigingen nauwkeurig aan te passen. Het tabblad Ouderlijk toezicht is daarbij handig voor kinderen.

Je legt haarfijn vast wat welke gebruikers (niet) mogen doen.

Jellyfin: extra opties

In het menu vind je nog een paar nuttige opties. Bij Afspelen / Transcoderen kun je hardwareversnelling inschakelen als je systeem dit ondersteunt. Onder Afspelen / Streamen kun je een bitsnelheidslimiet instellen om te voorkomen dat apparaten buiten je netwerk je uploadverbinding te zwaar belasten. Bij Geavanceerd / Netwerken staan diverse instellingen voor een optimale netwerkconfiguratie. Je kunt hier het poortnummer aanpassen waarop Jellyfin draait (standaard 8096 voor http en 8920 voor https), https activeren als er een certificaat beschikbaar is en bepalen welke apparaten of netwerken extern toegang krijgen tot je server. Bevestig alle aanpassingen onderaan met Opslaan.

Verder is er het onderdeel Plug-ins, waarmee je Jellyfin eenvoudig uitbreidt. Standaard zijn enkele plug-ins al aanwezig, maar via Alle vind je er nog zo'n dertig, zoals Open Subtitles en LrcLib Lyrics. Doorgaans volstaat het een plug-in te openen en op Installeren te klikken. Na een herstart verschijnt deze bij de geïnstalleerde plug-ins en kun je deze via Instellingen verder configureren.

Jellyfin laat zich handig uitbreiden met meer dan 30 plug-ins.

Jellyfin: client-verbinding

Om je mediabibliotheken via een ander apparaat te benaderen, kun je een browser gebruiken met het adres http://<interne-ip-adres-server>:<serverpoort>, zoals http://192.168.0.138:8096. Open daarna een bibliotheek en kies wat je wilt afspelen. Je kunt dit ook anders doen: op www.jellyfin.org vind je namelijk verschillende client-apps voor smart-tv's, mediaspelers als Google Cast en Apple TV, en desktop- en mobiele apps voor onder meer Android, iOS en iPadOS.

We nemen de Jellyfin-app uit de Android Play Store als voorbeeld. Installeer de app en start deze op. Bevindt jouw Android-toestel zich in hetzelfde netwerk als de Jellyfin-server, tik dan op Server kiezen en selecteer de juiste server. Je kunt natuurlijk ook handmatig het (interne) ip-adres of de hostnaam van de server met de netwerkpoort invoeren.

Na een succesvolle aanmelding heb je toegang tot je gedeelde media. Via het pictogram Afspelen op kun je de inhoud ook streamen naar onder meer een Google Chromecast.

Jellyfin heeft clients voor uiteenlopende platformen (hier: Android).
View post on TikTok

Syncthing: wat en hoe?

Wil je, bijvoorbeeld om privacyredenen, je data liever niet via cloudproviders synchroniseren, dan kun je dat doen binnen je eigen 'private cloud' met Syncthing. Je koppelt bijvoorbeeld je pc, laptop en NAS rechtstreeks via een beveiligde verbinding.

De tool werkt via peer-to-peer-synchronisatie: elk apparaat draait dezelfde software en communiceert via versleutelde verbindingen. Na het koppelen van apparaten met een unieke ID en het delen van een map zorgt Syncthing dat alle wijzigingen in realtime worden overgezet, zonder tussenkomst van externe servers of cloudaccounts. Alleen als een directe verbinding uitzonderlijk niet lukt, ondanks geavanceerde NAT-traversaltechnieken, schakelt Syncthing over op publieke relayservers. Je data blijven ook dan nog steeds end-to-end versleuteld en worden niet opgeslagen op die servers.

Syncthing installeren

Ga naar www.syncthing.net en klik op Syncthing Windows Setup of bezoek rechtstreeks www.github.com/Bill-Stewart/SyncthingWindowsSetup. Klik daar op Latest en download syncthing-windows-setup.exe. Start het met een dubbelklik. Klik op Next (twee keer) en kies een geschikte, lege installatiemap. Klik opnieuw op Next (twee keer) en laat de standaardinstellingen staan, tenzij je bijvoorbeeld de standaardpoort 8384 van de service wilt wijzigen. Klik nogmaals op Next en laat de vinkjes staan zodat Syncthing automatisch met Windows opstart. Bevestig met Installeren en vervolgens met Ja om de firewallregels toe te voegen. Sluit af met Finish en open je browser op het adres http://localhost:8384.

Je kunt de basisinstellingen in principe ongemoeid laten.

Syncthing: basisconfiguratie

Je komt nu in het Syncthing-dashboard met enkele gebruiksstatistieken. Open eerst Acties / Instellingen en ga naar het tabblad GUI om veiligheidshalve een gebruikersnaam en wachtwoord in te stellen voor toegang tot het dashboard. Bevestig met Opslaan en meld je aan.

Ga daarna opnieuw naar Instellingen en open het tabblad Verbindingen. Hier kun je onder meer de download- en uploadsnelheid beperken. Je laat hier bij voorkeur de opties NAT traversal inschakelen, Relaying inschakelen, Globale detectie en Lokale detectie aangevinkt staan. Bevestig opnieuw met Opslaan.

In het hoofdvenster klik je vervolgens op +Map toevoegen. Geef een naam op bij Maplabel, kies een (hoofdlettergevoelig) Map-ID en vul bij Maplocatie het volledige pad in, bijvoorbeeld C:\Gegevens. Klik op Opslaan. Bij de toegevoegde map kun je vervolgens detailinformatie bekijken, de map (opnieuw) scannen, bewerken of verwijderen.

De eerste map is klaar om via Syncthing gedeeld te worden.

Syncthing: client-verbinding

Nu moet je Syncthing nog vertellen met welke apparaten je de map wilt delen voor synchronisatie. Daarvoor heb je minstens één extra apparaat nodig. Clients bestaan voor verschillende platformen; voor iOS kun je Möbius Sync gebruiken.

We nemen Android als voorbeeld, met de app Syncthing-Fork uit de Play Store. Tik tijdens de eerste setup op Machtiging verlenen en activeer de gevraagde rechten voor datadeling, batterij-optimalisatie, locatie en meldingen.

In het hoofdvenster van Syncthing-Fork open je het tabblad Apparaten en tik je op de plusknop. Als server en client zich in hetzelfde netwerk bevinden, wordt het apparaat-ID van je server meestal automatisch gedetecteerd. Zo niet, open dan op je serverdashboard Acties / ID weergeven en vul het getoonde ID handmatig in of scan de QR-code. Geef op de client een apparaatnaam op en bevestig met het vinkicoontje.

Herhaal dit op je server door in het hoofdvenster op de groene knop +Apparaat toevoegen te klikken en het juiste apparaat-ID van het clienttoestel in te voeren. Bevestig met Opslaan.

Open daarna op je server de gedeelde map, kies Bewerken, ga naar het tabblad Delen, vink het clienttoestel aan en bevestig met Opslaan. Accepteer de meldingen om de synchronisatie te starten en kies op je client welke map voor downloads wordt gebruikt.

De synchronisatie tussen beide apparaten is gelukt.

Externe connectie

Omdat Syncthing gebruikmaakt van NAT-traversaltechnieken en relayservers, kun je de server ook via internet bereiken. In je client-app geef je dan eventueel nog aan dat Syncthing via een mobiele dataverbinding mag werken, via Instellingen / Uitvoervoorwaarden.

Bij Jellyfin en veel andere thuisservers komt er helaas wat meer kijken om externe verbindingen mogelijk te maken. Je moet dit niet alleen in de server toestaan, maar ook op netwerk- en routerniveau instellen. In je router kun je bijvoorbeeld een poortdoorverwijzing (Port Forward of ook wel Virtual Server) maken naar het interne ip-adres van je server, eventueel met een andere poort. Zo kun je ook poort 80 koppelen aan <internet-ip-adres-jellyfin-server>:8096, zodat externe gebruikers poort 8096 niet hoeven te onthouden.

Maak bij voorkeur ook een gratis dynamische DNS-naam aan, zodat je netwerk bereikbaar blijft, zelfs bij een wisselend ip-adres, bijvoorbeeld via een ddns-provider als Dynu. Met de bijbehorende updater-tool houd je deze koppeling actief.

Nog betrouwbaardere, maar technisch complexere alternatieven zijn een VPN (eventueel Tailscale op basis van WireGuard) of een Cloudflare Tunnel.