node-red-contrib-qnap-timeseries
Version:
Node-RED node to process time-series data in mongodb
242 lines (204 loc) • 7.28 kB
HTML
<!-- mongodb config -->
<script type="text/x-red" data-template-name="mongodb">
<div class="form-row">
<label for="node-config-input-hostname"><i class="fa fa-bookmark"></i> <span data-i18n="mongodb.label.host"></span></label>
<input class="input-append-left" type="text" id="node-config-input-hostname" placeholder="localhost" style="width: 40%;" >
<label for="node-config-input-port" style="margin-left: 10px; width: 35px; "> <span data-i18n="mongodb.label.port"></span></label>
<input type="text" id="node-config-input-port" style="width:45px">
</div>
<div class="form-row">
<label for="node-config-input-db"><i class="fa fa-database"></i> <span data-i18n="mongodb.label.database"></span></label>
<input type="text" id="node-config-input-db">
</div>
<div class="form-row">
<label for="node-config-input-user"><i class="fa fa-user"></i> <span data-i18n="mongodb.label.username"></span></label>
<input type="text" id="node-config-input-user">
</div>
<div class="form-row">
<label for="node-config-input-password"><i class="fa fa-lock"></i> <span data-i18n="mongodb.label.password"></span></label>
<input type="password" id="node-config-input-password">
</div>
<div class="form-row">
<label for="node-config-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
<input type="text" id="node-config-input-name" data-i18n="[placeholder]node-red:common.label.name">
</div>
</script>
<script type="text/javascript">
RED.nodes.registerType('mongodb', {
category: 'config',
color: "rgb(218, 196, 180)",
defaults: {
hostname: {value: "127.0.0.1", required: true},
port: {value: 27017, required: true},
db: {value: "", required: true},
name: {value: ""}
},
credentials: {
user: {type: "text"},
password: {type: "password"}
},
label: function() {
return this.name || this.hostname + ":" + this.port + "/" + this.db;
}
});
</script>
<!-- mongodb out -->
<script type="text/x-red" data-template-name="mongodb out">
<div class="form-row">
<label for="node-input-mongodb"><i class="fa fa-bookmark"></i> <span data-i18n="mongodb.label.server"></span></label>
<input type="text" id="node-input-mongodb">
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
</div>
<div class="form-tips" id="node-warning"><span data-i18n="[html]mongodb.tip"></span></div>
</script>
<script type="text/x-red" data-help-name="mongodb out">
<p>A simple MongoDB output node. Save data to <b>time-series</b> format in QIoT database.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('mongodb out', {
category: 'QNAP',
color: "#FF5809",
defaults: {
name: {value: ""},
mongodb: {type: "mongodb", required: true}
},
inputs: 1,
outputs: 0,
icon: "db.png",
align: "right",
paletteLabel: 'QDatabase',
label: function() {
return this.name||"qiot-database";;
},
oneditprepare: function(){
var node = this;
}
});
</script>
<!-- mongodb historic -->
<!-- qiot historic node -->
<script type="text/x-red" data-template-name="mongodb aggre">
<div class="form-row">
<label for="node-input-mongodb"><i class="fa fa-bookmark"></i> <span data-i18n="mongodb.label.server"></span></label>
<input type="text" id="node-input-mongodb">
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
</div>
<div class="form-row">
<label for="node-input-deviceid"><i class="fa fa-tag"></i> <span data-i18n="mongodb.label.deviceid"></span></label>
<input type="text" id="node-input-deviceid" >
</div>
<div class="form-row">
<label for="node-input-sensorid"><i class="fa fa-tag"></i> <span data-i18n="mongodb.label.sensorid"></span></label>
<input type="text" id="node-input-sensorid">
</div>
<div class="form-row">
<label for="node-input-resolution"><i class="fa fa-object-group"></i> <span data-i18n="mongodb.label.resolution"></span></label>
<select type="text" id="node-input-resolution" style="width:70%;">
<option value="rm">Minute</option>
<option value="rh">Hour</option>
<option value="rd">Day</option>
</select>
</div>
<div class="form-row">
<label for="node-input-interval"><i class="fa fa-object-group"></i> <span data-i18n="mongodb.label.interval"></span></label>
<select type="text" id="node-input-interval" style="width:70%;">
</select>
</div>
<div class="form-row">
<label for="node-input-range"><i class="fa fa-object-group"></i> <span data-i18n="mongodb.label.range"></span></label>
<select type="text" id="node-input-range" style="width:70%;">
</select>
</div>
</script>
<script type="text/x-red" data-help-name="mongodb aggre">
<p>Pass <code>msg.payload.start_date</code> and <code>msg.payload.end_date</code> can enable date range filter function</p>
<p>The following functions are available to define date variable:</p>
<ul>
<li><code>new Date()</code></li>
<li><code>"2016-08-29T04:25:32.610Z"</code></li>
</ul>
<p>Sample code:</p>
<pre>var start_date = new Date();
start_date.setHours(start_date.getHours() - 2);
var msg = {
payload: {
start_date: start_date,
end_date: new Date()
}
};
</pre>
<p><b>Note: </b>Datetime in UTC</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('mongodb aggre',{
category: 'QNAP',
color: '#FF5809',
defaults: {
name: {value:""},
mongodb: {type: "mongodb", required: true},
deviceid: {value:""},
sensorid: {value:""},
resolution: {value:"rh"},
interval: {value:"1"},
range: {value:"d"}
},
inputs:1,
outputs:1,
icon: "function.png",
align: 'left',
paletteLabel: 'QHistoric',
label: function() {
return this.name||"qiot-historic-api";
},
oneditprepare: function(){
var node = this;
this.nid = node.id;
$("#node-input-resolution").change(function(){
var type = $("#node-input-resolution").val();
var interval_opt;
var range_opt;
switch (type){
case 'rm':
interval_opt = [5, 10, 15, 30];
range_opt = ['day'];
break;
case 'rh':
interval_opt = [1, 3, 6, 12];
range_opt = ['day', 'week'];
break;
case 'rd':
interval_opt = [1];
range_opt = ['week', 'month'];
break;
}
$("#node-input-interval option").remove();
interval_opt.forEach(function(item){
$("#node-input-interval").append($("<option></option>")
.attr("value", item)
.attr("selected", (node.interval == item))
.text(item));
});
$("#node-input-range option").remove();
range_opt.forEach(function(item){
$("#node-input-range").append($("<option></option>")
.attr("value", item.substring(0,1))
.attr("selected", (node.range == item.substring(0,1)))
.text(item));
});
});
$("#node-input-resolution").change();
},
oneditsave: function() {
},
onpaletteadd: function() {
},
onpaletteremove: function() {
}
});
</script>