• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

WLAN Netzwerk bestimmen + Bonusfragen =]

babaloo

Golden Delicious
Registriert
22.08.08
Beiträge
6
Hi,

wie kann ich per Applescript (oder sonstwie) ermitteln, ob mein Rechner sich gerade in einem bestimmten WLAN-Netz befindet?

Hintergrund:
Auch wenn mein MacBook mal nicht mit auf Reisen geht, möchte ich es von unterwegs aus erreichen können. Das klappt prima mit Jaadu auf dem iPhone, aber logischerweise nur, wenn mein MacBook auch online ist.

Aber leider verbindet sich meine Time Capsule nach der täglichen Zwangstrennung durch den Provider nicht mehr mit dem Modem. Abhilfe schafft da ein Neustart der Time Capsule. Das habe ich mit Automator realisiert und als Programm "Reconnect" abgespeichert.

Nun möchte ich alle 5 oder alle 10 Minuten checken lassen, ob mein MacBook auch online ist. Falls nicht, soll Reconnect laufen. Dazu habe ich folgendes Applescript:

try
do shell script "curl \"http://apple.com\""
on error
run application "Reconnect"
end try

Dieses Script möchte ich zum einen erweitern um eine Abfrage nach einem bestimmten Netzwerk. Es soll nämlich nur laufen, wenn sich das MacBook im heimischen Netzwerk befindet und nicht laufend Reconnect starten, wenn ich mit dem MacBook unterwegs bin und keine oder eine andere WLAN-Verbindung habe.

Außerdem muss ich den ganzen Kram ja irgendwie automatisch alle 5 oder 10 Minuten laufen lassen. Und das möglichst unsichtbar. Wie speichere ich das Ergebnis also ab, damit ich es mit CronniX im entsprechenden Takt starten kann, ohne dass beim Ablauf des Scripts selber sichtbar ein Programm startet? Ausgenommen natürlich vom Fall, dass Reconnect gestartet wird. Das darf ich ruhig mitkriegen. Muss ich das alles vielleicht doch als Shellscript realisieren?

Hoffentlich könnt ihr mir helfen. Ich bin auch für jede Teilhilfe dankbar. Und wenn jemand eine ganz andere Idee hat, nur her damit!
 

babaloo

Golden Delicious
Registriert
22.08.08
Beiträge
6
Problem gelöst. :D

Falls es jemanden interessiert: Durch Hilfe auf einem anderen Board bin ich auf die Idee gekommen, das Script nicht alle paar Minuten erneut zu starten, sondern es die ganze Zeit laufen zu lassen und ihm nur eine paarminütige Ruhepause zu verdonnern. Das geht mit dem idle-Befehl zusammen mit return (und der Pause in Sekunden).

Den Netzwerknamen konnte ich (durch die gleiche Hilfe) aus dem System Profiler auslesen.

Dann musste ich noch kapieren, wie man ein stay open script abspeichert. Man macht einfach einen Haken bei "Nicht automatisch beenden".

Außerdem speicherte ich das Script nicht einfach als Programm sondern als Programm-Bundle. Dadurch kommt man mit einem Rechtsklick auf das Programm an den Paketinhalt, navigiert zur info.plist und erweitert diese so, dass das Programm unsichtbar läuft. Dazu fügt man der info.plist beispielsweise im Property List Editor das Item "Application is agent (UIElement)" hinzu und macht ein Häkchen dahinter.

Das fertige Script fügt man dann den Startobjekten hinzu und gut ist. :D

Hier das Ergebnis (vielleicht kanns ja noch jemand brauchen):
Code:
on idle
	set command to "system_profiler SPAirPortDataType"
	set output to paragraphs of (do shell script command)
	set networkname to missing value
	repeat with |line| in output
		if |line| contains "Current Wireless Network:" then
			set colonoffset to offset of ":" in |line|
			set networkname to (characters (colonoffset + 2) through -1 of |line|) as Unicode text
		end if
	end repeat
	if networkname is "Name des WLAN-Netzwerks" then
		try
			do shell script "curl \"http://apple.com\""
		on error
			run application "Reconnect"
		end try
	end if
	return 300
end idle
 
  • Like
Reaktionen: deckl