Thing 情報の操作

Kii Cloud SDK は、Thing に関する属性を管理するための既定フィールドを定義しています。開発者は、これらに加えてカスタムフィールドを追加できます(これらフィールドの概要については Thing 管理 をご覧ください)。

既定フィールドの操作

Kii Cloud SDK は、以下の情報を管理するための既定フィールドを定義しています(設定可能なフィールドについて詳しくは、Thing の登録 をご覧ください)。

  • Thing のベンダーが割り当てた ID
  • パスワード
  • タイプ
  • ベンダー名
  • ファームウェアバージョン
  • プロダクト名
  • ロット番号
  • 予約済みの文字列フィールド
  • 予約済みの数字フィールド
  • オンラインステータス(読み取り専用)
  • オンラインステータスの最終更新日時(読み取り専用)

これら既定フィールド(Thing ベンダーが割り当てた ID およびパスワードを除く)の操作は KiiThing が提供するメソッドで行います。

既定フィールドの設定・変更

既定フィールドを設定・変更する例を以下に挙げます。なお、1 回設定した既定フィールドは削除できません。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Set predefined fields.
      thing.setThingType("GPS");
      thing.setVendor("Kii Corporation");
      thing.setFirmwareVersion("1.01");
      thing.setProductName("Kii Cloud");
      thing.setLot("KII20140711-AB-002134D");
      thing.setStringField1("S001");
      thing.setStringField2("S002");
      thing.setStringField3("S003");
      thing.setStringField4("S004");
      thing.setStringField5("S005");
      thing.setNumberField1(101L);
      thing.setNumberField2(102L);
      thing.setNumberField3(103L);
      thing.setNumberField4(104L);
      thing.setNumberField5(105L);
    
      // Update the thing.
      thing.update();
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Set predefined fields.
        result.setThingType("GPS");
        result.setVendor("Kii Corporation");
        result.setFirmwareVersion("1.01");
        result.setProductName("Kii Cloud");
        result.setLot("KII20140711-AB-002134D");
        result.setStringField1("S001");
        result.setStringField2("S002");
        result.setStringField3("S003");
        result.setStringField4("S004");
        result.setStringField5("S005");
        result.setNumberField1(101L);
        result.setNumberField2(102L);
        result.setNumberField3(103L);
        result.setNumberField4(104L);
        result.setNumberField5(105L);
    
        // Update the thing.
        result.update(new KiiCallback<KiiThing>() {
          @Override
          public void onComplete(KiiThing target, Exception e) {
            if (e != null) {
              // Handle the error.
              return;
            }
          }
        });
      }
    });

iOS

Swift:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Set predefined fields.
    thing.thingType = "GPS"
    thing.vendor = "Kii Corporation"
    thing.firmwareVersion = "1.01"
    thing.productName = "Kii Cloud"
    thing.lot = "KII20140711-AB-002134D"
    thing.stringField1 = "S001"
    thing.stringField2 = "S002"
    thing.stringField3 = "S003"
    thing.stringField4 = "S004"
    thing.stringField5 = "S005"
    thing.numberField1 = 101
    thing.numberField2 = 102
    thing.numberField3 = 103
    thing.numberField4 = 104
    thing.numberField5 = 105
    
    do{
      // Update the thing.
      try thing.updateSynchronous()
    } catch let error as NSError {
      // Handle the error.
      return
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Set predefined fields.
      thing!.thingType = "GPS"
      thing!.vendor = "Kii Corporation"
      thing!.firmwareVersion = "1.01"
      thing!.productName = "Kii Cloud"
      thing!.lot = "KII20140711-AB-002134D"
      thing!.stringField1 = "S001"
      thing!.stringField2 = "S002"
      thing!.stringField3 = "S003"
      thing!.stringField4 = "S004"
      thing!.stringField5 = "S005"
      thing!.numberField1 = 101
      thing!.numberField2 = 102
      thing!.numberField3 = 103
      thing!.numberField4 = 104
      thing!.numberField5 = 105
    
      // Update the thing.
      thing!.update({ (thing , error) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
      })
    
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Set predefined fields.
    thing.thingType = @"GPS";
    thing.vendor = @"Kii Corporation";
    thing.firmwareVersion = @"1.01";
    thing.productName = @"Kii Cloud";
    thing.lot = @"KII20140711-AB-002134D";
    thing.stringField1= @"S001";
    thing.stringField2= @"S002";
    thing.stringField3= @"S003";
    thing.stringField4= @"S004";
    thing.stringField5= @"S005";
    thing.numberField1= @101;
    thing.numberField2= @102;
    thing.numberField3= @103;
    thing.numberField4= @104;
    thing.numberField5= @105;
    
    // Update the thing.
    [thing updateSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                              block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Set predefined fields.
      thing.thingType = @"GPS";
      thing.vendor = @"Kii Corporation";
      thing.firmwareVersion = @"1.01";
      thing.productName = @"Kii Cloud";
      thing.lot = @"KII20140711-AB-002134D";
      thing.stringField1= @"S001";
      thing.stringField2= @"S002";
      thing.stringField3= @"S003";
      thing.stringField4= @"S004";
      thing.stringField5= @"S005";
      thing.numberField1= @101;
      thing.numberField2= @102;
      thing.numberField3= @103;
      thing.numberField4= @104;
      thing.numberField5= @105;
    
      // Update the thing.
      [thing update:^(KiiThing *thing, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
      }];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Prepare predefined fields.
    var thingFields = {
      _thingType: "GPS",
      _vendor: "Kii Corporation",
      _firmwareVersion: "1.01",
      _productName: "Kii Cloud",
      _lot: "KII20140711-AB-002134D",
      _stringField1: "S001",
      _stringField2: "S002",
      _stringField3: "S003",
      _stringField4: "S004",
      _stringField5: "S005",
      _numberField1: 101,
      _numberField2: 102,
      _numberField3: 103,
      _numberField4: 104,
      _numberField5: 105
    };

    // Set the predefined fields.
    thing.fields = thingFields;

    // Update the thing.
    thing.update({
      success: function(theThing) {
        // Do something.
      },
      failure: function(theThing, error) {
        // Handle the error.
      }
    });
  },
  failure: function(error) {
    // Handle the error.
  }
});

既定フィールドは、指定したフィールドのみが更新されます。リクエスト内で指定しなかったフィールドの値はそのままキープされます。なお、すでに存在するフィールドは削除できません。

既定フィールドの参照

既定フィールドを参照する例を以下に挙げます。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing things = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Get predefined fields.
      String thingType = things.getThingType();
      String vendor = things.getVendor();
      String firmwareVersion = things.getFirmwareVersion();
      String productName = things.getProductName();
      String lot = things.getLot();
      String stringField1 = things.getStringField1();
      String stringField2 = things.getStringField2();
      String stringField3 = things.getStringField3();
      String stringField4 = things.getStringField4();
      String stringField5 = things.getStringField5();
      Long numberField1 = things.getNumberField1();
      Long numberField2 = things.getNumberField2();
      Long numberField3 = things.getNumberField3();
      Long numberField4 = things.getNumberField4();
      Long numberField5 = things.getNumberField5();
      Boolean online = things.isOnline();
      long statusModifiedAt = things.getOnlineStatusModifiedAt();
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Get predefined fields.
        String thingType = result.getThingType();
        String vendor = result.getVendor();
        String firmwareVersion = result.getFirmwareVersion();
        String productName = result.getProductName();
        String lot = result.getLot();
        String stringField1 = result.getStringField1();
        String stringField2 = result.getStringField2();
        String stringField3 = result.getStringField3();
        String stringField4 = result.getStringField4();
        String stringField5 = result.getStringField5();
        Long numberField1 = result.getNumberField1();
        Long numberField2 = result.getNumberField2();
        Long numberField3 = result.getNumberField3();
        Long numberField4 = result.getNumberField4();
        Long numberField5 = result.getNumberField5();
        Boolean online = result.isOnline();
        long statusModifiedAt = result.getOnlineStatusModifiedAt();
      }
    });

iOS

Swift:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Get predefined fields.
    let thingType = thing.thingType
    let vendor = thing.vendor
    let firmwareVersion = thing.firmwareVersion
    let productName = thing.productName
    let lot = thing.lot
    let stringField1 = thing.stringField1
    let stringField2 = thing.stringField2
    let stringField3 = thing.stringField3
    let stringField4 = thing.stringField4
    let stringField5 = thing.stringField5
    let numberField1 = thing.numberField1
    let numberField2 = thing.numberField2
    let numberField3 = thing.numberField3
    let numberField4 = thing.numberField4
    let numberField5 = thing.numberField5
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Get predefined fields.
      let thingType = thing!.thingType
      let vendor = thing!.vendor
      let firmwareVersion = thing!.firmwareVersion
      let productName = thing!.productName
      let lot = thing!.lot
      let stringField1 = thing!.stringField1
      let stringField2 = thing!.stringField2
      let stringField3 = thing!.stringField3
      let stringField4 = thing!.stringField4
      let stringField5 = thing!.stringField5
      let numberField1 = thing!.numberField1
      let numberField2 = thing!.numberField2
      let numberField3 = thing!.numberField3
      let numberField4 = thing!.numberField4
      let numberField5 = thing!.numberField5
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Get predefined fields.
    NSString* thingType = thing.thingType;
    NSString* vendor = thing.vendor;
    NSString* firmwareVersion = thing.firmwareVersion;
    NSString* productName = thing.productName;
    NSString* lot = thing.lot;
    NSString* stringField1 = thing.stringField1;
    NSString* stringField2 = thing.stringField2;
    NSString* stringField3 = thing.stringField3;
    NSString* stringField4 = thing.stringField4;
    NSString* stringField5 = thing.stringField5;
    NSNumber* numberField1 = thing.numberField1;
    NSNumber* numberField2 = thing.numberField2;
    NSNumber* numberField3 = thing.numberField3;
    NSNumber* numberField4 = thing.numberField4;
    NSNumber* numberField5 = thing.numberField5;
    NSNUmber* online = thing.online;
    NSDate* onlineStatusModifiedAt = thing.onlineStatusModifiedAt;
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                              block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Get predefined fields.
      NSString* thingType = thing.thingType;
      NSString* vendor = thing.vendor;
      NSString* firmwareVersion = thing.firmwareVersion;
      NSString* productName = thing.productName;
      NSString* lot = thing.lot;
      NSString* stringField1 = thing.stringField1;
      NSString* stringField2 = thing.stringField2;
      NSString* stringField3 = thing.stringField3;
      NSString* stringField4 = thing.stringField4;
      NSString* stringField5 = thing.stringField5;
      NSNumber* numberField1 = thing.numberField1;
      NSNumber* numberField2 = thing.numberField2;
      NSNumber* numberField3 = thing.numberField3;
      NSNumber* numberField4 = thing.numberField4;
      NSNumber* numberField5 = thing.numberField5;
      NSNUmber* online = thing.online;
      NSDate* onlineStatusModifiedAt = thing.onlineStatusModifiedAt;
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Get predefined fields.
    var thingType = thing.fields._thingType;
    var vendor = thing.fields._vendor;
    var firmwareVersion = thing.fields._firmwareVersion;
    var productName = thing.fields._productName;
    var lot = thing.fields._lot;
    var stringField1 = thing.fields._stringField1;
    var stringField2 = thing.fields._stringField2;
    var stringField3 = thing.fields._stringField3;
    var stringField4 = thing.fields._stringField4;
    var stringField5 = thing.fields._stringField5;
    var numberField1 = thing.fields._numberField1;
    var numberField2 = thing.fields._numberField2;
    var numberField3 = thing.fields._numberField3;
    var numberField4 = thing.fields._numberField4;
    var numberField5 = thing.fields._numberField5;
    var online = thing.isOnline();
    var statusModifiedAt = thing.getOnlineStatusModifiedAt();
  },
  failure: function(error) {
    // Handle the error.
  }
});

カスタムフィールドの操作

開発者は、上記の既定フィールドに加え、任意のフィールド(シリアルナンバー、国コード等)を追加できます。ただし、SDK により予約されているフィールド名は使用できません。

カスタムフィールドの設定・変更

カスタムフィールドを設定・変更する例を以下に挙げます。なお、1 回設定したカスタムフィールドは削除できません。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing thing = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Set a custom field.
      thing.set("serial_number", "K00001233214001");
    
      // Update the thing.
      thing.update();
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Set a custom field.
        result.set("serial_number", "K00001233214001");
    
        // Update the thing.
        result.update(new KiiCallback<KiiThing>() {
          @Override
          public void onComplete(KiiThing target, Exception e) {
            if (e != null) {
              // Handle the error.
              return;
            }
          }
        });
      }
    });

iOS

Swift:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Set a custom field.
    thing.setObject("K00001233214001", forKey: "serial_number")
    
    // Update the thing.
    thing.update({ (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    })
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Set a custom field.
      thing!.setObject("K00001233214001", forKey: "serial_number")
    
      // Update the thing.
      thing!.update({ (thing , error) -> Void in
        if error != nil {
          // Handle the error.
          return
        }
      })
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                  error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Set a custom field.
    [thing setObject:@"K00001233214001" forKey:@"serial_number"];
    
    // Update the thing.
    [thing updateSynchronous:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                              block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Set a custom field.
      [thing setObject:@"K00001233214001" forKey:@"serial_number"];
    
      // Update the thing.
      [thing update:^(KiiThing *thing, NSError *error) {
        if (error != nil) {
          // Handle the error.
          return;
        }
      }];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Set a custom field.
    thing.fields.serial_number = "K00001233214001";

    // Update the thing.
    thing.update({
      success: function(thing) {
        // Do something.
      },
      failure: function(theThing, error) {
        // Handle the error.
      }
    });
  },
  failure: function(error) {
    // Handle the error.
  }
});

カスタムフィールドの参照

カスタムフィールドを参照する例を以下に挙げます。

Android

  • try {
      // Instantiate a thing by vendor thing ID.
      KiiThing things = KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS");
    
      // Get custom fields.
      int version = things.getInt("version");
      String serialNumber = things.getString("serialNumber");
      double accuracy = things.getDouble("accuracy");
      boolean isInitialized = things.getBoolean("isInitialized");
    } catch (AppException e) {
      // Handle the error.
    } catch (IOException e) {
      // Handle the error.
    }
  • // Instantiate a thing by vendor thing ID.
    KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", new KiiCallback<KiiThing>() {
      @Override
      public void onComplete(KiiThing result, Exception e) {
        if (e != null) {
          // Handle the error.
          return;
        }
    
        // Get custom fields.
        int version = result.getInt("version");
        String serialNumber = result.getString("serialNumber");
        double accuracy = result.getDouble("accuracy");
        boolean isInitialized = result.getBoolean("isInitialized");
      }
    });

iOS

Swift:

  • let thing : KiiThing
    
    do{
      // Instantiate a thing by vendor thing ID.
      thing = try KiiThing.loadSynchronous(withVendorThingID: "rBnvSPOXBDF9r29GJeGS")
    }catch(let error as NSError){
      // Handle the error.
      return
    }
    
    // Get custom fields.
    let serialNumber = thing.getForKey("serialNumber") as! String
    let accuracy = thing.getForKey("accuracy") as! Double
    let version = thing.getForKey("version") as! Int
    let isInitialized = thing.getForKey("isInitialized") as! Bool
  • // Instantiate a thing by vendor thing ID.
    KiiThing.load(withVendorThingID: "rBnvSPOXBDF9r29GJeGS") { (thing , error) -> Void in
      if error != nil {
        // Handle the error.
        return
      }
    
      // Get custom fields.
      let serialNumber = thing!.getForKey("serialNumber") as! String
      let accuracy = thing!.getForKey("accuracy") as! Double
      let version = thing!.getForKey("version") as! Int
      let isInitialized = thing!.getForKey("isInitialized") as! Bool
    }

Objective-C:

  • NSError* error = nil;
    
    // Instantiate a thing by vendor thing ID.
    KiiThing* thing = [KiiThing loadSynchronousWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                                                           error:&error];
    if (error != nil) {
      // Handle the error.
      return;
    }
    
    // Get custom fields.
    NSString* serialNumber = [thing getObjectForKey:@"serialNumber"];
    double accuracy = [(NSNumber*)[thing getObjectForKey:@"accuracy"] doubleValue];
    int version = [(NSNumber*)[thing getObjectForKey:@"version"] intValue];
    BOOL isInitialized = [(NSNumber*)[thing getObjectForKey:@"isInitialized"] boolValue];
  • // Instantiate a thing by vendor thing ID.
    [KiiThing loadWithVendorThingID:@"rBnvSPOXBDF9r29GJeGS"
                              block:^(KiiThing *thing, NSError *error) {
      if (error != nil) {
        // Handle the error.
        return;
      }
    
      // Get custom fields.
      NSString* serialNumber = [thing getObjectForKey:@"serialNumber"];
      double accuracy = [(NSNumber*)[thing getObjectForKey:@"accuracy"] doubleValue];
      int version = [(NSNumber*)[thing getObjectForKey:@"version"] intValue];
      BOOL isInitialized = [(NSNumber*)[thing getObjectForKey:@"isInitialized"] boolValue];
    }];

JavaScript

// Instantiate a thing by vendor thing ID.
KiiThing.loadWithVendorThingID("rBnvSPOXBDF9r29GJeGS", {
  success: function(thing) {
    // Get custom fields.
    var version = thing.fields.version;
    var serialNumber = thing.fields.serialNumber;
    var accuracy = thing.fields.accuracy;
    var isInitialized = thing.fields.isInitialized;
  },
  failure: function(error) {
    // Handle the error.
  }
});