Een computer is het ideale instrument om repeterende saaie taken te automatiseren. Een computer wordt niet moe, zeurt niet als een taak opnieuw moet gebeuren en vergeet niet snel iets. Er zijn allerlei manieren om repeterende taken te automatiseren en in dit artikel wil ik jullie laten zien hoe ik er voor zorg dat ik op meerdere werkplekken de beste internetverbinding heb.
Sinds thuiswerken meer de norm is geworden heb ik een werkplek op de bovenste verdieping aan de achterkant van ons huis. Ik ben blij met deze plek, het is ruim, ik heb een mooi tweede scherm, ik kan er muziek draaien en ik heb een ruim uitzicht over de wijk in Utrecht-Oost. Er is wel een nadeel. De plek waar ik werk is precies in de meest verre hoek van onze wifi router vandaan. Die staat namelijk op de benedenverdieping aan de voorkant van het huis.
Netwerkkabel
Ik merkte al snel dat onze wifi-verbinding moeite heeft met alle videocalls in het gezin, met werk, school en sociaal leven dat door elkaar loopt. We hebben een signaalversterker op de eerste verdieping, maar ik merkte dat die met videocalls niet echt lekker werkte. Daarom legde ik al snel een netwerkkabel aan naar boven. Vanaf de modem op de benedenverdieping, door twee verdiepingen naar de andere kant van het huis. Het was een klus, maar ik had wel wat ik wilde: Goed en stabiel internet.
Maar ik werk op een Macbook Pro. Als ik beneden zit, gebruik ik wifi. Als ik boven werk, sluit ik de netwerkkabel aan via een USB-adapter en gebruik ik die. Wat ik alleen steeds vergeet is om de wifi uit te zetten. Dus ik zit boven te werken en halverwege een videocall kom ik er achter dat ik de wifi-verbinding nog aan staat. Het is niet handig om dan de wifi uit te zetten. De verbinding is valt voor een seconde of wat en dat betekent vaak dat het videogesprek stoort. Daar wilde ik een geautomatiseerde oplossing voor. Want ik ken mezelf goed genoeg: Om er steeds aan te denken van verbinding te switchen als ik op mijn werkplek zit, dat gaat niet goed. En waarom zou ik het denkwerk moeten doen als een computer dat veel beter kan?
Triggers en acties
Er zijn meer wegen die naar Rome leiden. Ik kies voor de weg van Keyboard Maestro. Met deze Mac app kan ik op allerlei manieren het gedrag van mijn Mac beïnvloeden, gebaseerd op specifieke triggers. Met die triggers voer ik allerlei acties uit. Ik heb een trigger om tekst die kopieer zonder opmaak elders te plakken, triggers om met mijn toetsenbord snel andere apps te starten en nu dus het wisselen van de netwerkverbinding. Die trigger kan van alles zijn: een toetsaanslag, een specifiek tijdstip, of als een extra monitor wordt aangesloten. Ik wilde het proces zo eenvoudig mogelijk maken. Een toetscombinatie om van netwerkverbinding te wisselen als ik op een andere werkplek zit, dat is iets wat ik zeker vergeet. Omdat ik niet altijd op hetzelfde tijdstip mijn Mac aanzet, is een actie op basis van een tijdstip niet handig. Keyboard Maestro heeft wel een hele interessante trigger, namelijk dat het kan reageren als ik een extra monitor aansluit of juist afkoppel. Hiermee kan ik een specifieke actie uitvoeren. Als ik mijn Mac op mijn werkplek zet, sluit ik standaard zowel het tweede scherm aan als een USB-kabel met de netwerkkabel. Dus als een tweede scherm wordt aangesloten, is de netwerkkabel altijd aanwezig. Met die wetenschap kan ik een scenario maken wat automatisch de wifi uitzet en de netwerkverbinding activeert.
Dat ziet er als volgt uit:
Uitleg Keyboard Maestro scenario
Je ziet hier het volgende gebeuren
- De trigger wordt geactiveerd als de layout van de displays verandert
- Ik check dan met de functie SCREENCOUNT() hoeveel schermen er zijn aangesloten
- Is dat aantal meer dan 1, dan voer ik het eerste script uit. Anders voer ik het tweede script uit.
- Ik krijg in het scherm te zien hoeveel schermen zijn aangesloten. Dit is een tijdelijke actie zodat ik zelf in de gaten kan houden of alles de komende tijd loopt zoals verwacht.
Wat doet het script exact? Ik zal het stap voor stap uitleggen
Dit is het complete Applescript:
set wifi to (do shell script "networksetup -listallhardwareports |
grep -A 1 Wi-Fi |
tail -n 1 |
cut -b 9-12")
do shell script "networksetup -setairportpower " & wifi & " off"
Allereerst maak ik een variabele genaamd wifi
. Ik laat een shellscript zoeken naar het wifi kanaal en haal uit de lijst het specifieke netwerkadres. Vervolgens zet ik dat specifieke netwerkadres aan of uit. Dit gebeurt stap voor stap met de volgende regel
networksetup -listallhardwareports | grep -A 1 Wi-Fi | tail -n 1 | cut -b 9-12
Dit is een keten van commando’s die ik achter elkaar uitvoer met het pipe teken |. Pipes combineren verschillende commando’s, waarbij de output van het ene commando dient als input van het volgende. Dit zijn stap voor stap:
networksetup -listallhardwareports
Laat alle netwerkpoorten ziengrep -A 1 Wi-Fi
Zoek in al die netwerkpoorten naar de term Wi-Fi en laat die regel plus de volgende regel zien.tail -n 1
laat alleen de laatste regel zien van de output uit het vorige commandocut -b 9-12
haalt uit de vorige regel alleen de karakters 9 tot en met 12.
Hiermee heb ik het netwerkadres van mijn wifi kaart. Die kan ik nu aansturen met het volgende commando.
do shell script "networksetup -setairportpower " & wifi & " off"
De variabele wifi
is het netwerkadres van mijn wifi poort: en0. Bovenstaande regel zet die poort uit. En dat is het eigenlijk. Omdat de wifi poort uit staat, gaat automatisch de netwerkverbinding aan. De macro activeert weer als ik het tweede scherm afkoppel. Nu zal de functie SCREENCOUNT()
op 1 uitkomen, er is immers alleen mijn laptopscherm. Hiermee activeer ik een vergelijkbaar script, maar zet ik juist de wifi poort weer aan.
do shell script "networksetup -setairportpower " & wifi & " on"
Andere oplossingen?
Zoals ik zei, er zijn veel meer wegen die naar Rome leiden. Ik vermoed dat bovenstaande prima mogelijk is met een iets ander script. Je zou dit eveneens met een andere automatiserings-app kunnen doen als Alfred of BetterTouchTool. Misschien is het zelfs native op de Mac mogelijk, zonder een extra app. Ik ben benieuwd hoe anderen dit zouden oplossen met automatisering.
Wil je de macro van Keyboard Maestro zelf testen? Download hem hier (rechtermuisknop, Save As) en importeer hem in je eigen installatie. Laat me weten of het naar behoren werkt voor je, of je nog iets slims er aan toe kunt voegen.
Niels Gouman says
Op de Mac in je systeemvoorkeuren kun je de verschillende netwerk verbindingen op volgorde van prioriteit slepen. Op het moment dat ethernet beschikbaar is zal hij dan dat gebruiken, ondanks dat wifi ook aan staat en verbonden is.
Voordeel is dan in ieder geval dat bepaalde features van macos die alleen wreken met wifi ook nog steeds beschikbaar zijn (bijvoorbeeld handoff)
Heini van Bergen says
Hi Frank,
Bovenstaande zou ook automatisch moeten gaan als je bij de netwerkverbindingen je ethernet verbinding boven aan zet. Als beide beschikbaar zijn pakt ie de bovenstaande als voorkeursverbinding.
Heini van Bergen says
Oh, wat Niels zegt dus 😉
Frank Meeuwsen says
Hi Niels & Heini, mooi dat jullie dat aangeven. Ik wilde deze post niet té lang maken en alle opties benoemen. Maar dit had ik inderdaad ook gevonden. Echter, bij mij werkt die volgorde niet. Mijn ethernet verbinding staat bovenaan, toch pakt hij als eerste mijn wifi. Ik heb geen idee waarom dat gebeurt. Vandaar deze oplossing voor mezelf.
Marnix van de Veen says
Of je zet in netwerkvoorkeuren de lanverbinding boven de WiFi… Dan zou het ook goed moeten gaan!
Frank Meeuwsen says
Ja dat zou je denken…om een of andere reden werkt dat bij mij dus niet…
Robert Arts says
In je netwerkinstellingen ethernet boven WiFi zetten lost je probleem al op. Mac OS zit nog steeds vol met gebruikersvriendelijke mogelijkheden (deze moet je weten (te zitten)), zonder allerlei codes en scripts te typen.
Frank Meeuwsen says
Ik zou graag zien dat het dat probleem oplost. Dat doet het in mijn geval niet (I’ve tried…). Vandaar deze oplossing.