Topics

Geen ingenieur, maar ik maakte een KidsWiFi-beheersysteem met Claude Code en Raspberry Pi

  • column

Hallo! Ik ben Oga, designer en operatief manager.
Ik ben al sinds 2015 in dienst en behoor inmiddels tot de veteranen, maar normaal gesproken schrijf ik waardeloze artikelen op ons blog, doorgaans vermomd als "meisje".
Maar deze keer zal ik het serieus aanpakken en iets nuttigs delen.

Allereerst moet ik zeggen dat ik praktisch geen werkervaring heb als ingenieur.
Ook al zie ik terminal soms in mijn dagelijks werk, ik kijk meestal alleen naar de logs die voorbijkomen. Zelf commando's ingeven en iets creëren — dat dacht ik altijd was iets voor mensen die dat konden.
Maar nu heb ik met een Raspberry Pi een compleet netwerk en web-app opgezet. Soms kom je ver als je erge nood ondervindt.

Het allemaal begon met ons iPad-probleem

Mijn kind raakt niet los van de iPad. Als je het aan zijn gang laat, is er geen einde aan.
Dus ik wilde dat probleem aanpakken.

En op precies dat moment kreeg ik van het bedrijf de opdracht: "Maak iets wat je wilt in deze hackathon-achtige sessie."
Liberogic heeft momenteel een ongekende Claude Code-hype. Iedereen gebruikt Claude als zijn partner, en het kantoor bruist van creatieve energie rond développement. Ik gebruik het 25 dollar-plan, maar sommige collega's gebruiken duurder abonnementen, en iedereen is enthousiast om "alles met AI te maken".

"Al lange tijd wilde ik een Raspberry Pi proberen (vooral omdat het stoer lijkt)"
"Het iPad-probleem op een technische manier oplossen"
"Een werkend resultaat inleveren voor de hackathon"

Deze drie wensen combineerden zich tot het project: "Een beheersysteem waarmee je met één knopdruk op je telefoon het kindvriendelijke Wi-Fi-netwerk aan of uit kunt zetten."

Ik zie terminal wel eens, maar configuraties instellen is vrijwel onbekend terrein.
Met hulp van Claude ben ik, ondanks veel gepuzzel, toch geslaagd in het bouwen van deze "magische doos"!

Stap 1 — Raspberry Pi instellen

Voorbereiding met Raspberry Pi Imager → SSH-verbinding

Eerst moet je het besturingssysteem op de Raspberry Pi 4 installeren. Installeer Raspberry Pi Imager (het officiële schrijfprogramma) op je Mac en schrijf een 64-bits OS naar de microSD-kaart. Het is belangrijk om SSH in de schrijfinstellingen in te schakelen.

Verbind de Raspberry Pi met een ethernetkabel met je router, schakel de voeding in, en je kunt verbinding maken via het Terminal op je Mac met slechts één commando.

terminal (Mac)

ssh [email protected]

Toen pi@raspberrypi:~ $ in het Terminal verscheen, was ik best onder de indruk. Eerst zal ik het systeem bijwerken.

sudo apt update && sudo apt upgrade -y

Stap 2 — Een WiFi-toegangspunt instellen

Configuratie van hostapd / dnsmasq / iptables

Om de Raspberry Pi als 'WiFi-toegangspunt' te gebruiken, installeer ik twee softwareprogramma's. hostapd zorgt voor het WiFi-signaal en dnsmasq deelt IP-adressen uit aan verbonden apparaten.

sudo apt install hostapd dnsmasq

In het configuratiebestand schrijf ik de SSID (WiFi-naam) en het wachtwoord. Deze keer heb ik het 'KidsWiFi' genoemd voor de duidelijkheid.

/etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=KidsWiFi
hw_mode=g
channel=7
wpa=2
wpa_passphrase=(パスワード)
wpa_key_mgmt=WPA-PSK

Vervolgens geef ik het bereik van IP-adressen op dat aan verbonden apparaten wordt toegewezen.

/etc/dnsmasq.conf

interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h

Tot slot configureer ik IP-forwarding en NAT zodat de Raspberry Pi als internetrelais kan fungeren. Zonder dit kunnen apparaten die verbonden zijn met KidsWiFi niet op het internet komen.

# IPフォワーディングを永続化
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/routed-ap.conf

# NATの設定(eth0経由でインターネットに出られるようにする)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Er trad een probleem op waarbij wlan0 telkens DOWN ging na elke herstart. Ik schreef een systemd-servicebestand zodat de netwerkconfiguratie automatisch bij het opstarten zou draaien. Dit is het moment waarop ik huilend bij Claude aanklopte met "Waarom werkt het weer niet!?" om het op te lossen.

Toen "KidsWiFi" in de WiFi-lijst van de smartphone verscheen en ik verbonden was, kon ik niet anders dan in de chat typen "Meester! Het werkt!" (ik heb het echt ingetikt).

Stap 3 — Een beheerdashboard bouwen in de web-app

Python + Flask om het scherm vanaf de smartphone te bedienen

Nu we een WiFi-toegangspunt hebben, is het volgende stap een beheerdashboard dat je vanaf de smartphone in/uit kunt schakelen. Ik gebruik het Python-webframework "Flask" om een webserver op de Raspberry Pi te draaien. Eerst ontwikkelde ik het in de lokale omgeving op de Mac, controleerde of het werkte, en verplaatste het daarna naar de Raspberry Pi.

terminal (Mac) — De ontwikkelingsomgeving voorbereiding

python3 -m venv venv
source venv/bin/activate
pip install flask

WiFi in/uitschakelen werkt eigenlijk door alleen de internetverbinding te blokkeren. De KidsWiFi-radiogolven gaan constant uit, en iptables (de Linux-firewall) schakelt of het blokkeren van internetpakketten in en uit. Als je het in code zet, is het eigenlijk verrassend eenvoudig.

app.py (excerpt) — Het kerngedeelte van WiFi-controle

import subprocess

def enable_internet():
    # ブロックルールを削除 → インターネット解放
    subprocess.run([
        'sudo', 'iptables', '-D', 'FORWARD',
        '-i', 'wlan0', '-j', 'DROP'
    ], capture_output=True)

def disable_internet():
    # ブロックルールを追加 → インターネット遮断
    subprocess.run([
        'sudo', 'iptables', '-I', 'FORWARD',
        '-i', 'wlan0', '-j', 'DROP'
    ], capture_output=True)

En daarmee is het internet weg. Met één opdrachtregel stopt de iPad van je kind. Ik voelde me ineens enorm machtig (ook al gebruik ik die macht nog niet zo goed).

De systeemschermen maakte ik apart voor kinderen en ouders.
Het scherm voor kinderen beschikt zelfs over een speelscherm met roulettefunctie!
Een eenzijdige tijdslimiet is voor kinderen niet leuk. Het idee was: als zij zelf het roulette draaien en de uitkomst accepteren, gaan ze het vast beter opvatten.
"Hoeveel minuten WiFi heb ik vandaag!?" — ze kunnen ervan genieten als een spel. Dit is een truc om de doorgaans vervelende "onderhandeling" over wanneer het iPad-moment voorbij is, om te zetten in iets dat wat meer plezier oplevert.

  • Kinderscherm
    → Roulette waarbij je 30 minuten, 45 minuten of 1 uur wint.
    → Aftellen van resterende tijd
    → 1 uur cooldown na verlopen tijd
    → Totale gebruikstijd
    → Aantal overgebleven roulettespins weergeven
  • Ouder-dashboard
    → Wachtwoordbeveiliging
    → Noodstop WiFi
    → Huiswerkmodus (volledig geblokkeerd)
    → Limiet roulettespins
    → Geforceerde uitschakeltijd
    → Gebruiksgeschiedenis

Tijdens ontwikkeling ontstond het probleem dat "Mac geen iptables heeft, dus testen is onmogelijk". We creëerden een dummy-functie voor Mac (met alleen een print-statement) zodat we de werking konden controleren.
Dit soort "ik zit vast! Wat nu!" problemen heb ik allemaal met Claude besproken.

Omdat ik toevallig ontwerper ben, dacht ik eigenlijk "ik zal het schermindeling zelf moeten aanpassen" terwijl ik op de output wachtte, maar tot mijn verrassing kwam er een keurig ingedeeld layout uit. Bijna geen aanpassingen nodig.
Dit voelt een beetje tegelijkertijd jammer en blij.

Stap 4 — Implementatie op Raspberry Pi en auto-start

Bestandsoverdracht via SCP → systemd-service registratie

We transfereren het voltooide bestand van Mac naar de Raspberry Pi. scp-commando doet het in één keer.

terminal (Mac) — Overdracht naar Raspberry Pi

scp -r templates app.py [email protected]:~/wifi-manager/

Handmatig Flask starten na elke herstart is lastig, dus schrijven we een systemd-servicefile voor auto-start. We willen bereiken dat alles automatisch werkt zodra de stroom wordt ingeschakeld.

/etc/systemd/system/wifi-manager.service

[Unit]
Description=WiFi Manager
After=network.target wifi-setup.service

[Service]
ExecStartPre=/bin/bash -c 'echo > /home/pi/wifi-manager/state.json'
ExecStartPre=iptables -F FORWARD
ExecStart=/usr/bin/python3 /home/pi/wifi-manager/app.py
WorkingDirectory=/home/pi/wifi-manager
Restart=always
User=root

[Install]
WantedBy=multi-user.target
# サービスを有効化して起動
sudo systemctl enable wifi-manager
sudo systemctl start wifi-manager

Nu werkt alles volledig automatisch zodra je de stroom inschakelt. Wanneer je vanuit de browserbalk van je smartphone naar http://192.168.4.1:5000 gaat, opent het roulettescreen. Wow, het werkt echt.

Wat ik ervan heb geleerd

Als niet-ingenieur kon ik alles van netwerkinstellingen tot Python afmaken, en dat is zeker omdat ik stap voor stap met Claude in gesprek kon gaan.
Wanneer ik vastliep, gooide ik de foutmelding eruit. Als ik vroeg "Wat moet ik nu doen?", zette hij de stappen op een rij. Als ik vroeg "Waarom gebeurt dit?", legde hij het begrijpelijk uit.

Je hoort veel verhalen dat "engineers snelle ontwikkeling doen met AI", maar AI kan ook je beste partner zijn voor het oplossen van kleine, maar dringende problemen in je dagelijks leven.

"Een idee dat je bedenkt, wordt werkelijkheid zonder beperking van organisatiegrootte of persoonlijke vaardigheden"
dat gevoel van democratisering van het maken van dingen was voor mij de grootste winst.

Maar hoe zit het nu met het iPadprobleem van mijn kind... Eigenlijk is dat nog niet opgelost.

Het systeem werkt prima. Nu hangt alles af van mijn beheer als ouder. Ik ga er vol voor!

Auteur van dit artikel

Woonachtig in Fukushima, ben ik dagelijks in gevecht met mijn actieve zoon. Ik zet mijn designersensibiliteit in als designer en operationeel manager, gewapend met aanpassingsvermogen en snelle reacties die ik door het ouderschap heb ontwikkeld.

Oga

Designer / Operationeel manager

Artikelen van deze medewerker bekijken

Ons sterke punt is ons betrouwbare teamstructuur en snelle responsiviteit

Bij Liberogic worden ervaren teamleden actief ingezet voor projectvoering, wat door klanten zeer wordt gewaardeerd.
We wijzen vakbekwaam projectmanagers en directors aan en streven ernaar projecten soepel te laten verlopen. We voorkomen onnodig kostenverhogingen door volledig inzet te vermijden en wijzen middelen toe waar ze het meest geschikt zijn. Onze snelheid bij taakanalyse en bij het opmaken en indienen van offertes is goed bekend.

* Wij voeren niet actief SES-achtige permanente werkzaamheden uit, dus graag van tevoren dank voor uw begrip.

U kunt vrijwel alle grote projectmanagementtools en chattoolsgebruiken, zoals Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom en Webex.

Neem contact met ons op voor advies over uw webvragen.

Casestudies