Как я могу автоматически отслеживать часы работы в офисе при подключении к офисной сети Wi-Fi?

Я ищу решение, которое запускает таймер всякий раз, когда я вхожу в свой офисный Wi-Fi, и останавливает его, когда я ухожу. По сути, он должен регистрировать часы, которые я провел в офисе. Я знаю, что для этого есть программное обеспечение iOS, но мне нравится время работы от батареи.

Дополнительным бонусом было бы, если бы решение могло автоматически регистрировать часы в iCal.

Интересно, я не знаю приложения, которое может это сделать…
Я предполагаю, что ваша работа имеет другое / отличное имя Wi-Fi (essid), чем вы используете дома?
@alesplin Да, действительно.
У меня может быть небольшой хак, который можно модифицировать для этого. Я посмотрю на это и посмотрю.
@alesplin Как все прошло?
Я застрял на приближающемся дедлайне на работе. Частичный ответ ниже.

Ответы (3)

ControlPlane может быть чем-то, что вы можете использовать для этого:

ControlPlane определяет, где вы находитесь или что вы делаете, на основе ряда доступных источников доказательств, а затем автоматически перенастраивает ваш Mac в соответствии с вашими предпочтениями. Источники доказательств могут включать ваше текущее местоположение, видимые сети Wi-Fi, подключенные USB-устройства, запущенные приложения и многое другое. Вы даже можете написать свои собственные источники доказательств, используя сценарии оболочки!

Короче говоря, вы можете предоставить ControlPlane «источник доказательств», например

  • Wi-Fi, либо сети в пределах досягаемости, либо на основе сети, к которой вы в данный момент подключены

введите описание изображения здесь

Затем выполните набор действий при входе (или выходе) из определенного контекста, например

  • Открывайте любой файл, в том числе запускающие приложения
  • Запустите сценарий, например AppleScript или сценарий оболочки.

введите описание изображения здесь

Я думаю, что если ControlPlane знает, как называется ваш офисный Wi-Fi, вы можете создать правила, чтобы при подключении к нему вы запускали приложение или сценарий оболочки, чтобы начать регистрировать свои часы. Затем, когда вы отключаетесь, вы останавливаете приложение или запускаете другой сценарий оболочки, чтобы прекратить регистрацию ваших часов.

Я понимаю, что это может быть не то решение «серебряной пули», которое вы искали, но, возможно, стоит попробовать. Вам все равно придется найти какое-то приложение/скрипт таймера, но это, вероятно, более легкая часть проблемы :)

Спасибо за ответ! Поначалу ControlPlane кажется немного излишним (искал что-то более легкое решение), но я попробую его, как только у меня будет время изучить AppleScript.
@yusf Нет проблем. Надеюсь, это поможет. Я также был бы заинтересован в вашем окончательном решении, когда вы туда доберетесь! :-)

Вы можете использовать команду networksetup -getairportnetwork <device>, чтобы получить имя вашей беспроводной сети, подключенной в данный момент (где находится идентификатор устройства вашего аэропорта — вероятно, en1).

Оттуда вы можете использовать launchd, чтобы запланировать запуск сценария каждые 5 минут или около того, который будет получать имя беспроводной сети, к которой вы подключены, и регистрировать ее при первом подключении к вашей рабочей сети Wi-Fi.

В зависимости от того, что вы хотите, вы можете использовать тот же скрипт для регистрации другой записи, когда он заметит, что вы больше не подключены к своему рабочему Wi-Fi, или для публикации какого-либо уведомления (возможно, с помощью рычания) через определенные промежутки времени. Что-то вроде «Я проработал 9 часов — пора домой».

Или вы можете использовать время начала/окончания в рабочем журнале и написать другой скрипт, чтобы проанализировать его и создать какой-то отчет.

У меня валяются обрывки подобных скриптов, если время на работе позволит, я что-нибудь сюда добавлю.

man launchdвесьма полезно.

Спасибо @alespin! Открывается для приятного минимального подхода. :)

Вот еще один вариант для тех, кто пытается это сделать.

Вместо того, чтобы запускать команду каждые 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 заметит это. Не элегантный и не полностью автоматический, но если бы я смотрел на отслеживание оплачиваемых часов, я бы не возражал против небольшой избыточности :-)