自分のサーバーが無くても Obniz を定時実行させる

WebのUIからではなくて自分のサーバーからObnizをコントロールするというのを [前回](https://qiita.com/toshirot/items/37d2a37ea1d33893957f) と [前々回](https://qiita.com/toshirot/items/0222ef1f494b21060134) やりました。

###obniz Event

でも、Obniz は、自分のサーバーを持っていなくても定時実行などが [obniz Event](https://obniz.io/doc/about_event) という機能を使って実現できるのです。

これは、次の3種類のトリガー(文字通り引き金)を設定することでプログラムを実行させる仕組みです。

  1.Webhook(POST,GETがきた毎 つまり他のプログラムからも動かせる)
  2.決められた時間(毎日12:00に等)
  3.決められた時間間隔(30分毎、1時間毎等)

2と3はLinuxなら cron や Windowsならタスクスケジューラなどで実装される機能ですが、それをObnizのマイページに作った各プログラムに対して設定できます。

たとえば、「毎日何時になるとサーボを動かして花に水をやる」とか「毎分何かを計測する」などの機能として手軽に便利に使えます。

1の Webhook(ウェブフック) は、Obniz サイトのマイページに作った各プログラムにURLを与えて、それを外部からたたくことで実行させるという機能です。もちろんURLパラメータで引数を与えることもできます。また、生成されるURLは https ですし、いたずらされないように [アクセストークン](https://qiita.com/toshirot/items/37d2a37ea1d33893957f)　をうこともできます。

これで、様々な別のプログラムやWebサービスとの連携が可能になります。

で今日は、3を使って15分毎に実行するのを試します。

###マイページを開く

Obnizのサイトで [マイページ](https://obniz.io/users/me) を開き イベント＞新規作成 で [new event](https://obniz.io/users/me/events/new) の設定ページが開きます。

![](https://ccchart.com/test/obniz/img/newevent.png)

ここで適当な「名前」を入力し「実行するWebApp」を登録したリポジトリのコードの中から選択し、次に「繰り返し」を選択して繰り返すインターバル(ここでは15)を書いてその単位を「minuts」か「hour」のいずれかから選びます(ここではminuts)。

そして「作成」ボタンを押すと登録できます。

※注：実行回数は1日に120回が上限となっているので、それを超えてしまう12分未満は設定できません。

「作成」ボタンを押すと「テスト実行」ボタンが現れます。これですぐに動作を確認することができます。

![](https://ccchart.com/test/obniz/img/newevent2.png)

###今回のコード

今回動作させるコード(test-timeStr)は下記のようなもので、実行時の 時間、分、秒を表示するだけのものです。

```html
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@1.5.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<script>
  
let time={
  
    getNow: function () {
        let now = new Date();
        return {
            hour: now.getHours(),//時
            min: now.getMinutes(),//分
            sec: now.getSeconds(), //秒
            msec: now.getMilliseconds() //ミリ秒
        }
    },
    mkDigital: function (now) {
        let H = (now.hour < 10) ? ('0' + now.hour) : now.hour;
        let M = (now.min < 10) ? ('0' + now.min) : now.min;
        let S = (now.sec < 10) ? ('0' + now.sec) : now.sec;
        return H + ':' + M + ' ' + S //時間文字列を作って返す
    }
}

const obniz = new Obniz("0123-4567");//0123-4567は自分のobniz ID に書き換える

obniz.onconnect = async function () {

  let timeStr = time.mkDigital(time.getNow());
  obniz.display.clear();
  obniz.display.print(timeStr);//時間文字列を表示する
  obniz.display.print('refresh in 15min');

}

</script>
</body>
</html>

```

###そして結果

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">15minインターバルで <a href="https://t.co/8Dmp9q8OUA">pic.twitter.com/8Dmp9q8OUA</a></p>&mdash; 高橋登史朗 ( T blockchain T ) (@toshirot) <a href="https://twitter.com/toshirot/status/1009493885226139650?ref_src=twsrc%5Etfw">2018年6月20日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この表示は30秒で消えて、、、

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">15分後 <a href="https://t.co/yqRToKdyo1">pic.twitter.com/yqRToKdyo1</a></p>&mdash; 高橋登史朗 ( T blockchain T ) (@toshirot) <a href="https://twitter.com/toshirot/status/1009494089853784069?ref_src=twsrc%5Etfw">2018年6月20日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

15分後に表示。1秒ずれたけどほぼ15分。

###実行ログ

実行ログリストが下記のように表示されるので、クリックして実行のログを確認もできる。タイムアウトした時刻もわかります。
![](https://ccchart.com/test/obniz/img/newevent3.png)

実行ログ
![](https://ccchart.com/test/obniz/img/newevent4.png)