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