Я написал этот 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 на основе результатов расчета