¿Cómo decirle a Mensajes "No estoy en casa"?

4

Dejo mi Mac funcionando las 24 horas, los 7 días de la semana, pero no siempre estoy sentado allí.

¿Hay alguna manera de decirle a la Mac, o mensajes específicamente, si mi teléfono no está en la subred wifi local, no tome mensajes, déjelos para que mi iPhone los recoja.

Actualmente, si por alguna razón estoy fuera del alcance de iMessage pero soy capaz de recibir SMS, los mensajes nunca llegan a mi teléfono y no son retransmitidos después de fallar por el remitente, porque el sistema considera que entregarlos a mi Mac es prueba suficiente Los vi.

La pérdida de trabajos que me ofrecieron hace 6 horas, solo porque estaba afk, no es un espectáculo feliz para volver a casa.

Una opción: cerrar sesión en Messages en la Mac cada vez que salgo de casa ...
... nunca lo recordaré.
Editar: Cerrar la sesión de iMessage en Mac es considerablemente más problemático de lo que vale. Genera media docena de mensajes y correos electrónicos para cada dispositivo y cuenta ...

Tetsujin
fuente
es el no molestar en las notificaciones que no funcionan para usted
Ruskes
DND no sabe cuándo no estoy en la casa, pero el wifi sí, no puedo ver el teléfono, estoy fuera. No puedo ver ninguna manera de atar esos 2 datos bastante obvios.
Tetsujin
Entonces, ¿le gustaría que alguien le escriba un guión que haga eso?
Ruskes
Me gustaría que Apple se diera cuenta de que era un requisito razonable ... pero si tienes un voluntario para escribir un guión [o incluso si realmente me señalas en la dirección correcta y lo intentaré yo mismo] ... ;-))
Tetsujin
Leí un poco, ¿tiene el mensaje "Puede ser contactado por iMessages bajo este número de teléfono?
Ruskes

Respuestas:

6

En primer lugar, necesita homebrew instalado en su sistema. Si no lo ha hecho, visite http://brew.sh para obtener instrucciones, o hágamelo saber e intentaré guiarlo.

Entonces necesitas instalar arp-scan. Para hacerlo, abra una Terminal y escriba brew install arp-scan.

Próximo paso. Guarde el siguiente script, llamé check-iphone-available.scpt, pero puede cambiar el nombre si lo desea.

set IPHONE to do shell script "if /usr/local/bin/arp-scan -l | grep your-iphone-mac; then echo 1; else echo 0; fi" user name "your-username" password "your-password" with administrator privileges
tell application "System Events"
    tell process "Messages"
        tell menu bar 1
            tell menu bar item "Messages"
                tell menu "Messages"
                    tell menu item "My Status"
                        tell menu "My Status"
                            if IPHONE is not equal to "0" then
                                click menu item "Available"
                            else
                                click menu item "Away"
                            end if
                        end tell
                    end tell
                end tell
             end tell
        end tell
    end tell
end tell

Reemplazar your-username, your-passwordy your-iphone-mac.

  • your-username debe ser un usuario administrador que pueda sudo en su computadora.
  • your-password contraseña para ese usuario.
  • your-iphone-macse puede obtener en su iphone, vaya a Settings-> General-> Abouty copie Wi-Fi Address.

Dar permisos: chmod 775 check-iphone-available.scpt.

El script ejecuta como administrador el comando arp-scan. Este comando envía paquetes ARP a los hosts en la red local y muestra las respuestas que se reciben. El grepcomando busca tu iphone en la respuesta recibida por arp-scan. Si se encuentra el iPhone, a continuación, volver 1, de lo contrario, devuelve 0. En 1, la secuencia de comandos Haz clic en el elemento de menú disponible en mensajes, en 0, en la misma distancia (se puede cambiar por Offline, On the phone, etc).

Entonces, hagámoslo automáticamente.

Vaya a la carpeta /Users/your-username/Library/LaunchAgentsy guarde allí el siguiente archivo plist. Lo nombré com.username.checkiphone.plist, pero nuevamente, siéntase libre de cambiarlo.

<?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>Label</key>
  <string>com.your-username.checkiphone</string>

  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/osascript</string>
    <string>/Users/your-username/bin/check-iphone-available.scpt</string>
  </array>

  <key>Nice</key>
  <integer>1</integer>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardErrorPath</key>
  <string>/tmp/com.your-username.checkiphone-available.err</string>

  <key>StandardOutPath</key>
  <string>/tmp/com.your-username.checkiphone-available.out</string>
</dict>
</plist>

El archivo se explica por sí mismo. Lanzaremos el comando /usr/bin/osascript /Users/your-username/bin/check-iphone-available.scptcada 60 segundos, lo lanzaremos en la carga, guardaremos errores /tmp/com.username.checkiphone-available.erre iniciaremos sesión /tmp/com.username.checkiphone-available.out.

Nuevamente, reemplace your-usernameapropiadamente.

Último paso, dile al demonio launchd de Mac que lo cargue.

launchctl load com.your-username.checkiphone.plist

Para detener el guión, simplemente reemplace la palabra loadcon unloaden la oración anterior. Cuando reinicie su computadora, el script se cargará nuevamente. Para evitarlo, muévalo a otra carpeta.

jherran
fuente
Se ve muy bien, gracias. Tendré que revisarlo más adelante en la semana e informar de nuevo [ocupado durante los próximos días] +1 por ahora.
Tetsujin
Tengo la estructura básica funcionando ... pero ... veo 2 puntos de bloqueo potenciales: no puedo obtener arp-scan para encontrar ningún iDevice en la red, aunque encuentra todo el hardware cableado. Si puedo superar este punto, aún no he podido probar si la configuración Disponible o Ausente funcionará para iMessages [me tomó bastante tiempo descubrir que solo puede acceder a esas opciones si habilita Bonjour, o algunas otro protocolo de tipo iChat heredado]
Tetsujin
Lo intento desde que escribí mi respuesta y encontré un problema con arp-scan. Una vez que llegue a su casa, debe usar el iPhone (por ejemplo, abrir un sitio web) antes de poder descubrirlo. Si está intentando arp-scan desde la terminal, debe sudo. Para probar si funciona, simplemente apague el wifi en su teléfono.
jherran
arp-scan -interface = en1 -l puede encontrar todos los demás dispositivos en la red, pero no los iDevices, a menos que haya estado usando alguno de ellos recientemente. Si dejo que el teléfono duerma, se cae de la lista. Intenté cambiar manualmente el estado a Ausente en Mensajes y configurar el modo avión en el teléfono ... iMessages todavía aparecen en la compilación. Mi conjetura actual es que tendría que cerrar sesión para que se detenga.
Tetsujin
¿Podría por favor reemplazar /usr/local/bin/arp-scan -lcon nmap -sP 192.169.0.0/24? Es otra forma de escanear la red que debe funcionar. En la ip debes usar tu propio rango.
jherran
3

Segunda solución Esta vez basado en bluetooth.

Descargar Bluetooth Proximity Tasker . Lo siento amigo, pero cuesta $ 2.99.

Ejecute cualquier AppleScript cuando un dispositivo Bluetooth emparejado entre y salga del alcance. Ajuste el rango usando la intensidad de la señal.

Seleccione su dispositivo BT y pegue este script en In Range Applescript:

tell application "System Events"
    tell process "Messages"
        tell menu bar 1
            tell menu bar item "Messages"
                tell menu "Messages"
                    tell menu item "My Status"
                        tell menu "My Status"
                                click menu item "Available"
                        end tell
                    end tell
                end tell
             end tell
        end tell
    end tell
end tell

Reemplace Availablecon Awayen el script y pegue Out Of Range Applescript.

jherran
fuente
Echa un vistazo a mis divagaciones durante un par de horas en el canal de chat. Finalmente me di por vencido, ya que, aunque conseguí que tu estructura funcionara perfectamente usando arp -a, iMessage ignora totalmente el estado de ausencia establecido para Bonjour :( Les ​​agradezco mucho sus esfuerzos y haré +1 en esta respuesta también. tampoco puedo "aceptar" para otorgar el bono que mereces, ya que eso podría llevar a la gente a creer que la solución seguirá funcionando para iMessage.
Tetsujin
A menos que haya alguna forma de escribir el inicio de sesión y cerrar sesión ...
Tetsujin
Último intento. Reemplazar Awaycon Offline. El script básicamente navega por los menús de iMessage. Le digo que vaya a Messages → My Status → Offliney haga clic allí. Cuando lo hice, funciona para mis tres cuentas (jabber, bonjour y mensajes). Y no me importa la recompensa, yo también estoy usando esto, y tengo curiosidad por saber por qué no funciona en sus computadoras o en otras.
jherran
Me desperté esta mañana para encontrar que pensé que había estado ausente toda la noche, aunque todo estaba encendido. Intenté cambiar a Sin conexión; eso funcionó ... sin embargo, iMessages todavía llega a Mac. Volteé el teléfono al avión durante unos minutos mientras realizaba las pruebas, luego volví a encenderlo y luego mostré que estaba disponible. Entonces, todavía tengo los mismos 2 problemas, desafortunadamente. 1. Reconocimiento de 'cuando estoy aquí' y 2. Cumplimiento real de iMessage para 'creer' cuando estoy desconectado. Parece que estamos tan cerca, pero tan lejos. Soy iOS8 y Mavericks, por cierto, Mac Pro 3,1 [así que no BT LE] y, de hecho, BT desactivado para Mac, si eso puede ser diferente para usted.
Tetsujin
2

Tercera solución Para que esto funcione, debe tener una cuenta en ifttt.com (y la aplicación ifttt para iPhone ) y también una cuenta de Dropbox .

Creo un par de recetas en ifttt, si estoy en casa creo un archivo en Dropbox y si salgo de casa creo un archivo en Dropbox . Tendrás que modificarlo con tu dirección.

  • El primero crea un archivo llamado AtHomeen el directorio IFTTT/iOSen su carpeta de Dropbox.
  • En segundo lugar, cree un archivo llamado Outen el directorio IFTTT/iOSen su carpeta de Dropbox.

En ambas recetas cuando su iPhone ingrese o salga y el área que definió (su casa), cree uno u otro archivo en su Dropbox.

Entonces esto es más fácil de agregar para ambos archivos con este applecritp. El script busca archivos creados y, si existe, cambie iMessages en consecuencia y luego elimine el archivo. Si ninguno de esos archivos existe, no hará nada, por lo tanto, iMessages mantendrá el estado hasta que se cree el siguiente archivo.

on FileExists(theFile) -- (String) as Boolean
    tell application "System Events"
        if exists file theFile then
            return true
        else
            return false
        end if
    end tell
end FileExists

set IPHONE to FileExists("/Users/username/Dropbox/IFTTT/iOS/AtHome")
if IPHONE then
    set CHANGESTATUS to true
    do shell script "rm -rf /Users/username/Dropbox/IFTTT/iOS/AtHome"
else
    set CHANGESTATUS to false
end if

if CHANGESTATUS is not equal to true then
    set IPHONE to FileExists("/Users/username/Dropbox/IFTTT/iOS/Out")
    if IPHONE then
        set CHANGESTATUS to true
        set IPHONE to false
        do shell script "rm -rf /Users/username/Dropbox/IFTTT/iOS/Out"
    end if
end if

if CHANGESTATUS then
    tell application "System Events"
        tell process "Messages"
            tell menu bar 1
                tell menu bar item "Messages"
                    tell menu "Messages"
                        tell menu item "My Status"
                            tell menu "My Status"
                                if IPHONE then
                                    click menu item "Available"
                                else
                                    click menu item "Offline"
                                end if
                            end tell
                        end tell
                    end tell
                end tell
            end tell
        end tell
    end tell
end if

Debes cambiar /Users/username/Dropbox/IFTTT/iOS/para señalar tu camino real.

Después de esto, reemplace el guión de mi primera respuesta con esto, ¡y debería funcionar!

jherran
fuente
Todavía no estoy seguro de que vaya a funcionar ... Incluso si cambio el estado de Bonjour manualmente, iMessages aún llegan a la Mac. Aprecio el enorme esfuerzo que ha puesto en esto, pero creo que estamos estancados a menos que haya alguna forma de iniciar y cerrar sesión automáticamente en iMessage en la Mac.
Tetsujin
Que tres maneras funciona en yosemite. No puedo probar esto en su hardware, así que no hay ningún problema. Me estoy probando y compartiendo los resultados. Por cierto, la forma más precisa es esta última.
jherran
Ahh ... entonces quizás luz al final del túnel. Espero a Yosemite por un tiempo [la primera vez que no soy una de las primeras en adoptar] pero estoy completamente preparado para trabajar en esto cuando haga la actualización. Vuelve a hacer +1 para esta tercera solución en un pequeño reconocimiento de tu esfuerzo. Muy apreciado.
Tetsujin
Ah, parece que puedo otorgar la recompensa sin seleccionar la respuesta como "correcta". No quiero engañar de ninguna manera, ya que aún no he logrado ponerlo en marcha, pero la recompensa es toda tuya, gracias.
Tetsujin