add app script

This commit is contained in:
Ultrablob 2025-01-20 11:42:59 -05:00
parent 62d5adbd76
commit a8f2a96e5e
2 changed files with 136 additions and 0 deletions

126
Apps Script/Code.gs Normal file
View file

@ -0,0 +1,126 @@
function updateQuestion() {
const key = "X0ZcPLZjfDvRN1SsEFzvfGG91iKy4mlQ"
const sheet = SpreadsheetApp.getActiveSheet();
const newQuestion = sheet.getRange(5,9).getValue()
if (sheet.getRange("J11").getValue() == "● Offline"){
SpreadsheetApp.getUi().alert("Error: The machine is offline\nTry refreshing if the machine was recently plugged in")
return;
}
if (newQuestion == sheet.getRange(getFirstEmptyRowByColumnArray(sheet)-1, 1).getValue()) {
Logger.log("Question was already set, skipping");
return;
}
Logger.log("Making Blynk API Request");
UrlFetchApp.fetch('https://blynk.cloud/external/api/update?token=' + key + "&V10=" + newQuestion);
sheet.getRange(getFirstEmptyRowByColumnArray(sheet), 1).setValue(newQuestion);
Logger.log("Update successful");
}
function getFirstEmptyRowByColumnArray(spr) {
var column = spr.getRange('A:A');
var values = column.getValues(); // get all data in one call
var ct = 0;
while ( values[ct] && values[ct][0] != "" ) {
ct++;
}
return (ct+1);
}
function isWeekdayAndWithinTimeRange() {
// Generated by Openai GPT-4o
// Get the active spreadsheet
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Get the timezone of the spreadsheet
var timezone = spreadsheet.getSpreadsheetTimeZone();
// Get the current date and time in the spreadsheet's timezone
var now = new Date();
var currentDateTime = Utilities.formatDate(now, timezone, 'yyyy-MM-dd HH:mm:ss');
var currentHour = parseInt(Utilities.formatDate(now, timezone, 'H'), 10);
var currentDay = Utilities.formatDate(now, timezone, 'E');
// Check if the current day is a weekday (Monday to Friday)
var isWeekday = (currentDay !== 'Sat' && currentDay !== 'Sun');
// Check if the current time is between 8 AM and 3 PM
var isWithinTimeRange = (currentHour >= 8 && currentHour < 15);
// Return true if both conditions are met
return isWeekday && isWithinTimeRange;
}
/**
* Modifies the machine's question
*
* @param {bool} toggle the button input
* @param {string} input The value to multiply.
* @return Response status (OK)
* @customfunction
*/
function UPDATE_QUESTIONS(toggle, input) {
if (toggle != true) {
return "";
}
const key = "X0ZcPLZjfDvRN1SsEFzvfGG91iKy4mlQ"
Logger.log("Making Blynk API Request");
UrlFetchApp.fetch('https://blynk.cloud/external/api/update?token=' + key + "&V10=" + input);
return "OK";
}
function onEdit(e){
if (e.value.toUpperCase() != "TRUE" || e.oldValue.toUpperCase() != "FALSE") {
return;
}
if (e.range.getA1Notation() != "K9") {
return;
}
// updateResponses();
e.source.getActiveSheet().getRange(getFirstEmptyRowByColumnArray(e.source.getActiveSheet()), 1).setValue(e.source.getRange("I5").getValue());
e.range.setValue("FALSE");
}
function automaticallyUpdateResponses() {
if (!isWeekdayAndWithinTimeRange()) {
Logger.log("Failed because out of time range")
return;
}
if (SpreadsheetApp.getActiveSheet().getRange("F4").getValue() == false) {
Logger.log("Failed because auto-update was off");
return;
}
Logger.log("All checks passed, updating responses...")
updateResponses();
}
function updateResponses() {
const sheet = SpreadsheetApp.getActiveSheet();
const deviceOnline = UrlFetchApp.fetch("https://blynk.cloud/external/api/isHardwareConnected?token=X0ZcPLZjfDvRN1SsEFzvfGG91iKy4mlQ&").getContentText() == "true"
sheet.getRange("J11").setValue("● " + (deviceOnline ? "Online" : "Offline"));
if (!deviceOnline) {
Logger.log("Device offline, not updating");
return;
}
const data = JSON.parse(UrlFetchApp.fetch("https://blynk.cloud/external/api/get?token=X0ZcPLZjfDvRN1SsEFzvfGG91iKy4mlQ&V0&V1&V2").getContentText())
sheet.getRange(getFirstEmptyRowByColumnArray(sheet)-1,2,1,3).setValues([Object.values(data)])
Logger.log("Update successful");
}