Soracom

Users

ドキュメント
Home ドキュメント Downlink API Getting Started

「システムログを Harvest Files に保存するコマンド」をデバイスで定期的に実行する

Downlink API Sim:sendDownlinkSsh APISim:sendDownlinkHttp API の価格は、2025 年 6 月を目処に発表します。それまでの間、これらの API は無料で利用できます。

Downlink API は、「デバイスの動作」が必要な処理の自動化やスクリプトでの利用に適しています。このページでは、Downlink API のうち Sim:sendDownlinkSsh API を利用して、以下のように動作する Flux アプリを作成します。SORACOM Flux (以下、Flux) はコードを書くことなく IoT アプリケーションを開発、実行できるプラットフォームサービスで、今回はタイマー機能と SORACOM API 呼び出し機能を使用して、Downlink API の定期的な呼び出しをローコードで実現します。Flux について詳しくは、SORACOM Flux を参照してください。

  • 15 分ごとに Sim:sendDownlinkSsh API を実行する。

  • Sim:sendDownlinkSsh API は、指定した IoT SIM を利用する Raspberry Pi で「最新 15 分間のシステムログを Harvest Files にアップロードする」コマンドを実行します。

    journalctl -S -15min | curl -X PUT -H 'Content-Type: text/plain' --data-binary @- http://harvest-files.soracom.io/logs/{sim_id}/${event.context.timestamp}.log
    
  • Harvest Files にファイルをアップロードしたりダウンロードしたりすると料金が発生します。詳しくは、SORACOM Harvest Files の料金プラン を参照してください。
  • Flux のイベントが 15 分に 1 回実行されます。Flux では、イベント数に応じて料金が発生します。詳しくは、料金プラン を参照してください。

ステップ 1: SSH の鍵ペアを作成して適切な場所に保存する

ここでは、公開鍵と秘密鍵のペアを使用して SSH ログインするように、公開鍵と秘密鍵を作成して、以下のように保存します。

項目説明
公開鍵 (id_ed25519.pub)Raspberry Pi の定められた場所に保存します。
秘密鍵 (id_ed25519)SORACOM ユーザーコンソールの認証情報ストアに保存します。
  1. PC で公開鍵と秘密鍵のペアを作成します。

    $ ssh-keygen
    
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/home/xxxxxx/.ssh/id_ed25519):
    

    以降、画面の指示に従って操作すると、公開鍵 (id_ed25519.pub) と秘密鍵 (id_ed25519) のペアが作成されます。

    パスフレーズを設定した場合は、SORACOM API アクションを作成するときに、そのパスフレーズを指定してください。

  2. 公開鍵 (id_ed25519.pub) を Raspberry Pi にコピーします。

    公開鍵は任意の方法でコピーしてください。なお、Raspberry Pi のユーザー名を、これ以降、${user} と表記します。例: pi

    • Linux など ssh-copy-id を利用できる環境から、IP アドレス (例: 192.168.xxx.xxx) でアクセスできる Raspberry Pi にコピーする場合は、以下のようなコマンドを実行します。

      $ ssh-copy-id -i /PATH/TO/PUBLIC_KEY ${user}@192.168.xxx.xxx
      
    • Linux など ssh-copy-id を利用できる環境から、IoT SIM を利用する Raspberry Pi にコピーする場合は、遠隔地にあっても Napter のオンデマンドリモートアクセスを作成すると、以下のようなコマンドを実行します。Napter のオンデマンドリモートアクセスについて詳しくは、オンデマンドリモートアクセスを作成する を参照してください。

      xxxxxxxx-xxx-xxx-xxx.napter.soracom.io は、Napter のオンデマンドリモートアクセスで発行されたポート番号とドメインです。

      $ ssh-copy-id -i /PATH/TO/PUBLIC_KEY -p xxxxx ${user}@xxx-xxx-xxx-xxx.napter.soracom.io
      
    • 同様に、Windows など scp を利用できる環境からコピーする場合は、以下のようなコマンドを実行します。

      > scp -P xxxxx /PATH/TO/PUBLIC_KEY ${user}@xxx-xxx-xxx-xxx.napter.soracom.io:/home/${user}/
      

      なお、この場合は、さらに ssh で Raspberry Pi にアクセスして、id_ed25519.pub の内容を適切な場所に移動します。

      > ssh -p xxxxx xxx-xxx-xxx-xxx.napter.soracom.io -l ${user}
      
      $ mkdir -p ~/.ssh
      $ cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
      $ chmod 600 ~/.ssh/authorized_keys
      $ rm ~/id_ed25519.pub
      
  3. SSH の鍵ペアを利用して、Raspberry Pi にログインできることを確認します。

    $ ssh -p xxxxx xxx-xxx-xxx-xxx.napter.soracom.io -l ${user}
    

    鍵ペアにパスフレーズを設定した場合は、パスフレーズを入力するとログインできます。

  4. 秘密鍵を SORACOM ユーザーコンソールに登録します。

    具体的には、認証情報ストアの「認証情報を登録」画面で以下のように登録します。この画面の表示方法については、認証情報を登録する を参照してください。

    項目説明
    [認証情報 ID]認証情報を識別するために任意の名前を入力します。例: Private-Key
    [種別]「秘密鍵 (PEM)」を選択します。
    [秘密鍵 (PEM)]秘密鍵 (id_ed25519) の内容をコピーします。

ステップ 2: Harvest Files を有効化する

Raspberry Pi で「最新 15 分間のシステムログを Harvest Files にアップロードする」コマンドを実行するため、Raspberry Pi で利用する IoT SIM で、Harvest Files を利用できるように設定します。

  1. ユーザーコンソールにログイン し、Raspberry Pi で利用する IoT SIM にあわせてカバレッジタイプを変更します。

    たとえば、plan01s の IoT SIM を Raspberry Pi で利用する場合は、グローバルカバレッジの表示に変更します。詳しくは、SORACOM ユーザーコンソールで表示するカバレッジタイプを変更する を参照してください。

  2. SIM グループを作成します。

    詳しくは、グループを作成する を参照してください。

  3. 作成した SIM グループで Harvest Files を有効化して、IoT SIM を SIM グループに所属させます。

    詳しくは、SORACOM Harvest Files を有効化する を参照してください。

    なお、[デフォルトパス][ロール][Harvest Data 連携] は、空欄や off のままにしてください。

ステップ 3: Flux アプリを作成する

タイマーイベントソースと、SORACOM API アクションを利用する Flux アプリを作成します。

  1. [メニュー][SORACOM Flux][Flux アプリ] の順にクリックして、[+新しい Flux アプリを作成する] をクリックします。

  2. 以下の項目を設定します。

    項目説明
    [名前]Flux アプリの名前を入力します。
    [概要]Flux アプリの概要を入力します。
  3. [作成] をクリックします。

    Flux アプリが作成され、SORACOM Flux Studio の [Studio] タブが表示されます。

  4. [+チャネルを追加する][タイマー][次へ] の順にクリックします。

    この Flux アプリでは、15 分に 1 回の頻度で、メッセージをチャネルに送信するように設定します。

  5. 以下の項目を設定します。

    項目説明
    [名前]チャネルの名前を入力します。
    [概要]チャネルの概要を入力します。
    [イベントソース設定]

    タイマーの間隔を設定します。

    項目説明
    [有効]この条件の有効/無効を設定します。「有効」にしてください。
    [スケジュール定義]実行の間隔を設定します。ここでは 15 分と設定します。
    [説明]タイマー設定の説明を記載します。

  6. [チャネルを作成する] をクリックします。

  7. [アクション][+アクションを追加][SORACOM API][OK] の順にクリックします。

    SORACOM API アクション が作成されます。

  8. 以下の項目を設定します。

    項目説明
    [名前]SORACOM API アクションの名前を入力します。
    [概要]SORACOM API アクションの概要を入力します。
    [有効]SORACOM API アクションを有効化します。ここでは「有効」にします。
    [CONDITION]SORACOM API アクションの実行条件を設定します。ここでは、タイマーイベントにあわせて常に実行するため、空欄のままにします。
    [CONFIG]

    SORACOM API アクションで利用する API を設定します。

    • [API]: 「Sim:sendDownlinkSsh」を選択します。

    • [URL]: [API] で選択した API のパスが表示されます。{sim_id} を Raspberry Pi で使用している IoT SIM の SIM ID に置き換えてください。例: /v1/sims/1234567890123456782/downlink/ssh

    • [HTTP ボディ]: Sim:sendDownlinkSsh API のリクエストボディを入力します。ここでは、以下のように入力してください。

      なお、${credential_id}{sim_id}${user} を、認証情報 ID (例: Private-Key)、Raspberry Pi で利用するの IoT SIM の SIM ID、Raspberry Pi のユーザー名に書き換えてください。

      {
        "authentication": {
          "type": "publickey",
          "keyCredentialsId": "${credential_id}"
        },
        "command": "journalctl -S -15min | curl -X PUT -H 'Content-Type: text/plain' --data-binary @- http://harvest-files.soracom.io/logs/{sim_id}/${event.context.timestamp}.log",
        "username": "${user}"
      }
      
    • 注意点をよく読み、理解できたら [注意点を理解して利用する] にチェックを入れます。

    • [API を実行する SAM ユーザー]: 「新しく SAM User を作成する」を選択します。

    • [SAM User 名]: SAM ユーザー名が表示されます。必要に応じて編集してください。

    [HTTP ボディ] の ${event.context.timestamp} は Flux アプリの実行時に置き換えられます

    [HTTP ボディ]${event.context.timestamp} は、そのまま入力してください。Flux アプリが実行するときに、タイマーが起動した時刻を表す UNIX 時間 (ミリ秒) に置き換えられます。詳しくは、タイマーイベントソース#Context を参照してください。

    [OUTPUT]

    SORACOM API アクションのレスポンスを、別のチャネルに送信するかどうかを設定します。

    • [アクションのアウトプットを別のチャネルに送信する]: 「無効」にします。
  9. [作成する] をクリックします。

ステップ 4: Harvest Files のファイルをダウンロードする

15 分に 1 回、Raspberry Pi でコマンドが実行され、Harvest Files にログが保存されます。ログが保存されるパスは、/logs/{sim_id}/${event.context.timestamp}.log です。

Harvest Files のファイルをダウンロードする操作については、Harvest Files に保存したファイルをダウンロードする を参照してください。

タイマーが動作していると継続して課金が発生します

タイマーを止めるには、タイマーイベントソースを無効化してください。詳しくは、タイマーイベントソース を参照してください。