scalaで家にいるか判定をする

Pocket

とりあえずやりかたは色々あるが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が返ってきてくれるわけじゃなくてたまに通信が発生するときだけ?返ってくる
あと画面が付いていれば返ってくる
そのためリトライ処理で回数を稼いでるけどなんかもっといい方法ないかなぁ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください