我正在寻找一种解决方案,该解决方案可以在每次登录办公室wifi时启动计时器,并在离开时停止计时器。它基本上应该记录我在办公室花费的时间。我知道有适用于此的iOS软件,但我喜欢电池续航时间。
如果解决方案可以自动在iCal中记录小时数,则将获得额外的奖励。
我正在寻找一种解决方案,该解决方案可以在每次登录办公室wifi时启动计时器,并在离开时停止计时器。它基本上应该记录我在办公室花费的时间。我知道有适用于此的iOS软件,但我喜欢电池续航时间。
如果解决方案可以自动在iCal中记录小时数,则将获得额外的奖励。
Answers:
您可以使用 ControlPlane完成此任务:
ControlPlane根据许多可用的证据来源确定您所在的位置或您在做什么,然后根据您的偏好自动重新配置Mac。证据来源可以包括您的当前位置,可见的WiFi网络,连接的USB设备,正在运行的应用程序等。您甚至可以使用Shell脚本编写自己的证据来源!
简而言之,您可以为ControlPlane提供“证据来源”,例如
- WiFi,范围内的网络或基于您当前连接的网络的网络
然后在进入(或离开)特定上下文时执行一系列操作,例如
- 打开任何文件,包括启动应用程序
- 运行脚本,例如AppleScript或Shell脚本
我的想法是,如果ControlPlane知道您的办公室wifi叫什么,您可以创建规则,以便在连接到它时启动应用程序或Shell脚本以开始记录您的时间。然后,当您断开连接时,您将停止应用程序或运行另一个Shell脚本以停止记录您的时间。
我意识到这可能不是您正在寻找的“银弹”解决方案,但是可能值得尝试。您仍然必须找到某种计时器应用程序/脚本,但这可能是问题中较容易的部分:)
您可以使用该命令networksetup -getairportnetwork <device>
获取当前连接的无线网络的名称(您的机场的设备ID在哪里-可能是en1)。
从那里,您可以使用launchd计划每5分钟左右运行一次的脚本,该脚本将获取您所连接的无线网络的名称,并在您首次连接到工作wi-fi时进行记录。
根据您的需要,然后您可以使用相同的脚本在发现您不再连接到工作wi-fi时记录另一个条目,或在特定的时间间隔发布某种通知(可能使用咆哮)。类似于“我已经工作9个小时了-该回家了”。
或者,您可以在运行的日志中使用开始/结束时间,并编写另一个脚本来解析它并创建某种报告。
我随处可见这些类型的脚本,如果工作时间允许,我将在此处添加一些内容。
man launchd
非常有用。
这是尝试这样做的人的另一种选择。
无需每5分钟运行一次命令,而是可以在文件夹/Library/Preferences/SystemConfiguration/
更改时运行它。通常仅在发生某种网络更改时才会发生这种情况。
您可以使用Lingon进行此操作,也可以创建自己的启动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
为实际路径。
请注意,您可能需要在脚本开头附近添加一个“ sleep 10”,以使Mac有机会在发生网络更改后进行所有调整。
另外,获得您所连接的AirPort网络的名称(SSID)的最简单方法是:
airport -I | awk -F': ' '/ SSID/{print $NF}'
该airport
命令可以/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport
在10.8中找到(我相信10.7和10.6)
我通常将其链接到/ 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何时唤醒或睡眠,您都可以运行Shell脚本。
唯一的其他考虑因素是注销或关闭计算机(而不是使其处于睡眠状态)时该怎么办。我没有一个好的答案。从理论上讲,LogoutHook可以解决问题,但似乎不可靠,尤其是在关机与注销之间。
您提到您有一台iOS设备。解决此问题的一种方法可能是为您的到达或离开工作创建提醒。提醒消失后,触发Siri并说“记住在下午5点离开工作”或“记住在9am到达工作地点”,Siri会记录下来。既不优雅也不是全自动的,但是如果我要跟踪计费时间,我不会介意一点冗余:-)