お問い合わせ
トップ » SORACOM IoT DIY レシピ » IoTボタンで、出退勤の記録と通知

SORACOM IoT レシピ:IoTボタンで、出退勤の記録と通知

毎日の出退勤記録をIoTボタンで手軽・確実にする

作成日:2022年4月

レシピ難易度: ★☆☆☆☆

毎日行う出退勤記録を簡易化することは管理者だけでなく従業員の負担も軽くなり、社内全体の効率向上につながります。SORACOM LTE-M Button for Enterprise (Plus も同様。以下、 SORACOM LTE-M Button と称します) にはボタンの押し方によって送る信号を変える機能があります。本レシピでは、この機能を用いて従業員の出退勤を管理者にメールで通知するシステムを作ります。

本レシピを行うのに必要な時間、概算費用

本レシピは以下の通りです

  • 必要な時間: 約45分
  • 概要費用: 約6,700円

※ 概算費用: ハードウェアや SORACOM を始めとした各種サービスの概ねの費用 (送料などの付帯費用や無料枠適用は考慮しないものとしています)

使用する SORACOM サービス

用意するもの

品名数量費用備考
SORACOM LTE-M Button for Enterprise16,578円従業員に所持してもらう出退勤記録用としてのIoTボタンです。SORACOM LTE-M Button Plusでも本レシピを行うことができます。
メール通知受信用デバイス1本レシピでは通知にE-mailを利用するため、スマートフォン等のE-mailを見ることができるデバイスを用意ください。
  • 金額はレシピ作成時となります。金額は税込み・送料別です。その他は参考価格となります。

このコンテンツの進め方

上から内容を読み進みながら作業を行なっていきます。また左サイドに追従する目次からページ内の移動が可能です。

本コンテンツは現状のままで提供され、株式会社ソラコムは、誤りがないことの保証を含め、明示であると黙示であるとを問わず、本コンテンツの記載内容につき、いかなる種類の表明も保証も行いません。

掲載情報の閲覧及び利用により、利用者自身、もしくは第三者が被った損害に対して、直接的、間接的を問わず、株式会社ソラコムは責任を負いかねます。

本コンテンツを実践する中で用意された機器、利用されたサービスについてのご質問は、それぞれの機器やサービスの提供元にお問い合わせをお願いします。機器やサービスの仕様は、本コンテンツ作成当時のものです。

株式会社ソラコムが提供する機器・サービスについてのご質問はフォームで受け付けております。機器・サービスご利用前の導入相談は https://soracom.jp/contact/ に、機器・サービスご利用開始後のサポートは、SORACOMユーザーコンソール内のサポートサイトから「リクエストを送信」(要ログイン)にてお問い合わせください。

Copyright (c) 2023 SORACOM, INC.

SORACOM LTE-M Button が届いたら

GPS マルチユニットは SIM を挿入することでセルラー通信(LTE-M)を通じて、クラウドと連携できるようになります。そのため、まず GPS マルチユニットに同梱されている SIM を SORACOM へ登録をしましょう。
※ すでに登録済み、もしくは登録済みの別の SIM を利用する場合は次へお進みください。

登録の方法は発注済みの SIM を登録する(JP)をご覧ください。約5分で完了します。

登録が完了すると左の[Menu]→[SIM管理]に表示されますのでご確認ください。

グループの作成とSIMの所属

SORACOM の IoT データ収集・蓄積サービス SORACOM Harvest Data を利用して、データの可視化を簡単に実現してみましょう。

SORACOM Harvest Data とは?
IoT デバイスからのデータの収集や蓄積、およびファイルを保存するサービスが SORACOM Harvest (ソラコム ハーベスト) です。IoT デバイスからのデータの収集・蓄積対応しているのが SORACOM Harvest Data、画像ファイルやログファイルといったファイルに対応しているのが SORACOM Harvest Files となります。

SORACOM ユーザーコンソールにログインした後[Menu]>[ガジェット管理]>[LTE-M Button for Enterprise/Plus]をクリックします。

次に[デバイス追加]をクリックします。

先ほど登録したSIMにチェックをつけ[次へ:グループを選択]をクリックします。

グループ名の欄に適当なグループ名を入力し[次へ:設定を編集]をクリックします。

項目備考
グループ名出退勤ボタン任意の名称を設定可能です。わかりやすい名称を使いましょう。


[可視化を有効化する] にチェックをつけます。

この画像には alt 属性が指定されておらず、ファイル名は 9d9f565b3ef59a5e6de2a27461394f89.jpg です

その後、ページ下部の [保存] →[デバイス一覧] の順にクリックし、設定を完了させます。

この画像には alt 属性が指定されておらず、ファイル名は 5-1.jpg です

以上でグループの設定と編集が完了しました。

ボタンをクリックし、SORACOM Harvest Data へのデータ保存を確認する

SORACOM Harvest Data を利用して、設定が正しく反映されているか確認します。

ボタンをシングルクリック(カチッと1回押す)の方法で押します。

LED が約 10 秒間オレンジで点滅したあと、約 3 秒間緑色に点灯します。

ボタンが緑色に点灯しない時は
・約 5 秒間赤色に点灯した場合は、基地局との接続に失敗しています。電波状況の良いところで再度試してください。
・約 5 秒間赤色に点滅した場合は、電池残量が不足しています。電池を交換してください。

ボタンの押し方は3通りあります
SORACOM LTE-M Button は「シングルクリック (カチッっと1回押す)」「ダブルクリック (カチカチッと2回素早く押す)」「ロングクリック (1秒以上長押しする)」の3種類の押しわけができます。この情報は後述する “clickType” に現れます。

緑色に点灯した場合は、先ほど設定したSIMにチェックをつけて [SORACOM Hervest Data]をクリックします。

Hervest Dataに保存されているデータが表示されます。

[グラフ用データ] の以下のデータを参照し、先ほどの押し方と数値が一致していれば設定成功です。

データ説明
clickTypeクリックの 3 つのタイプ (数値)。
1: シングルクリック、2: ダブルクリック、3: 長押し のいずれかに対応

SORACOM Lagoon でダッシュボードを作成する(有効化まで)

SORACOM Harvest Data に蓄積されたデータを SORACOM Lagoon で活用していきます。

SORACOM Lagoon 用語解説

ここで SORACOM Lagoon で使われる用語を解説します。

用語説明
プランSORACOM Lagoon の契約プランです。プランによって機能と料金が異なり、今回は無料の Free プランを利用します。SORACOM Lagoon のご利用料金に機能や料金の比較表があります。
SORACOM Lagoon ユーザー
(Lagoon ユーザー)
SORACOM Lagoon へログインするためのユーザー( ID とパスワードの組)です。
SORACOM ユーザコンソールへのログインとは異なるユーザ一覧となり、皆さん自身で登録・削除が可能です。ダッシュボードやパネルを編集できる「編集可能」と表示専用の「読み取り」の2段階の権限を設定できます。作成可能数はプランによります。
リソースの種類表示するデータの種別です。SORACOM Lagoon では以下の4つの中から選び、その中からノード(SIMや回線)を選択します。
・Air = SORACOM Air for セルラー (SORACOM IoT SIM)
・Lora = SORACOM Air for LoRaWAN デバイス
・Sigfox = SORACOM Air for Sigfox デバイス
・Device = SORACOM Inventory デバイス
今回はSIMなので、「Air」の SIM を選択します。
パネル (Panel)パネルはデータを表示する領域です。データソースとメトリクスを指定すると、そのメトリクス(たとえば SIM )のデータをパネルで使えるようになります。様々なパネルが存在します。
ダッシュボード (Dashboard)複数のパネルを束ねて「1枚の画面」にしたものがダッシュボードです。共有の画面表示単位となります。
アラート (Alert)リソースのメトリクスデータに対して条件を設定し、その条件を満たしたら通知を行う仕組みの事です。
データリフレッシュSORACOM Harvest から SORACOM Lagoon へデータが反映される事、もしくは反映タイミングとなります。反映タイミングはプランによります。

[Menu] → [データ収集・蓄積・可視化] → [SORACOM Lagoon] の順にクリックします。

[SORACOM Lagoon の利用を開始する]をクリックします。

プランのうち Free の[選択する]ボタンクリックし、[次へ]をクリックします。

SORACOM Lagoon ユーザーの初期ユーザーに設定するパスワードを入力した後、[利用開始]をクリックします。

SORACOM Lagoon ユーザーの初期ユーザの ID は?
ID は SORACOM ユーザコンソールにログインしたときのメールアドレスが使われることになります。そのため、ここではパスワードのみ設定することになります。SORACOM ユーザコンソールへのログインとは異なるパスワードを設定する事を強くお勧めします。

利用開始がクリックできない場合は?
パスワードの条件が不足しています。全てに✔がつくようにパスワードを設定してください。

SORACOM Lagoon の有効化に成功すると、以下のように SORACOM Lagoon コンソールへのリンクと、Lagoon ユーザーの一覧が管理できるようになります。この画面を SORACOM Lagoon 管理画面と呼びます。

Lagoon 3 で SORACOM のデータを取り扱うために、Lagoon 3 の利用を開始すると、オペレーターごとに Lagoon 3 専用の SAM ユーザーが作成されます。ただし、標準では、この SAM ユーザーには「Harvest Files にファイルをアップロードする権限」が付与されていません。そのため、Soracom X/Y Image で Harvest Files に画像をアップロードできません。
本レシピでは必要ありませんが、Harvest Files に画像をアップロードする機能を利用するには、ユーザーコンソールのSORACOM Lagoon画面で、[アクセスを許可] をクリックして、必要な権限を付与してください。

SORACOM Lagoon 管理画面は [Menu]>[データ収集・蓄積・可視化]>[SORACOM Lagoon]で表示する事ができます。

[SORACOM Lagoon3 コンソール]ボタンをクリックし SORACOM Lagoonコンソールを表示します。

SORACOM Lagoon でダッシュボードを作成する(SORACOM Lagoon へのログインまで)

メールアドレス (SORACOM ユーザコンソールへログインする際のメールアドレス) と、SORACOM Lagoon 初期ユーザ作成時に利用したパスワードでログインします。

ログインに成功すると、以下のような画面が表示されます。これが SORACOM Lagoon ログイン直後の画面です。ここから「ダッシュボード」や「パネル」を作成していきます。

SORACOM Lagoon でダッシュボードを作成する(アラートの作成まで)

出退勤情報の通知先を設定します。

アラートアイコンにカーソルを乗せると表示される「Alerting」メニューから[Notification channels]をクリックします。

[Add channel]ボタンをクリックします。

「New notification channel」画面では以下の通りに入力します。

項目内容備考
Nameemail任意の名称で構いません。
TypeEmail
Addresses通知の送付先メールアドレス複数のメールアドレスを指定する場合は “;” で区切るようにしてください。

入力し終わったら[Save]をクリックします。以下のように表示されていれば成功です。

[送信テスト]について
保存の前に[Test]ボタンにてテストが行えます。テストを行うと以下のようなメールが届きますので、確認にご利用ください。

また、メールが届かない場合の確認ポイントは以下の通りです。
・メールアドレスが正しいこと
no-reply@soracom.jp からのメールが迷惑メールに判定されてないこと、もしくは受信フィルタで拒否されていないこと

SORACOM Lagoon でダッシュボードを作成する(ダッシュボードのインポートまで)

あらかじめ設定が済んでいるテンプレートを使って、ダッシュボードを作成します。

ダッシュボードアイコンにカーソルを乗せると表示される「Dashboards」メニューから[Import]をクリックします。

[Import via panel json]のテキストフィールドへ、下記のテキストを入力(貼り付け)ます。

貼り付けたら[Load]ボタンをクリックします。

貼り付けるテキスト (JSON)

{
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- Grafana --",
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },
  "editable": true,
  "gnetId": null,
  "graphTooltip": 0,
  "id": 2260,
  "links": [],
  "panels": [
    {
      "datasource": null,
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [
            {
              "from": "",
              "id": 1,
              "text": "退勤中",
              "to": "",
              "type": 1,
              "value": "2"
            },
            {
              "from": "",
              "id": 2,
              "text": "出勤中",
              "to": "",
              "type": 1,
              "value": "3"
            }
          ],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "light-green",
                "value": null
              },
              {
                "color": "light-red",
                "value": 2.5
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 0,
        "y": 0
      },
      "id": 6,
      "options": {
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "showThresholdLabels": false,
        "showThresholdMarkers": true,
        "text": {}
      },
      "pluginVersion": "7.5.10",
      "targets": [
        {
          "datatype": "standard",
          "devicetype": "subscribers",
          "properties": null,
          "refId": "A",
          "target": null,
          "type": "timeseries"
        }
      ],
      "title": "現在の出退勤状況",
      "type": "gauge"
    },
    {
      "alert": {
        "alertRuleTags": {},
        "conditions": [
          {
            "evaluator": {
              "params": [
                2.5
              ],
              "type": "gt"
            },
            "operator": {
              "type": "and"
            },
            "query": {
              "params": [
                "A",
                "5m",
                "now"
              ]
            },
            "reducer": {
              "params": [],
              "type": "max"
            },
            "type": "query"
          }
        ],
        "executionErrorState": "keep_state",
        "for": "0m",
        "frequency": "1m",
        "handler": 1,
        "message": "[Alerting]->◯◯さんが出勤しました! [OK]->◯◯さんが退勤しました!",
        "name": "出退勤の可視化 alert",
        "noDataState": "keep_state",
        "notifications": []
      },
      "aliasColors": {},
      "bars": false,
      "dashLength": 10,
      "dashes": false,
      "datasource": null,
      "description": "",
      "fieldConfig": {
        "defaults": {},
        "overrides": [
          {
            "matcher": {
              "id": "byName",
              "options": "clickType"
            },
            "properties": [
              {
                "id": "displayName",
                "value": "2=退勤,  3=出勤"
              }
            ]
          }
        ]
      },
      "fill": 5,
      "fillGradient": 9,
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 0,
        "y": 8
      },
      "hiddenSeries": false,
      "id": 4,
      "legend": {
        "alignAsTable": false,
        "avg": false,
        "current": true,
        "max": false,
        "min": false,
        "rightSide": false,
        "show": true,
        "total": false,
        "values": true
      },
      "lines": true,
      "linewidth": 3,
      "nullPointMode": "null",
      "options": {
        "alertThreshold": true
      },
      "percentage": false,
      "pluginVersion": "7.5.10",
      "pointradius": 2,
      "points": true,
      "renderer": "flot",
      "seriesOverrides": [],
      "spaceLength": 10,
      "stack": false,
      "steppedLine": true,
      "targets": [
        {
          "datatype": "standard",
          "devicetype": "subscribers",
          "properties": null,
          "refId": "A",
          "target": null,
          "type": "timeseries"
        }
      ],
      "thresholds": [
        {
          "colorMode": "critical",
          "fill": true,
          "line": true,
          "op": "gt",
          "value": 2.5,
          "visible": true
        }
      ],
      "timeFrom": null,
      "timeRegions": [],
      "timeShift": null,
      "title": "出退勤の様子",
      "tooltip": {
        "shared": true,
        "sort": 0,
        "value_type": "individual"
      },
      "type": "graph",
      "xaxis": {
        "buckets": null,
        "mode": "time",
        "name": null,
        "show": true,
        "values": []
      },
      "yaxes": [
        {
          "$$hashKey": "object:1806",
          "decimals": null,
          "format": "short",
          "label": null,
          "logBase": 1,
          "max": "3.5",
          "min": "1.5",
          "show": true
        },
        {
          "$$hashKey": "object:1807",
          "format": "short",
          "label": null,
          "logBase": 1,
          "max": null,
          "min": null,
          "show": true
        }
      ],
      "yaxis": {
        "align": false,
        "alignLevel": null
      }
    }
  ],
  "refresh": "",
  "schemaVersion": 27,
  "style": "dark",
  "tags": [],
  "templating": {
    "list": []
  },
  "time": {
    "from": "now-1h",
    "to": "now"
  },
  "timepicker": {},
  "timezone": "",
  "title": "出退勤ボタン",
  "uid": "",
  "version": 5
}

Load をクリックすると “Unexpected end of JSON input” と表示される
テキストが上手く入力できていない場合はと表示されます。

貼り付けたテキストを見直すようにしてください。

Import 詳細画面に遷移します。Havestで「Harvest」を選択し、「Import」をクリックします。

「Access denied to this dashboard」と表示されることがあります

[Folder] で「General」を選択して [Import] をクリックすると、「Access denied to this dashboard」と表示されますが、動作に影響はありません。

以下のように表示されていれば成功です。

SORACOM Lagoon でダッシュボードを作成する(パネルの編集まで)

まず上のパネルを編集します。二つ並んだうちの上のパネルタイトル[現在の出退勤状況]をクリックし[編集]をクリックします。

“Query” タブでノード(= SIM) をクリックし、SORACOM LTE-M Buttonに紐づいている SIM を選び、データの項目リストをクリックして [clickType]を選択します。

一覧に “LTE-M Button” が無い場合
例の画面では “LTE-M Button” と表示されている部分は、 “SIM管理画面” で設定したSIM名となります。SIM名を設定していない場合は、IMSI (SIMに割り当てられている一意の番号) が表示されるので、その情報を基に選んでください。

画面右上の[Apply]ボタンをクリックしパネルの編集を終了します。

次に下のパネルを編集します。二つ並んだうちの下のパネルのタイトル[出退勤の様子]をクリックし[編集]をクリックします。

先ほどと同様に”Query” タブでノード(= SIM) をクリックし、SORACOM LTE-M Buttonに紐づいている SIM を選び、データの項目リストをクリックして [clickType]を選択します。

続いて、先ほど設定した通知先にアラートを紐付けます。[Alert]タブをクリックし[Notifcations]にある「Send to」の項目右のをクリック、先ほど作成した通知先 (例に沿っているなら 出退勤アラート)を選択します。

画面右上の[Apply]ボタンをクリックしパネルの編集を終了します。
以上で全ての設定が終了です。

SORACOM Lagoon でダッシュボードを作成する(ダッシュボードの保存)

画面右上のをクリックすることでこれまでのダッシュボードの作業を保存できます。

[Save]で保存します。

動作を確認する

準備が整いましたので、実際にボタンを操作し動作を確認します。
今回はボタン長押しで出勤、ダブルクリックで退勤を通知します。

まずは出勤の動作確認を行います。SORACOM LTE-M Buttonを長押しすると約1分後、通知先に以下のようなメールが届きます。

SORACOM Lagoon上では以下のように表示されます。

次に退勤の動作確認を行います。SORACOM LTE-M Buttonをダブルクリックすると約1分後、通知先に以下のようなメールが届きます。

SORACOM Lagoon上では以下のように表示されます。

これを繰り返すことで簡単に出退勤の様子が把握できるというシステムになっています。

あとかたづけと注意事項

本レシピでは費用がかかるサービスを利用しています。
本項をよく読み、必要な操作や解除作業を行うようにして、想定外の費用が掛からないようにしてください。

費用について

ここで記載している金額は全て税込み、送料別となります。

SORACOM プラットフォームの利用料金

サービス/機能料金
SORACOM Air (plan-D)基本料: 11円/日通信料: 0.22円~/MB(今回の利用であれば 1MB 以内で収まる範囲)
SORACOM Harvest Data本機能を有効にしたグループに所属する1SIMあたり5.5円/日 (2000リクエスト/日/SIMを含む)2000リクエスト/日を超えた分は0.0044円/リクエスト
SORACOM Lagoon今回は Free プラン(無料)を使用しました。

※ 費用詳細はリンク先をご確認ください。

無料利用枠について
SORACOM サービスでは一部サービスにおいて無料枠が設定されています。たとえば SORACOM Air for セルラーであればアカウント毎で30円/月の通信分や、SORACOM Harvest Data であれば31日分の書込みリクエストなどです。料金詳細に「無料利用枠」として掲載されていますので、ご確認ください。

グループ解除

SORACOM Harvest Data 等、「機能が有効になっているグループに所属している SIM × 費用」となっているサービスにおいては、「機能を OFF にする」することで費用の発生を抑えることができます。またもう1つの方法として「グループに所属している SIM の数を減らす(= 解除する)」事でも費用を抑える事ができます。

グループ解除の方法はグループからの解除 (JP)をご覧ください。

SORACOM Harvest Data のデータ削除

SORACOM Harvest Data は基本的にはデータ保管料は無料※です。そのため、保存しておいても害はありませんが、デモ等で利用する際にはデータを綺麗にしておく必要が出てくるため、データ削除について解説します。

※発生から40日を超えたデータは削除されます。40日以上データを保管したい場合はデータ保持期間延長オプション利用料金をご利用ください。

SORACOM Harvest Data 画面 ([操作]>[データを確認]) のデータテーブルで、削除したいデータのチェックボックスを付けた後に[削除]をクリックします。表示されたダイアログで改めて[削除]をクリックすると、削除されます。
※ 複数のデータにチェックをつければ一括で削除可能です。

データの復元はできませんのでご注意ください。

SORACOM Lagoon の解約

SORACOM Lagoon はオンラインで解約が可能です。 Free プランであれば有効化しておいても費用は発生しませんが、長期に渡って利用しない場合には解約も選択いただけます。

解約の方法はSORACOM Lagoon の解約(JP)をご覧ください。

次のステップ

本レシピでは、センサーや電源のことを考えなくても良いデバイスで、「簡単に現場のデジタル化」を実現しました。実際の運用の際は、ボタンを従業員に貸し出し、通知先を雇用者のアドレスにします。また、 同じ設定のパネルを複製し、違うボタンからのデータを読み込むように設定することで、一つのダッシュボードで二人以上の出退勤状況を確認することも可能です。

このようにSORACOM Lagoon を活用すれば、アプリケーション開発の手間も減らすことができるため、「IoT の全体像を知りたい」といった方にも向いているかと思います。

商品ページへ戻る

SORACOM IoT DIY レシピ »

レシピの達成、おめでとうございます!

達成したことをTwitterで呟く

普段の生活やビジネスに役立つ #IoTレシピ 「IoTボタンで、出退勤の記録と通知」 を達成しました!
@SORACOM_PR https://soracom.jp/recipes_index/19803


ご質問などはこちらよりお問い合わせください。