Ich erstelle eine Wetterstation mit Particle Electron und AWS. Ich habe es geschaffen, die zurückgegebenen Daten auf ein DynamoDB Tabelle „Wetter“ geschickt zu bekommen, die alle Wetterdaten mit dem folgende Schema enthält (mit beiliegenden Beispielwerten):Holen Artikel aus dynamodb Tabelle mit separaten Indextabelle mit Node.js
Item{13}
deviceId: 540056000a51343334363138 (String) (Primary Partition Key)
tm: 1458754711 (Number) (Primary Sort Key)
batSoC: 89 (String)
batV: 4.01 (String)
hum: 27.9 (String)
lat: 41.2083 (String)
lon: -73.3439 (String)
pres: 968.4 (String)
temp: 19.8 (String)
uvI: 0.1 (String)
wDir: 0 (String)
wGst: 0.0 (String)
wSpd: 0.0 (String)
sowie einen separaten „weather_index“ Tisch enthält nur die Attribute deviceId
und tm
für die neuesten Daten, die in die Haupttabelle geschrieben wurden (eine Art wie ein Atomzähler, aber für einen periodisch aktualisierten Unix-Zeitstempelwert). Wenn also der „weather_index“ Artikel oben ist der letzten Eintrag, den Eintrag in der „weather_index“ Tabelle würde wie folgt aussehen:
Item{2}
deviceIdString: 540056000a51343334363138 (String) (Primary Partition Key)
tmNumber: 1458754711 (Number)
Ich bin derzeit versucht, einen sehr grundlegenden Web-Frontend in Node.js zu schreiben (die, die vor diesem Projekt habe ich keine Erfahrung mit, hatte so lerne ich immer noch) und kann nicht herausfinden, wie man:
- eine DynamoDB getItem Perform, die einen Parameter über eine vorherige getItem abgerufen enthält. Wie:
latestTime = getItem (weather_index, deviceId) // Ruft die Zeit "tm" der jüngsten Wetterbeobachtung und speichert sie in "latestTime" // Wo "weather_index" ist der Name der Tabelle
DasaktuelleWetter = getItem (deviceId, tm) // Ruft die Wetterbeobachtung für den angegebenen „tm“ Wert und speichert sie in „DasaktuelleWetter“ // Wo „tm“ ist das Unix-Zeitstempel der jüngsten Beobachtung
Ich möchte dann die einzelnen Werte auf dem Terminal/Webseite/Brieftaube/etc ... drucken können (Etwas in der Art von currentWeather.deviceId
, currentWeather.tm
, currentWeather.batSoC
, etc ...
Ich habe den folgenden Code ein, dass ich die Arbeit nicht wirklich richtig machen kann:
/*
* Module dependencies
*/
var AWS = require('aws-sdk')
// weathermon_dev credentials
AWS.config.update({accessKeyId: 'REDACTED for obvious reasons', secretAccessKey: 'This bit too'});
// Select AWS region
AWS.config.update({region: 'us-east-1'});
var db = new AWS.DynamoDB();
// db.listTables(function(err,data) {
// console.log(data.TableNames);
// });
var time = Date.now()/1000;
time = Math.round(time);
//console.log("Time: ");
//console.log(time);
time = Math.round(time);
var deviceId = "540056000a51343334363138"
var params = {
Key: {
deviceId: {S: deviceId}
},
TableName: 'weather_index'
};
var timeJson;
db.getItem(params, function(err,data) {
if (err) console.log(err); // an error occurred
else console.log(data); // successful response
var timeJson = JSON.parse(data);
})
// var timeJson = JSON.parse(data);
// var itemTime = timeJson.item;
console.log("timeJSON: " + timeJson);
// console.log("itemTime: " + itemTime);
var params = {
Key: {
deviceId: {S: deviceId},
time: {N: 'tm'}
},
TableName: 'weather'
};
db.getItem(params, function(err, data) {
if (err) console.log(err); // an error occurred
else console.log(data); // successful response
})
Jede Hilfe wäre sehr dankbar.