Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // navigate to the firebase directory and call it out on the cmd. so
- // 1.run cmd as admin
- // 2. cd C:\users\yourusername\AppData\Roaming\npm
- // 3. firebase.cmd login
- // or firebase login
- // there you go. above steps are all commands goes to your command prompt.
- // Deploy functions usign command: firebase deploy --only functions
- // https://stackoverflow.com/questions/3733227/javascript-seconds-to-minutes-and-seconds
- // Initialize libraries
- const functions = require('firebase-functions');
- const admin = require('firebase-admin');
- admin.initializeApp(functions.config().firebase);
- // Algorithm 1 for Station 1 Determining if Requested Rate can be Supplied
- exports.station1_changerate = functions.database.ref('/ChargingStation1/ChargingRate').onUpdate(event => {
- let chargingRate1, chargingRate2, chargingRate3;
- // Gets charging rate of station 1
- function fetchRate1(){
- admin.database().ref('/ChargingStation1/ChargingRate').once('value').then((snapshot)=>{
- chargingRate1 = snapshot.val();
- if(Number(chargingRate1) > 0){
- fetchRate2();
- }
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate of station 2
- function fetchRate2(){
- admin.database().ref('/ChargingStation2/ChargingRate').once('value').then((snapshot)=>{
- chargingRate2 = snapshot.val();
- fetchRate3()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate of station 3
- function fetchRate3(){
- admin.database().ref('/ChargingStation3/ChargingRate').once('value').then((snapshot)=>{
- chargingRate3 = snapshot.val();
- check();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Sums all 3 charging rates and checks if sum is greater or less than 221
- function check(){
- let totalChargingRate = Number(chargingRate1) + Number(chargingRate2) + Number(chargingRate3)
- if (totalChargingRate > 221){
- admin.database().ref("/ChargingStation1/CanBeSupplied").set(0);
- } else if (totalChargingRate <= 221) {
- admin.database().ref("/ChargingStation1/CanBeSupplied").set(1);
- }
- }
- fetchRate1();
- })
- // Algorithm 2 for Station 1 Setting Relays and AC Dimmer Values
- exports.station1_values = functions.database.ref('/ChargingStation1/CanBeSupplied').onUpdate(event => {
- let chargingRate1, CanBeSupplied;
- // Checks if CanBeSupplied is true, if true sets relay on and continue
- function getCanBeSupplied(){
- admin.database().ref("/ChargingStation1/station1Relay").set("OFF");
- admin.database().ref('/ChargingStation1/CanBeSupplied').once('value').then((snapshot)=>{
- CanBeSupplied = snapshot.val();
- if (CanBeSupplied === 1){
- admin.database().ref("/ChargingStation1/station1Relay").set("ON");
- getChargingRate();
- }
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate of station 1
- function getChargingRate(){
- admin.database().ref('/ChargingStation1/ChargingRate').once('value').then((snapshot)=>{
- chargingRate1 = snapshot.val();
- setValues()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Sets AC dimmer value according to charging rate
- function setValues(){
- if (chargingRate1 === "47"){
- admin.database().ref("/ChargingStation1/AC_dimmer_value").set(110);
- } else if (chargingRate1 === "67"){
- admin.database().ref("/ChargingStation1/AC_dimmer_value").set(150);
- } else if (chargingRate1 === "87"){
- admin.database().ref("/ChargingStation1/AC_dimmer_value").set(255);
- } else {
- admin.database().ref("/ChargingStation1/AC_dimmer_value").set(1);
- }
- }
- getCanBeSupplied();
- })
- // Algorithm 3 for Station 1 Completion Time
- exports.station1_time = functions.database.ref('/ChargingStation1/CanBeSupplied').onUpdate(event => {
- let startingPercentage, endingPercentage, batteryCapacity, time, chargingRate1;
- // Gets starting percentage
- function fetchStartingPercentage(){
- admin.database().ref('/ChargingStation1/StartingPercentage').once('value').then((snapshot)=>{
- startingPercentage = snapshot.val();
- fetchEndingPercentage();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets ending percentage
- function fetchEndingPercentage(){
- admin.database().ref('/ChargingStation1/EndingPercentage').once('value').then((snapshot)=>{
- endingPercentage = snapshot.val();
- fetchBatteryCapacity();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets battery capacity
- function fetchBatteryCapacity(){
- admin.database().ref('/ChargingStation1/BatteryCapacity').once('value').then((snapshot)=>{
- batteryCapacity = snapshot.val();
- getChargingRate();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation1/ChargingRate').once('value').then((snapshot)=>{
- chargingRate1 = snapshot.val();
- computeTime()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Calculates time in total seconds
- function computeTime(){
- let startingCharge = startingPercentage * batteryCapacity;
- endingPercentage = Number(endingPercentage);
- let endingCharge = endingPercentage * batteryCapacity;
- let totalCharge = endingCharge - startingCharge;
- time = Math.round(totalCharge / Number(chargingRate1)); // time is set in secs
- admin.database().ref("/ChargingStation1/time").set(time);
- computeFinishTime();
- }
- // Calculates time in minutes and seconds
- function computeFinishTime(){
- let minutes = Math.floor(time / 60);
- let seconds = time - minutes * 60;
- admin.database().ref("/ChargingStation1/minutes").set(minutes);
- admin.database().ref("/ChargingStation1/seconds").set(seconds);
- }
- fetchStartingPercentage();
- })
- // Algorithm 4 for Station 1 Payment Amount
- exports.station1_payment = functions.database.ref('/ChargingStation1/time').onUpdate(event => {
- let chargingRate1, time;
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation1/ChargingRate').once('value').then((snapshot)=>{
- chargingRate1 = snapshot.val();
- getTime();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets time in total seconds
- function getTime(){
- admin.database().ref('/ChargingStation1/time').once('value').then((snapshot)=>{
- time = snapshot.val();
- computePayment()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Calculates payment amount
- function computePayment(){
- let chargingCost = 0;
- if (chargingRate1 === "87"){
- chargingCost = 0.8;
- } else if (chargingRate1 === "67"){
- chargingCost = 0.6;
- } else if (chargingRate1 === "47"){
- chargingCost = 0.4;
- }
- let paymentAmount = (chargingCost * time).toFixed(2);
- admin.database().ref("/ChargingStation1/payment").set(paymentAmount);
- }
- getChargingRate();
- })
- // Algorithm 1 for Station 2 Determining if Requested Rate can be Supplied
- exports.station2_changerate = functions.database.ref('/ChargingStation2/ChargingRate').onUpdate(event => {
- let chargingRate1, chargingRate2, chargingRate3;
- // Gets charging rate of station 1
- function fetchRate1(){
- admin.database().ref('/ChargingStation1/ChargingRate').once('value').then((snapshot)=>{
- chargingRate1 = snapshot.val();
- fetchRate2()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate of station 2
- function fetchRate2(){
- admin.database().ref('/ChargingStation2/ChargingRate').once('value').then((snapshot)=>{
- chargingRate2 = snapshot.val();
- if(Number(chargingRate2) > 0){
- fetchRate3();
- }
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate of station 3
- function fetchRate3(){
- admin.database().ref('/ChargingStation3/ChargingRate').once('value').then((snapshot)=>{
- chargingRate3 = snapshot.val();
- check();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Sums all 3 charging rates and checks if sum is greater or less than 221
- function check(){
- let totalChargingRate = Number(chargingRate1) + Number(chargingRate2) + Number(chargingRate3)
- if (totalChargingRate > 221){
- admin.database().ref("/ChargingStation2/CanBeSupplied").set(0);
- } else if (totalChargingRate <= 221) {
- admin.database().ref("/ChargingStation2/CanBeSupplied").set(1);
- }
- }
- fetchRate1();
- })
- // Algorithm 2 for Station 2 Setting Relays and AC Dimmer Values
- exports.station2_values = functions.database.ref('/ChargingStation2/CanBeSupplied').onUpdate(event => {
- let chargingRate2, CanBeSupplied;
- // Checks if CanBeSupplied is true, if true sets relay on and continue
- function getCanBeSupplied(){
- admin.database().ref("/ChargingStation2/station2Relay").set("OFF");
- admin.database().ref('/ChargingStation2/CanBeSupplied').once('value').then((snapshot)=>{
- CanBeSupplied = snapshot.val();
- if (CanBeSupplied === 1){
- admin.database().ref("/ChargingStation2/station2Relay").set("ON");
- getChargingRate();
- }
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation2/ChargingRate').once('value').then((snapshot)=>{
- chargingRate2 = snapshot.val();
- setValues()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Sets AC dimmer value according to charging rate
- function setValues(){
- if (chargingRate2 === "47"){
- admin.database().ref("/ChargingStation2/AC_dimmer_value").set(110);
- } else if (chargingRate2 === "67"){
- admin.database().ref("/ChargingStation2/AC_dimmer_value").set(150);
- } else if (chargingRate2 === "87"){
- admin.database().ref("/ChargingStation2/AC_dimmer_value").set(255);
- } else {
- admin.database().ref("/ChargingStation2/AC_dimmer_value").set(1);
- }
- }
- getCanBeSupplied();
- })
- // Algorithm 3 for Station 2 Completion Time
- exports.station2_time = functions.database.ref('/ChargingStation2/CanBeSupplied').onUpdate(event => {
- let startingPercentage, endingPercentage, batteryCapacity, time, chargingRate2;
- // Gets starting percentage
- function fetchStartingPercentage(){
- admin.database().ref('/ChargingStation2/StartingPercentage').once('value').then((snapshot)=>{
- startingPercentage = snapshot.val();
- fetchEndingPercentage();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets ending percentage
- function fetchEndingPercentage(){
- admin.database().ref('/ChargingStation2/EndingPercentage').once('value').then((snapshot)=>{
- endingPercentage = snapshot.val();
- fetchBatteryCapacity();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets battery capacity
- function fetchBatteryCapacity(){
- admin.database().ref('/ChargingStation2/BatteryCapacity').once('value').then((snapshot)=>{
- batteryCapacity = snapshot.val();
- getChargingRate();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation2/ChargingRate').once('value').then((snapshot)=>{
- chargingRate2 = snapshot.val();
- computeTime()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Calculates time in total seconds
- function computeTime(){
- let startingCharge = startingPercentage * batteryCapacity;
- endingPercentage = Number(endingPercentage);
- let endingCharge = endingPercentage * batteryCapacity;
- let totalCharge = endingCharge - startingCharge;
- time = Math.round(totalCharge / Number(chargingRate2)); // time is set in secs
- admin.database().ref("/ChargingStation2/time").set(time);
- computeFinishTime();
- }
- // Calculates time in minutes and seconds
- function computeFinishTime(){
- let minutes = Math.floor(time / 60);
- let seconds = time - minutes * 60;
- admin.database().ref("/ChargingStation2/minutes").set(minutes);
- admin.database().ref("/ChargingStation2/seconds").set(seconds);
- }
- fetchStartingPercentage();
- })
- // Algorithm 4 for Station 2 Payment Amount
- exports.station2_payment = functions.database.ref('/ChargingStation2/time').onUpdate(event => {
- let chargingRate2, time;
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation2/ChargingRate').once('value').then((snapshot)=>{
- chargingRate2 = snapshot.val();
- fetchTime();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets time in total seconds
- function fetchTime(){
- admin.database().ref('/ChargingStation2/time').once('value').then((snapshot)=>{
- time = snapshot.val();
- computePayment()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Calculates payment amount
- function computePayment(){
- let chargingCost;
- if (chargingRate2 === "87"){
- chargingCost = 0.8;
- } else if (chargingRate2 === "67"){
- chargingCost = 0.6;
- } else if (chargingRate2 === "47"){
- chargingCost = 0.4;
- }
- let paymentAmount = chargingCost * time;
- paymentAmount = paymentAmount.toFixed(2);
- admin.database().ref("/ChargingStation2/payment").set(paymentAmount);
- }
- getChargingRate();
- })
- // Algorithm 1 for Station 3 Determining if Requested Rate can be Supplied
- exports.station3_changerate = functions.database.ref('/ChargingStation3/ChargingRate').onUpdate(event => {
- let chargingRate1, chargingRate2, chargingRate3;
- function fetchRate1(){
- admin.database().ref('/ChargingStation1/ChargingRate').once('value').then((snapshot)=>{
- chargingRate1 = snapshot.val();
- fetchRate2()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- function fetchRate2(){
- admin.database().ref('/ChargingStation2/ChargingRate').once('value').then((snapshot)=>{
- chargingRate2 = snapshot.val();
- fetchRate3()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- function fetchRate3(){
- admin.database().ref('/ChargingStation3/ChargingRate').once('value').then((snapshot)=>{
- chargingRate3 = snapshot.val();
- if(Number(chargingRate3) > 0){
- check();
- }
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- function check(){
- let totalChargingRate = Number(chargingRate1) + Number(chargingRate2) + Number(chargingRate3)
- if (totalChargingRate > 221){
- admin.database().ref("/ChargingStation3/CanBeSupplied").set(0);
- } else if (totalChargingRate <= 221) {
- admin.database().ref("/ChargingStation3/CanBeSupplied").set(1);
- }
- }
- fetchRate1();
- })
- // Algorithm 2 for Station 3 Setting Relays and AC Dimmer Values
- exports.station3_values = functions.database.ref('/ChargingStation3/CanBeSupplied').onUpdate(event => {
- let chargingRate3, CanBeSupplied;
- // Checks if CanBeSupplied is true, if true sets relay on and continue
- function getCanBeSupplied(){
- admin.database().ref("/ChargingStation3/station3Relay").set("OFF");
- admin.database().ref('/ChargingStation3/CanBeSupplied').once('value').then((snapshot)=>{
- CanBeSupplied = snapshot.val();
- if (CanBeSupplied === 1){
- admin.database().ref("/ChargingStation3/station3Relay").set("ON");
- getChargingRate();
- }
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation3/ChargingRate').once('value').then((snapshot)=>{
- chargingRate3 = snapshot.val();
- setValues()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Sets AC dimmer value according to charging rate
- function setValues(){
- if (chargingRate3 === "47"){
- admin.database().ref("/ChargingStation3/AC_dimmer_value").set(110);
- } else if (chargingRate3 === "67"){
- admin.database().ref("/ChargingStation3/AC_dimmer_value").set(150);
- } else if (chargingRate3 === "87"){
- admin.database().ref("/ChargingStation3/AC_dimmer_value").set(255);
- } else {
- admin.database().ref("/ChargingStation3/AC_dimmer_value").set(1);
- }
- }
- getCanBeSupplied();
- })
- // Algorithm 3 for Station 3 Completion Time
- exports.station3_time = functions.database.ref('/ChargingStation3/CanBeSupplied').onUpdate(event => {
- let startingPercentage, endingPercentage, batteryCapacity, time, chargingRate3;
- // Gets starting percentage
- function fetchStartingPercentage(){
- admin.database().ref('/ChargingStation3/StartingPercentage').once('value').then((snapshot)=>{
- startingPercentage = snapshot.val();
- fetchEndingPercentage();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets ending percentage
- function fetchEndingPercentage(){
- admin.database().ref('/ChargingStation3/EndingPercentage').once('value').then((snapshot)=>{
- endingPercentage = snapshot.val();
- fetchBatteryCapacity();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets battery capacity
- function fetchBatteryCapacity(){
- admin.database().ref('/ChargingStation3/BatteryCapacity').once('value').then((snapshot)=>{
- batteryCapacity = snapshot.val();
- getChargingRate();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation3/ChargingRate').once('value').then((snapshot)=>{
- chargingRate3 = snapshot.val();
- computeTime()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Calculates time in total seconds
- function computeTime(){
- let startingCharge = startingPercentage * batteryCapacity;
- endingPercentage = Number(endingPercentage);
- let endingCharge = endingPercentage * batteryCapacity;
- let totalCharge = endingCharge - startingCharge;
- time = Math.round(totalCharge / Number(chargingRate3)); // time is set in secs
- admin.database().ref("/ChargingStation3/time").set(time);
- computeFinishTime();
- }
- // Calculates time in minutes and seconds
- function computeFinishTime(){
- let minutes = Math.floor(time / 60);
- let seconds = time - minutes * 60;
- admin.database().ref("/ChargingStation3/minutes").set(minutes);
- admin.database().ref("/ChargingStation3/seconds").set(seconds);
- }
- fetchStartingPercentage();
- })
- // Algorithm 4 for Station 3 Payment Amount
- exports.station3_payment = functions.database.ref('/ChargingStation3/time').onUpdate(event => {
- let chargingRate3, time;
- // Gets charging rate
- function getChargingRate(){
- admin.database().ref('/ChargingStation3/ChargingRate').once('value').then((snapshot)=>{
- chargingRate3 = snapshot.val();
- fetchTime();
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Gets time in total seconds
- function fetchTime(){
- admin.database().ref('/ChargingStation3/time').once('value').then((snapshot)=>{
- time = snapshot.val();
- computePayment()
- return 1;
- }).catch(error => {
- console.error(error);
- res.error(10);
- });
- }
- // Calculates payment amount
- function computePayment(){
- let chargingCost = 0;
- if (chargingRate3 === "87"){
- chargingCost = 0.8;
- } else if (chargingRate3 === "67"){
- chargingCost = 0.6;
- } else if (chargingRate3 === "47"){
- chargingCost = 0.4;
- }
- let paymentAmount = chargingCost * time;
- paymentAmount = paymentAmount.toFixed(2);
- admin.database().ref("/ChargingStation3/payment").set(paymentAmount);
- }
- getChargingRate();
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement