Hallo! Ik ben Oga, designer en operationeel manager.
Ik ben in 2015 bij het bedrijf gekomen en behoor dus al tot de oude garde, maar normaal gesproken schrijf ik op mijn blog Yururog in een gyaru-persona artikelen waarvan ik eigenlijk niet weet wie er iets aan heeft.
Dit keer wil ik echter serieus doen en een wat ernstiger verhaal vertellen.
Vooraf: ik heb vrijwel geen praktijkervaring als engineer.
Op het werk zie ik wel eens een terminal, maar ik kijk er meestal alleen naar hoe de logs voorbijrollen. Zelf commando's intypen om iets te bouwen leek me iets voor 'mensen die dat kunnen'.
Dat ik nu, met een Raspberry Pi, zowel de netwerkconfiguratie als de webapplicatie van begin tot eind heb gerealiseerd, is dan ook... Als je het echt nodig hebt, blijk je verrassend veel te kunnen.
Het begon met het iPad-probleem van mijn kinderen
Onze kinderen gebruiken de iPad constant. Als je het laat gebeuren, komt er geen einde aan.
Dus wilde ik vooral dat probleem aanpakken.
Net op dat moment kregen we van het bedrijf de opdracht: 'Maak iets leuks, zoals een interne hackathon.'
Bij ons draait momenteel alles om Claude Code. Iedereen werkt met Claude als teamgenoot en de organisatie is één grote bouwfeest. Zelf betaal ik 25 dollar per maand, maar sommige collega's halen nog veel meer uit duurdere abonnementen. Het enthousiasme om alles met AI te bouwen is enorm.
'Ik wilde al lang eens met een Raspberry Pi experimenteren (gewoon omdat het er cool uitziet).'
'Ik wil het iPad-probleem oplossen met engineeringmethoden.'
'Ik wil tijdens de hackathon iets concreets opleveren.'
Uit die drie impulsen is het project ontstaan: een beheersysteem waarmee je met één druk op de knop op je smartphone het kinderwifi kunt forceren aan of uit te zetten.
I've used the terminal occasionally, but I've almost never set anything up.
Yet here I am, working with Claude's help, going back and forth with trial and error, and I actually managed to build this "magic box"!
Stap 1 — Raspberry Pi instellen
Voorbereiding met Raspberry Pi Imager → SSH-verbinding
We beginnen met het installeren van het besturingssysteem op de Raspberry Pi 4. Installeer Raspberry Pi Imager (de officiële schrijftool) op je Mac en schrijf daarmee een 64-bit OS naar een microSD-kaart. Het is best belangrijk om SSH in de schrijfinstellingen al in te schakelen.
Verbind de Raspberry Pi met een LAN-kabel aan je router en zet de voeding aan. Daarna kun je via de terminal op je Mac met slechts één commando verbinding maken.
terminal (Mac)
ssh [email protected]Toen pi@raspberrypi:~ $ in de terminal verscheen, was ik echt onder de indruk. Eerst werk ik het systeem bij.
sudo apt update && sudo apt upgrade -yStap 2 — Een WiFi-toegangspunt opzetten
Configuratie van hostapd, dnsmasq en iptables
Om de Raspberry Pi als "WiFi-toegangspunt" te laten werken, installeren we twee softwarepakketten. hostapd zendt het WiFi-signaal uit, en dnsmasq kent een IP-adres toe aan de apparaten die verbinding maken.
sudo apt install hostapd dnsmasq
In het configuratiebestand stel ik de SSID (de WiFi-naam) en het wachtwoord in. Voor de duidelijkheid heb ik de naam "KidsWiFi" gekozen.
/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=KidsWiFi
hw_mode=g
channel=7
wpa=2
wpa_passphrase=(パスワード)
wpa_key_mgmt=WPA-PSKVervolgens geeft u het IP-adressenbereik op dat wordt toegekend aan de apparaten die zijn verbonden.
/etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24hTot slot stelt u IP-forwarding en NAT in, zodat de Raspberry Pi als tussenstation voor het internet kan fungeren. Zonder deze instelling kunt u na verbinding met KidsWiFi geen toegang krijgen tot internet.
# 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 MASQUERADEEr deed zich een probleem voor waarbij wlan0 bij elke herstart de status DOWN kreeg. Ik heb een systemd-servicebestand geschreven, zodat de netwerkconfiguratie bij het opstarten automatisch wordt uitgevoerd. Dit was het moment waarop ik, na veel frustratie, aan Claude vroeg: "Waarom verbindt het weer niet!?" en het uiteindelijk toch oploste.
Toen "KidsWiFi" eindelijk verscheen in de wifi-lijst op mijn telefoon en de verbinding met internet werkte, typte ik spontaan in de chat: "Meester! Ik ben verbonden!" (dat heb ik echt getypt).
Stap 3 — Een webapp bouwen voor het beheerscherm
Een bedieningsscherm voor op de telefoon realiseren met Python en Flask
Nu het WiFi-toegangspunt werkt, is het tijd voor het volgende onderdeel: een beheerscherm op de telefoon om de WiFi in en uit te schakelen. We gebruiken het Python-webframework "Flask" om een webserver op de Raspberry Pi te draaien. Eerst ontwikkelen we lokaal op de Mac en controleren we of alles werkt, waarna we de code naar de Raspberry Pi overzetten.
Terminal (Mac) — Voorbereiding van de ontwikkelomgeving
python3 -m venv venv
source venv/bin/activate
pip install flaskHet in- en uitschakelen van de WiFi werkt eigenlijk door alleen de verbinding met internet te blokkeren. Het KidsWiFi-signaal blijft altijd actief, en met iptables, de Linux-firewall, bepaalt het systeem of pakketten naar internet worden doorgelaten of verwijderd. In code is dat verrassend eenvoudig.
app.py (fragment) — Kern van de WiFi-besturing
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)Dat is alles wat nodig is om het internet uit te schakelen. Eén commando en de iPad van het kind ligt stil. Het voelt alsof ik een nieuwe kracht heb gevonden (al weet ik nog niet goed hoe ik die moet gebruiken).
Het systeem heeft twee aparte schermen: één voor kinderen en één voor ouders.
Op het scherm voor kinderen zit zelfs een roulettefunctie!
Een eenzijdige tijdslimiet is voor kinderen ook niet leuk. Misschien accepteren ze het wel als ze zelf aan het rad hebben gedraaid. Dat is het idee.
Het wordt een spelletje: "Hoeveel Wi-Fi-tijd krijg ik vandaag?" Zo wordt de vaak vervelende discussie over wanneer de iPad weg moet, een leuk spel.
- Scherm voor kinderen
→ De roulette bepaalt of het 30, 45 of 60 minuten wordt.
→ Aftellen van de resterende tijd
→ Na het verlopen van de tijd een afkoelperiode van 1 uur
→ Totale gebruikstijd
→ Resterend aantal roulettebeurten - Dashboard voor ouders
→ Wachtwoordbeveiliging
→ Noodstop Wi-Fi uit
→ Huiswerkmodus (volledig geblokkeerd)
→ Maximum aantal roulettebeurten
→ Tijd voor geforceerd uitschakelen
→ Gebruikslogboek
Tijdens de ontwikkeling deed zich het probleem voor dat iptables niet op de Mac beschikbaar is, waardoor er niet getest kon worden. Ik heb een dummyfunctie voor de Mac gemaakt (die alleen een printopdracht uitvoert), zodat de werking toch gecontroleerd kon worden.
Dit soort vastlopers van "Wat nu?" heb ik allemaal samen met Claude opgelost.
Omdat ik ontwerper ben, dacht ik tijdens het wachten op de output dat ik de indeling zelf zou moeten regelen. Het resultaat was echter verrassend netjes, en dat was even schrikken. Ik heb de lay-out nauwelijks hoeven aan te passen.
Ik weet niet zo goed of ik dat jammer of juist fijn moet vinden.
Stap 4 — Deployen naar de Raspberry Pi en automatisch starten
Bestandsoverdracht via SCP → registreren als systemd-service
Zet de bestanden die op de Mac zijn gemaakt over naar de Raspberry Pi. Dat doe je in één keer met het commando scp.
Terminal (Mac) — Overzetten naar de Raspberry Pi
scp -r templates app.py [email protected]:~/wifi-manager/Het is vermoeiend om Flask elke keer na een herstart handmatig op te starten, dus ik schrijf een systemd-servicebestand om het automatisch te laten starten. Het doel is dat alles vanzelf draait zodra de stroom aan gaat.
/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-managerNu draait alles zodra ik de stroom aanzet. Als ik via de browser op mijn smartphone naar http://192.168.4.1:5000 ga, opent het roulettescherm. Echt waar, het werkt echt!
Wat ik ervan vond
Dat ik als niet-engineer de netwerkinstellingen tot en met Python heb afgerond, komt zonder twijfel doordat ik dit via een
"gesprek" met Claude heb kunnen doen. Liep ik vast, dan plakte ik gewoon de foutmelding erin. Vroeg ik "Wat moet ik nu doen?", dan kreeg ik de stappen op een rij. Vroeg ik "Waarom gaat dit zo?", dan kreeg ik het stap voor stap uitgelegd.
Je hoort veel verhalen over "engineers die met AI in recordtempo ontwikkelen", maar ook in het dagelijks leven, bij kleine maar pijnlijke problemen, is AI een uitstekende partner.
"Een idee dat je bedenkt, wordt werkelijkheid, los van de omvang van een organisatie of de vaardigheden van een individu"
Dat zo'n democratisering van het maken zo tastbaar is, was de belangrijkste opbrengst.
En dan het eigenlijke probleem: de iPad van mijn kind. Eerlijk gezegd is dat nog niet opgelost.
Het systeem werkt prima. Nu hangt het vooral af van hoe ik als ouder het beheer ga doen. Ik doe mijn best!
Woonachtig in Fukushima, dagelijks in een touwtrekkerij met mijn energieke zoon. Ontwerper en beheerder met een achtergrond in de beeldende kunst, die hard werkt aan beide rollen. Mijn kracht: het flexibele en snelle reageervermogen dat ik heb opgebouwd tijdens het opvoeden.
Oga
Ontwerper / Operationeel manager