とりあえずやりかたは色々あるがiphoneにDHCPで固定IPを振って返ってきたら家にいる判定とした
import sys.process._ object search { def main: Option[String] = { retry2(iphone) } def iphone: Option[String] = { val ping = try { Process("ping -c 5 192.168.0.20") #&& ("echo okkk") !! } catch { case e: Throwable => "error" } if (ping == "okkk") Some("家にいます") else None } def retry2[R](f: => R, n: Int = 40): R = { if (n > 0) { f match { case Some(s) => f case None => retry2(f, n - 1) } } else f } }
iphoneだと常にpingが返ってきてくれるわけじゃなくてたまに通信が発生するときだけ?返ってくる
あと画面が付いていれば返ってくる
そのためリトライ処理で回数を稼いでるけどなんかもっといい方法ないかなぁ