sakura.io を128倍使う

sakura.io を128倍使う

Information

Components >> SCM-LTE-01 (sakura.io)
一次情報はそちらをご覧ください。

さくらインターネットが提供する「sakura.io」を使うためのプログラムです。

(さくらのIoT Platform α についてはこちら)
(さくらのIoT Platform β についてはこちら)

さくらの通信モジュール(LTE)- SCM-LTE-01 ¥8000!!

モノがつぶやく・・・
データを迎えに来てくれるモジュールです。

Warning

このページは さくらインターネット とは関係ありません。
このページの内容について さくらインターネット へ問い合わせしないでください。

Arduinoフォームファクターのmbedなら、sakura.io シールド for Arduinoが使えます。
(例:FRDM-KL25Z、I2Cジャンパーは上側に設定。 UART(Serial)のジャンパーは外しておきます)
(VINピンへの電源供給のため橙色のジャンパーを接続しています、しっかりした電源を用意しましょう)

サンプル

ファームウェアをアップデートする

モジュールのコマンドにより、オンラインでアップデートできます。

Import programSakuraIO_FirmwareUpdate

src: https://github.com/sakuraio/SakuraIOArduino/tree/master/examples/FirmwareUpdate

https://github.com/sakuraio/SakuraIOArduino/tree/master/examples/FirmwareUpdate からの移植

Outgoing Webhook をPHPで受ける

モジュールから送信されたデータを、リアルタイムにウェブサーバで受け取る。

あらかじめ、このウェブページを置いたURLをコントロールパネルで登録しておく。

outgoing.php

<?
$secret = "xxx";

$json = file_get_contents('php://input');
$object = json_decode($json, true);

if (!empty($secret)) {
    $hash = hash_hmac('sha1', $json, $secret);
    if ($hash != $_SERVER["HTTP_X_SAKURA_SIGNATURE"]) exit;
}

ob_start();
var_dump($object);
$str = ob_get_contents();
ob_end_clean();

$fp = fopen("data.txt", "w");
fwrite($fp, $str);
fclose($fp);

こんなふうにデータが届く

object(stdClass)#1 (4) {
  ["module"]=>
  string(12) "xxxxxxxxxxxx"
  ["type"]=>
  string(8) "channels"
  ["datetime"]=>
  string(30) "2017-01-02T03:04:05.000000000Z"
  ["payload"]=>
  object(stdClass)#2 (1) {
    ["channels"]=>
    array(5) {
      [0]=>
      object(stdClass)#3 (4) {
        ["channel"]=>
        int(0)
        ["type"]=>
        string(1) "i"
        ["value"]=>
        int(1234567)
        ["datetime"]=>
        string(30) "2017-01-02T03:04:05.000000000Z"
      }
      [1]=>
      object(stdClass)#4 (4) {
        ["channel"]=>
        int(1)
        ["type"]=>
        string(1) "f"
        ["value"]=>
        float(3.14159)
        ["datetime"]=>
        string(30) "2017-01-02T03:04:05.000000000Z"
      }
        :
    }
  }
}

簡易位置情報提供機能の緯度・経度は独立したデータで届く。

object(stdClass)#1 (4) {
  ["module"]=>
  string(12) "xxxxxxxxxxxx"
  ["type"]=>
  string(8) "location"
  ["datetime"]=>
  string(30) "2017-01-02T03:04:05.000000000Z"
  ["payload"]=>
  object(stdClass)#2 (1) {
    ["coordinate"]=>
    object(stdClass)#3 (3) {
      ["longitude"]=>
      float(135.00000)
      ["latitude"]=>
      float(34.000000)
      ["range_m"]=>
      int(0)
    }
  }
}

参考:https://saka24.blue/index.php/2017/05/20/sakura-io_outgoing/

Incoming Webhook へPHPから送る

ウェブサーバから、モジュールへデータを送信する。

incoming.php

<?
$url = "https://api.sakura.io/incoming/v1/";
$token = "xxxxx-xx-xx-xx-xxxxx";
$module = "xxxxxxxxxxxx";
$secret = "xxx";

$channel[0] = array(
        "channel" => 0,
        "type" => "i",
        "value" => 123);
$payload = array("channels" => $channel);
$object = array(
        "type" => "channels",
        "module" => $module,
        "payload" => $payload);
$json = json_encode($object);

if (empty($secret)) {
    $header = array(
        "Accept: application/json",
        "Content-Length: " . strlen($json) );
} else {
    $hash = hash_hmac('sha1', $json, $secret);
    $header = array(
        "Accept: application/json",
        "Content-Length: " . strlen($json),
        "X-Sakura-Signature: " . $hash );
}
$options = array("http" => array(
        "method" => "POST",
        "header"  => implode("\r\n", $header),
        "content" => $json) );

$str = file_get_contents($url . $token, false, stream_context_create($options));

header("Content-type: text/plain");
var_dump($options);

参考:https://api.sakura.io/incoming/v1/docs/

DataStore API をPHPで操作する

モジュールから送信されたデータが蓄積されているデータストアを、ウェブサーバからアクセスする。

datastore.php

<?
$url = "https://api.sakura.io/datastore/v1/messages";
$token = "xxxxx-xx-xx-xx-xxxxx";
$module = "xxxxxxxxxxxx";
$type = "channels"; // location / connection
$size = 1;

$options = array("http" => array("header"  => "Accept: application/json"));

$query = "token=" . $token . "&module=" . $module . "&size=" . $size . "&type=" . $type . "&order=desc";
$json = file_get_contents($url . "?" . $query, false, stream_context_create($options));
$object = json_decode($json);

header("Content-type: text/plain");
var_dump($object);

参考:https://api.sakura.io/datastore/v1/docs/

メモ

  • IoT ゆうても、サービスを考えるのが大変
  • データストアに蓄積されるので、ユーザーがデータを保存する必要がなくなった
  • 基地局をもとにしただいたいの座標もわかるので、簡易なGPS代わりに使えそう
  • セルラーモジュールは太陽誘電のIoT機器向けのLTE Category1モデム。これ?
  • プロトコル処理用に STM32L431KC っぽいのが載っています。ハックしてはいけません。
  • 回線はソフトバンク?、SIMの流用は不可。
  • 設定いらず。 APN? SSID? なにそれ美味しいの?
  • セキュリティの確保された閉域網に勝手につながります。
  • インターネットからは専用のAPIを経由してデータのやり取りを行います。
  • 小容量のデータ転送向けのため、大容量が必要な用途には向きません。
  • 電源電圧が中途半端なのは、セルラーモジュールがLi-Ion (Li-Po)をつなぐ前提のよう。

省電力?

Max 310mA, Min 58mA くらい。 動作後10秒でスリープしてるっぽい。


Please log in to post comments.