Difference between revisions of "HelloWorld plugin"
From AMTech WikiDocs
(→Configure amtechM2MBridge template) |
(→Configure amtechM2MBridge template) |
||
Line 138: | Line 138: | ||
**associate [[Activities#Actors|helloWorld actor]] with helloWorld activity | **associate [[Activities#Actors|helloWorld actor]] with helloWorld activity | ||
*configure [[Activities#Observation production configuration|observation production]] | *configure [[Activities#Observation production configuration|observation production]] | ||
− | |||
** thing type HelloWorld | ** thing type HelloWorld | ||
***observation type obsrvHelloWorld | ***observation type obsrvHelloWorld | ||
Line 153: | Line 152: | ||
*publishing activity (See [[Publishing|Publishing]]) | *publishing activity (See [[Publishing|Publishing]]) | ||
**validate activity | **validate activity | ||
− | **deploy activity | + | **deploy activity |
*invite a user as helloWorld actor (See [[Access control#Actors|Invite user]]) | *invite a user as helloWorld actor (See [[Access control#Actors|Invite user]]) | ||
**user id smartsensor@amtech.mx | **user id smartsensor@amtech.mx | ||
Line 161: | Line 160: | ||
**create HelloWorld type instace with name helloWorld | **create HelloWorld type instace with name helloWorld | ||
**associate HelloWorld instance to amtechM2MBridge instance propety '''bridgeInstances''' | **associate HelloWorld instance to amtechM2MBridge instance propety '''bridgeInstances''' | ||
− | **give guest access to helloWorld M2MBridge instance to tenant m2mfollower and user smartsensor@amtech.mx | + | **give guest access to helloWorld M2MBridge instance to tenant m2mfollower and user smartsensor@amtech.mx (if check user id set in policies) |
− | + | ||
**thing type HelloWorld | **thing type HelloWorld | ||
**observation type commandHelloWorld | **observation type commandHelloWorld | ||
**set topic to /helloWorld/asynch | **set topic to /helloWorld/asynch | ||
− | **set target uri to observation producer (See [[Sensor | + | **set target uri to observation producer (See [[Sensor%27s_network#targetthings|targetthings]]) |
**set hwgreetingLabel holaFromCommand | **set hwgreetingLabel holaFromCommand | ||
Revision as of 16:35, 25 May 2016
Contents
HelloWorld plugin flow
- Create HelloWorld thing type
- Create observation(s) type
- Implement plugin node.js interface
- Configuration to test plugin
- Create amtechM2MBridge instance
- Create HelloWorld instance
- Create activity HelloWorld (See Hello World activity flow)
Create thing type HelloWorld
- add supported property type string hwgreetingLabel (See Thing types)
- string without space validation regexp ^[^\s]+$
- add supported property type integer hwSayHelloFrequency
Create observation type obsrvHelloWorld
- add supported property type string hwgreetingLabel (See Observations and observation types)
- clone obsrvHelloWorld with name commandHelloWorld
Define observation types produce or consume by HelloWorld
- add obsrvHelloWorldobservation to Observation Production configuration list (See Thing types)
- add commandHelloWorldobservation to Observation Production configuration list
- add observationresourcecrud to Observation Production configuration list
- enables listen per configuration changes
Implement plugin HelloWorld interface
- create a directory with the name HelloWorld at (See plugin directory )
- at the directory HelloWorld create a javascript file HelloWorld.js
- implement the interface (See How to implement a new plugin)
function HelloWorld() {
}
HelloWorld.prototype.start = function (complete) {
try {
complete(null);
} catch (e) {
complete(e);
}
};
HelloWorld.prototype.stop = function (complete) {
try {
complete(null);
} catch (e) {
complete(e);
}
};
HelloWorld.prototype.command = function (observation, complete) {
try {
complete(null);
} catch (e) {
complete(e);
}
};
module.exports.HelloWorld = HelloWorld;
What helloWorld does
- send an observation obsrvHelloWorldobservation with the frequency set by the property hwSayHelloFrequency
- change hwgreetingLabel value when receive command obsrvHelloWorld observation
- implement placeholder #{greetingLabel}
- start method
- create an observation type obsrvHelloWorld at /amtech/things/observations (See Simulator)
- tip copy observation instance jsonld using jsonld Viewer (See Json Viewer)
var clone = require('clone');
var util = require('util');
function HelloWorld() {
}
HelloWorld.prototype.start = function (complete) {
var self = this;
try {
self.sayHelloInterval = setInterval(function(){
var obsrvHelloWorld = clone({
"proximityarea": "",
"topic": "",
"guestusers": [],
"targetthings": "[]",
"location": "",
"@type": "/amtech/linkeddata/types/composite/observation/obsrvHelloWorld",
"hwgreetingLabel": "",
"creationDate": "2016-04-20T03:24:54.099Z",
"guesttenants": [],
"description": "",
"producer": ""
});
obsrvHelloWorld.hwgreetingLabel = self.hwgreetingLabel;
var ph = {'greetingLabel': self.hwgreetingLabel};
self.sendObservation(self,obsrvHelloWorld, ph );
}, self.hwSayHelloFrequency);
complete(null);
} catch (e) {
complete(e);
}
};
HelloWorld.prototype.stop = function (complete) {
try {
if (this.sayHelloInterval) {
clearInterval(this.sayHelloInterval);
}
complete(null);
} catch (e) {
complete(e);
}
};
HelloWorld.prototype.command = function (observation, complete) {
try {
if(observation['@type'] === "/amtech/linkeddata/types/composite/observation/commandHelloWorld"){
this.hwgreetingLabel = observation.hwgreetingLabel;
complete(null);
}else{
complete(new Error(util.format("HelloWorld %s support commands of observations type commandHelloWorld", this._name)));
}
} catch (e) {
complete(e);
}
};
module.exports.HelloWorld = HelloWorld;
Configure amtechM2MBridge template
- (See Cloud Configuration)
- create activity helloWorld
- create helloWord notification
- add subject with placeholder #{label}
- add subject with placeholder #{producer} and #{label}
- create helloWorld actor with access polices (See Actors)
- amtechM2MBridge thing type
- HelloWord thing type
- helloWord notification
- associate helloWorld actor with helloWorld activity
- configure observation production
- thing type HelloWorld
- observation type obsrvHelloWorld
- topic /helloWorld/#{greetingLabel}
- producer #{thingId}
- guestTeants add m2mcreator to shared the observation
- observation type observationresourcecrud
- topic /helloWorld/asynch
- producer #{thingId}
- observation type obsrvHelloWorld
- thing type amtechM2mBridge
- observation type observationresourcecrud
- topic /helloWorld/asynch
- producer #{thingId}
- observation type observationresourcecrud
- thing type HelloWorld
- publishing activity (See Publishing)
- validate activity
- deploy activity
- invite a user as helloWorld actor (See Invite user)
- user id smartsensor@amtech.mx
- configure helloWorld m2mBridge template
- create amtechM2MBridge instance with name helloWorld (See Instances)
- it will be the value of templateId at bridgeConfig.json (See Edge Configuration)
- create HelloWorld type instace with name helloWorld
- associate HelloWorld instance to amtechM2MBridge instance propety bridgeInstances
- give guest access to helloWorld M2MBridge instance to tenant m2mfollower and user smartsensor@amtech.mx (if check user id set in policies)
- thing type HelloWorld
- observation type commandHelloWorld
- set topic to /helloWorld/asynch
- set target uri to observation producer (See targetthings)
- set hwgreetingLabel holaFromCommand
- create amtechM2MBridge instance with name helloWorld (See Instances)
bridgeConfig.json
- (See Edge Configuration)
{
"description": "AMTech M2M Bridge Helloworld demo",
"description:children" : true,
"dap":{
"dapUrl": "https://dapdev.amtech.mx",
"userId": "smartsensor@amtech.mx",
"tenant" : "m2mfollower",
"password" :"xxxxxxxx"
},
"templateId":"helloWorld",
"bridgeIdPrefix":"helloWorldDemo",
"location:children" : true,
"address" :{
"country" : "USA",
"city": "New York City",
"road" : "97th street transverse"
}
}