Difference between revisions of "HelloWorld plugin"

From AMTech WikiDocs
Jump to: navigation, search
(Configure amtechM2MBridge template)
(Configure amtechM2MBridge template)
Line 151: Line 151:
 
****producer #{thingId}
 
****producer #{thingId}
 
*publishing activity (See [[Publishing|Publishing]])
 
*publishing activity (See [[Publishing|Publishing]])
**validate activity
+
**validate 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
 
 
*configure helloWorld m2mBridge template
 
*configure helloWorld m2mBridge template
 
** create amtechM2MBridge instance with name helloWorld (See [[IoT Semantics|Instances]])
 
** create amtechM2MBridge instance with name helloWorld (See [[IoT Semantics|Instances]])
***it will be the value of templateId at bridgeConfig.json (See [[M2M Bridge#Edge Configuration|Edge Configuration]])
+
***it will be the value of templateId at [[M2M Bridge#Edge Configuration|bridgeConfig.json]]
 
**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 (if check user id set in policies)
 
**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 [[Sensor%27s_network#targetthings|targetthings]])
 
**set hwgreetingLabel holaFromCommand
 
  
 
=== bridgeConfig.json ===
 
=== bridgeConfig.json ===

Revision as of 15:37, 25 May 2016

HelloWorld plugin flow

  • Create HelloWorld thing type
  • Create observation(s) type
  • Implement plugin node.js interface
  • Configuration to test plugin

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

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

    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
  • 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}
    • thing type amtechM2mBridge
      • observation type observationresourcecrud
        • topic /helloWorld/asynch
        • producer #{thingId}
  • publishing activity (See Publishing)
    • validate activity
  • invite a user as helloWorld actor (See Invite user)
  • configure helloWorld m2mBridge template
    • create amtechM2MBridge instance with name helloWorld (See Instances)
    • 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)

bridgeConfig.json

    {
        "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"
        }     
    }

Debug a plugin