Я ищу решение, которое запускает таймер всякий раз, когда я вхожу в свой офисный Wi-Fi, и останавливает его, когда я ухожу. По сути, он должен регистрировать часы, которые я провел в офисе. Я знаю, что для этого есть программное обеспечение iOS, но мне нравится время работы от батареи.
Дополнительным бонусом было бы, если бы решение могло автоматически регистрировать часы в iCal.
ControlPlane может быть чем-то, что вы можете использовать для этого:
ControlPlane определяет, где вы находитесь или что вы делаете, на основе ряда доступных источников доказательств, а затем автоматически перенастраивает ваш Mac в соответствии с вашими предпочтениями. Источники доказательств могут включать ваше текущее местоположение, видимые сети Wi-Fi, подключенные USB-устройства, запущенные приложения и многое другое. Вы даже можете написать свои собственные источники доказательств, используя сценарии оболочки!
Короче говоря, вы можете предоставить ControlPlane «источник доказательств», например
- Wi-Fi, либо сети в пределах досягаемости, либо на основе сети, к которой вы в данный момент подключены
Затем выполните набор действий при входе (или выходе) из определенного контекста, например
- Открывайте любой файл, в том числе запускающие приложения
- Запустите сценарий, например AppleScript или сценарий оболочки.
Я думаю, что если ControlPlane знает, как называется ваш офисный Wi-Fi, вы можете создать правила, чтобы при подключении к нему вы запускали приложение или сценарий оболочки, чтобы начать регистрировать свои часы. Затем, когда вы отключаетесь, вы останавливаете приложение или запускаете другой сценарий оболочки, чтобы прекратить регистрацию ваших часов.
Я понимаю, что это может быть не то решение «серебряной пули», которое вы искали, но, возможно, стоит попробовать. Вам все равно придется найти какое-то приложение/скрипт таймера, но это, вероятно, более легкая часть проблемы :)
Вы можете использовать команду networksetup -getairportnetwork <device>
, чтобы получить имя вашей беспроводной сети, подключенной в данный момент (где находится идентификатор устройства вашего аэропорта — вероятно, en1).
Оттуда вы можете использовать launchd, чтобы запланировать запуск сценария каждые 5 минут или около того, который будет получать имя беспроводной сети, к которой вы подключены, и регистрировать ее при первом подключении к вашей рабочей сети Wi-Fi.
В зависимости от того, что вы хотите, вы можете использовать тот же скрипт для регистрации другой записи, когда он заметит, что вы больше не подключены к своему рабочему Wi-Fi, или для публикации какого-либо уведомления (возможно, с помощью рычания) через определенные промежутки времени. Что-то вроде «Я проработал 9 часов — пора домой».
Или вы можете использовать время начала/окончания в рабочем журнале и написать другой скрипт, чтобы проанализировать его и создать какой-то отчет.
У меня валяются обрывки подобных скриптов, если время на работе позволит, я что-нибудь сюда добавлю.
man launchd
весьма полезно.
Вот еще один вариант для тех, кто пытается это сделать.
Вместо того, чтобы запускать команду каждые 5 минут, вы можете запускать ее при каждом /Library/Preferences/SystemConfiguration/
изменении папки. Обычно это происходит только при изменении сети.
Вы можете сделать это с помощью Lingon или создать свой собственный список запуска, который будет выглядеть примерно так:
<?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
на фактический путь.
Обратите внимание, что вам, возможно, потребуется включить «сон 10» в начале сценария, чтобы дать Mac возможность внести все свои корректировки после изменения сети.
Кроме того, самый простой способ получить имя (SSID) сети AirPort, к которой вы подключены, это:
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, вы тоже хотите записывать это, верно? Иначе как вы узнаете, когда вы ушли?
Для этого я рекомендую SleepWatcher 2.2, который доступен на http://www.bernhard-baehr.de (бесплатно, исходный код включен). Это позволит вам запускать сценарий оболочки всякий раз, когда ваш Mac просыпается или спит.
Единственное другое соображение — что делать, если вы выйдете из системы или выключите компьютер, вместо того, чтобы перевести его в спящий режим. У меня нет хорошего ответа на этот вопрос. Теоретически LogoutHook был бы ответом, но они кажутся ненадежными, особенно при завершении работы или выходе из системы.
Вы упомянули, что у вас есть устройство iOS. Возможно, одним из способов решения этой проблемы было бы создание напоминания всякий раз, когда вы прибываете или уходите с работы. Когда напоминание сработает, запустите Siri и скажите «Помни, что ушел с работы в 17:00» или «Помни, что пришел на работу в 9:00», и Siri заметит это. Не элегантный и не полностью автоматический, но если бы я смотрел на отслеживание оплачиваемых часов, я бы не возражал против небольшой избыточности :-)
Мартин Маркончини
алесплин
юсф
алесплин
юсф
алесплин