Energy Dashboard
- Sarah Padilla (Unlicensed)
Owned by Sarah Padilla (Unlicensed)
Create Your Own
This dashboard is made up of 6 different Ractive components. I set my background to 1280X1050.
Ractive
- Drag out Ractive from components on the left side menu
- Under Properties, click Ractive editor, then open editor
- Copy and paste the code below for template, model, style, and init, into the corresponding tabs for each component
Tagging
- Click the tag icon and type in the name of the tag to apply it on your component
Program
- Go to programs in the left menu
- Click the plus to add a new program, and it will pull up the program editor
- In the Program Target Filter type the name of the tag applied to the correcponding Ractive model
- Click the three dots in the top right corner, and select variables
- Click the gear that appears as you haver over "this"
- Turn on Invokes the Function
- Change the dropdown to Custom Event
- In the textbox below the dropdown type obtainData
- Click the gray Save button
- Copy and paste the code below into the main section and click the blue save
Compare Cost of Kw per Sqft.
Template
Expand source
<div class="s-box"> <span class="titleText">Compare Cost of Kwh per Sqft.</span> <div style="width:100%;"> <center> <div class="s-bar" style="background-color:none;"><b>Compare:</b> <div class="dropDownDiv"> <select class="drop" value={{selected}} on-change="foldUpdate"> <option>Select...</option> {{#myPoints}} <option value="{{siteRef}}">{{dis}}</option> {{/myPoints}} </select> </div> <div class="dropDownDiv"> <select class="drop" value={{selected2}} on-change="foldUpdate2"> <option>Select...</option> {{#myPoints}} <option value="{{siteRef}}">{{dis}}</option> {{/myPoints}} </select> </div> </div> <div class="s-bar3" style="background-color:#6cc487; color:#fff;"><b>Current:</b> <div class="whiteBox">{{#curentData}}${{curentData.toFixed(2)}}{{/curentData}}</div> <div class="whiteBox">{{#curentData2}}${{curentData2.toFixed(2)}}{{/curentData2}}</div> </div> <div class="s-bar3" style="background-color:#8c68b2; color:#fff;"><b>Last:</b> <div class="whiteBox">{{#lastData}}${{lastData.toFixed(2)}}{{/lastData}}</div> <div class="whiteBox">{{#lastData2}}${{lastData2.toFixed(2)}}{{/lastData2}}</div> </div> <div class="buttonBar"> <div class="s-button selected" id="day" on-click="day">Day</div> <div class="s-button" id="week" on-click="week">Week</div> <div class="s-button" id="month" on-click="month">Month</div> <div class="s-button" id="year" on-click="year">Year</div> </div> </center> </div> </div>
Model
Expand source
{ data: { myPoints:[], curentData:[], lastData:[], curentData2:[], lastData2:[] } }
Style
Expand source
.titleText{ font-weight: bold; font-size: 20px; } .s-box{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 100%; display: flex; flex-direction: column; flex: 1 1 auto; } .selected{ background-color: #7093c1; } .drop{ width:100%; height: 30px; margin-top: 5px; } .s-bar3{ margin-top:15px; height:50px; width:100%; display: flex; flex-direction: row; flex-wrap: wrap; flex-grow:1; justify-content: flex-end; align-items: center; border-radius: 5px; } .s-bar{ margin-top:15px; height:50px; width:100%; display: flex; flex-direction: row; flex-wrap: wrap; flex-grow:1; justify-content: flex-end; align-items: center; border-radius: 5px; } .whiteBox{ width: 40%; height: 40px; margin-right: 5px; margin-left: 5px; border-radius: 5px; background-color: #fefefe; color: #000; font-size: 18px; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; } .dropDownDiv{ width: 40%; height: 30px; margin-right: 5px; margin-left: 5px; border-radius: 5px; color: #000; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; } .buttonBar{ width:100%; height:40px; margin-top:15px; border-radius: 5px; background-color: #4f7ab3; display: flex; flex-direction: row; justify-content: center; align-items: center; } .s-button{ color:#fff; border-radius: 5px; width:100%; height: 100%; font-weight: bold; padding: 10px 15px 10px 15px; display: flex; flex-direction: row; justify-content: center; align-items: center; cursor: pointer; }
Init
Expand source
this.ractive.fire("obtainData"); var template = this; var model = this.ractive; var myTarget = model.queryAll('targetPoint'); var datePick = "today"; var datePick2 = "yesterday"; model.on('foldUpdate', function(event) { var point = model.get("curentData"); var points = model.get("lastData"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice1 = data.result.toObj()[0].curVal; var curentData = (firstCurrentPoint[0].v0 * costPrice1); model.set('curentData', curentData); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice2 = data.result.toObj()[0].curVal; var lastData = (firstLastPoint[0].v0 * costPrice2); model.set('lastData', lastData); }); }); }, 200); }); model.on('foldUpdate2', function(event) { var point2 = model.get("curentData2"); var point3 = model.get("lastData2"); var selected2 = model.get("selected2"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice3 = data.result.toObj()[0].curVal; var curentData2 = (firstCurrentPoint2[0].v0 * costPrice3); model.set('curentData2', curentData2); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice4 = data.result.toObj()[0].curVal; var lastData2 = (firstLastPoint2[0].v0 * costPrice4); model.set('lastData2', lastData2); }); }); }, 200); }); this.ractive.on("day", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day"); var weekID = template.view.querySelector("#week"); var monthID = template.view.querySelector("#month"); var yearID = template.view.querySelector("#year"); dayID.style.backgroundColor = "#7093c1"; weekID.style.backgroundColor = "#4f7ab3"; monthID.style.backgroundColor = "#4f7ab3"; yearID.style.backgroundColor = "#4f7ab3"; }); datePick = "today"; datePick2 = "yesterday"; var point = model.get("curentData"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice1 = data.result.toObj()[0].curVal; var curentData = (firstCurrentPoint[0].v0 * costPrice1); model.set('curentData', curentData); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice2 = data.result.toObj()[0].curVal; var lastData = (firstLastPoint[0].v0 * costPrice2); model.set('lastData', lastData); }); }); }, 200); var point2 = model.get("curentData2"); var selected2 = model.get("selected2"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice3 = data.result.toObj()[0].curVal; var curentData2 = (firstCurrentPoint2[0].v0 * costPrice3); model.set('curentData2', curentData2); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice4 = data.result.toObj()[0].curVal; var lastData2 = (firstLastPoint2[0].v0 * costPrice4); model.set('lastData2', lastData2); }); }); }, 200); }); this.ractive.on("week", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day"); var weekID = template.view.querySelector("#week"); var monthID = template.view.querySelector("#month"); var yearID = template.view.querySelector("#year"); weekID.style.backgroundColor = "#7093c1"; dayID.style.backgroundColor = "#4f7ab3"; monthID.style.backgroundColor = "#4f7ab3"; yearID.style.backgroundColor = "#4f7ab3"; }); datePick = "thisWeek"; datePick2 = "lastWeek"; var point = model.get("curentData"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice1 = data.result.toObj()[0].curVal; var curentData = (firstCurrentPoint[0].v0 * costPrice1); model.set('curentData', curentData); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice2 = data.result.toObj()[0].curVal; var lastData = (firstLastPoint[0].v0 * costPrice2); model.set('lastData', lastData); }); }); }, 200); var point2 = model.get("curentData2"); var selected2 = model.get("selected2"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice3 = data.result.toObj()[0].curVal; var curentData2 = (firstCurrentPoint2[0].v0 * costPrice3); model.set('curentData2', curentData2); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice4 = data.result.toObj()[0].curVal; var lastData2 = (firstLastPoint2[0].v0 * costPrice4); model.set('lastData2', lastData2); }); }); }, 200); }); this.ractive.on("month", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day"); var weekID = template.view.querySelector("#week"); var monthID = template.view.querySelector("#month"); var yearID = template.view.querySelector("#year"); monthID.style.backgroundColor = "#7093c1"; weekID.style.backgroundColor = "#4f7ab3"; dayID.style.backgroundColor = "#4f7ab3"; yearID.style.backgroundColor = "#4f7ab3"; }); datePick = "thisMonth"; datePick2 = "lastMonth"; var point = model.get("curentData"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice1 = data.result.toObj()[0].curVal; var curentData = (firstCurrentPoint[0].v0 * costPrice1); model.set('curentData', curentData); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice2 = data.result.toObj()[0].curVal; var lastData = (firstLastPoint[0].v0 * costPrice2); model.set('lastData', lastData); }); }); }, 200); var point2 = model.get("curentData2"); var selected2 = model.get("selected2"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice3 = data.result.toObj()[0].curVal; var curentData2 = (firstCurrentPoint2[0].v0 * costPrice3); model.set('curentData2', curentData2); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice4 = data.result.toObj()[0].curVal; var lastData2 = (firstLastPoint2[0].v0 * costPrice4); model.set('lastData2', lastData2); }); }); }, 200); }); this.ractive.on("year", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day"); var weekID = template.view.querySelector("#week"); var monthID = template.view.querySelector("#month"); var yearID = template.view.querySelector("#year"); yearID.style.backgroundColor = "#7093c1"; weekID.style.backgroundColor = "#4f7ab3"; monthID.style.backgroundColor = "#4f7ab3"; dayID.style.backgroundColor = "#4f7ab3"; }); datePick = "thisYear"; datePick2 = "lastYear"; var point = model.get("curentData"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice1 = data.result.toObj()[0].curVal; var curentData = (firstCurrentPoint[0].v0 * costPrice1); model.set('curentData', curentData); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected+' and energyCost)', function(data){ var costPrice2 = data.result.toObj()[0].curVal; var lastData = (firstLastPoint[0].v0 * costPrice2); model.set('lastData', lastData); }); }); }, 200); var point2 = model.get("curentData2"); var selected2 = model.get("selected2"); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstCurrentPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice3 = data.result.toObj()[0].curVal; var curentData2 = (firstCurrentPoint2[0].v0 * costPrice3); model.set('curentData2', curentData2); }); }); }, 200); setTimeout(function() { finstack.eval('read(energy and equipRef->siteMeter and siteRef=='+selected2+').hisRead('+datePick2+').hisRollup(sum,1hr).hisClip.first', function(data){ var firstLastPoint2 = data.result.toObj(); finstack.eval('readAll(siteRef=='+selected2+' and energyCost)', function(data){ var costPrice4 = data.result.toObj()[0].curVal; var lastData2 = (firstLastPoint2[0].v0 * costPrice4); model.set('lastData2', lastData2); }); }); }, 200); });
Program
Expand source
var template = this; var myTarget = query('targetPoint'); finstack.eval('readAll(meter).sort("navName")', function(data){ template.myPoints=data.result.toObj(); });
Current Site
Template
Expand source
<div class="s-boxTop"> <div class="s-horizontal"> <div class="s-vertical"> <select class="drop" value={{selected}} on-change="foldUpdate"> <option>Select...</option> {{#myPoints}} <option value="{{id}}">{{dis}}</option> {{/myPoints}} </select> <div class="tempBar"> High:<div class="s-whiteBox">{{#highLow}}{{weatherHigh}}{{weatherHighUnit}}{{/highLow}}</div></div> <div class="tempBar"> Low:<div class="s-whiteBox">{{#highLow}}{{weatherLow}}{{weatherLowUnit}}{{/highLow}}</div></div> </div> <div class="s-vertical"> <center> {{#picId}}<img src='/api/demo/rec/{{picId}}/file' height="60px" width="60px">{{/picId}} {{#highLow}} <div class="s-temp"> {{weatherTemp}}{{weatherTempUnit}} </div> <div style="font-size: 12px;">Current Temp</div> {{/highLow}} </center> </div> </div> </div> <div class="s-gap"></div> <div class="s-boxBottom"> <div class="titleText tooltip">Degree Days <span class="tooltiptext">Degree Days ...</span> </div> <div class="degree"> <div class="blue">33.5ºdaysF</div> <div class="red">0.0ºdaysF</div> </div> <div class="degreeBar"> <div class="s-degreeButton selected" id="current" on-click="current">Current Year</div> <div class="s-degreeButton" id="last" on-click="last">Last Year</div> </div> </div>
Model
Expand source
{ data: { myPoints:[], highLow: [], picId: [] } }
Style
Expand source
.titleText{ font-weight: bold; font-size: 20px; } .s-boxTop{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 145px; display: flex; flex-direction: column; flex: 1 1 auto; } .s-gap{ width: 100%; height: 15px; } .s-boxBottom{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 145px; display: flex; flex-direction: column; flex: 1 1 auto; } .s-horizontal{ width: 100%; display: flex; flex-direction: row; } .tempBar{ background-color:#7093c1; border-radius:5px; height: 40px; width: 100%; display: flex; flex-direction: row; justify-content: flex-end; align-items: center; margin-top:7px; color: #fff; } .s-vertical{ width:50%; display: flex; flex-direction: column; } .s-temp{ font-size: 30px; } .s-whiteBox{ width: 250px; height: 30px; margin-left: 8px; margin-right: 5px; border-radius: 5px; background-color: #fefefe; color: #000; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; } .titleText{ font-weight: bold; font-size: 20px; } .s-box{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 100%; display: flex; flex-direction: column; flex: 1 1 auto; } .selected{ background-color: #7093c1; } .degree{ width: 100%; display: flex; flex-direction: row; justify-content: center; align-items: center; } .blue{ background-color: #7093c1; width:45%; height: 40px; border-radius: 5px; margin: 3px; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; color: #fff; } .red{ background-color: #be1e2d; width:45%; height: 40px; border-radius: 5px; margin: 3px; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; color: #fff; } .degreeBar{ width: 100%; height:40px; margin-top:5px; border-radius: 5px; background-color: #4f7ab3; display: flex; flex-direction: row; justify-content: center; align-items: center; } .s-degreeButton{ color:#fff; border-radius: 5px; width:100%; height: 100%; font-weight: bold; padding: 10px 5px 10px 5px; display: flex; flex-direction: row; justify-content: center; align-items: center; cursor: pointer; } .tooltip { position: relative; display: inline-block; } .tooltip .tooltiptext { visibility: hidden; width: 220px; background-color: black; opacity: 0.7; color: #fff; text-align: center; border-radius: 6px; padding: 5px 0; font-size: 16px; position: absolute; z-index: 1; top: 100%; left: 50%; margin-left: -100px; } .tooltip:hover .tooltiptext { visibility: visible; }
Init
Expand source
this.ractive.fire("obtainData"); var template = this; var model = this.ractive; this.ractive.on("current", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var currentID = template.view.querySelector("#current"); var lastID = template.view.querySelector("#last"); currentID.style.backgroundColor = "#7093c1"; lastID.style.backgroundColor = "#4f7ab3"; }); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(id=='+selected+').degreeDays(thisYear).hisRollup(sum, 1yr)', function(data){ var degree = data.result.toObj(); model.set('degree', degree); }); }, 200); }); this.ractive.on("last", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var currentID = template.view.querySelector("#current"); var lastID = template.view.querySelector("#last"); lastID.style.backgroundColor = "#7093c1"; currentID.style.backgroundColor = "#4f7ab3"; }); var selected = model.get("selected"); setTimeout(function() { finstack.eval('read(id=='+selected+').degreeDays(lastYear).hisRollup(sum, 1yr)', function(data){ var degree = data.result.toObj(); model.set('degree', degree); }); }, 200); }); model.on('foldUpdate', function(event) { var selected = model.get("selected"); setTimeout(function() { finstack.eval('readAll(id=='+selected+')', function(data){ var highLow = data.result.toObj(); var pic = highLow[0].imageRef; var picId = pic.substr(1); model.set('highLow', highLow); model.set('picId', picId); }); }, 200); });
Program
Expand source
var template = this; finstack.eval('readAll(site)', function(data){ template.myPoints=data.result.toObj(); });
Building kW Peak
Template
Expand source
<div class="s-box"> <span class="titleText">Building Kw Peak</span> <div style="width:100%;"> <center> <select class="drop2" value={{selectedDrop}} on-change="foldUpdate"> <option>Select...</option> {{#myPoints}} <option value="{{siteRef}}">{{dis}}</option> {{/myPoints}} </select> <div class="s-bar2" style="background-color:#6cc487;"><b>Current:</b> <div class="whiteBox3">{{#currentData}}{{v0.toFixed(2)}}Kw<br>{{ts}}{{/currentData}}</div> </div> <div class="s-bar2" style="background-color:#8c68b2; color:#fff;"><b>Last:</b> <div class="whiteBox3">{{#lastData}}{{v0.toFixed(2)}}Kw<br>{{ts}}{{/lastData}}</div> </div> <div class="buttonBar"> <div class="s-button selected" id="day2" on-click="day2">Day</div> <div class="s-button" id="week2" on-click="week2">Week</div> <div class="s-button" id="month2" on-click="month2">Month</div> <div class="s-button" id="year2" on-click="year2">Year</div> </div> </center> </div> </div>
Model
Expand source
{ data: { myPoints:[], currentData:[], lastData:[] } }
Style
Expand source
.titleText{ font-weight: bold; font-size: 20px; } .s-box{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 100%; display: flex; flex-direction: column; flex: 1 1 auto; } .selected{ background-color: #7093c1; } .drop2{ width:100%; margin-top: 35px; } .s-bar2{ margin-top:20px; height:50px; width:100%; display: flex; flex-direction: row; flex-wrap: wrap; flex-grow:1; justify-content: flex-end; align-items: center; border-radius: 5px; } .whiteBox3{ width: 80%; height: 40px; margin-right: 5px; margin-left: 5px; border-radius: 5px; background-color: #fefefe; color: #000; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; } .buttonBar{ width:100%; height:40px; margin-top:15px; border-radius: 5px; background-color: #4f7ab3; display: flex; flex-direction: row; justify-content: center; align-items: center; } .s-button{ color:#fff; border-radius: 5px; width:100%; height: 100%; font-weight: bold; padding: 10px 15px 10px 15px; display: flex; flex-direction: row; justify-content: center; align-items: center; cursor: pointer; }
Init
Expand source
this.ractive.fire("obtainData"); var template = this; var model = this.ractive; var myTarget = model.queryAll('targetPoint'); var datePick = "today"; var datePick2 = "yesterday"; model.on('foldUpdate', function(event) { var selectedDrop = model.get("selectedDrop"); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick+').hisRollup(max, 1hr).hisClip.first()', function(data){ var currentPoint = data.result.toObj(); model.set('currentData', currentPoint); }); }, 200); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick2+').hisRollup(max, 1hr).hisClip.first()', function(data){ var lastPoint = data.result.toObj(); model.set('lastData', lastPoint); }); }, 200); }); this.ractive.on("day2", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day2"); var weekID = template.view.querySelector("#week2"); var monthID = template.view.querySelector("#month2"); var yearID = template.view.querySelector("#year2"); dayID.style.backgroundColor = "#7093c1"; weekID.style.backgroundColor = "#4f7ab3"; monthID.style.backgroundColor = "#4f7ab3"; yearID.style.backgroundColor = "#4f7ab3"; }); var datePick = "today"; var datePick2 = "yesterday"; var selectedDrop = model.get("selectedDrop"); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick+').hisRollup(max, 1hr).hisClip.first()', function(data){ var currentPoint = data.result.toObj(); model.set('currentData', currentPoint); console.log(currentPoint); }); }, 200); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick2+').hisRollup(max, 1hr).hisClip.first()', function(data){ var lastPoint = data.result.toObj(); model.set('lastData', lastPoint); }); }, 200); }); this.ractive.on("week2", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day2"); var weekID = template.view.querySelector("#week2"); var monthID = template.view.querySelector("#month2"); var yearID = template.view.querySelector("#year2"); weekID.style.backgroundColor = "#7093c1"; dayID.style.backgroundColor = "#4f7ab3"; monthID.style.backgroundColor = "#4f7ab3"; yearID.style.backgroundColor = "#4f7ab3"; }); datePick = "thisWeek"; datePick2 = "lastWeek"; var selectedDrop = model.get("selectedDrop"); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick+').hisRollup(max, 1hr).hisClip.first()', function(data){ var currentPoint = data.result.toObj(); model.set('currentData', currentPoint); }); }, 200); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick2+').hisRollup(max, 1hr).hisClip.first()', function(data){ var lastPoint = data.result.toObj(); model.set('lastData', lastPoint); }); }, 200); }); this.ractive.on("month2", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day2"); var weekID = template.view.querySelector("#week2"); var monthID = template.view.querySelector("#month2"); var yearID = template.view.querySelector("#year2"); monthID.style.backgroundColor = "#7093c1"; weekID.style.backgroundColor = "#4f7ab3"; dayID.style.backgroundColor = "#4f7ab3"; yearID.style.backgroundColor = "#4f7ab3"; }); datePick = "thisMonth"; datePick2 = "lastMonth"; var selectedDrop = model.get("selectedDrop"); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick+').hisRollup(max, 1hr).hisClip.first()', function(data){ var currentPoint = data.result.toObj(); model.set('currentData', currentPoint); }); }, 200); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick2+').hisRollup(max, 1hr).hisClip.first()', function(data){ var lastPoint = data.result.toObj(); model.set('lastData', lastPoint); }); }, 200); }); this.ractive.on("year2", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var dayID = template.view.querySelector("#day2"); var weekID = template.view.querySelector("#week2"); var monthID = template.view.querySelector("#month2"); var yearID = template.view.querySelector("#year2"); yearID.style.backgroundColor = "#7093c1"; weekID.style.backgroundColor = "#4f7ab3"; monthID.style.backgroundColor = "#4f7ab3"; dayID.style.backgroundColor = "#4f7ab3"; }); datePick = "thisYear"; datePick2 = "lastYear"; var selectedDrop = model.get("selectedDrop"); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick+').hisRollup(max, 1hr).hisClip.first()', function(data){ var currentPoint = data.result.toObj(); model.set('currentData', currentPoint); }); }, 200); setTimeout(function() { finstack.eval('read(powerTotal and equipRef->tenantMeter and siteRef=='+selectedDrop+').hisRead('+datePick2+').hisRollup(max, 1hr).hisClip.first()', function(data){ var lastPoint = data.result.toObj(); model.set('lastData', lastPoint); }); }, 200); });
Program
Expand source
var template = this; var myTarget = query('targetPoint'); finstack.eval('readAll(meter)', function(data){ template.myPoints=data.result.toObj(); });
Gauges
Template
Expand source
<div class="s-box"> <div class="horizontal"> <select class="s-dropDown" value={{selected}} on-change="foldUpdate"> {{#drop}} <option value={{id}}>{{dis}}</option> {{/drop}} </select> <select class="s-dropDown2 mnl" value={{selected2}} on-change="foldUpdate"> {{#drop2}} <option value={{id}}>{{navName}}</option> {{/drop2}} </select> </div> <div class="rowSVG"> {{#myPoints.0}} <svg class="s-heightSVG" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130.9 78.51"> <title>phaseA</title> <path d="M70.4,126a1,1,0,0,0,1-1,23,23,0,0,1,46,0,1,1,0,0,0,1,1h25a1,1,0,0,0,1-1,50,50,0,0,0-100,0,1,1,0,0,0,1,1Z" transform="translate(-32.52 -61.49)" style="fill: rgb(127, 127, 127);"></path> <text transform="translate(48.87 6.64)" style="font-size: 8px; font-family: SourceSansPro-Regular, "Source Sans Pro";">Phase A</text> <text transform="translate(10 66.76)" style="font-size:8px; font-family:SourceSansPro-Regular, Source Sans Pro" text-anchor="end">{{min}}</text> <text transform="translate(114 66.76)" style="font-size:8px;font-family:SourceSansPro-Regular, Source Sans Pro" text-anchor="start">{{max}}</text> <circle cx="61.85" cy="64.51" r="14" style="fill: rgb(86, 140, 189);"></circle> <path d="M57.9,59.10l3.06-33.91a.94.94,0,0,1,1.88,0l3.06,33.91Z" transform="rotate({{rotateVal}} 61.85,64.51)" style="fill:#568cbd" /> <text transform="translate(62 67.76)" style="text-anchor: middle; font-size: 6px; fill: rgb(255, 255, 255); font-family: SourceSansPro-Light;Source Sans Pro;">{{curVal.toFixed(1)}}</text> </svg> {{/myPoints.0}} {{#myPoints.1}} <svg class="s-heightSVG" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130.9 78.51"> <title>phaseB</title> <path d="M70.4,126a1,1,0,0,0,1-1,23,23,0,0,1,46,0,1,1,0,0,0,1,1h25a1,1,0,0,0,1-1,50,50,0,0,0-100,0,1,1,0,0,0,1,1Z" transform="translate(-32.52 -61.49)" style="fill: rgb(127, 127, 127);"></path> <text transform="translate(48.87 6.64)" style="font-size: 8px; font-family: SourceSansPro-Regular, "Source Sans Pro";">Phase B</text> <text transform="translate(10 66.76)" style="font-size:8px; font-family:SourceSansPro-Regular, Source Sans Pro" text-anchor="end">{{min}}</text> <text transform="translate(114 66.76)" style="font-size:8px;font-family:SourceSansPro-Regular, Source Sans Pro" text-anchor="start">{{max}}</text> <circle cx="61.85" cy="64.51" r="14" style="fill: rgb(86, 140, 189);"></circle> <path d="M57.9,59.10l3.06-33.91a.94.94,0,0,1,1.88,0l3.06,33.91Z" transform="rotate({{rotateVal}} 61.85,64.51)" style="fill:#568cbd" /> <text transform="translate(62 67.76)" style="text-anchor: middle; font-size: 6px; fill: rgb(255, 255, 255); font-family: SourceSansPro-Light;Source Sans Pro;">{{curVal.toFixed(1)}}</text> </svg> {{/myPoints.1}} {{#myPoints.2}} <svg class="s-heightSVG" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130.9 78.51"> <title>phaseC</title> <path d="M70.4,126a1,1,0,0,0,1-1,23,23,0,0,1,46,0,1,1,0,0,0,1,1h25a1,1,0,0,0,1-1,50,50,0,0,0-100,0,1,1,0,0,0,1,1Z" transform="translate(-32.52 -61.49)" style="fill: rgb(127, 127, 127);"></path> <text transform="translate(48.87 6.64)" style="font-size: 8px; font-family: SourceSansPro-Regular, "Source Sans Pro";">Phase C</text> <text transform="translate(10 66.76)" style="font-size:8px; font-family:SourceSansPro-Regular, Source Sans Pro" text-anchor="end">{{min}}</text> <text transform="translate(114 66.76)" style="font-size:8px;font-family:SourceSansPro-Regular, Source Sans Pro" text-anchor="start">{{max}}</text> <circle cx="61.85" cy="64.51" r="14" style="fill: rgb(86, 140, 189);"></circle> <path d="M57.9,59.10l3.06-33.91a.94.94,0,0,1,1.88,0l3.06,33.91Z" transform="rotate({{rotateVal}} 61.85,64.51)" style="fill:#568cbd" /> <text transform="translate(62 67.76)" style="text-anchor: middle; font-size: 6px; fill: rgb(255, 255, 255); font-family: SourceSansPro-Light;Source Sans Pro;">{{curVal.toFixed(1)}}</text> </svg> {{/myPoints.2}} </div> <div class="buttonBarGauge"> <div class="s-button selected" id="kw" on-click="kw">Kw</div> <div class="s-button" id="kva" on-click="kva">Kva</div> <div class="s-button" id="kvar" on-click="kvar">Kvar</div> <div class="s-button" id="current" on-click="current">Current</div> <div class="s-button" id="pf" on-click="pf">Pf</div> </div> </div>
Model
Expand source
{ data: { myPoints:[] } }
Style
Expand source
.s-box{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 100%; display: flex; flex-direction: row; flex: 1 1 auto; } .s-heightSVG{ height: 200px; margin-right: 40px; } .rowSVG{ margin-top: 10px; height: 184px; display: flex; flex-direction: row; justify-content: center; } .selected{ background-color: #7093c1; } .buttonBarGauge{ width:100%; height:40px; margin-top:35px; border-radius: 5px; background-color: #4f7ab3; display: flex; flex-direction: row; justify-content: center; align-items: flex-end; } .s-button{ color:#fff; border-radius: 5px; width:100%; height: 100%; font-weight: bold; padding: 10px 15px 10px 15px; display: flex; flex-direction: row; justify-content: center; align-items: center; cursor: pointer; }
Init
Expand source
this.ractive.fire("obtainData"); var template = this; var model = this.ractive; var myTarget = model.queryAll('targetPoint'); model.on('foldUpdate', function(event) { var point = model.get("myPoints"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('readAll(equip and meter and siteRef=='+ selected +')', function(data){ meter=data.result.toObj(); var newMeter = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { newMeter.push({ dis : p.dis, id : p.id, navName : p.navName }); }); template.newMeter=data.result.toObj(); model.set('drop2', template.newMeter); var point2 = model.get("drop2"); }); },200); var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var kwID = template.view.querySelector("#kw"); var kvaID = template.view.querySelector("#kva"); var kvarID = template.view.querySelector("#kvar"); var currentID = template.view.querySelector("#current"); var pfID = template.view.querySelector("#pf"); kwID.style.backgroundColor = "#7093c1"; kvaID.style.backgroundColor = "#4f7ab3"; kvarID.style.backgroundColor = "#4f7ab3"; currentID.style.backgroundColor = "#4f7ab3"; pfID.style.backgroundColor = "#4f7ab3"; }); var selected2 = model.get("selected2"); finstack.eval('readAll(equipRef=='+selected2+' and power and cur and his and point and sensor and not apparent and not reactive and not powerTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, 0, 5000, -90, 90), min : 0, max : 5000 }); }); template.ractive.set({'myPoints':myPoints}); }); }); this.ractive.on("kw", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var kwID = template.view.querySelector("#kw"); var kvaID = template.view.querySelector("#kva"); var kvarID = template.view.querySelector("#kvar"); var currentID = template.view.querySelector("#current"); var pfID = template.view.querySelector("#pf"); kwID.style.backgroundColor = "#7093c1"; kvaID.style.backgroundColor = "#4f7ab3"; kvarID.style.backgroundColor = "#4f7ab3"; currentID.style.backgroundColor = "#4f7ab3"; pfID.style.backgroundColor = "#4f7ab3"; }); var selected2 = model.get("selected2"); finstack.eval('readAll(equipRef=='+selected2+' and power and cur and his and point and sensor and not apparent and not reactive and not powerTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, 0, 5000, -90, 90), min : 0, max : 5000 }); }); template.ractive.set({'myPoints':myPoints}); }); }); this.ractive.on("kva", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var kwID = template.view.querySelector("#kw"); var kvaID = template.view.querySelector("#kva"); var kvarID = template.view.querySelector("#kvar"); var currentID = template.view.querySelector("#current"); var pfID = template.view.querySelector("#pf"); kwID.style.backgroundColor = "#4f7ab3"; kvaID.style.backgroundColor = "#7093c1"; kvarID.style.backgroundColor = "#4f7ab3"; currentID.style.backgroundColor = "#4f7ab3"; pfID.style.backgroundColor = "#4f7ab3"; }); var selected2 = model.get("selected2"); finstack.eval('readAll(equipRef=='+selected2+' and power and cur and his and point and sensor and apparent and not reactive and not powerTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, 0, 2000, -90, 90), min : 0, max : 2000 }); }); model.set({'myPoints':myPoints}); }); }); this.ractive.on("kvar", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var kwID = template.view.querySelector("#kw"); var kvaID = template.view.querySelector("#kva"); var kvarID = template.view.querySelector("#kvar"); var currentID = template.view.querySelector("#current"); var pfID = template.view.querySelector("#pf"); kwID.style.backgroundColor = "#4f7ab3"; kvaID.style.backgroundColor = "#4f7ab3"; kvarID.style.backgroundColor = "#7093c1"; currentID.style.backgroundColor = "#4f7ab3"; pfID.style.backgroundColor = "#4f7ab3"; }); var selected2 = model.get("selected2"); finstack.eval('readAll(equipRef=='+selected2+' and power and cur and his and point and sensor and apparent and not reactive and not powerTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, 0, 2000, -90, 90), min : 0, max : 2000 }); }); model.set({'myPoints':myPoints}); }); }); this.ractive.on("current", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var kwID = template.view.querySelector("#kw"); var kvaID = template.view.querySelector("#kva"); var kvarID = template.view.querySelector("#kvar"); var currentID = template.view.querySelector("#current"); var pfID = template.view.querySelector("#pf"); kwID.style.backgroundColor = "#4f7ab3"; kvaID.style.backgroundColor = "#4f7ab3"; kvarID.style.backgroundColor = "#4f7ab3"; currentID.style.backgroundColor = "#7093c1"; pfID.style.backgroundColor = "#4f7ab3"; }); var selected2 = model.get("selected2"); finstack.eval('readAll(equipRef=='+selected2+' and cur and his and point and current and not currentAverage and not currentTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, 0, 2000, -90, 90), min : 0, max : 2000 }); }); model.set({'myPoints':myPoints}); }); }); this.ractive.on("pf", function(event) { var showItem = model.queryAll('stackRactive'); showItem.forEach(function(item){ var kwID = template.view.querySelector("#kw"); var kvaID = template.view.querySelector("#kva"); var kvarID = template.view.querySelector("#kvar"); var currentID = template.view.querySelector("#current"); var pfID = template.view.querySelector("#pf"); kwID.style.backgroundColor = "#4f7ab3"; kvaID.style.backgroundColor = "#4f7ab3"; kvarID.style.backgroundColor = "#4f7ab3"; currentID.style.backgroundColor = "#4f7ab3"; pfID.style.backgroundColor = "#7093c1"; }); var selected2 = model.get("selected2"); finstack.eval('readAll(equipRef=='+selected2+' and cur and his and point and pf and not powerFactorTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, -10, 10, -90, 90), min : -10, max : 10 }); }); model.set({'myPoints':myPoints}); }); });
Program
Expand source
var template = this; var myTarget = query('targetPoint'); finstack.eval('readAll(site).sort("dis")', function(data){ template.drop=data.result.toObj(); dropdown = template.drop; }); setTimeout(function() { finstack.eval('readAll(equip and meter and siteRef=='+ dropdown[0].id +')', function(data){ template.drop2=data.result.toObj(); dropdown2 = template.drop2; var myId = template.drop2[0].id; }); }, 200); setTimeout(function() { finstack.eval('readAll(equipRef=='+myId+' and power and cur and his and point and sensor and not apparent and not reactive and not powerTotal).sort("phase")').then(function(data) { var myPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { myPoints.push({ curVal : p.curVal, rotateVal : fin.Utils.ResetBAS(p.curVal, 0, 5000, -90, 90), min : 0, max : 5000 }); }); template.ractive.set({'myPoints':myPoints}); }); }, 400);
AM Chart
Template
Expand source
<div class="s-box"> <div class="horizontal"> <select class="s-dropDown" value={{selected}} on-change="foldUpdate"> {{#myPoints}} <option value={{id}}>{{dis}}</option> {{/myPoints}} </select> <select class="s-dropDown2 mnl" value={{selected2}} on-change="foldUpdate"> {{#myPoints2}} <option value={{id}}>{{navName}}</option> {{/myPoints2}} </select> <label class="s-space s-click" on-click="calendar">{{#if myStart==myEnd}}{{myStart}}{{else}}{{myStart}} to {{myEnd}}{{/if}}</label> <label class="s-space">compared to</label> <label class="s-space s-click" on-click="compare">{{#if myCompareStart==myCompareEnd}}{{myCompareStart}}{{else}}{{myCompareStart}} to {{myCompareEnd}}{{/if}}</label> </div> <br> <div class="fWd s-chart pst"> <div id="amChart" class="mll" style="width:100%; height:100%;"></div> </div> </div>
Model
Expand source
{ data: { myPoints:[], myStart:"Today", myEnd:"Today", myCompareStart:"None", myCompareEnd:"None" } }
Style
Expand source
.s-box{ padding: 10px; background-color: #fafafa; border-radius: 5px; width: 100%; height: 100%; display: flex; flex-direction: column; flex: 1 1 auto; } .s-dropDown{ width:150px; height:30px; } .s-dropDown2{ width:200px; height:30px; } .s-chart{ height:90%; } .s-date:hover{ background-color: #c9c7c7; } .s-date{ height:30px; cursor: pointer; border-radius: 4.5px; } .s-space{ margin-left:20px; } .s-click:hover{ cursor: pointer; color: #537bb1; }
Init
Expand source
this.ractive.fire("obtainData"); var self = this; var template = this; var model = self.ractive; var ractive= this.ractive; var date = "today()"; var compareDate = null; model.on('foldUpdate', function(event) { var point = model.get("myPoints"); var selected = model.get("selected"); setTimeout(function() { finstack.eval('readAll(equip and meter and siteRef=='+ selected +')', function(data){ meter=data.result.toObj(); var newMeter = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { newMeter.push({ dis : p.dis, id : p.id, navName : p.navName }); }); template.newMeter=data.result.toObj(); model.set('myPoints2', template.newMeter); var point2 = model.get("myPoints2"); }); setTimeout(function() { var selected2 = model.get("selected2"); setTimeout(function() { finstack.eval('readAll(energy and equipRef=='+ selected2 +' and siteRef=='+ selected +').hisRead('+date+')', function(data){ queryData=data.result.toObj(); var newPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { newPoints.push({ v0 : p.v0.toFixed(1), ts : p.ts }); }); var test = template.view.querySelector("#amChart"); AmCharts.addInitHandler(function(chart) { if (chart.chartScrollbar === undefined || !chart.chartScrollbar.autoHide) return; chart.addListener("zoomed", function(event) { var enabled = true; if (event.startIndex === 0 && event.endIndex === (chart.dataProvider.length - 1)) enabled = false; if (event.chart.chartScrollbar.enabled === enabled) return; event.chart.chartScrollbar.enabled = enabled; event.chart.validateNow(false, true); }); }, ["serial"]); var chart = AmCharts.makeChart(test, { "type": "serial", "theme": "light", "dataProvider": newPoints, "date": "ts", "value": "GetPrettyValue(v0)", "precision" : 1, "marginRight": 40, "marginLeft": 40, "autoMarginOffset": 20, "dataDateFormat": "HH:mm:ss", "valueAxes": [ { "id": "v1", "axisAlpha": 0, "position": "left", "ignoreAxisWidth": true } ], "balloon": { "borderThickness": 1, "shadowAlpha": 0, }, "graphs": [ { "id": "g1", "balloon": { "drop": true, "adjustBorderColor": false, "color": "#ffffff", "type": "smoothedLine" }, "fillAlphas": 0.2, "bullet": "round", "bulletBorderAlpha": 1, "bulletColor": "#FFFFFF", "bulletSize": 5, "hideBulletsCount": 50, "lineThickness": 2, "title": "red line", "useLineColorForBulletBorder": true, "valueField": "v0", "balloonText": "<span style='font-size:18px;'>[[v0]]</span>" } ], "chartCursor": { "categoryBalloonDateFormat":"MMM DD YYYY L:NN A", "zoomable": true }, "chartScrollbar": { "autoHide": true }, "categoryField": "ts", "categoryAxis": { "equalSpacing": true, "parseDates": true, "dashLength": 1, "minorGridEnabled": true, "gridPosition": "start", "minPeriod": "mm", "dateFormats": [ { "period":"fff", "format":"L:NN:SS A" }, { "period":"ss", "format":"L:NN:SS A" }, { "period":"mm", "format":"L:NN A" }, { "period":"hh", "format":"L:NN A" }, { "period":"DD", "format":"MMM DD" }, { "period":"WW", "format":"MMM DD" }, { "period":"MM", "format":"MMM" }, { "period":"YYYY", "format":"YYYY" } ], }, "export": { "enabled": true }, } ); } ); }, 1000); }, 200); }, 200); }); this.ractive.on("calendar", function(event){ top.app.ShowCalendar(null,function(data) { var foobag = model.get("myStart"); var foo = model.get("myEnd"); var start = moment(data.range.start).format("YYYY-MM-DD"); var end = moment(data.range.end).format("YYYY-MM-DD"); var dateStringStart = start; var startDate = new moment(dateStringStart).format('MMM DD, YYYY'); var dateStringEnd = end; var endDate = new moment(dateStringEnd).format('MMM DD, YYYY'); if (start===end){ date = start; } else{ date = (start+'..'+end); } setTimeout(function() { var selected = model.get("selected"); var selected2 = model.get("selected2"); finstack.eval('readAll(energy and equipRef=='+ selected2 +' and siteRef=='+ selected +').hisRead('+date+')', function(data){ queryData=data.result.toObj(); var newPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { newPoints.push({ v0 : p.v0.toFixed(1), ts : p.ts }); }); var test = template.view.querySelector("#amChart"); AmCharts.addInitHandler(function(chart) { if (chart.chartScrollbar === undefined || !chart.chartScrollbar.autoHide) return; chart.addListener("zoomed", function(event) { var enabled = true; if (event.startIndex === 0 && event.endIndex === (chart.dataProvider.length - 1)) enabled = false; if (event.chart.chartScrollbar.enabled === enabled) return; event.chart.chartScrollbar.enabled = enabled; event.chart.validateNow(false, true); }); }, ["serial"]); var chart = AmCharts.makeChart(test, { "type": "serial", "theme": "light", "dataProvider": newPoints, "date": "ts", "value": "GetPrettyValue(v0)", "precision" : 1, "marginRight": 40, "marginLeft": 40, "autoMarginOffset": 20, "dataDateFormat": "HH:mm:ss", "valueAxes": [ { "id": "v1", "axisAlpha": 0, "position": "left", "ignoreAxisWidth": true } ], "balloon": { "borderThickness": 1, "shadowAlpha": 0, }, "graphs": [ { "id": "g1", "balloon": { "drop": true, "adjustBorderColor": false, "color": "#ffffff", "type": "smoothedLine" }, "fillAlphas": 0.2, "bullet": "round", "bulletBorderAlpha": 1, "bulletColor": "#FFFFFF", "bulletSize": 5, "hideBulletsCount": 50, "lineThickness": 2, "title": "red line", "useLineColorForBulletBorder": true, "valueField": "v0", "balloonText": "<span style='font-size:18px;'>[[v0]]</span>" } ], "chartCursor": { "categoryBalloonDateFormat":"MMM DD YYYY L:NN A", "zoomable": true }, "chartScrollbar": { "autoHide": true }, "categoryField": "ts", "categoryAxis": { "equalSpacing": true, "parseDates": true, "dashLength": 1, "minorGridEnabled": true, "gridPosition": "start", "minPeriod": "mm", "dateFormats": [ { "period":"fff", "format":"L:NN:SS A" }, { "period":"ss", "format":"L:NN:SS A" }, { "period":"mm", "format":"L:NN A" }, { "period":"hh", "format":"L:NN A" }, { "period":"DD", "format":"MMM DD" }, { "period":"WW", "format":"MMM DD" }, { "period":"MM", "format":"MMM" }, { "period":"YYYY", "format":"YYYY" } ], }, "export": { "enabled": true }, } ); } ); }, 1000); ractive.set('myStart', startDate); ractive.set('myEnd', endDate); ractive.set('myCompareStart', "None"); ractive.set('myCompareEnd', "None"); }, {periods:false}); }); this.ractive.on("compare", function(event){ top.app.ShowCalendar(null,function(data) { var foobag = model.get("myCompareStart"); var foo = model.get("myCompareEnd"); var start = moment(data.range.start).format("YYYY-MM-DD"); var end = moment(data.range.end).format("YYYY-MM-DD"); var dateStringStart = start; var startCompareDate = new moment(dateStringStart).format('MMM DD, YYYY'); var dateStringEnd = end; var endCompareDate = new moment(dateStringEnd).format('MMM DD, YYYY'); if (start===end){ compareDate = start; } else{ compareDate = (start+'..'+end); } setTimeout(function() { var selected = model.get("selected"); var selected2 = model.get("selected2"); finstack.eval('readAll(energy and equipRef=='+ selected2 +' and siteRef=='+ selected +').finHisReadBaselineCore('+date+','+compareDate+')[0]', function(data){ queryData=data.result.toObj(); var newPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { newPoints.push({ v0 : p.v0.toFixed(1), v0base : p.v0base.toFixed(1), ts : p.ts }); }); var test = template.view.querySelector("#amChart"); AmCharts.addInitHandler(function(chart) { if (chart.chartScrollbar === undefined || !chart.chartScrollbar.autoHide) return; chart.addListener("zoomed", function(event) { var enabled = true; if (event.startIndex === 0 && event.endIndex === (chart.dataProvider.length - 1)) enabled = false; if (event.chart.chartScrollbar.enabled === enabled) return; event.chart.chartScrollbar.enabled = enabled; event.chart.validateNow(false, true); }); }, ["serial"]); var chart = AmCharts.makeChart(test, { "type": "serial", "theme": "light", "dataProvider": newPoints, "date": "ts", "value1": "v0", "value2": "v0base", "precision" : 1, "marginRight": 40, "marginLeft": 40, "autoMarginOffset": 20, "dataDateFormat": "HH:mm:ss", "valueAxes": [ { "id": "v1", "axisAlpha": 0, "position": "left", "ignoreAxisWidth": true } ], "balloon": { "borderThickness": 1, "shadowAlpha": 0, }, "graphs": [ { "id": "g1", "balloon": { "drop": true, "adjustBorderColor": false, "color": "#ffffff", "type": "smoothedLine" }, "fillAlphas": 0.2, "bullet": "round", "bulletBorderAlpha": 1, "bulletColor": "#FFFFFF", "bulletSize": 5, "hideBulletsCount": 50, "lineThickness": 2, "title": "red line", "useLineColorForBulletBorder": true, "valueField": "v0", "balloonText": "<span style='font-size:18px;'>[[v0]]</span>" }, { "id": "g2", "balloon": { "drop": true, "adjustBorderColor": false, "color": "#ffffff", "type": "smoothedLine" }, "fillAlphas": 0, "lineColor": "#da616b", "bullet": "round", "bulletBorderAlpha": 1, "dashLength":5, "bulletColor": "#FFFFFF", "bulletSize": 5, "hideBulletsCount": 50, "lineThickness": 2, "title": "red line", "useLineColorForBulletBorder": true, "valueField": "v0base", "balloonText": "<span style='font-size:18px;'>[[v0base]]</span>" }], "chartCursor": { "categoryBalloonDateFormat":"MMM DD YYYY L:NN A", "zoomable": true }, "chartScrollbar": { "autoHide": true }, "categoryField": "ts", "categoryAxis": { "equalSpacing": true, "parseDates": true, "dashLength": 1, "minorGridEnabled": true, "gridPosition": "start", "minPeriod": "mm", "dateFormats": [ { "period":"fff", "format":"L:NN:SS A" }, { "period":"ss", "format":"L:NN:SS A" }, { "period":"mm", "format":"L:NN A" }, { "period":"hh", "format":"L:NN A" }, { "period":"DD", "format":"MMM DD" }, { "period":"WW", "format":"MMM DD" }, { "period":"MM", "format":"MMM" }, { "period":"YYYY", "format":"YYYY" } ], }, "export": { "enabled": true }, } ); } ); }, 1000); ractive.set('myCompareStart', startCompareDate); ractive.set('myCompareEnd', endCompareDate); }, {periods:false}); });
Program
Expand source
var template = this; var myTarget = query('targetPoint'); var dropdown; var dropdown2; finstack.eval('readAll(site).sort("dis")', function(data){ template.myPoints=data.result.toObj(); dropdown = template.myPoints; }); setTimeout(function() { finstack.eval('readAll(equip and meter and siteRef=='+ dropdown[0].id +')', function(data){ template.myPoints2=data.result.toObj(); dropdown2 = template.myPoints2; }); setTimeout(function() { var queryData = query("stackRactive"); finstack.eval('readAll(energy and equipRef=='+ dropdown2[0].id +' and siteRef=='+ dropdown[0].id +').hisRead(today)', function(data){ queryData=data.result.toObj(); var newPoints = []; var realPoints = data.result.toObj(); realPoints.forEach(function(p,index) { newPoints.push({ v0 : p.v0.toFixed(1), ts : p.ts }); }); var test = template.view.querySelector("#amChart"); AmCharts.addInitHandler(function(chart) { if (chart.chartScrollbar === undefined || !chart.chartScrollbar.autoHide) return; chart.addListener("zoomed", function(event) { var enabled = true; if (event.startIndex === 0 && event.endIndex === (chart.dataProvider.length - 1)) enabled = false; if (event.chart.chartScrollbar.enabled === enabled) return; event.chart.chartScrollbar.enabled = enabled; event.chart.validateNow(false, true); }); }, ["serial"]); var chart = AmCharts.makeChart(test, { "type": "serial", "theme": "light", "dataProvider": newPoints, "date": "ts", "value": "v0", "marginRight": 40, "marginLeft": 40, "autoMarginOffset": 20, "valueAxes": [ { "id": "v1", "axisAlpha": 0, "position": "left", "ignoreAxisWidth": true } ], "balloon": { "borderThickness": 1, "shadowAlpha": 0, }, "graphs": [ { "precision": 1, "id": "g1", "balloon": { "drop": true, "adjustBorderColor": false, "color": "#ffffff", "type": "smoothedLine" }, "fillAlphas": 0.2, "bullet": "round", "bulletBorderAlpha": 1, "bulletColor": "#FFFFFF", "bulletSize": 5, "hideBulletsCount": 50, "lineThickness": 2, "title": "red line", "useLineColorForBulletBorder": true, "valueField": "v0", "balloonText": "<span style='font-size:18px;'>[[v0]]</span>" } ], "chartCursor": { "categoryBalloonDateFormat":"MMM DD YYYY L:NN A", "zoomable": true }, "chartScrollbar": { "autoHide": true }, "categoryField": "ts", "categoryAxis": { "equalSpacing": true, "parseDates": true, "dashLength": 1, "minorGridEnabled": true, "gridPosition": "start", "minPeriod": "mm", "dateFormats": [ { "period":"fff", "format":"L:NN:SS A" }, { "period":"ss", "format":"L:NN:SS A" }, { "period":"mm", "format":"L:NN A" }, { "period":"hh", "format":"L:NN A" }, { "period":"DD", "format":"MMM DD" }, { "period":"WW", "format":"MMM DD" }, { "period":"MM", "format":"MMM" }, { "period":"YYYY", "format":"YYYY" } ], }, "export": { "enabled": true }, } ); } ); }, 200); }, 200);