Upload files to "/"
This commit is contained in:
commit
44eabffc67
|
@ -0,0 +1,330 @@
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <WiFiClientSecure.h>
|
||||||
|
#include <UniversalTelegramBot.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <vector> // Include vector library
|
||||||
|
#include <FirebaseESP32.h>
|
||||||
|
|
||||||
|
// Provide the token generation process info.
|
||||||
|
#include <addons/TokenHelper.h>
|
||||||
|
|
||||||
|
// Provide the RTDB payload printing info and other helper functions.
|
||||||
|
#include <addons/RTDBHelper.h>
|
||||||
|
|
||||||
|
#define buzer 2
|
||||||
|
#define relay 5
|
||||||
|
|
||||||
|
// Wifi network station credentials
|
||||||
|
#define WIFI_SSID "Hi"
|
||||||
|
#define WIFI_PASSWORD "1234567899"
|
||||||
|
// Telegram BOT Token (Get from Botfather)
|
||||||
|
#define BOT_TOKEN "6653694130:AAElDMIeCgqX9K-RZuTfuF6-1_FEWL0b0lY"
|
||||||
|
|
||||||
|
#define API_KEY "AIzaSyBAH3ycbUjpkdywVIgkMPUS8UvxoifkNoM"
|
||||||
|
|
||||||
|
#define DATABASE_URL "https://rfidlock-2cf24-default-rtdb.asia-southeast1.firebasedatabase.app/" //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app
|
||||||
|
|
||||||
|
#define USER_EMAIL "superadmin@admin.com"
|
||||||
|
#define USER_PASSWORD "superadmin"
|
||||||
|
|
||||||
|
const unsigned long BOT_MTBS = 1000; // mean time between scan messages
|
||||||
|
|
||||||
|
WiFiClientSecure secured_client;
|
||||||
|
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
|
||||||
|
unsigned long bot_lasttime;
|
||||||
|
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
#include <HardwareSerial.h>
|
||||||
|
|
||||||
|
HardwareSerial GPSSerial(1);
|
||||||
|
TinyGPSPlus gps;
|
||||||
|
|
||||||
|
FirebaseData fbdo;
|
||||||
|
|
||||||
|
FirebaseAuth auth;
|
||||||
|
FirebaseConfig config;
|
||||||
|
|
||||||
|
byte sda = 21;
|
||||||
|
byte rst = 22;
|
||||||
|
#include <KRrfid.h>
|
||||||
|
int u = 0;
|
||||||
|
bool realtime = false;
|
||||||
|
|
||||||
|
String chat_id; // Added declaration of chat_id for use in loop()
|
||||||
|
|
||||||
|
bool updateRfid = false;
|
||||||
|
|
||||||
|
// last time messages' scan has been done
|
||||||
|
int relayStatus = 0;
|
||||||
|
|
||||||
|
FirebaseJsonArray IDs;
|
||||||
|
std::vector<String> authorizedIDs = {}; // Using vector for dynamic list
|
||||||
|
|
||||||
|
void addAuthorizedID(String newID) {
|
||||||
|
bool alreadyExists = false;
|
||||||
|
for (const auto& id : authorizedIDs) {
|
||||||
|
if (id == newID) {
|
||||||
|
alreadyExists = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FirebaseJsonArray data;
|
||||||
|
|
||||||
|
for (int i = 0; i < authorizedIDs.size(); i++) {
|
||||||
|
data.add(authorizedIDs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println(alreadyExists);
|
||||||
|
|
||||||
|
if (!alreadyExists) {
|
||||||
|
data.add(newID);
|
||||||
|
Firebase.setArray(fbdo, F("/rfid"), data);
|
||||||
|
loadAuthorizedIDs();
|
||||||
|
bot.sendMessage(chat_id, "ID baru telah ditambahkan: " + newID, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteAuthorizedID(String oldID) {
|
||||||
|
FirebaseJsonArray data;
|
||||||
|
|
||||||
|
for (int i = 0; i < authorizedIDs.size(); i++) {
|
||||||
|
if (authorizedIDs[i] != oldID) {
|
||||||
|
data.add(authorizedIDs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Firebase.setArray(fbdo, F("/rfid"), data);
|
||||||
|
loadAuthorizedIDs();
|
||||||
|
bot.sendMessage(chat_id, "ID " + oldID + " berhasil dihapus", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadAuthorizedIDs() {
|
||||||
|
Firebase.getArray(fbdo, F("/rfid"));
|
||||||
|
IDs = fbdo.jsonArray();
|
||||||
|
authorizedIDs = {};
|
||||||
|
for (int i = 0; i < IDs.size(); i++) {
|
||||||
|
FirebaseJsonData jsonData;
|
||||||
|
IDs.get(jsonData, i);
|
||||||
|
authorizedIDs.push_back(jsonData.stringValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleNewMessages(int numNewMessages) {
|
||||||
|
Serial.println("handleNewMessages");
|
||||||
|
|
||||||
|
for (int i = 0; i < numNewMessages; i++) {
|
||||||
|
chat_id = bot.messages[i].chat_id; // Assign chat_id for use in loop()
|
||||||
|
|
||||||
|
String text = bot.messages[i].text;
|
||||||
|
Serial.println(text);
|
||||||
|
String from_name = bot.messages[i].from_name;
|
||||||
|
|
||||||
|
//float currentLat = 0;
|
||||||
|
//float currentLng = 0;
|
||||||
|
|
||||||
|
if (text == "/menghidupkan") {
|
||||||
|
digitalWrite(relay, LOW);
|
||||||
|
relayStatus = 1;
|
||||||
|
digitalWrite(buzer, HIGH);
|
||||||
|
delay(100);
|
||||||
|
digitalWrite(buzer, LOW);
|
||||||
|
delay(100);
|
||||||
|
digitalWrite(buzer, HIGH);
|
||||||
|
delay(100);
|
||||||
|
digitalWrite(buzer, LOW);
|
||||||
|
bot.sendMessage(chat_id, "SEPEDA HIDUP", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text == "/matikan") {
|
||||||
|
relayStatus = 0;
|
||||||
|
digitalWrite(relay, HIGH);
|
||||||
|
digitalWrite(buzer, HIGH);
|
||||||
|
delay(500);
|
||||||
|
digitalWrite(buzer, LOW);
|
||||||
|
bot.sendMessage(chat_id, "SEPEDA MATI", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text == "/status") {
|
||||||
|
if (relayStatus) {
|
||||||
|
bot.sendMessage(chat_id, "SEPEDA HIDUP", "");
|
||||||
|
} else {
|
||||||
|
bot.sendMessage(chat_id, "SEPEDA MATI", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text == "/options") {
|
||||||
|
String keyboardJson = "[[\"/menghidupkan\", \"/matikan\"],[\"/status\", \"/lokasi\"]]";
|
||||||
|
bot.sendMessageWithReplyKeyboard(chat_id, "Choose from one of the following options", "", keyboardJson, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text == "/lokasi_start") {
|
||||||
|
realtime = true;
|
||||||
|
}
|
||||||
|
if (text == "/lokasi_stop") {
|
||||||
|
realtime = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (text == "/getid") {
|
||||||
|
String text = "There is authorized ID :\n";
|
||||||
|
for (int i = 0; i < authorizedIDs.size(); i++) {
|
||||||
|
text += "- " + authorizedIDs[i] + "\n";
|
||||||
|
}
|
||||||
|
bot.sendMessage(chat_id, text, "Markdown");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text == "/start") {
|
||||||
|
String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
|
||||||
|
welcome += "This is Reply Keyboard Markup example.\n\n";
|
||||||
|
welcome += "/menghidupkan : to switch the SEPEDA ON\n";
|
||||||
|
welcome += "/matikan : to switch the SEPEDA OFF\n";
|
||||||
|
welcome += "/status : Returns current status of LED\n";
|
||||||
|
welcome += "/lokasi_start : returns the reply keyboard\n";
|
||||||
|
welcome += "/lokasi_stop : returns the reply keyboard\n";
|
||||||
|
welcome += "/options : returns the reply keyboard\n";
|
||||||
|
welcome += "/getid <ID> : Get list of authorized RFID ID\n"; // New command
|
||||||
|
welcome += "/addid <ID> : Adds a new RFID ID to the authorized list\n"; // New command
|
||||||
|
welcome += "/deleteid <ID> : Delete a RFID ID from the authorized list\n";
|
||||||
|
bot.sendMessage(chat_id, welcome, "Markdown");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.startsWith("/addid ")) {
|
||||||
|
String newID = text.substring(7);
|
||||||
|
addAuthorizedID(newID);
|
||||||
|
bot.sendMessage(chat_id, "ID " + newID + " has been added to the authorized list.", "");
|
||||||
|
}
|
||||||
|
if (text.startsWith("/deleteid")) {
|
||||||
|
String oldID = text.substring(10);
|
||||||
|
deleteAuthorizedID(oldID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
GPSSerial.begin(9600, SERIAL_8N1, 16, 17);
|
||||||
|
rfidBegin();
|
||||||
|
pinMode(relay, OUTPUT);
|
||||||
|
digitalWrite(relay, HIGH);
|
||||||
|
pinMode(buzer, OUTPUT);
|
||||||
|
|
||||||
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||||
|
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
Serial.print(".");
|
||||||
|
delay(500);
|
||||||
|
}
|
||||||
|
Serial.print("\nWiFi connected. IP address: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
|
||||||
|
Serial.print("Retrieving time: ");
|
||||||
|
configTime(0, 0, "pool.ntp.org");
|
||||||
|
time_t now = time(nullptr);
|
||||||
|
while (now < 24 * 3600) {
|
||||||
|
Serial.print(".");
|
||||||
|
delay(100);
|
||||||
|
now = time(nullptr);
|
||||||
|
}
|
||||||
|
/* Assign the api key (required) */
|
||||||
|
config.api_key = API_KEY;
|
||||||
|
|
||||||
|
/* Assign the user sign in credentials */
|
||||||
|
auth.user.email = USER_EMAIL;
|
||||||
|
auth.user.password = USER_PASSWORD;
|
||||||
|
/* Assign the RTDB URL (required) */
|
||||||
|
config.database_url = DATABASE_URL;
|
||||||
|
/* Assign the callback function for the long running token generation task */
|
||||||
|
config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h
|
||||||
|
// Comment or pass false value when WiFi reconnection will control by your code or third party library e.g. WiFiManager
|
||||||
|
Firebase.reconnectNetwork(true);
|
||||||
|
fbdo.setBSSLBufferSize(4096 /* Rx buffer size in bytes from 512 - 16384 */, 1024 /* Tx buffer size in bytes from 512 - 16384 */);
|
||||||
|
|
||||||
|
Firebase.begin(&config, &auth);
|
||||||
|
|
||||||
|
Firebase.setDoubleDigits(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (Firebase.ready() && millis() - bot_lasttime > BOT_MTBS) {
|
||||||
|
|
||||||
|
if (realtime == true) {
|
||||||
|
|
||||||
|
while (GPSSerial.available()) {
|
||||||
|
gps.encode(GPSSerial.read());
|
||||||
|
}
|
||||||
|
if (gps.charsProcessed() > 10)
|
||||||
|
//if (true)
|
||||||
|
{
|
||||||
|
float currentLat = gps.location.lat();
|
||||||
|
float currentLng = gps.location.lng();
|
||||||
|
String lokasi = "Lokasi : https://www.google.com/maps/place/";
|
||||||
|
lokasi += String(currentLat, 6);
|
||||||
|
lokasi += ",";
|
||||||
|
lokasi += String(currentLng, 6);
|
||||||
|
bot.sendMessage(chat_id, lokasi, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!updateRfid) {
|
||||||
|
updateRfid = true;
|
||||||
|
loadAuthorizedIDs();
|
||||||
|
}
|
||||||
|
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
||||||
|
while (numNewMessages) {
|
||||||
|
Serial.println("got response");
|
||||||
|
handleNewMessages(numNewMessages);
|
||||||
|
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
||||||
|
}
|
||||||
|
bot_lasttime = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
getTAG();
|
||||||
|
if (TAG != "") {
|
||||||
|
bool isAuthorized = false;
|
||||||
|
for (const auto& id : authorizedIDs) {
|
||||||
|
if (TAG == id) {
|
||||||
|
isAuthorized = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAuthorized) {
|
||||||
|
if (u == 4) {
|
||||||
|
u == 0;
|
||||||
|
} else {
|
||||||
|
u++;
|
||||||
|
}
|
||||||
|
switch (u) {
|
||||||
|
case 1:
|
||||||
|
digitalWrite(relay, LOW);
|
||||||
|
relayStatus = 1;
|
||||||
|
digitalWrite(buzer, HIGH);
|
||||||
|
delay(100);
|
||||||
|
digitalWrite(buzer, LOW);
|
||||||
|
delay(100);
|
||||||
|
digitalWrite(buzer, HIGH);
|
||||||
|
delay(100);
|
||||||
|
digitalWrite(buzer, LOW);
|
||||||
|
delay(1000);
|
||||||
|
bot.sendMessage(chat_id, "RFID berhasil dipindai. SEPEDA HIDUP.", "");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
digitalWrite(relay, HIGH);
|
||||||
|
relayStatus = 0;
|
||||||
|
digitalWrite(buzer, HIGH);
|
||||||
|
delay(500);
|
||||||
|
digitalWrite(buzer, LOW);
|
||||||
|
u = 0;
|
||||||
|
bot.sendMessage(chat_id, "RFID berhasil dipindai. SEPEDA MATI.", "");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
u = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
delay(500);
|
||||||
|
} else {
|
||||||
|
addAuthorizedID(TAG);
|
||||||
|
}
|
||||||
|
TAG = "";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue