Como posso controlar automaticamente o horário de expediente quando me conecto ao Wi-Fi do meu escritório?

8

Estou procurando uma solução que inicie um cronômetro sempre que entrar no wifi do meu escritório e o interrompa quando sair. Essencialmente, deve registrar as horas que passei no escritório. Estou ciente de que existe um software iOS para isso, mas eu gosto da duração da bateria.

Um bônus extra seria se a solução pudesse registrar as horas no iCal automaticamente.

yusf
fonte
Interessante, eu não sei um aplicativo que pode fazer isso ...
Martin Marconcini
Presumo que seu trabalho tenha um nome de wifi diferente / distinto (essid) do que você usa em casa?
Alsplin 04/04
@alesplin Sim, de fato.
yusf
Eu posso ter um pouco de hack que pode ser modificado para isso. Vou dar uma olhada e ver.
Alsplin
@alesplin Como foi?
yusf

Respostas:

9

O ControlPlane pode ser algo que você pode usar para fazer isso:

O ControlPlane determina onde você está ou o que está fazendo com base em várias fontes de evidências disponíveis e, em seguida, reconfigura automaticamente o seu Mac com base em suas preferências. As fontes de evidência podem incluir sua localização atual, redes Wi-Fi visíveis, dispositivos USB conectados, aplicativos em execução e muito mais. Você pode até escrever suas próprias fontes de evidência usando scripts de shell!

Em poucas palavras, você pode fornecer ao ControlPlane uma "fonte de evidência", como

  • WiFi, redes dentro do alcance ou com base na rede à qual você está conectado atualmente

insira a descrição da imagem aqui

Em seguida, execute um conjunto de ações ao entrar (ou sair) de um contexto específico, como

  • Abra qualquer arquivo, incluindo iniciar aplicativos
  • Execute um script, como AppleScript ou shell script

insira a descrição da imagem aqui

Meu pensamento aqui é que, se o ControlPlane sabe como o wifi do seu escritório é chamado, você pode criar regras para que, ao se conectar, inicie um aplicativo ou script de shell para começar a registrar suas horas. Em seguida, quando você se desconecta, interrompe o aplicativo ou executa outro script de shell para parar de registrar suas horas.

Sei que essa pode não ser a solução "bala de prata" que você estava procurando, mas pode valer a pena tentar. Você ainda precisará encontrar algum tipo de aplicativo / script de timer, mas essa provavelmente é a parte mais fácil do problema :)

binarybob
fonte
Obrigado pela resposta! O ControlPlane parece um pouco exagerado no começo (estava procurando por uma solução mais leve), mas tentarei quando tiver tempo para aprender AppleScript.
yusf
@yusf Sem problemas. Espero que ajude. Eu também estaria interessado em sua solução final quando você chegar lá! :-)
binarybob 18/04/12
4

Você pode usar o comando networksetup -getairportnetwork <device>para obter o nome da sua rede sem fio conectada no momento (onde está o ID do dispositivo do seu aeroporto - provavelmente en1).

A partir daí, você pode usar o launchd para agendar um script para ser executado a cada 5 minutos, o que obterá o nome da rede sem fio à qual você está conectado e será registrado quando você se conectar ao seu trabalho por wi-fi.

Dependendo do que você deseja, você pode usar o mesmo script para registrar outra entrada quando perceber que não está mais conectado ao seu trabalho wi-fi ou para publicar algum tipo de notificação (talvez usando rosnado) em intervalos específicos. Algo como "Estou no trabalho há 9 horas - hora de ir para casa".

Ou você pode usar os horários de início / término em um log em execução e escrever outro script para analisá-lo e criar algum tipo de relatório.

Eu tenho pedaços desses tipos de scripts por aí, se o tempo no trabalho permitir, vou adicionar algo aqui.

man launchd é bastante útil.

alesplin
fonte
Obrigado @alespin! Abre-se para uma abordagem mínima agradável. :)
yusf 19/04/12
1

Aqui está outra opção para pessoas que tentam fazer isso.

Em vez de executar um comando a cada 5 minutos, você pode executá-lo sempre que a pasta /Library/Preferences/SystemConfiguration/mudar. Isso geralmente acontece apenas quando há algum tipo de alteração na rede.

Você pode fazer isso usando o Lingon ou criar seu próprio launchd, que seria algo como isto:

<?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, você gostaria de substituir /path/to/your/script.sho caminho real.

Observe que você pode precisar incluir um 'sleep 10' próximo ao início do script para dar ao Mac a chance de fazer todos os ajustes assim que ocorrer uma alteração na rede.

Além disso, a maneira mais fácil de obter o nome (SSID) da rede AirPort à qual você está conectado é:

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

O airportcomando pode ser encontrado /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airportem 10.8 (e acredito que 10.7 e 10.6)

Geralmente, eu o vinculo a / usr / local / bin:

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

você pode precisar sudodesse comando, dependendo de como o seu / usr / local / bin / está configurado.

Por último, mas não menos importante, você precisa considerar o que fazer quando colocar o laptop em modo de suspensão. Por exemplo, se você está no escritório das 9h às 17h e dorme seu laptop às 5h, também deseja gravar isso, certo? Caso contrário, como você saberá quando saiu?

Para isso, recomendo o SleepWatcher 2.2, disponível em http://www.bernhard-baehr.de (gratuito, código fonte incluído). Isso permitirá que você execute um script de shell sempre que o Mac acordar ou dormir.

A única outra consideração é o que fazer se você fizer logoff ou desligar o computador, em vez de suspendê-lo. Eu não tenho uma boa resposta para essa. Teoricamente, um LogoutHook seria a resposta, mas eles parecem não confiáveis, especialmente no desligamento e no logout.

Uma sugestão completamente não relacionada

Você mencionou que possui um dispositivo iOS. Talvez uma maneira de resolver esse problema seja criar um lembrete para sempre que você chegar ou sair do trabalho. Quando o lembrete disparar, ative a Siri e diga "Lembre-se de deixar o trabalho às 17:00" ou "Lembre-se de chegar ao trabalho às 9:00" e o Siri fará uma anotação. Não é elegante nem completamente automático, mas se eu estivesse olhando para rastrear horas faturáveis, não me importaria com um pouco de redundância :-)

TJ Luoma
fonte