Как создать облачную функцию из JavaScript - PullRequest
0 голосов
/ 24 октября 2019

Я написал этот javascript (в index.html с использованием хостинга), чтобы обновить значение уровня в базе данных в реальном времени, он работает, теперь я хочу отправить Firebase Cloud Messaging (FCM) на Android, когда notifcode = "notifawas". Я делаю это неправильно, потому что FCM должен записываться в узле js, используя облачную функцию, а не в хостинге?

Пример данных из моей базы данных: https://imgur.com/a/fSwogWj

Текущий код в моем index.html:

<script>
       console.log(firebase);

       var db = firebase.database();

       var param = db.ref('parameters');

       param.on('value', showData, showError);

       function showData(items){
         console.log(items.val())
       }
       function showError(err){
         console.log(err)
       }

       var slope_level, soil_level, land_level,rain1_level,rain2_level,rain3_level,rain4_level,rain5_level,rain6_level,rain7_level;
       var rain_lvl = [];
       // SLOPE LEVEL
       param.child("slope").on('value', function(snapshot){
         //console.log(snapshot.val().nilai)
         var slope_value = snapshot.val().nilai;
         if(slope_value >= 0 && slope_value < 7){
           slope_level = 1;}
           else if(slope_value >= 7 && slope_value < 15){
             slope_level = 2;
           }else if(slope_value >= 15 && slope_value < 30){
             slope_level = 3;
           }else if(slope_value >= 30 ){
             slope_level = 4;
           }else{
             slope_level = "error"
           }
           return snapshot.ref.child('level').set(slope_level);
         });
          // SOIL LEVEL
          param.child("soil").on('value', function(snapshot){
           //console.log(snapshot.val().nilai)
           var soil_value = snapshot.val().nilai;
           if(soil_value >= 1 && soil_value < 3){
             soil_level = 1;
           }else if(soil_value >= 4 && soil_value < 8){
             soil_level = 2;
           }else if(soil_value >= 8 && soil_value < 13){
             soil_level = 3;
           }else if(soil_value >= 13 ){
             soil_level = 4;
           }else{
             soil_level = "error"
           }
           return snapshot.ref.child('level').set(soil_level);
           });

           // LAND LEVEL
           param.child("land").on('value', function(snapshot){
           //console.log(snapshot.val().nilai)
           var land_value = snapshot.val().nilai;
           land_level = land_value
           return snapshot.ref.child('level').set(land_level);
           });

          // RAIN DAY 1 LEVEL
          firebase.database().ref("parameters/rain").child("day1").on('value', function(snapshot){
           var rain1_value = snapshot.val().nilai;
           rain_lvl[0] = rainlvlf(rain1_value);
           return snapshot.ref.child('level').set(rain_lvl[0]);
           });
          // RAIN DAY 2 LEVEL
          firebase.database().ref("parameters/rain").child("day2").on('value', function(snapshot){
           var rain2_value = snapshot.val().nilai;
           rain_lvl[1] = rainlvlf(rain2_value);
           return snapshot.ref.child('level').set(rain_lvl[1]);
           });
          // RAIN DAY 3 LEVEL
          firebase.database().ref("parameters/rain").child("day3").on('value', function(snapshot){
           var rain3_value = snapshot.val().nilai;
           rain_lvl[2] = rainlvlf(rain3_value);
           return snapshot.ref.child('level').set(rain_lvl[2]);
           });
          // RAIN DAY 4 LEVEL
          firebase.database().ref("parameters/rain").child("day4").on('value', function(snapshot){
           var rain4_value = snapshot.val().nilai;
           rain_lvl[3] = rainlvlf(rain4_value);
           return snapshot.ref.child('level').set(rain_lvl[3]);
           });
          // RAIN DAY 5 LEVEL
          firebase.database().ref("parameters/rain").child("day5").on('value', function(snapshot){
           var rain5_value = snapshot.val().nilai;
           rain_lvl[4] = rainlvlf(rain5_value);
           return snapshot.ref.child('level').set(rain_lvl[4]);
           });
          // RAIN DAY 6 LEVEL
          firebase.database().ref("parameters/rain").child("day6").on('value', function(snapshot){
           var rain6_value = snapshot.val().nilai;
           rain_lvl[5] = rainlvlf(rain6_value);
           return snapshot.ref.child('level').set(rain_lvl[5]);
           });
          // RAIN DAY 7 LEVEL
          firebase.database().ref("parameters/rain").child("day7").on('value', function(snapshot){
           var rain7_value = snapshot.val().nilai;
           rain_lvl[6] = rainlvlf(rain7_value);
           return snapshot.ref.child('level').set(rain_lvl[6]);
           });

           function rainlvlf(f){
             if (f < 20){
              return 1;
             }
             else if (f >= 20 && f < 50){
               return 2;
             }
             else if (f >= 50 && f < 100){
               return 3;
             }
             else if (f >= 100){
               return 4;
             }
             else {
               return f;
             }

           }

           var totalstatus = [];
           var warningstatus = [];
           var notifcode;
           param.on('child_changed', dataChange);

           function dataChange(items){
            //var totalparam = slope_level+land_level+soil_level+rain1_level;
             //console.log(slope_level,land_level,soil_level,rain_lvl);
             //perhitungan total dan status
             for (i=0; i<rain_lvl.length; i++){
               totalstatus[i] = slope_level+land_level+soil_level+rain_lvl[i];
               if (totalstatus[i] <= 8){
                 warningstatus[i] = "normal";
               }else if (totalstatus[i]>8 && totalstatus[i]<=10){
                warningstatus[i] = "waspada";
               }else if (totalstatus[i]>10 && totalstatus[i]<=13){
                warningstatus[i] = "siaga";
               }else if (totalstatus[i]>13){
                warningstatus[i] = "awas";
               }else{
                 console.log(err)
               }
             }
             console.log(totalstatus, warningstatus)
             // check if contain siaga or awas first
            for (i=0; i<rain_lvl.length; i++){
              if (warningstatus[i] == "awas"){
                notifcode = "notifawas";
                break;}
                else if(warningstatus[i] == "siaga"){
                notifcode = "notifsiaga";
                break;}
            }
            console.log(notifcode);
           }

     </script>

Дело в том, что я хочу создать облачную функцию, которая работает так же, как и выше. Облачная функция, которая принимает значения базы данных, затем выполняет простые вычисления и отправляет fcm в приложения для Android на основе результатов расчета

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...