Managing Thing Information

Kii Cloud SDK provides some predefined fields for managing common thing attributes. You can also add some custom fields. (See Thing Management for more details on the thing attributes and fields).

Managing Predefined Fields

You can use the following attributes in the thing information predefined fields (See Register a Thing for more detail on the settable fields).

  • VendorThingID
  • Password
  • Type
  • Vendor
  • Firmware Version
  • Product Name
  • Lot
  • Reserved string fields
  • Reserved number fields
  • Online Status (read-only)
  • Last Update Date of Online Status (read-only)

Kii Cloud SDK provides the dedicated methods for manipulating these predefined fields (except for vendorThingID and password that cannot be updated).

Setting Predefined Fields

The following sample code illustrates how to set the predefined fields. Please note that you cannot delete the existing fields.

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.
  }
});

Only the specified fields will be updated. The fields not specified in the request will remain unchanged. You cannot delete the existing fields.

Getting Predefined Fields

The following sample code illustrates how to get the predefined fields.

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.
  }
});

Managing Custom Fields

You can additionally add your own custom fields (e.g. serial number and country code) as long as the field name does not conflict with the predefined fields.

Setting Custom Fields

The following sample code illustrates how to set some custom fields. Please note that you cannot delete the existing fields.

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.
  }
});

Getting Custom Fields

The following sample code illustrates how to get the custom fields.

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.
  }
});