In this example, an edge client from New York city will try to access an edge server from Tokyo city.
The communication path will start from an edge client connecting through an m2m client bridge gateway located in New York city. It will then communicate through an m2m server bridge gateway located in Tokyo traversing the public internet. Then finally connecting to an edge server and accessing its available resources.
All communications traffic along the path are fully encrypted using TLS and a combination of standard public and private encryption methods.
$ node app.js
const m2m = require('m2m')
let edge = new m2m.Edge({name:'edge client'})
async function main (){
await m2m.connect()
/***************
Edge client
***************/
let edgeClient = new edge.client(8140) // port 8140 using localhost ip
edgeClient.on('ready', (result) => {
console.log('edge server 8140 ready', result) // should be true if up and false if down
})
edgeClient.on('error', (error) => {
console.log('edge client error', error)
})
let wd = await edgeClient.write('edge-data-source-1', 'sensor-1')
console.log('write: sensor-1', wd)
let rd = await edgeClient.read('edge-data-source-1')
console.log('read:', rd)
edgeClient.subscribe('edge-publish-data-1', (data) => {
console.log('subscribe:', data)
if(data.value < 30){
edgeClient.write('edge-data-source-1', 'sensor-2')
}
else if(data.value > 105){
edgeClient.write('edge-data-source-1', 'sensor-1')
}
})
}
main()
const m2m = require('m2m')
let client = new m2m.Client({name:'m2m client bridge'})
let edge = new m2m.Edge({name:'edge server'})
let currentValue = ''
async function main (){
await m2m.connect()
/***************
M2M Client
***************/
let m2mClient = new client.access(300) // m2m virtual port 300
m2mClient.subscribe('m2m-bridge-2', (data) => {
currentValue = data
})
/****************
Edge Server
****************/
const edgeServer = edge.createServer(8140) // port 8140 using localhost ip
edgeServer.dataSource('edge-data-source-1', async (tcp) => {
let result = ''
// write
if(tcp.payload){
result = await m2mClient.write('m2m-bridge-1', tcp.payload )
}
// read
else{
result = await m2mClient.read('m2m-bridge-1')
}
tcp.send(result)
})
edgeServer.publish('edge-publish-data-1', async (tcp) => {
tcp.send(currentValue)
})
}
main()
const m2m = require('m2m')
let m2mServer = new m2m.Server(300) // m2m virtual port 300
let edge = new m2m.Edge({name:'edge client'})
async function main (){
await m2m.connect()
/***************
Edge client
***************/
let edgeClient = new edge.client(8150) // port 8150 using localhost ip
edgeClient.on('ready', (result) => {
console.log('edge server 8150 ready', result) // should be true if up and false if down
})
edgeClient.on('error', (error) => {
console.log('edge client error', error)
})
/***************
M2M Server
***************/
m2mServer.dataSource('m2m-bridge-1', async (ws) => {
let result = ''
// write
if(ws.payload){
result = await edgeClient.write('edge-data-source-1', ws.payload)
}
// read
else {
result = await edgeClient.read('edge-data-source-1')
}
ws.send(result)
})
m2mServer.publish('m2m-bridge-2', async (ws) => {
let result = await edgeClient.read('edge-data-source-1')
ws.send(result)
})
}
main()
const m2m = require('m2m')
let edge = new m2m.Edge({name:'edge server'})
let currentSensor = 'sensor-1'
function sensor1(){
return 25 + Math.floor(Math.random() * 10)
}
function sensor2(){
return 100 + Math.floor(Math.random() * 10)
}
async function main (){
await m2m.connect()
/****************
Edge Server
****************/
const edgeServer = edge.createServer(8150) // port 8150 using localhost ip
edgeServer.dataSource('edge-data-source-1', (tcp) => {
// write
if(tcp.payload){
currentSensor = tcp.payload
tcp.send({topic:tcp.topic, currentSensor:currentSensor})
}
// read
else{
if(currentSensor === 'sensor-1'){
tcp.send({topic:tcp.topic, sensor:currentSensor, value:sensor1()})
}
else if(currentSensor === 'sensor-2'){
tcp.send({topic:tcp.topic, sensor:currentSensor, value:sensor2()})
}
else{
tcp.send({topic:tcp.topic, result:'invalid sensor'})
}
}
})
}
main()
On the edge client output result, you should see a similar result as shown below.
edge server 8140 ready true
write: sensor-1 { topic: 'edge-data-source-1', currentSensor: 'sensor-1' }
read: { topic: 'edge-data-source-1', sensor: 'sensor-1', value: 30 }
subscribe: { topic: 'edge-data-source-1', sensor: 'sensor-1', value: 27 }
subscribe: { topic: 'edge-data-source-1', sensor: 'sensor-1', value: 29 }
subscribe: { topic: 'edge-data-source-1', sensor: 'sensor-2', value: 106 }
...