¿Cómo puedo realizar un seguimiento automático de las horas de oficina cuando me conecto a la red Wi-Fi de mi oficina?

Estoy buscando una solución que inicie un temporizador cada vez que inicie sesión en el wifi de mi oficina y lo detenga cuando me vaya. Básicamente, debería registrar las horas que he pasado en la oficina. Soy consciente de que hay un software iOS para esto, pero me gusta el tiempo de batería tal como está.

Sería una ventaja adicional si la solución pudiera registrar las horas en iCal automáticamente.

Interesante, no conozco una aplicación que pueda hacer esto...
Supongo que su trabajo tiene un nombre wifi diferente/distinto (essid) que el que usa en su casa.
@alesplin Sí, de hecho.
Es posible que tenga un pequeño truco que se puede modificar para esto. Le echaré un vistazo y veré.
@alesplin ¿Cómo te fue?
Me quedé atascado en una próxima fecha límite en el trabajo. Respuesta parcial a continuación.

Respuestas (3)

ControlPlane podría ser algo que puede usar para lograr esto:

ControlPlane determina dónde se encuentra o qué está haciendo en función de una serie de fuentes de evidencia disponibles y luego reconfigura automáticamente su Mac en función de sus preferencias. Las fuentes de evidencia pueden incluir su ubicación actual, redes WiFi visibles, dispositivos USB conectados, aplicaciones en ejecución y más. ¡Incluso puede escribir sus propias fuentes de evidencia utilizando scripts de shell!

En pocas palabras, puede darle a ControlPlane una "fuente de evidencia", como

  • WiFi, ya sea redes dentro del alcance o según la red a la que está conectado actualmente

ingrese la descripción de la imagen aquí

Luego realice un conjunto de acciones al ingresar (o salir) de un contexto particular, como

  • Abra cualquier archivo, incluidas las aplicaciones de inicio
  • Ejecute un script, como AppleScript o script de shell

ingrese la descripción de la imagen aquí

Mi opinión aquí es que si ControlPlane sabe cómo se llama el wifi de su oficina, puede crear reglas para que, cuando se conecte, inicie una aplicación o script de shell para comenzar a registrar sus horas. Luego, cuando se desconecta, detiene la aplicación o ejecuta otro script de shell para dejar de registrar sus horas.

Me doy cuenta de que esta podría no ser la solución "bala de plata" que estaba buscando, pero podría valer la pena intentarlo. Todavía tendrás que encontrar algún tipo de aplicación/script de temporizador, pero esa es probablemente la parte más fácil del problema :)

¡Gracias por la respuesta! ControlPlane parece ser un poco exagerado al principio (estaba buscando una solución más liviana), pero lo probaré una vez que tenga tiempo para aprender AppleScript.
@yusf No hay problema. Espero que ayude. ¡También me interesaría tu solución final cuando llegues allí! :-)

Puede usar el comando networksetup -getairportnetwork <device>para obtener el nombre de su red inalámbrica conectada actualmente (dónde está la identificación del dispositivo de su aeropuerto, probablemente en1).

Desde allí, puede usar launchd para programar una secuencia de comandos para que se ejecute cada 5 minutos más o menos, lo que obtendrá el nombre de la red inalámbrica a la que está conectado y registrará cuando se conecte por primera vez a su wi-fi de trabajo.

Dependiendo de lo que desee, puede usar el mismo script para registrar otra entrada cuando se dé cuenta de que ya no está conectado a su wi-fi de trabajo, o para publicar algún tipo de notificación (tal vez usando un gruñido) en intervalos específicos. Algo así como "He estado en el trabajo durante 9 horas, es hora de irme a casa".

O puede usar las horas de inicio/finalización en un registro en ejecución y escribir otro script para analizarlo y crear algún tipo de informe.

Tengo fragmentos de este tipo de guiones por ahí, si el tiempo en el trabajo lo permite, agregaré algo aquí.

man launchdes bastante útil

¡Gracias @alespin! Se abre para un buen enfoque mínimo. :)

Aquí hay otra opción para las personas que intentan hacer esto.

En lugar de ejecutar un comando cada 5 minutos, puede ejecutarlo cada vez que /Library/Preferences/SystemConfiguration/cambie la carpeta. Esto generalmente sucede solo cuando hay algún tipo de cambio en la red.

Puede hacer esto usando Lingon o hacer su propia plist de lanzamiento que se vería así:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>AbandonProcessGroup</key>
        <true/>
        <key>Label</key>
        <string>localhost.on_networkchange</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/your/script.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>WatchPaths</key>
        <array>
                <string>/Library/Preferences/SystemConfiguration/</string>
        </array>
</dict>

Obviamente, querrás reemplazar /path/to/your/script.sha la ruta real.

Tenga en cuenta que es posible que deba incluir un 'dormir 10' cerca del comienzo de la secuencia de comandos para darle a la Mac la oportunidad de realizar todos sus ajustes una vez que se haya producido un cambio de red.

Además, la forma más fácil de obtener el nombre (SSID) de la red AirPort a la que está conectado es:

airport -I | awk -F': ' '/ SSID/{print $NF}'

El airportcomando se puede encontrar /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airporten 10.8 (y creo que 10.7 y 10.6)

Generalmente lo vinculo a /usr/local/bin:

ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport

es posible que necesite sudoese comando, dependiendo de cómo esté configurado su /usr/local/bin/.

Por último, pero no menos importante, debe considerar qué hacer cuando pone su computadora portátil a dormir. Por ejemplo, si está en la oficina de 9 a 5 y duerme su computadora portátil a las 5, también desea grabar eso, ¿verdad? De lo contrario, ¿cómo sabrás cuándo te fuiste?

Para eso recomiendo SleepWatcher 2.2 que está disponible en http://www.bernhard-baehr.de (gratis, código fuente incluido). Eso le permitirá ejecutar un script de shell cada vez que su Mac se active o se duerma.

La única otra consideración es qué hacer si cierra sesión o apaga su computadora, en lugar de dormirla. No tengo una buena respuesta para eso. Teóricamente, un LogoutHook sería la respuesta, pero parece poco confiable, especialmente en el apagado frente al cierre de sesión.

Una sugerencia completamente ajena

Usted mencionó que tiene un dispositivo iOS. Quizás una forma de resolver este problema sería crear un Recordatorio para cada vez que llegue o salga del trabajo. Cuando suene el recordatorio, activa a Siri y di "Recuerda que saliste del trabajo a las 5:00 p. m." o "Recuerda que llegaste al trabajo a las 9:00 a. m." y Siri lo anotará. No es elegante ni completamente automático, pero si quisiera rastrear las horas facturables, no me importaría un poco de redundancia :-)