オフィスのWi-Fiに接続したときに、営業時間を自動的に追跡するにはどうすればよいですか?


8

オフィスのwifiにサインインするたびにタイマーを開始し、離れるとタイマーを停止するソリューションを探しています。基本的に、私がオフィスで過ごした時間を記録する必要があります。このためのiOSソフトウェアがあることは承知していますが、バッテリー時間はそのままです。

追加のボーナスは、ソリューションがiCalに時間を自動的に記録できる場合です。


興味深いことに、これを実行できるアプリはわかりません…
Martin Marconcini、2012

私はあなたの仕事があなたが家を使うのとは異なる/明確なwifi名(essid)を持っていると思いますか?
alesplin 2012

@alesplinはい、確かに。
yusf

私はこれのために変更できる少しハックを持っているかもしれません。見てみます。
alesplin 2012

@alesplinどうだった?
yusf 2012

回答:


9

ControlPlaneは、これを実現するために使用できるものかもしれません。

ControlPlaneは、利用可能なエビデンスソースの数に基づいて現在の場所または実行中の処理を決定し、好みに基づいてMacを自動的に再構成します。エビデンスソースには、現在地、WiFiネットワーク、接続されているUSBデバイス、実行中のアプリケーションなどが含まれます。シェルスクリプトを使用して、独自の証拠ソースを作成することもできます。

簡単に言えば、ControlPlaneに次のような「証拠ソース」を与えることができます。

  • WiFi、範囲内のネットワーク、または現在接続しているネットワークに基づくネットワーク

ここに画像の説明を入力してください

次に、特定のコンテキストに入る(または出る)ときに一連のアクションを実行します。

  • アプリケーションの起動を含め、任意のファイルを開きます
  • AppleScriptやシェルスクリプトなどのスクリプトを実行する

ここに画像の説明を入力してください

ここでの私の考えは、ControlPlaneがあなたのオフィスのwifiが何と呼ばれるかを知っている場合、それに接続したときにアプリケーションまたはシェルスクリプトを起動して時間のロギングを開始するようにルールを作成できるということです。次に、接続を解除すると、アプリケーションを停止するか、別のシェルスクリプトを実行して、時間の記録を停止します。

これはあなたが探していた「特効薬」の解決策ではないかもしれませんが、試してみる価値があるかもしれません。あなたはまだ何らかのタイマーアプリ/スクリプトを見つける必要がありますが、それはおそらく問題のより簡単な部分です:)


答えてくれてありがとう!ControlPlaneは、最初は少しやり過ぎになっているようです(もっと軽量なソリューションを探していました)が、AppleScriptを学ぶ時間があるときに試してみることにします。
yusf 2012

@yusf問題ありません。うまくいけば、それが役立ちます。あなたがそこに着いたら、あなたの最終的な解決策にも興味があります!:-)
binarybob

4

このコマンドnetworksetup -getairportnetwork <device>を使用して、現在接続されているワイヤレスネットワークの名前を取得できます(空港のデバイスID、おそらくen1です)。

そこから、launchdを使用して、5分ごとに実行するようにスクリプトをスケジュールできます。これにより、接続しているワイヤレスネットワークの名前が取得され、仕事用のWi-Fiに初めて接続したときにログに記録されます。

必要に応じて、同じスクリプトを使用して、仕事のWi-Fiに接続されなくなったことに気付いたときに別のエントリをログに記録したり、特定の間隔で何らかの通知(おそらくうなり声を使用)を投稿したりできます。「私は9時間仕事をしている-家に帰る時間だ」という線に沿った何か。

または、実行中のログで開始時刻と終了時刻を使用し、別のスクリプトを記述してそれを解析し、何らかのレポートを作成することもできます。

私はこれらの種類のスクリプトを少しずつ持っていますが、仕事の時間が許せば、ここに何かを追加します。

man launchd とても便利です。


@alespinありがとうございます!素敵な最小限のアプローチを開きます。:)
yusf 2012

1

これをしようとする人のための別のオプションがあります。

5分ごとにコマンドを実行するのではなく、フォルダー/Library/Preferences/SystemConfiguration/が変更されるたびにコマンドを実行できます。これは通常、何らかのネットワークの変更がある場合にのみ発生します。

Lingonを使用してこれを行うか、次のような独自のlaunchd plistを作成できます。

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

もちろん/path/to/your/script.sh、実際のパスに置き換える必要があります。

ネットワークの変更が発生した後、Macにすべての調整を行う機会を与えるために、スクリプトの先頭近くに「sleep 10」を含める必要がある場合があることに注意してください。

また、接続しているAirMacネットワークの名前(SSID)を取得する最も簡単な方法は次のとおりです。

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

airportコマンドはで見つけることができます/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport(と私は10.7と10.6と信じて)10.8に

通常は/ usr / local / binにリンクします。

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

sudo/ usr / local / bin /の設定方法によっては、このコマンドが必要になる場合があります。

最後に大事なことを言い忘れましたが、ラップトップをスリープ状態にするときに何をすべきかを考える必要があります。たとえば、9時から5時までオフィスにいて、ラップトップを5時に寝ている場合も、それを録音したいですか?さもなければ、あなたがどこを去ったかをどうやって知るのですか?

そのため、http://www.bernhard-baehr.de(無料のソースコードを含む)から入手できるSleepWatcher 2.2をお勧めします。これにより、Macが起動またはスリープするときにシェルスクリプトを実行できます。

その他の唯一の考慮事項は、コンピュータをスリープ状態にする代わりに、ログアウトまたはシャットダウンした場合の対処です。それについては良い答えがありません。理論的にはLogoutHookが答えになりますが、特にシャットダウンとログアウトでは信頼性が低いようです。

まったく無関係の提案

あなたはあなたがiOSデバイスを持っていると述べました。おそらく、この問題を解決する1つの方法は、仕事に到着または退社するたびにリマインダーを作成することです。リマインダーが鳴ったら、Siriをトリガーして、「午後5時に残された仕事を記憶する」または「午前9時に仕事に着いたことを記憶する」と言うと、Siriがメモします。エレガントでも完全自動でもありませんが、請求可能な時間を追跡している場合は、少し冗長になってもかまいません:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.