Comment puis-je suivre automatiquement les heures d'ouverture lorsque je me connecte au Wi-Fi de mon bureau?

8

Je recherche une solution qui démarre une minuterie chaque fois que je me connecte à mon bureau wifi et l'arrête quand je suis parti. Il devrait essentiellement consigner les heures que j'ai passées au bureau. Je suis conscient qu'il existe un logiciel iOS pour cela, mais j'aime l'autonomie de ma batterie telle qu'elle est.

Un bonus supplémentaire serait si la solution pouvait enregistrer automatiquement les heures dans iCal.

yusf
la source
Intéressant, je ne connais pas d'application qui puisse faire ça…
Martin Marconcini
Je suppose que votre travail a un nom wifi différent / distinct (essentiel) que vous utilisez une maison?
alesplin
@alesplin Oui en effet.
yusf
Je peux avoir un peu de hack qui peut être modifié pour cela. Je vais y jeter un œil et voir.
alesplin
@alesplin Comment ça s'est passé?
yusf

Réponses:

9

ControlPlane peut être quelque chose que vous pouvez utiliser pour accomplir cela:

ControlPlane détermine où vous vous trouvez ou ce que vous faites en fonction d'un certain nombre de sources de preuves disponibles, puis reconfigure automatiquement votre Mac en fonction de vos préférences. Les sources de preuves peuvent inclure votre position actuelle, les réseaux WiFi visibles, les périphériques USB connectés, les applications en cours d'exécution et plus encore. Vous pouvez même écrire vos propres sources de preuves à l'aide de scripts shell!

En un mot, vous pouvez donner à ControlPlane une "source de preuves", telle que

  • WiFi, soit des réseaux à portée ou basés sur le réseau auquel vous êtes actuellement connecté

entrez la description de l'image ici

Effectuez ensuite un ensemble d'actions lorsque vous entrez (ou quittez) un contexte particulier, tel que

  • Ouvrez n'importe quel fichier, y compris le démarrage des applications
  • Exécutez un script, comme AppleScript ou un script shell

entrez la description de l'image ici

Ma pensée ici est que si ControlPlane sait comment s'appelle le wifi de votre bureau, vous pouvez créer des règles pour que lorsque vous vous connectez, vous démarrez une application ou un script shell pour commencer à enregistrer vos heures. Ensuite, lorsque vous vous déconnectez, vous arrêtez l'application ou exécutez un autre script shell pour arrêter l'enregistrement de vos heures.

Je me rends compte que ce n'est peut-être pas la solution miracle que vous recherchiez, mais cela pourrait valoir la peine d'être essayé. Vous devrez toujours trouver une sorte d'application / script de minuterie, mais c'est probablement la partie la plus facile du problème :)

binarybob
la source
Merci pour la réponse! ControlPlane semble être un peu exagéré au début (cherchait quelque chose de plus léger) mais je vais l'essayer une fois que j'aurai le temps d'apprendre AppleScript.
2012
@yusf Aucun problème. J'espère que cela vous aidera. Je serais également intéressé par votre solution finale lorsque vous y arriverez! :-)
binarybob
4

Vous pouvez utiliser la commande networksetup -getairportnetwork <device>pour obtenir le nom de votre réseau sans fil actuellement connecté (où est l'ID de l'appareil de votre aéroport - probablement en1).

À partir de là, vous pouvez utiliser launchd pour planifier l'exécution d'un script toutes les 5 minutes environ qui obtiendra le nom du réseau sans fil auquel vous êtes connecté et vous connectera lorsque vous vous connecterez pour la première fois à votre réseau Wi-Fi professionnel.

Selon ce que vous voulez, vous pouvez ensuite utiliser le même script pour enregistrer une autre entrée lorsqu'il remarque que vous n'êtes plus connecté à votre travail wi-fi, ou pour publier une sorte de notification (peut-être en utilisant un grognement) à des intervalles spécifiques. Quelque chose du genre "Je suis au travail depuis 9 heures - il est temps de rentrer à la maison".

Ou vous pouvez utiliser les heures de début / fin dans un journal en cours d'exécution et écrire un autre script pour l'analyser et créer une sorte de rapport.

J'ai des morceaux de ces types de scripts qui traînent, si le temps au travail le permet, j'ajouterai quelque chose ici.

man launchd est assez utile.

alesplin
la source
Merci @alespin! S'ouvre pour une belle approche minimale. :)
yusf
1

Voici une autre option pour les personnes qui essaient de le faire.

Plutôt que d'exécuter une commande toutes les 5 minutes, vous pouvez l'exécuter chaque fois que le dossier /Library/Preferences/SystemConfiguration/change. Cela se produit généralement uniquement en cas de changement de réseau.

Vous pouvez le faire en utilisant Lingon ou créer votre propre liste de lancement qui ressemblerait à ceci:

<?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>

De toute évidence, vous souhaitez remplacer /path/to/your/script.shle chemin réel.

Notez que vous devrez peut-être inclure un «sommeil 10» près du début du script pour donner au Mac une chance de faire tous ses ajustements une fois qu'un changement de réseau s'est produit.

De plus, la façon la plus simple d'obtenir le nom (SSID) du réseau AirPort auquel vous êtes connecté est:

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

La airportcommande peut être trouvée /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airportdans 10.8 (et je crois 10.7 et 10.6)

Je le relie généralement à / usr / local / bin:

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

vous devrez peut-être exécuter sudocette commande, selon la configuration de votre / usr / local / bin /.

Enfin, vous devez vous demander quoi faire lorsque vous mettez votre ordinateur portable en veille. Par exemple, si vous êtes au bureau de 9 h à 17 h et que vous dormez à 5 h, vous voulez enregistrer cela aussi, non? Sinon, comment saurez-vous quand vous êtes parti?

Pour cela, je recommande SleepWatcher 2.2 qui est disponible sur http://www.bernhard-baehr.de (gratuit, code source inclus). Cela vous permettra d'exécuter un script shell chaque fois que votre Mac se réveille ou se met en veille.

La seule autre considération est de savoir quoi faire si vous vous déconnectez ou éteignez votre ordinateur, au lieu de le mettre en veille. Je n'ai pas de bonne réponse pour celle-là. Théoriquement, un LogoutHook serait la réponse, mais ceux-ci semblent peu fiables, en particulier à l'arrêt vs à la déconnexion.

Une suggestion complètement indépendante

Vous avez mentionné que vous disposiez d'un appareil iOS. Peut-être qu'une façon de résoudre ce problème serait de créer un rappel pour chaque fois que vous arrivez ou quittez le travail. Lorsque le rappel se déclenche, déclenchez Siri et dites «Rappelez-vous de quitter le travail à 17 h» ou «Rappelez-vous arrivé au travail à 9 h» et Siri en prendra note. Pas élégant ni complètement automatique, mais si je cherchais à suivre les heures facturables, cela ne me dérangerait pas un peu de redondance :-)

TJ Luoma
la source