仮想デバイス

仮想デバイスは、証明書がインストールされているユーザーのIoT機器を管理できるように補助する機能です。仮想デバイスを作成して証明書と接続すると、証明書がインストールされているIoT機器の証明書の有効化、無効化機能でメッセージの送受信を制御できます。

例えば、工場内の10台の温度測定装置の証明書10個を割り当てた場合、ユーザーはどの機器にどの証明書を割り当てたかわからない、あるいは証明書を管理するために、他のプログラムを使用しなければなりません。こうした不具合を解消するために、「TempDevice」という仮想デバイスを作成し、機器にインストールされた証明書を接続すると、ユーザーはどの証明書がどの機器に使用されているかを容易に把握でき、証明書を変更したり、削除する場合でも、どの機器に影響を与えるかを容易に把握できます。

仮想デバイスの作成

img

1. 左側のメニューからVirtual Devicesを選択します。

2. 画面中央の「仮想デバイスの作成」ボタンを選択します。

3. 仮想デバイスで使用する仮想デバイスの名前と説明を入力します。

仮想デバイスの削除

1. 左側のメニューのVirtual Devicesを選択します。

2. リスト画面で、削除する仮想デバイスを選択し、上段の[削除]ボタンを選択します。

証明書の追加及び分離

ユーザーが作成した仮想デバイスに証明書を割り当てて、どの証明書をどの機器に割り当てて使用しているのかを管理することができます。

img

1. 左側のメニューでCertificatesを選択し、証明書の画面に移動します。

2. 仮想デバイスの接続画面で、証明書と接続しようとする仮想デバイスを検索します。

3. 検索結果から、接続する仮想デバイスをダブルクリックし、右側の「接続する仮想デバイス」の領域に移動します。

4. 下段の「接続」ボタンを選択すると、証明書と仮想デバイスの接続が完了します。

5. 分離は、詳細情報における、接続された仮想デバイスのリストから仮想デバイスを選択し、「分離」をクリックすると、証明書と仮想デバイスの接続が分離されます。

証明書の有効/無効/削除

証明書の機能のうち、有効/無効/削除機能があります。証明書を無効にする場合、Cloud IoT Coreサービスでは、この証明書で認証されたメッセージの場合、有効でないと判断してメッセージを受信しません。メッセージを再送信するには、証明書の無効ボタンを選択します。

さらに、証明書を使用しない場合、削除をクリックして、証明書を削除することができます。削除された証明書は、回復できません。

Rulesの有効/無効/削除

ユーザーが指定したルールがこれ以上必要ない場合、削除ボタンをクリックして削除することができます。一時的に使用を中止したい場合、無効ボタンを押すと、該当ルールクエリとアクションは動作しません。ユーザーが有効ボタンを押すと、停止されていたルールが再実行されます。

Dashboard

Dashboardでは「今月のIoT機器接続時間、現在接続しているクライアント数、メッセージの利用数、ルールの利用数 "などの情報を確認することができます。

「今月のIoT機器接続時間」は、ユーザーのIoT機器がIoT Coreサービスに接続した合計時間を示しており、今月1日から現在までの期間中の合計使用時間を表示します。詳細を見るをクリックすると、時間ごとの接続した機器の数、接続時間、小計(機器台数*使用時間)のような接続履歴の詳細を確認できます。

「現在接続しているクライアント数」は、現在IoT Coreサービスで接続しているクライアント(ex:IoT機器)の数を示しています。たとえば、2台の機器を使用してIoT Coreサービスに接続した場合、2と表示されます。詳細を見るをクリックすると、現在接続中のクライアントのIP、Port、使用中の証明書のCommon Name、接続開始時間情報を確認することができます。

ルールクエリの組み込み関数

クエリ内で便利に使用できる組み込み関数を提供しています。

  • 組み込み関数の名前は、大文字小文字に関係なく入力可能であり、入力引数の有効な引数の型でない場合、クエリが失敗します。エラーの理由は、エラーアクションを追加すると、理由を確認することができます。

  • 組み込み関数は、Alias(エイリアス)を使用して、クエリの結果値であるJSONのKey値として明示することをお勧めします。

    • SELECT ABS(volt) AS volt FROM "topic"
      
  • 次の各組み込み関数の例で、入力引数は定数値を入力しましたが、入力JSONメッセージのKey値を入力するとJSON Valueが評価されます。

  • 組み込み関数に、引数値は定数値を入力することもできます。定数値のStringの場合、'(Single Quote).で括り、bool値は、true、falseで、JSON値は`(Grave Accent)で括って入力します。
  • 組み込み関数の引数が違ったり、引数の型が異なる場合、エラーが発生します。エラーアクションを追加すると、エラーを確認することができます。
  • 関数名(入力引数の型):戻り値の型
  • Number:整数または少数/ Integer:整数/ String:文字列/ Bool:真偽の論理値/ Any:タイプどれでも

ABS(Number) : Number

絶対値を返します。

  • 例 : ABS(-10)=10

SIGN(Number) : Number

符号を返し、符号が+であれば1、- であれば-1、ゼロの場合は0を返します。

  • 例 : SIGN(-5)=-1, SIGN(5)=1, SIGN(0)=0

CEIL(Number) : Integer

最も近い整数に切り上げます。

  • 例 : CEIL(1.1)=2, CEIL(-1.1)=-1

FLOOR(Number) : Integer

最も近い整数に切り捨てます。

  • 例 : FLOOR(1.8)=1, FLOOR(-1.8)=-2

ROUND(Number) : Integer

最も近い整数に四捨五入します。

  • 例 : ROUND(0.5)=1, ROUND(-1.5)=-2

TRUNC(Number, Number) : Number

2番目の引数の数で、小数点を切り捨てます。2番目の引数が負の場合は0、素数である場合、小数部分を切り捨てて、2番目の引数が置き換えられます。

  • 例 : TRUNC(3.3, 0)=3, TRUNC(3.33312, 2)=3.33, TRUNC(3.000, 2)=3, TRUNC(2.23, -2)=2, TRUNC(2.23, 1.5)=2.2

MOD(Integer, Integer) : Integer

最初の引数を2番目の引数で割った余りを返します。%演算子の代わりに使用できます。

  • 例 : MOD(5, 2)=1

SQRT(Number) : Number

数字の平方根を返します。

  • 例 : SQRT(1.44)=1.2

POWER(Number, Number) : Number

最初の引数を2番目の引数で累乗した結果を返します。

  • 例 : POWER(2, 4)=16

LOG(Number, Number) : Number

最初の引数の値を2番目の引数の値を下(Base)にしてLog値を返します。最初の引数が0の場合、"-inf" Stringを返し 、0よりも小さければ、 "nan" Stringを返します。2番目の引数が0より小さいか1の場合"nan" Stringを返します。

  • 例 : Log(100, 10)=2

EXP(Number) : Number

e(自然定数、オイラー定数)で入力された数値の累乗値を返します。

  • 例 : EXP(1)=2.718281828459045

LN(Number) : Number

e(自然定数、オイラー定数)を下(Base)にして、入力された数値のLog値を返します。 数字が0の場合、 "-inf" Stringを返し、0よりも小さければ、 "nan" Stringを返します。

  • 例 : LN(10)=2.302585092994046

三角関数(Number) : Number

三角関数の値を返します。

  • 使用可能な三角関数は、SIN(n), SINH(n) COS(n), COSH(n), TAN(n), TANH(n), ASIN(n), ACOS(n), ATAN(n), ATAN2(n), ATANH(n) です。

BITOR(Integer, Integer) : Integer

2つの値をbit値に変換した後、OR演算した値を10進数で返します。

  • 例 : BITOR(4, 2)=6

BITAND(Integer, Integer) : Integer

2つの値をbit値に変換した後、AND演算した値を10進数で返します。

  • 例 : BITAND(4, 2)=0

BITXOR(Integer, Integer) : Integer

2つの値をbit値に変換した後、XOR演算した値を10進数で返します。

  • 例 : BITXOR(5, 1)=4

NANVL(Any, Any) : Any

最初の引数が数値なら最初の引数を、数字でなければ2番目の引数を返します。

  • 例 : NANVL(1.1, 1.5)=1.1, NANVL('STRING', '3')="3"

ISNULL(Any) : Bool

値がnull値の場合は真(true)、そうでない場合は偽(false)bool値で返します。

  • 例 : ISNULL("not null")=false, ISNULL(null)=true

NULLIF(Any, Any) : Any

入力された2つの引数の値が同じであればnull、異なる場合、最初の引数の値を返します。

  • 例1 : NULLIF(1, 1)=null
  • 例2 : NULLIF(deviceId, null)
    • deviceIdの値がnullの場合null、そうでなければdeviceIdの値を返す
  • 例3 : SELECT NULLIF(deviceId, null) AS deviceId FROM "topic" WHERE member IS NOT NULL
  • 例4 : SELECT NULLIF(deviceId, '2x33sed') AS deviceId FROM "topic"

EXISTS(Any) : Bool

JSON listまたJSON object アイテムが存在することを確認します。存在する場合は真(true)、そうでない場合は偽(false)bool値で返します。

  • 例1 : EXISTS(5)=false - JSON list また JSON Object違うので
  • 例2
    • Input JSON
        { "device" : [] } 또는 { "device" : {} }
      
    • Query
      SELECT EXISTS(device) as empty_device FROM "iot"
      
    • Result JSON
        { "empty_device" : false }
      

RAND() : Number

0.0〜1.0の範囲の均等確率でランダム値を返します。

  • 例 : RAND()=0.1897250037492607

CHAR_LENGTH(String) : Integer

文字列の文字数を返します。

  • 例 : CHAR_LENGTH('heLLo')=5

UPPER(String) : String

大文字で置換して返します。アルファベット以外の文字は影響を受けません。

  • 例 : UPPER('hi99')="HI99"

LOWER(String) : String

小文字で置換して返します。アルファベット以外の文字は影響を受けません。

  • 例 : LOWER('NEXT99')="next99"

TRIM(表現式 String FROM String) : String

文字列の前後の特定文字を削除します。TRIM(String)、TRIM(表現式FROM String)、TRIM(表現式String FROM String)のように様々な形で使用可能です。

  • LEADINGの場合は先頭の文字列だけを、TRAILINGの場合は末尾の文字列だけを、BOTHは両方を削除します。
  • 基本的にはLEADING、TRAILING、BOTHの間に特定文字を指定して、その文字を削除することができ、指定しない場合はスペースを削除します。
  • TRIM('   foobar   ')                  -- "foobar"
    TRIM('   \tfoobar\t    ')             -- "\tfoobar\t"
    TRIM(LEADING FROM '    foobar    ')   -- "foobar    "
    TRIM(TRAILING FROM '    foobar    ')  -- "    foobar"
    TRIM(BOTH FROM '    foobar    ')     -- "foobar"
    TRIM(BOTH '1' FROM '11foobar11')             -- "foobar"
    TRIM(BOTH '12' FROM '1112211foobar22211122') -- "foobar"
    

LEADING_PAD(String, Integer, String(オプション)) : String

文字列の先頭に特定の文字列を追加します。

  • 例 : LEADING_PAD('device', 2)=" device", LEADING_PAD('device', 2, 'mm')="mmdevice"

TRAILING_PAD(String, Integer, String(オプション)) : String

文字列の末尾に特定の文字列を追加します。

  • 例 : TRAILING_PAD('device', 2)="device ", TRAILING_PAD('device', 2, 'mm')="devicemm"

NUMBYTES(String) : Integer

文字列のUTF-8エンコーディングの基準バイト数を返します。

  • 例 : NUMBYTES('good')=4, NUMBYTES('∀')=3

STARTSWITH(String, String) : Bool

最初の引数が2番目の引数の文字列で始まるかどうかを真(true)、偽(false)bool値で返します。

  • 例 : STARTSWITH('hello', 'he')=true

ENDSWITH(String, String) : Bool

最初の引数が2番目の引数の文字列で終わるかどうかを真(true)、偽(false)bool値で返します。

  • 例 : ENDSWITH('hello', 'lo')=true

INDEXOF(String, String) : Integer

最初の引数に2番目の引数の文字列が存在する場合、同じ最初の文字列の開始インデックスを返します。 見つからない場合は-1を返します。

  • 例 : INDEXOF('hello', 'el')=1, INDEXOF('hello', 'xx')=-1

REPLACE(String, String, String) : String

最初の引数の文字列で、2番目の引数の文字列を検索し、3番目の引数にすべて置換して返します。

  • 例 : REPLACE('hello', 'l', 'ee')="heeeeeo"

REGEXP_REPLACE(String, String, String) : String

最初の引数の文字列で、2番目の正規表現と一致する文字列をすべて見つけて、3番目の引数にすべて置換して返します。3番目の引数に "$"を使用してキャプチャグループを参照することができます。

  • 例1 : REGEXP_REPLACE('xdevice', 'x{.*}', 'invalid')="invalid"
  • 例2 : REGEXP_REPLACE('x is b y is a', '(.) is (.))', '$2')="a"

REGEXP_MATCHES(String, String) : Bool

最初の引数の文字列で、2番目の正規表現と一致する文字列が含まれている場合、真(true)bool値で返します。

  • 例 : REGEXP_MATCHES('hello', 'l{2,}')=true, REGEXP_MATCHES('halo', 'l{2,}')=false

REGEXP_SUBSTR(String, String) : String

最初の引数の文字列で、2番目の正規表現と一致する最初の一致する文字列を検索します。

  • 例 : REGEXP_SUBSTR('byebyeY', '(bye)*')="byebye"

CONCAT(String, String, ...): String

すべての引数のSTRING値を接続します。

  • 例 : CONCAT('he', 'll', 'o')="hello"

LIST(Any, Any, ...): JSONList

すべての引数の値をListに作成して返します。

  • 例 : LIST('he', 1, true, null, {"a":"b"},[1])=["he", 1, true, null, {"a":"b"}, [1,2,3]]

FLATLIST(Any, Any, ...): JSONList

すべての引数の値をListに作成して返します。引数の中にListがある場合、展開して加えます。

  • 例 : LIST('he', 1, true, null, {"a":"b"},[1,2,3])=["he", 1, true, null, {"a":"b"}, 1, 2, 3]

SUBSTRING(String, Integer, Integer) : String

文字列を切ります。 最初の因子の文字列で、2番目の因子数字の1文字目から3番目の因子数だけ文字列を返します。 3番目の因子がない場合、2番目の因子からその後のすべての文字列を返します。

  • 例 : SUBSTRING('12345', 0)="12345", SUBSTRING('12345', 1)="12345", SUBSTRING('12345', 3)="345" SUBSTRING('12345', 2, 3)="2", SUBSTRING('12345', -2, 0)="" (empty値) , SUBSTRING('12345', 5, 5)=""(empty)

NEWUUID() : String

任意の16バイトUUIDを返します。

  • 例 : NEWUUID()="0491e6b5-afee-4a39-97a3-14bc6c35fda9"

HASH(String, String) : String

最初の引数を2番目の引数の型としてハッシュを取得します。

  • サポートするハッシュタイプは、MD2、MD5、SHA-1、SHA-224、SHA-384、SHA-256、SHA-512であり、大文字と小文字は区別されませんが、正確にタイプを入力しなければなりません。

  • 例 : HASH('iotgood', 'sha-1')="edcf3d81bd181b9b37bc9748766b16345f7fb405"

ENCODE(String, String) : String

最初の引数を2番目の引数のエンコードタイプでエンコードします。

  • サポートするエンコーディングタイプは、Base64のみをサポートしており、正確にタイプを入力しなければなりません。

  • 例 : ENCODE('iot', 'base64')="aW90"

DECODE(String, String) : String

最初の引数を2番目の引数のデコードタイプでデコードします。

  • サポートするデコードタイプは、Base64のみをサポートしており、正確にタイプを入力しなければなりません。

  • 例 : DECODE('aW90', 'base64')="iot"

CHR(Integer) : String

入力されたIntegerに対応するASCII文字を返します。

  • 例 : CHR(65)="A"

GET_ITEM(JSONObjectまたはJSONListまたはString) : Any

最初の引数の値から2番目の引数の順番のアイテムを呼び出します。最初の引数がStringである場合、対応するIndexの文字を1つ呼び出します。

  • 例1 :リストから呼び出す GET_ITEM(["banana", "apple", "grape"], 2)="grape"
  • 例2 : オブジェクトから呼び出す GET_ITEM({"device":"none"}, 'device')="none"
  • 例3 : Stringから呼び出す GET_ITEM('banana', 2)="n"

SIZE(JSONObjectまたはJSONList) : Integer

JSON値のSizeを返します。

  • 例1:リストのアイテム数を返す

    • Input JSON
      {
        "lux": [null, 2, "3"]
      }
      
    • Query
      SELECT SIZE(t.lux) AS "count" FROM "topic" AS t
      
    • Result JSON
      {
        "count": 3
      }
      
  • 例2:キー- 値のペアの数を返す

    • Input JSON
      {
        "info": {
          "dv1": 1,
          "volt": "1v",
          "id": null
        },
        "lux": [1, 2]
      }
      
    • Query
      SELECT SIZE(t.info) AS "count" FROM "topic" AS t
      
    • Result JSON
      {
        "count": 3
      }
      
  • 例3:JSON値を直接入力する場合、 `(Grave Accent)で括って入力できます。

    • Query

      SELECT SIZE(`{ "device": 1, "lux": 1}`) AS "count" FROM "topic" AS t
      
    • Result JSON

      {
        "count": 2
      }
      

COALESCE(...): Any

引数がnull以外の値のうち、一番左の引数の値を返します。入力引数は、可変で、少なくとも1つは入力する必要があります。

  • 例 : COALESCE('s', null, 1)='s', COALESCE(null, null, 1)=1, COALESCE(null, null)=null

CAST(Any AS type) : type

値をキャストします。

  • typeには、boolean、integer、float、stringを使用することができます。
  • 例1:Booleanでキャスト(1, 1.0, 'true'のみtrueに変換する。その他はfalse)
    • CAST(0 AS boolean)=false
    • CAST(1 AS boolean)=true
    • CAST(1.1 AS boolean)=true
    • CAST('1' AS boolean)=false
    • CAST('true' AS boolean)=true
  • 例2
    • CAST(true AS integer)=1
    • CAST(false AS integer)=0
    • CAST(1.75 AS integer)=1
    • CAST('aa' AS integer)=(error発生)
    • CAST('22' AS integer)=22
  • 例3
    • CAST('2.2' AS float)=2.2
    • CAST(true AS float)=1.0
    • CAST(true AS string)="true"

UNIXTIME_NOW() : Integer

現在時刻のUnixタイムスタンプ(ミリ秒)を取得します。

  • 例 : UNIXTIME_NOW()=1594614865656

UNIXTIME_TO_STRING(Integer, String, String(オプション)) : String

最初の引数を、2番目の引数の日付フォーマットの形式に合わせて変換して、文字列を変換します。3番目の引数は、TimeZoneで値がない場合、UTC TimeZone基準で変換します。

    • UNIXTIME_TO_STRING(1594579192000, 'yyyy MM dd hh:mm:ss z', 'Asia/Seoul')="2020 07 13 03:39:52 KST"
    • UNIXTIME_TO_STRING(1594579192000, 'hh:mm:ss')="06:39:52"
  • Time Zone設定の参照UTC Offset

STRING_TO_UNIXTIME(String, String, String(オプション)) : Integer

最初の引数を、2番目の引数の日付フォーマット形式に合わせて文字列をUnixタイムスタンプ(ミリ秒)に変換します。3番目の引数はTimeZoneで、値がない場合、UTC TimeZone基準で変換します。

    • STRING_TO_UNIXTIME('2020 07 13 03:39:52', 'yyyy MM dd hh:mm:ss', 'Asia/Seoul')=1594579192000
    • STRING_TO_UNIXTIME('2020 07 13 06:39:52.222', 'yyyy MM dd hh:mm:ss.SSS')=1594622392222
  • Time Zone設定の参照UTC Offset

EXTRACT(表現式FROM Integer) : Integer

Unixタイムスタンプで表現式を使用してUTC TimezoneにYEAR、MONTH、HOUR、MINUTE、DAY、SECOND値を呼び出すことができます。

  EXTRACT(YEAR FROM 1594579192031)                           -- 2020
  EXTRACT(MONTH FROM 1594579192031)                          -- 7
  EXTRACT(HOUR FROM 1594579192031)                           -- 18
  EXTRACT(DAY FROM 1594579192031)                            -- 12
  EXTRACT(MINUTE FROM 1594579192031)                         -- 39
  EXTRACT(SECOND FROM 1594579192031)                         -- 52

ADD_TIME(表現式, Integer, Integer) : Integer

Unixタイムスタンプで表現式を使用してUTC TimezoneにYEAR、MONTH、HOUR、MINUTE、DAY、SECOND値を加えて引くことができます。2番目の引数の値を、3番目の引数の値に表現式の単位で加えることになり、- の値が可能です。

例 : ADD_TIME(MINUTE, -10, 1594579198031)=1594578598031

DIFF_TIME(表現式, Integer, Integer) : Integer

Unixタイムスタンプで表現式を使用してUTC TimezoneにYEAR、MONTH、HOUR、MINUTE、DAY、SECONDの基準時間の差を求めることができます。結果の値が - の場合、 前のUnixタイムスタンプがさらに大きい場合です。

例 : DIFF_TIME(SECOND, 1594579192031, 1594579198031)=6 例 : DIFF_TIME(MINUTE, 1594579992031, 1594579198031)=-13

CASE節

Case構文を使用して、switchのような分岐処理を行うことができます。少なくとも一つのWHEN節は必要であり、ELSE節は必ずしも必要ではありません。

  CASE 評価値 WHEN 値1 THEN 戻り値1
  WHEN値2 THEN 戻り値2 ...
  ELSE 戻り値 残り END
  • WHENには、評価値が正しいか間違っているかの確認ができ、不等号を使用することができません。

  • 例1

    • Input JSON
        { "fruit" : "apple" }
      
    • Query
      SELECT CASE fruit WHEN 'apple' THEN 'red' WHEN 'banana' THEN 'yellow' ELSE 'no color' END as color FROM "fruit/color"
      
    • Result JSON
        { "color": "red" }
      
  • 例2 評価値と値1、値2 ...には、Number、Stringの両方が可能であり、Key値としてJSON Valueを参照することができます。

    • Input JSON
        { "my_score" : 31, "team_score" : 30 }
      
    • Query
      SELECT CASE 30 WHEN my_score THEN my_score * 2 WHEN team_score THEN team_score/2 ELSE 'nothing 30' END as final_score FROM "score/30"
      
    • Result JSON
        { "final_score" : 15 }
      

リテラル構文

リテラル値を直接作成することができます。

  • 例1

    • Input JSON
        { "xy": [47.606,-122.332] }
      
    • Query
      SELECT {'x': GET_ITEM(xy, 0),'y':GET_ITEM(xy, 1)} as result FROM "topic/coord"
      
    • Result JSON
        { "result" : { "x" : 47.606, "y" : -122.332 } }
      
  • 例2

    • Input JSON
         {"lat" : 47.696, "long" : -122.332}
      
    • Query
      SELECT [lat,long] as lat_long FROM "topic/coord"
      
    • Result JSON
        { "lat_long" : [47.606,-122.332]}
      

に対する検索結果は~件です。 ""

    に対する検索結果がありません。 ""

    処理中...