Untuk versi bahasa Indonesia, Klik ini
A school attendance system that compatible with ESP32 and ESP8266 Microcontroller that supports WiFi and HTTP POST Request
Runs on Express.js with Node.js
Compatible with MySql Server and Firebase Firestore
Can be run with other app, including PHP as long as they are in different ports
With version 2.1.1, now runs with MQTT Server running on Aedes which provide faster data transfer than http (Should have realized sooner)
Requires NPM, to get NPM please install Node.js
Requires the pm2 package enabled globally
npm i pm2 -g
The application server used several packages:
- body-parser
- cors
- dotenv
- express
- express-rate-limit
- firebase-admin
- helmet
- http
- mysql
- pm2
- util
- aedes
- mqtt
Before starting the server, configure the .env file located inside the server folder
For more information about what each lines means go to Process Environment
- Navigate to server folder
- Install all required package library with npm
- Configure the .env file
- If you used MYSQL, you can import the test table for attendance located inside the /server/mysql folder
- Add all your identities with their corresponding HexID inside the identity.json inside the /server/auth folder
- Go to mq folder, and install all package with npm
- Start the test
To install all package
npm i
To start the test
npm devmysql //If you are using mysql
npm devfirebase //If you are using firebase
To run the app, use pm2 library that you have installed globally
pm2 start appDefault.js --name espAuth //If you are using mysql
pm2 start appFirebase.js --name espAuth //If you are using Firebase Firestore
pm2 start index.js --name mqttLocal //Inside the mq folder
The identity.json file follows a specific format, you can change the format however you like to suit your database info
Reminder, if you don't use the recommended format, You have to change all functions parameters and the queries
However, there should always have a hexID key in every entry
The Format: { "hexID": The holder card HexID, "name": The holder name "number": The holder attendance number, "division": The holder class, "type": The holder type }
For type, it is used to specify if the holder is a master (Who should authorized attendance) or a follower (Who can only submit attendance if their master is already attend)
By default, the type are member and kaichou
For definition what process environment in Node.js means, please refer to this explanation from knowledgehut
The .env file in server folders contain severals variables which will be used by the application
For ease of use, just edit the .env file, you may edit the mysqlQuery.js and firebaseQuery.js to suits your query needs
- SERVER_PORT = Defines the port where the application runs, on default is 5128
- ESP_ORIGIN = Defines the IP Address of the ESP8266 or the ESP 32 or the client
- MYSQL_HOST = Defines the host server of the MYSQL Database
- MYSQL_USER = Defines the user who will be connected to the mysql host server
- MYSQL_PASSWORD = Defines the password that will be used to connect to the mysql host server
- MYSQL_DATABASE = Defines the Database that will be used from the Mysql Server
- MYSQL_ABSENT_TABLE = Defines the table that will be used for attendance query (primarily for inserting new attendance)
- FIREBASE_API = Defines the API key that will be used to connect to your Firebase Project
- FIREBASE_AUTH_DOMAIN = Defines the authorized domains to connect to your firebase project
- FIREBASE_PROJECT_ID = Defines the Id of your project that will be used by the app
- FIREBASE_STORAGE_BUCKET = Defines the your firebase storage bucket
- FIREBASE_MESSAGE_ID = Defines the Message Id of your Firebase project
- FIREBASE_APP_ID = Defines the your app ID that will be used to connect to Firebase
- FIREBASE_MEASUREMENT_ID = Defines the measurement ID of your firebase project
- FIREBASE_KEYS = Defines your admin secret keys to use in Firebase
- START_TIME = Defines the start time when data is allowed
- END_TIME = Defines the finish time when data is allowed
START_TIME SHOULD BE LESSER THAN END_TIME
To know how to get the Firebase credentials, please refer to their Documentation
You can customized the query inside the firebase / mysql Query.js files respectively to suits your schemas need
But if you want ease of use, please follow this recommended schemas
For MySQL
userId | name | absentNum | class | type | date | status |
---|---|---|---|---|---|---|
int | varchar(255) | varchar | char(5) | varchar | Datetime | char(8) |
For FireStore
TBA
Sebuah sistem absensi sekolah yang kompatibel dengan mikrokontroller ESP8266 atau ESP32 yang mendukung fitur WiFi dan permintaan POST HTTP
Menggunakan Express.js dengan Node.js
Kompatibel dengan MySql Server dan Firebase Firestore
Dengan versi 2.1.1, sekarang berjalan dengan server MQTT menggunakan package Aedes yang memberikan kecepatan pertukaran data yang lebih cepat daripada HTTP (Seharusnya sudah sadar dari dulu)
Membutuhkan NPM, untuk mendapatkan NPM unduh dan install Node.js pada sistem
Membutuhkan package pm2 untuk dinyalakn secara global
npm i pm2 -g
Aplikasi server membutuhkan beberapa package:
- body-parser
- cors
- dotenv
- express
- express-rate-limit
- firebase-admin
- helmet
- http
- mysql
- pm2
- util
- aedes
- mqtt
Sebelum memulai aplikasi server, Atur file .env yang terletak di dalam folder server
Untuk mengetahui apa arti dari setiap baris di dalam file .env, pergi ke Lingkungan Process
- Masuk ke dalam folder server
- Install semua package yang dibutuhkan menggunakan npm
- Atur file .env
- Jika Anda menggunakan MYSQL, Anda bisa mengimpor tabel dari sebuah file yang terletak di dalam folder /server/mysql
- Tambahkan semua identitas bersamaan dengan hexID mereka di dalam file identity.json di dalam direktori /server/auth
- Pergi ke folder mq, dan install semua package dengan npm
- Mulai tes
Untuk menginstall semua package
npm i
Untuk memulai test
npm devmysql //Jika menggunakan mysql
npm devfirebase //Jika menggunakan firebase
Untuk menjalan aplikasi, gunakan pm2
pm2 start appDefault.js --name espAuth //Jika menggunakan mysql
pm2 start appFirebase.js --name espAuth //Jika menggunakan firebase
pm2 start index.js --name mqttLocal //Di dalam folder mq
File identity.json mengikuti sebuah format spesifik, Anda bisa mengubah formatnya menjadi apapun yang Anda inginkan untuk menyesuaikan dengan kueri Anda
Perlu diketahui, jika Anda mengganti format yang direkomendasikan, Anda juga perlu mengganti parameter fungsi dan kueri
Walaupun demikian, harus selalu ada sebuah kunci hexID di dalam setiap entry
Formatnya: { "hexID": Identitas heksadesimal si pemilik kartu, "name": Nama si pemilik kartu, "number": Nomor absensi si pemilik kartu, "division": Kelas si pemilik kartu, "type": Tipe si pemilik karti }
Untuk type, dia digunakan untuk mendefinisikan apakah seseorang itu master (Orang yang memperbolehkan mulainya absensi untuk kelasnya) atau seorang follower (Orang yang bisa absen jika master sudah memperbolehkannya)
Secara default, isi dari type adalah member dan kaichou
Untuk mengetahui lebih lanjut apa maksud dari Lingkungan Process / Process environment di dalam Node.js, pergi ke link ini
Filre .env di dalam folder server berisikan beberapa variabel yang akan digunakan di dalam proses aplikasi
Untuk kenyamanan dalam kegunaan, sunting saja file .env, Anda bisa menyunting file mysqlQuery.js dan firebaseQuery.js untuk menyesuaikan kebutuhan kueri anda
- SERVER_PORT = Mendefinisikan di port mana aplikasi berjalan, secara default aplikasi berjalan di port 5128
- ESP_ORIGIN = Mendefinisikan alamat sumber (alamat IP) dari ESP8266 atau ESP32 atau Client
- MYSQL_HOST = Mendefinisikan host / server di mana database MySQL berada
- MYSQL_USER = Mendifiniskan user yang akan terhubung ke database MySQL
- MYSQL_PASSWORD = Mendefinisikan password dari MYSQL_USER yang digunakan untuk terhubung ke host
- MYSQL_DATABASE = Mendefinisikan database apa yang akan digunakan
- MYSQL_ABSENT_TABLE = Mendefinisikan tabel apa yang akan digunakan untuk menginsert data
- FIREBASE_API = Mendefinisikan kunci API yang akan digunakan untuk terhubung ke Project Firebase Anda
- FIREBASE_AUTH_DOMAIN = Mendifinisikan domain yang terautentikasi untuk terkoneksi ke Project Firebase Anda
- FIREBASE_PROJECT_ID = Mendefinisikan ID Project dari Project Firebase Anda
- FIREBASE_STORAGE_BUCKET = Mendefinisikan Storage Bucket dari Project Firebase Anda
- FIREBASE_MESSAGE_ID = Mendefinisikan ID Message dari Project Firebase Anda
- FIREBASE_APP_ID = Mendefinisikan ID App dari Project Firebase Anda
- FIREBASE_MEASUREMENT_ID = Mendefinisikan ID Measurement dari Projek Firebase Anda
- FIREBASE_KEYS = Mendefinisikan Kunci Admin Privat dari Projek Firebase Anda
- START_TIME = Mendefinisikan kapan data mulai diperbolehkan masuk
- END_TIME = Mendefinisikan kapan waktu akhir data diperbolehkan masuk
START_TIME HARUS LEBIH KECIL DARIPADA END_TIME
Untuk mengetahui bagaimana mendapatkan kredensial dari Project Firebase, tolong rujuk ke Dokumentasi Firebase
Anda bisa mengkustomisasi kueri di dalam firebase / mysql Query.js untuk menyesuaikan dengan skema anda
Tetapi jika Anda ingin kemudahan dalam kegunaan, ikuti skema yang direkomendasikan di bawah
Untuk MYSQL
userId | name | absentNum | class | type | date | status |
---|---|---|---|---|---|---|
int | varchar(255) | varchar | char(5) | varchar | Datetime | char(8) |
Untuk Firestore
TBA