M2M Bridge

From AMTech WikiDocs
Revision as of 19:06, 3 March 2016 by Amarrero (Talk | contribs) (Edge Configuration)

Jump to: navigation, search

Functionality

  • Configurable edge intelligence
  • Bridges standard and proprietary protocols to AMTech IoT DAP.
  • Device-to-device or device-to-server communications.
    • MQTT, LLRP, CoAP, STOMP, SmartM2M, LWM2M, PLC, Zigbee and others
  • Allow remote and centralized control of IoT devices and gateways.
    • SNMP/MIB/TRAP, Reader Management and other
  • Configurable autodiscover
  • Implements common functionality and host the execution of the protocols
  • Network failure detection and recovery
  • Get centralized configuration information at startup and real time modifications
  • Access control policies to manage observation production and consumption

Example.jpg

Edge Configuration

  • Edge/Device(s) site configuration bridgeConfig.json
   {
   //text to label bridge instance
   "description": "AMTech M2M Bridge", 
       "dap":{
           //amtech IoT DAP ur
           "dapUrl": "https://dap.amtech.mx",     
           //userid for the m2mBridge instance 
           "userId": "xxxxxxx@amtech.mx",
           // tenant where bridge been configured       
           "tenant" : "xxxxxxx",  
           //m2mBridge userId password  
           "password" :"xxxxxxxx",
           //topic to get crud (observationresourcecrud) and command observations See [[Sensor's network#Crud observation|]]
           "crudCommandUrl" :"/xx/xx/"		
       },
       //access control information add to send observations
       "guestSecurity":{
           //add guest tenants to observations send from bridge
           "guesttenants":["progressnext2016"],    
           //add guest users to observations send from bridge
           "guestusers":[]		       
       },
       //network failed configuration
       "networkFailed" :{
           //re-connection delay after an instance of plug in failed 
           "reconnectWait" : 60000	       
       },
       //bridge startup configuration
       "pluginLoad" :{			         
            //send observations error when errors occurred at bridge layer 
            "sendM2mBridgeError" : true		
       },
       //network failed configuration
       "logger" :{
           //network failed configuration
           "colorize" : true, //colorize log console messages
           //network failed configuration
           "level": "debug"			//log level
       },
       //Address use to geo locate m2mBridge instance
       "address" :{				 
           "country" : "usa",
           "city": "Las Vegas",
           "road": "Las Vegas Boulevard South",
           "number":"3960"
       },
       //Id to uniquely identify a M2MBridge instance, in absence of this property a unique identifier gets created
       "bridgeId":"m2mBridgeProgressNext",       
       //auto discover configuration
       "autoDiscover":{
           //create things type instances at startup time
           "execute" : false,                         
           //Jsonld instances of the thing to be created 
           "instances":{"SNMPDevice":[{...}], ...} 
       }
   }

Cloud Configuration

  • Create an "m2mBridge" actor
    • Add the things type polices the bridge needs access to
    • Police must have user check; enabling instance access control by m2mBridge instance
    • Add the thing types the bridge creates plug in instances
  • Create a follower:
    • Give actor "m2mBridge" access
    • Uniquely identify each m2mBridge
  • Activity observation configuration:
    • Configure the observations types the bridge will produce
    • Configure the topic that m2mBridge will listen for crud and command observations to be matched with bridgeConfig.json property
//topic to get crud and command observations                             
"dap":{
       "crudCommandUrl" :"/xx/xx/"			
   }
  • Things instance creation:
*Using amtech creator experience
*Configuring autoDiscover entry at bridgeConfig.json
 //auto discover configuration
       "autoDiscover":{
           //create things type instances at startup time
           "execute" : false,                         
           //Jsonld instances of the thing to be created 
          "SNMPDevice":[
               {
                   "setOIDs": "[{\"oid\":\".1.3.6.1.2.1.1.6.0\", \"type\":\"OctetString\", \"value\":\"Irvine California\"}]",
                   "_lastmodified": 1450988442414,
                   "guestusers": [],
                   "@type": "/amtech/linkeddata/types/composite/entity/SNMPDevice",
                   "_resourcestatus": "valid",
                   "_name": "snmpClientM2mBridge",
                   "getOIDs": "[{\"name\":\"memoryTotal\", \"oid\":\".1.3.6.1.4.1.2021.4.5.0\"},  {\"name\":\"memoryAvailable\", \"oid\":\".1.3.6.1.4.1.2021.4.6.0\"}]",
                   "ipaddress": "localhost",
                   "communityString": "private",
                   "emaillist": "",
                   "instanceobservationconfig": "{}",
                   "creationDate": "2015-12-24T20:20:42.407Z",
                   "readFrequency": "PT10M",
                   "guesttenants": [
                       "follower_m2mcreator@@amtech.mx"
                   ],
                   "description": "An SNMPDevice instance acting as SNMP manager/client proxying snmp commands (get/set/trups) to manager a ubuntu box hosting m2mbridge",
                   "phonelist": "",
                   "@id": "/amtech/things/entities/snmpClientM2mBridge",
                   "snmpVersion": "2c",
                   "_user": "m2mcreator@amtech.mx"
               }
           ], …}

Plugins architecture

How to implement a new plugin

  • Clone git repository (https://github.com/AMTechMX/M2MBridge.git)
    • at /.../M2MBridge/plugins create a directory that matched with the Thing type name to bridge example SNMPDevice
  • Implement a nodejs module with the following interface
   function SNMPDevice() {
   }
   SNMPDevice.prototype.start = function ( context, complete) {
       try {
           complete(null);
       } catch (e) {
           complete(e);
       }
   };
   SNMPDevice.prototype.stop = function (complete) {
       try {
           complete(null);
       } catch (e) {
           complete(e);
       }
   };
   SNMPDevice.prototype.command = function (observation, complete) {
       try {
           complete(null);
       } catch (e) {
           complete(e);
       }
   };
   module.exports.SNMPDevice = SNMPDevice;

How to install it

Existing plugins

LLRP

Bluetooth