-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmam-fetch.js
110 lines (94 loc) · 3.68 KB
/
mam-fetch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const { composeAPI } = require('@iota/core');
const { asciiToTrytes, trytesToAscii } = require('@iota/converter')
const { createChannel, createMessage, parseMessage, mamAttach, mamFetch, mamFetchAll } = require('@iota/mam.js');
const crypto = require('crypto');
const fs = require('fs');
//const moment = require('moment')
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
//const objectCsvStringifier = require('csv-writer').objectCsvStringifier;
let root= 'SASVJMCVCOJZIJMYXBIYHLYKASUNFSKCDCPETVXYAVYEPKQRTMHRTQRMZKZPNPZUNMXIVRMHZBBPRPQBO';
//CSV file fields
var fields = ['sensorID', 'dataFormat', 'rssi', 'humidity', 'temperature', 'pressure', 'accelerationX', 'accelerationY', 'accelerationZ', 'battery','dateTime'];
async function run() {
// Setup the details for the channel.
const mode = 'restricted';
const sideKey = 'UWVUW';
let channelState;
const api = composeAPI({ provider: "http://bare01.devnet.iota.cafe:14265" });
// const fetched = await mamFetchAll(api, root, mode, sideKey)
// fetch one message everytime
const fetched = await mamFetch(api, root, mode, sideKey)
if (fetched) {
message = JSON.parse(trytesToAscii(fetched.message))
console.log(message);
root=fetched.nextRoot;
// get seperate data from json
var sensorID = message.sensorID
var dataFormat = message.data.dataFormat
var rssi = message.data.rssi
var humidity = message.data.humidity
var temperature = message.data.temperature
var pressure = message.data.pressure
var accelerationX = message.data.accelerationX
var accelerationY = message.data.accelerationY
var accelerationZ = message.data.accelerationZ
var battery = message.data.battery
var dateTime = message.dateTime
// data= [{sensorID, dataFormat, rssi, temperature,
// accelerationX, accelerationY, accelerationZ, battery, dateTime}]
const records = [
{sID: sensorID, datform: dataFormat, rsi: rssi, hmdty: humidity, tmpr: temperature, prsr: pressure, accelX: accelerationX, accelY: accelerationY, accelZ: accelerationZ, btry: battery, dtTme: dateTime}
];
var fileHeader = [
{id: 'sID', title: 'sensorID'},
{id: 'datform', title: 'dataFormat'},
{id: 'rsi', title: 'rssi'},
{id: 'hmdty', title: 'humidity'},
{id: 'tmpr', title: 'temperature'},
{id: 'prsr', title: 'pressure'},
{id: 'accelX', title: 'accelerationX'},
{id: 'accelY', title: 'accelerationY'},
{id: 'accelZ', title: 'accelerationZ'},
{id: 'btry', title: 'battery'},
{id: 'dtTme', title: 'dateTime'}
]
fs.stat('data.csv', function(err, stat) {
// Check if the file alreay exists
if(err == null) {
console.log('File exists');
const csvWriter = createCsvWriter({
path: 'data.csv',
header: fileHeader,
// trure because the file exists already. there is no need to add header, just append
append: true
});
csvWriter.writeRecords(records) // returns a promise
.then(() => {
console.log('...Done');
});
}
else if(err.code === 'ENOENT') {
// file does not exist
const csvWriter = createCsvWriter({
path: 'data.csv',
header: fileHeader,
// false here means add headers
append: false
});
csvWriter.writeRecords(records) // returns a promise
.then(() => {
console.log('...Done');
});
}
else {
console.log('Some other error: ', err.code);
}
});
}
else{console.log('Waiting for new transactions')}
}
// run the code immediately
run()
// fetch every 2 seconds **for demo purpose**
const TIMEINTERVAL = 2; // seconds
setInterval(run, TIMEINTERVAL*1000);