Absensi Online menggunakan NodeMCU dan modul RFID RC522

Absensi Online menggunakan NodeMCU dan modul RFID RC522

Prototype ini hampir sejenis dengan mesin absensi sederhana yang pernah dibahas pada post sebelumnya. Karena adanya teknologi wireless serta konsep IoT yang mudah dan praktis diimplementasikan maka aplikasi menggunakan board nodeMCU bisa menjadi opsi. Nah untuk memudahkan dalam ujicoba, akan saya sediakan sample sistem informasi (berbasis web) yang dapat dimanfaatkan untuk coba-coba. Saya tidak akan menjelaskan secara rinci terkait pembuatan sistem infomasinya jadi harap maklum. Pastikan kalian sudah memahami/belajar tentang pembuatan aplikasi berbasis web sebagai dasarnya.

Absensi Online menggunakan NodeMCU dan modul RFID RC522

Konsep dari sistem absensi online dengan RFID kurang lebih akan seperti gambar diatas walaupun secara spesifik tidaklah sesimpel itu. Ini agak berbeda dari tutorial sebelumnya karena untuk memfasilitasi semua jenis kartu mifare classic (emoney, RFID tag, Sticker Tag) maka data yang akan diolah adalah uid saja (tidak ada proses write data). Reader RC522 akan membaca uid kemudian datanya diproses oleh NodeMCU untuk dikirim ke server (database). Nah dari proses pengiriman data ini, maka akan diperoleh response terkait dengan informasi dari uid hasil pembacaan (misal nama, status absensi, dll). Pengaturan informasi yang berkaitan dengan pengguna kartu dapat di atur dalam sistem informasi. Bagian yang paling penting adalah pembuatan Web API untuk menyediakan layanan penyimpanan data dan juga response. Biar lebih mudah dipahami, silahkan dipelajari tutorial pada post ini. Untuk mempermudah development maka percobaan dilakukan secara local. Pada dasarnya semua aplikasi yang dijalankan di localhost dapat di onlinekan dengan mengupload aplikasi tersebut ke hosting (lebih jelasnya dapat dipelajari sendiri). Ok langsung saja kita mulai proses pembuatan sistem Absensi menggunakan NodeMCU dan modul RFID RC522.


Alat dan Bahan

Hardware:
  • NodeMCU
  • RC522 - RFID module
  • I2C OLED 128x64
  • Buzzer
  • Kabel-kabel Jumper
Software:
  • Arduino IDE
  • Notepad ++ (text editor)
  • XAMPP (Saya pakai versi 7.4)
  • Postman (web API testing)

Membuat Web API

Pertama-tama mari kita siapkan terlebih dahulu Web APInya. Kita mulai dengan pembuatan database MySQL. Disini saya menyimpan data absen pada database absensi dengan 3 buah tabel didalamnya yaitu data_karyawan, data_absen, dan data_invalid. Tabel data_karyawan digunakan untuk menyimpan data umum dari karyawan (nama, alamat, divisi, dll), tabel data_absen digunakan untuk menyimpan data absensi seperti uid, tanggal, jam, status absensi. Sementara itu, untuk tabel data_invalid digunakan untuk meyimpan uid yang belum tersimpan pada data_karyawan atau bisa juga disebut sebagai log untuk hasil pembacaan kartu yang tidak valid (karena belum didaftarkan).
Buka Xampp dan jalankan service apache dan MySQL
mesin absensi nodeMCU
Buka phpMyAdmin dan jalankan SQL berikut untuk membuat database yang diperlukan
CREATE DATABASE IF NOT EXISTS absensi;
USE absensi;

/*Table structure for table `data_absen` */
CREATE TABLE data_absen (
  id int(100) NOT NULL AUTO_INCREMENT,
  tanggal date NOT NULL DEFAULT current_timestamp(),
  waktu time NOT NULL DEFAULT current_timestamp(),
  uid varchar(20) NOT NULL,
  status varchar(20) NOT NULL,
  PRIMARY KEY (id)
);

/*Table structure for table `data_invalid` */
CREATE TABLE data_invalid (
  id int(100) NOT NULL AUTO_INCREMENT,
  tanggal date NOT NULL DEFAULT current_timestamp(),
  waktu time NOT NULL DEFAULT current_timestamp(),
  uid varchar(10) NOT NULL,
  status varchar(10) NOT NULL,
  PRIMARY KEY (id)
);

/*Table structure for table `data_karyawan` */
CREATE TABLE data_karyawan (
  id int(50) NOT NULL AUTO_INCREMENT,
  created date NOT NULL DEFAULT current_timestamp(),
  uid varchar(20) NOT NULL,
  nama varchar(50) NOT NULL,
  division varchar(50) NOT NULL,
  mail varchar(50) NOT NULL,
  alamat text NOT NULL,
  picture varchar(100) NOT NULL,
  PRIMARY KEY (id)
);
mesin absensi nodeMCU database MySQL
Setelah database siap lanjut ke directory httdocs (C:\xampp\htdocs). Buat folder absensi dan selanjutnya didalam folder absensi buat folder webapi. Terakhir dalam folder webapi buat folder  api, class dan config
mesin absensi nodeMCU database MySQL
Selanjutnya masuk ke folder config (C:\xampp\htdocs\absensi\webapi\config), buat file database.php. Buka file dengan notepad ++ dan isi dengan code berikut. File database.php digunakan untuk melakukan koneksi ke database yang digunakan (absensi). Untuk username dan password silahkan disesuaikan.
database.php
<?php 
    class Database {
        private $host = "localhost";
        private $database_name = "absensi";
        private $username = "root";
        private $password = "";

        public $conn;

        public function getConnection(){
            $this->conn = null;
            try{
                $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->database_name, $this->username, $this->password);
                $this->conn->exec("set names utf8");
            }catch(PDOException $exception){
                echo "Database could not be connected: " . $exception->getMessage();
            }
            return $this->conn;
        }
    }  
?>
lanjut ke tahap selanjutnya masuk ke folder class (C:\xampp\htdocs\absensi\webapi\class). Buat file  absensi.php. File ini merupakan program untuk mengatur proses penyimpanan data yang dikirim melalui request GET. Alurnya adalah sebagai berikut
absensi online Node MCU RC522 RFID
Untuk program pada absensi.php , dapat dilihat pada kode dibawah
absensi.php
<?php
date_default_timezone_set('Asia/Jakarta');
class Absensi{
	// Connection
	private $conn;

	// Table
	private $db_table = "data_absen";
	private $db_table1 = "data_karyawan";
	private $db_table2 = "data_invalid";

	// Columns
	public $id;
	public $tanggal;
	public $waktu;
	public $uid;
	public $status;
	public $last_status;
	public $nama;

	// Db connection
	public function __construct($db){
		$this->conn = $db;
	}

	// CREATE
	public function createData(){
	//1. Cek user
		$sqlQuery = "SELECT * FROM ". $this->db_table1 ." WHERE uid = :uid LIMIT 0,1";
		$stmt = $this->conn->prepare($sqlQuery);
		$stmt->bindParam(":uid", $this->uid);
		$stmt->execute();
		if($stmt->errorCode() == 0) {
			while(($dataRow = $stmt->fetch(PDO::FETCH_ASSOC)) != false) {
				$this->nama = $dataRow['nama'];
			}
		} else {
			$errors = $stmt->errorInfo();
			echo($errors[2]);
		}
		$itemCount = $stmt->rowCount();
		
		if($itemCount > 0){
			//UID terdaftar -> cek status terakhir
			$sqlQuery = "SELECT data_absen.id, data_absen.uid, data_absen.status, data_karyawan.nama 
						FROM ". $this->db_table .", ". $this->db_table1 ."
						WHERE data_absen.id = (SELECT MAX(data_absen.id) 
						FROM ". $this->db_table ." WHERE data_absen.uid = :uid) 
						AND data_karyawan.uid= :uid";
			$stmt = $this->conn->prepare($sqlQuery);
			$stmt->bindParam(":uid", $this->uid);
			$stmt->execute();
			$itemCount = $stmt->rowCount();
			if($itemCount > 0){
				//error handling
				if($stmt->errorCode() == 0) {
					while(($dataRow = $stmt->fetch(PDO::FETCH_ASSOC)) != false) {
						$this->last_status = $dataRow['status'];
						$this->nama = $dataRow['nama'];
						//echo($this->last_status);
					}
				} else {
					$errors = $stmt->errorInfo();
					echo($errors[2]);
				}
			}else{
				$this->last_status ="OUT";
			}
			
			//set status
			if ($this->last_status == "IN"){
				$this->status = "OUT";
			}else{
				$this->status= "IN";
			}
			//Insert Data to data_absen	
			$sqlQuery = "INSERT INTO ". $this->db_table ."
					SET	waktu = :waktu, uid = :uid, status = :now_status";
						
			$this->waktu = date("H:i:s");
			
			$stmt = $this->conn->prepare($sqlQuery);
		
			// sanitize
			$this->uid=htmlspecialchars(strip_tags($this->uid));
		
			// bind data
			$stmt->bindParam(":uid", $this->uid);
			$stmt->bindParam(":now_status", $this->status);
			$stmt->bindParam(":waktu", $this->waktu);
		
			if($stmt->execute()){
			   return true;
			}
			return false;
		}
		else{
			//UID tidak terdaftar
			$this->status= "INVALID";
			$this->nama ="Invalid";
			
			//Insert Data to data_invalid	
			$sqlQuery = "INSERT INTO
						". $this->db_table2 ."
					SET
						waktu = :waktu,
						uid = :uid, 
						status = :now_status";
			$this->waktu = date("H:i:s");
			
			$stmt = $this->conn->prepare($sqlQuery);
		
			// sanitize
			$this->uid=htmlspecialchars(strip_tags($this->uid));
		
			// bind data
			$stmt->bindParam(":uid", $this->uid);
			$stmt->bindParam(":now_status", $this->status);
			$stmt->bindParam(":waktu", $this->waktu);
		
			if($stmt->execute()){
			   return true;
			}
			return false;
			
		}
		
	}
}
?>
Selanjutnya masuk ke folder api (C:\xampp\htdocs\absensi\webapi\api). File terakhir yang akan dibuat adalah create.php fungsinya digunakan sebagai penghubung dan pengoleksi data (dari proses GET) yang selanjutnya diproses ke fungsi createData() pada absensi.php. Setelah fungsi create data selesai maka akan memberikan response berupa json data dengan struktur sebagai berikut
{
    "waktu": "15:55:02",
    "nama": "Nama User",
    "uid": "B6B3C614",
    "status": "IN"
}
Untuk kode dari create.php dapat dicopas dibawah ini
create.php
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

include_once '../config/database.php';
include_once '../class/absensi.php';

$database = new Database();
$db = $database->getConnection();

$item = new Absensi($db);
$item->uid = isset($_GET['uid']) ? $_GET['uid'] : die('wrong structure!');
	
if($item->createData()){
	// create array
	$data_arr = array(
		"waktu" => $item->waktu,
		"nama" => $item->nama,
		"uid" => $item->uid,
		"status" =>  $item->status
	);
	http_response_code(200);
	echo json_encode($data_arr);
} else{
	http_response_code(404);
	echo json_encode("Failed!");
}
?>
Ok program PHP Rest API udah selesai dibuat. untuk memastikan susunan dan lokasi foldernya adalah sebagai berikut:
Setelah semuanya ok, mari kita test apakah web API dapat berfungsi dengan baik. Pengetesan dapat dilakukan via browser atau postman dengan mengakses url berikut:
http://localhost/absensi/webapi/api/create.php?uid=YOUR_UID_TAG
Apabila uid belum didaftarkan di tabel data_karyawan, maka akan diperoleh status invalid. Sementara bila uid sudah terdaftar maka akan diperoleh data nama dan status
data karyawan (uid terdaftar)

mesin Absensi Node MCU RC522 RFID
uid tidak terdaftar sehingga masuk ke kategori invalid  (data disimpan di tabel data_invalid)

mesin Absensi Node MCU RC522 RFID
uid terdaftar sehingga diperoleh data nama dan status (data disimpan di tabel data_absen)

Apabila tidak ada kendala, maka bagian Web API sudah selesai. Mari kita lanjut ke bagian hardwarenya!

Mesin Absensi NodeMCU + RC522

Wiring Diagram

Sesuai dengan alat dan bahan yang telah disebutkan sebelumnya (NodeMCU, Buzzer, display OLED 0.96", dan RFID reader RC-522) , maka rangkaian mesin absensi online nodeMCU dapat dilihat pada gambar berikut
 
mesin Absensi NodeMCU RC522 RFID

Program NodeMCU 

Terdapat beberapa library yang harus di install yaitu: MFRC522, Adafruit_GFX, Adafruit_SSD1306, dan ArduinoJson. Untuk versi library silahkan disesuaikan apabila terdapat error saat compile program.
NodeMCU time attendance based on RF522 RFID module
NodeMCU time attendance based on RF522 RFID module
NodeMCU time attendance based on RF522 RFID module

Setelah library siap, langsung saja copas program dibawah ini. Sesuaikan wifi SSID, wifi Password, dan alamat server (atau IP komputer yang digunakan sebagai server). 
*update juli 2022 (error HTTPClient::begin -> esp8266 board v.3.0.0) solved
Nah, karena ada tambahan icon buat visualisasi pada display OLED nya maka buat file header icon.h (new tab - ketik icon.h - Ok). copy kode berikut ke icon.h
Program telah siap. Cus langsung upload ke nodeMCU dan mari lanjut ke tahap pengetesan.

Let's test

Berikut gambaran dari hasil pembacaan kartu, proses pengiriman data - pembacaan respon, dan penyimpanan data kedatabase. Oh iya, kalau lihat di youtube-youtube, reader RC522 dapat digunakan untuk membaca uid eKTP. Namun untuk reader RC522 yang saya gunakan kebetulan tidak dapat membaca uid eKTP.
NodeMCU time attendance based on RF522 RFID module
Arduino Absensi dengan emoney
absensi online nodemcu arduino rc522
*just info: setelah dicek eKTP saya jenisnya MIFARE DESFire. menurut info dari si empunya library MFRC522, kartu MIFARE DESFire memang tidak dapat dibaca menggunakan reader ini.

Nah.. apabila data-data tersebut di tampilkan melalui sistem informasi (berbasis web)  kurang lebih seperti gambar berikut:
sistem absensi murah arduino nodemcu

Add some Custumization

Untuk memudahkan proses pendaftaran uid dan melihat rekapitulasi absensi maka kita dapat menggunakan sebuah dashboard. Dasar dari sistem aplikasi web yang digunakan pada dashboard adalah CRUD. Disini saya menggunakan pemrograman PHP untuk pembuatan CRUD ini. Biar mudah prosesnya pembuatannya saya menggunakan Crudiy ( https://github.com/jan-vandenberg/cruddiy).

Download file dashboard diatas kemudian ekstrak di folder absensi (C:\xampp\htdocs\absensi)
Selanjutnya silahkan akses http://localhost/absensi maka akan tampil halaman dashboard dari sistem yang telah dibuat. Dashboard ini bersifat demo, jadi silahkan di modif-modif sendiri sesuai kebutuhan. 

Apabila ingin versi fullnya (seperti di web demo dibawah), dapat menghubungi saya via email : thecroser@gmail.com. Just buy me a coffe for that 

Make it Online!

Untuk membuat agar service Web API dapat diakses secara online, kita memerlukan web hosting dan perangkat pendukungnya (web hosting, domain). Silahkan teman teman cari sendiri (googling) terkait hal ini dengan kata kunci "Upload website ke hosting". Selanjutnya upload program API dan file aplikasi web nya yang telah dibuat serta konfigurasi database yang ada di web hosting. Sebagai contoh teman-teman dapat mencoba melalui aplikasi yang telah saya publish di http://sistem-presensi.arducoding-projects.my.id/. Untuk masuk ke halaman dahboard silahkan login terlebih dahulu dengan 
username:admin  dan passwordnya: arducoding

Untuk akses webAPI nya teman-teman dapat mengaksesnya di link berikut. Silahkan test aplikasi hardware yang telah teman-teman buat untuk menyimpan data pada aplikasi demo diatas.
http://sistem-presensi.arducoding-projects.my.id/webapi/api/create.php?uid=CARD_UID    //[GET]Proses Absensi
http://sistem-presensi.arducoding-projects.my.id/webapi/api/get_last.php?uid=CARD_UID  //[GET] Cek Tap kartu terakhir
*pada program nodmcu, silahkan ubah bagian String server_addr= "192.168.0.5"
menjadi String server_addr= "sistem-presensi.arducoding-projects.my.id";

Kesimpulan

Project ini masih bersifat dasar dan memiliki fitur yang sederhana. Masih terdapat beberapa Error handling yang perlu dibuat / diperbaharui baik dari segi program nodemcu ataupun program web API nya, dari segi keamanan penggunaan kartu, dan dari segi yang lainnya. Sementara dari sisi user interface, diperlukan metode yang cocok sehingga dapat menampilkan data yang diperlukan dengan baik. Silahkan untuk diskusi terkait projek ini agar lebih bermanfaat bagi siapapun yang membutuhkan.
Dalam kesempatan selanjutnya, akan saya coba bahas untuk pembuatan Sistem Informasi berbasis web yang fokus pada pengolahan data (CRUD) menggunakan pemrograman php native (ane gak jago pemrograman web, hanya sebatas tahu)


Troubleshooting Error
=> deserializeJson() failed
Apabila sistem mendapat pesan (pada serial monitor): deserializeJson() failed , ada beberapa kemungkinan yaitu: server tidak merepon, ukuran data json respon tidak sesuai (pada program arduino, ukuran hanya dibatasi dengan 4 objek data saja (waktu, nama, uid, status) => const size_t capacity = JSON_OBJECT_SIZE(4) + 70;). teman-teman bisa cek kondisi berikut apabila menemui error ini:
1. Pastikan service Apache dan MySql sudah aktif (Xampp Control panel)
2. Pastikan alamat direktori file API sudah sesuai
3. Matikan firewall. Bisa jadi komunikasi terhambat karena dihalangi oleh firewall
 Keyword:

47 Komentar

  1. untuk rekap harian dan bulanan nya ada kah om? perlu untuk skripsi nih

    BalasHapus
  2. bang, mau tanya, kalau port does not exist itu gmana cara troubleshooting nya? terimakasih banyak gan

    BalasHapus
  3. ini erorr message nya bang:

    Arduino: 1.8.13 (Windows 10), Board: "NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    Executable segment sizes:

    IROM : 274956 - code in flash (default or ICACHE_FLASH_ATTR)

    IRAM : 28284 / 32768 - code in IRAM (ICACHE_RAM_ATTR, ISRs...)

    DATA : 1340 ) - initialized variables (global, static) in RAM/HEAP

    RODATA : 1176 ) / 81920 - constants (global, static) in RAM/HEAP

    BSS : 25576 ) - zeroed variables (global, static) in RAM/HEAP

    Sketch uses 305756 bytes (29%) of program storage space. Maximum is 1044464 bytes.

    Global variables use 28092 bytes (34%) of dynamic memory, leaving 53828 bytes for local variables. Maximum is 81920 bytes.

    esptool.py v2.8

    Serial port COM3

    Connecting........_____....._____....._____....._____....._____....._____.....____Traceback (most recent call last):

    File "C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4/tools/upload.py", line 65, in

    esptool.main(cmdline)

    File "C:/Users/User/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/esptool\esptool.py", line 2890, in main

    esp.connect(args.before)

    File "C:/Users/User/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/esptool\esptool.py", line 483, in connect

    raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))

    esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

    _

    the selected serial port _

    does not exist or your board is not connected



    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.

    BalasHapus
    Balasan
    1. Bang kasus nya sama kaya saya? benerin nya gimana ya bang?

      Hapus
  4. sekarang erorr gini bang

    exit status 1
    call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url)

    BalasHapus
    Balasan
    1. pastikan library yang digunakan memiliki versi yang sama dengan yang ada di tutorial ya.. klo beda tinggal pilih di select version

      Hapus
    2. sudah saya sesuaikan, tapi masih seperti itu

      Hapus
    3. Coba di cek pada alamat API nya gan .. sesuaikan dengan struktur api yang agan buat.

      atau dapat dicoba saja via sissen.000webhostapp.com . sesuai instruksi diatas

      Hapus
  5. mohon infonya bang, untuk tutorial cruddiy ada ngga , sama file dashboarnya error dibuka

    BalasHapus
    Balasan
    1. langsung dr si empunya saja gan .. https://github.com/jan-vandenberg/cruddiy
      errornya gmn gan?

      Hapus
  6. maaf bang mau tanya kok pas saya tap kartunya malah dapet eror gini ya? Response: deserializeJson() failed: IncompleteInput
    mohon bantuannya bang terimakasih

    BalasHapus
    Balasan
    1. kemungkinan ada masalah di arduinojsonnya gan.. pastikan librarynya memakai versi yg sama kayak diatas

      Hapus
    2. udah sama tapi masih eror sama kaya yang diatas deserializeJson() failed: IncompleteInput kenapa ya?

      Hapus
    3. kalau disaya ternyata servernya tidak merespon, jd pas saya coba buat hosting dan pakai server hosting itu malahan bisa

      Hapus
    4. trim dah konfirmasi gan... semoga bermanfaat

      Hapus
  7. bang, kalo mau nambahin biar kartu rfid ada expired nya gmna yg bang, makasih bang

    BalasHapus
    Balasan
    1. munkin perlu diubah untuk mekanisme statusnya gan .. misal, valid, invalid, expired .. dll
      silahkan berkreasi

      Hapus
  8. Bang kalau ntag 215 support ga reader yg ini?

    BalasHapus
    Balasan
    1. wah .. kurang paham gan .. ane gak ada kartu jenis ntag jd gak bs nyobain..

      Hapus
  9. bang mau tanya buat daftarin nya liat id nya gmana?

    BalasHapus
    Balasan
    1. di invalid gan.. ntr di pilih aja tombol +

      Hapus
    2. kalo buat rangkaian nya bikin pake apa bang?

      Hapus
    3. bebas gan.. pake pcb titik/bolong jg bisa.. tinggal di hubung2 kan sesuai wiring diagramny

      Hapus
  10. Apakah ini hanya untuk absensi saja , apakah memang tidak bisa untuk mendaftarkan karyawan melaui taping

    BalasHapus
  11. bang kalo pakae led1602 codingnya jadi seperti apa, sudah nyoba tapi gagal, :( , pencerahannya .....

    BalasHapus
  12. haloo min,
    dashbord yang full ada min??

    BalasHapus
  13. apakah menjual yang sudah ready ? tinggal pakai dan setting database

    BalasHapus
  14. Ka bisa ajari saya, atau minta kontak untuk konsultasi🙏

    BalasHapus
    Balasan
    1. dicoba dulu ya.. ikuti aja sesuai tutorial diatas step by step... insyaallah jadi.. klo ada error bisa kontak saya di thecroser@gmail.com

      Hapus
    2. Ka maaf saya mau tanya kalau seperti ini kenapa ya? no matching function for call to 'HTTPClient::begin(WiFiClient&, String&)'

      Hapus
    3. code diatas saya gunakan untuk board esp8266 versi 3 (tested di 3.0.2 sampai 3.1.1 program no error),.. jadi coba update dulu board esp8266 nya ke versi terbaru( buka arduino ide >> tools >> board >> boards manager .. >> cari "esp8266" >> pilih esp8266 by esp8266community -- klik update

      Hapus
    4. Oke makasih ka sudah berhasil, untuk digambar alat ada tambahan ic apa ya ka?

      Hapus
    5. IC yang mana ya.. semua komponen sama seperti yang ada di wiring diagram

      Hapus
    6. Yang disamping buzzer ka

      Hapus
    7. oh iya ... maaf lupa gak dikasih keterangan.. itu display oled 0.96 .. buat nampilin response / status setelah kartu di tap

      Hapus
  15. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  16. bang saya coba di 000webhost cuman ada error deserializeJson() failed: InvalidInput
    responya 400 Bad Request

    kalau pake niagahoster errornya deserializeJson() failed: IncompleteInput
    padahal apinya udh bener saya udh coba cek di postman dan dapet respon.

    apakah http.begin tidak cocok untuk https?

    BalasHapus
    Balasan
    1. bisa share alamat domainnya gan?

      Hapus
  17. kak kalau saya pakai hosting 000webhost apa saja yang saya rubah kak soalnya sudah ada yang saya rubah ada error "deserializeJson() failed: InvalidInput" yang saya rubah ini kak "String server_addr= "https://paud-melati-grobogan.000webhostapp.com";" dan apakah yang "address ="http://"+server_addr+"/absensi/webapi/api/create.php?uid="+UIDCard;" harus di ubah juga atai ada yang salah kak Terimakasih semoga di jawab saya ingin belajar kak

    BalasHapus
    Balasan
    1. cb cek lagi databasenya .. pastikan database sudah terkoneksi dengan baik (username, passwd, nama database..)

      Hapus
  18. Kalau pakai 000webhost LinkAddr nya isi apa kak ?🙏🏻

    BalasHapus
  19. Ijin bertanya kak,sudah berhasil di upload tetapi web di bagian Data_karyawan, Data_Absensi, Data Invalid tidak bisa membaca dari database gimana ya kak ? apakah permissionnya perlu di ubah menjadi apa gitu kak ?, Error nya seperti ini kak "ERROR: Could not able to execute SELECT * FROM data_karyawan ORDER BY id desc LIMIT 0, 10." Terimakasih semoga di jawab

    BalasHapus
    Balasan
    1. webnya yang dipakai yang mana mas? klo yang ini: http://absensipaudmelati.000webhostapp.com/ udah jalan dengan baik, klo yang ini: http://paud-melati-grobogan.000webhostapp.com/ databasenya belum terkoneksi dangn baik (cek ulang username, passwd, nama database..)

      Hapus
  20. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  21. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  22. Komentar ini telah dihapus oleh pengarang.

    BalasHapus