LoginSignup
9
7

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-06-20

WebのUIからではなくて自分のサーバーからObnizをコントロールするというのを 前回前々回 やりました。

obniz Event

でも、Obniz は、自分のサーバーを持っていなくても定時実行などが obniz 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 ですし、いたずらされないように アクセストークン をうこともできます。

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

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

マイページを開く

Obnizのサイトで マイページ を開き イベント>新規作成 で new event の設定ページが開きます。

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

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

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

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

今回のコード

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

<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>

そして結果

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

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

実行ログ

実行ログリストが下記のように表示されるので、クリックして実行のログを確認もできる。タイムアウトした時刻もわかります。

実行ログ

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7