def download_file(new_version): url_file = 'https://github.com/Nat4Lia/finger/archive/v{}.zip'.format( new_version) filepath = '/home/pi/download/v{}.zip'.format(new_version) try: request_file = requests.get(url_file, timeout=5, stream=True) if request_file.status_code == 200: if not os.path.isdir('/home/pi/download'): os.system('mkdir /home/pi/download') with open(filepath, 'wb') as f: total_size = int(len(request_file.content)) block_size = 1024 * 10 progress = 0 for data in request_file.iter_content(block_size): progress = progress + len(data) lcd_.progress_bar(progress, total_size, text="DOWNLOAD UPDATE") lcd_.disp.image(lcd_.image) lcd_.disp.display() f.write(data) f.close() else: raise Exception except Exception: if os.path.isfile(filepath): os.remove(filepath) return os.path.isfile(filepath)
def save_macaddress(): mac_local = RpiDatabase().get_all_mac() mac_server = API().get_server(api['Macaddress']) lcd_.teks(text1='MENGAMBIL', text2='DATA', text3='MACADDRESS') time.sleep(1.2) if mac_server is 'ServerConnectionError' or mac_server is None: #tampilkan bahwa koneksi error lcd_.teks(text1='GAGAL', text2='MENGAMBIL', text3='DATA MACADDRESS') time.sleep(1.2) else: for progress, mac_server_ in enumerate(mac_server): lcd_.progress_bar(progress + 1, len(mac_server), text="CHECKING MAC") lcd_.disp.image(lcd_.image) lcd_.disp.display() #check_macaddress_exists if RpiDatabase().is_macaddress_registered( mac_server_['macaddress']): # print 'mac terdaftar' continue else: # print 'mendaftarkan'+mac_server_['macaddress'] RpiDatabase().insert('macaddress', 'mac_', mac_server_['macaddress'])
def ping_ip(ip_address): from config import versi_software for i, alamat in enumerate(ip_address): lcd_.progress_bar(i+1, len(ip_address), text=str(versi_software)) lcd_.disp.image(lcd_.image) lcd_.disp.display() if connection_on(alamat): list_used_ip_fp.append(alamat)
def checkAlamat(): for i, alamat in enumerate(listAlamat): tampil.progress_bar(i + 1, len(listAlamat), text='%s' % localhost.ambilversion()) tampil.disp.image(tampil.image) tampil.disp.display() if connect(alamat): useAlamat.append(alamat)
def kirim(self): dataAbsensi = self.ambil() if self.jumlahFinger > self.jumlahLocal: for iterasi in range(self.jumlahLocal, self.jumlahFinger): token = encrypt( str(dataAbsensi[iterasi]['Jam']) + str(dataAbsensi[iterasi]['Tanggal']) + str(dataAbsensi[iterasi]['PIN']) + str(instansi_id.ID_INSTANSI) + str(dataAbsensi[iterasi]['Status'])) kirim = webAPI.KEHADIRAN({ 'status': dataAbsensi[iterasi]['Status'], 'instansi': instansi_id.ID_INSTANSI, 'jam': dataAbsensi[iterasi]['Jam'], 'tanggal': dataAbsensi[iterasi]['Tanggal'], 'user_id': dataAbsensi[iterasi]['PIN'], 'token': token }) if kirim: dataLocal.inputdataabsensi(dataAbsensi[iterasi]['PIN'], self.mesin.Mac) tampil.progress_bar(iterasi, self.jumlahFinger, text='MENGIRIMKAN ABSENSI') tampil.disp.image(tampil.image) tampil.disp.display() tampil.teks(text2='SELESAI') time.sleep(1.2) else: pass if self.jumlahFinger > 50000 and self.jumlahLocal > 50000: self.hapus()
def validasi_user(self): try: data_API = self.get_server(api['Pegawai']) data_Mesin = self.user if data_API is 'ServerConnectionError': # print 'ada error' raise Exception else: if data_Mesin is None: raise Exception else: if len(data_API) == len(data_Mesin): lcd_.teks(text1='USER', text2='TELAH', text3='TERVALIDASI') time.sleep(1.2) else: lcd_.teks(text1='VALIDASI', text2='USER') time.sleep(1.2) for progress, user_mesin in enumerate(data_Mesin): hasil = False lcd_.progress_bar(progress + 1, len(data_Mesin), text=user_mesin['Nama']) lcd_.disp.image(lcd_.image) lcd_.disp.display() for user_API in data_API: if str(user_mesin['PIN']) == str( user_API['pegawai_id']): hasil = True break else: continue if not hasil: self.delete_user(user_mesin['PIN']) except Exception as error: logger.error(error)
def main_Program(IP_Address): try: mesin = Mesin(IP_Address) if mesin.registered: version = webAPI.VERSI() trigger = webAPI.TRIGGER() daftar_Pegawai = webAPI.PEGAWAI() daftar_Admin = webAPI.ADMIN() update_Pegawai = webAPI.GANTI_FINGER(IP_Address) absensi = Absensi(IP_Address) absensi.kirim() mesin.status() if trigger is 1: if update_Pegawai is not None: for pegawai in update_Pegawai: oPegawai = Pegawai(IP_Address, pegawai['pegawai_id'], pegawai['nama']) oPegawai.update() if (daftar_Admin and daftar_Pegawai) is not None: if len(daftar_Admin) != mesin.jumlahAdmin: #Admin if mesin.semuaAdmin() is not None: for adminFinger in mesin.semuaAdmin(): hasil = False for adminAPI in daftar_Admin: if str(adminAPI['pegawai_id']) == str( adminFinger['PIN']): hasil = True break else: hasil = False if not hasil: oAdmin = Admin(IP_Address, adminFinger['PIN'], adminFinger['Name']) oAdmin.hapus() for admin in daftar_Admin: oAdmin = Admin(IP_Address, admin['id'], admin['nama']) oAdmin.daftar() else: for admin in daftar_Admin: oAdmin = Admin(IP_Address, admin['id'], admin['nama']) oAdmin.daftar() if len(daftar_Pegawai) != mesin.jumlahPegawai: #Pegawai if mesin.semuaPegawai() is not None: for pegawaiFinger in mesin.semuaPegawai(): hasil = False for pegawaiAPI in daftar_Pegawai: if str(pegawaiAPI['pegawai_id']) == str( pegawaiFinger['PIN']): hasil = True break else: hasil = False if not hasil: oPegawai = Pegawai(IP_Address, pegawaiFinger['PIN'], pegawaiFinger['Name']) oPegawai.hapus() for loading, pegawai in enumerate(daftar_Pegawai): oPegawai = Pegawai(IP_Address, pegawai['id'], pegawai['nama']) oPegawai.daftar() tampil.progress_bar(loading + 1, len(daftar_Pegawai), text='MENAMBAHKAN PEGAWAI') tampil.disp.image(tampil.image) tampil.disp.display() else: for loading, pegawai in enumerate(daftar_Pegawai): oPegawai = Pegawai(IP_Address, pegawai['id'], pegawai['nama']) oPegawai.daftar() tampil.progress_bar(loading + 1, len(daftar_Pegawai), text='MENAMBAHKAN PEGAWAI') tampil.disp.image(tampil.image) tampil.disp.display() elif trigger is 3: if dataLocal.cekversion(version): update(version) else: raise Exception else: tampil.teks(text1='MACADDRESS', text2='FINGERPRINT', text3='BELUM TERDAFTAR') time.sleep(1.2) tampil.teks(text1='SILAKAN', text2='HUBUNGI PIHAK', text3='DISKOMINFO') time.sleep(1.2) except Exception: logger.error(Exception) tampil.teks(text1='ERROR', text2='RESTART', text3='RASPBERRY') run('sudo reboot', shell=True)
def spesific_send_attendance(self, tanggal): from datetime import datetime if self.is_mesin_registered: #Jika Mesin Terdaftar #ambil jumlah absensi yg terkirim attendance_sent = self.get_all_attendace_sent(self.mac_address) # #ambil row failed # get_row_local_att_failed = self.get_failed_flag(self.mac_address) # #jika data attendance dari fingerprint ada if self.attendance is not None: #mengumpulkan data absensi yg failed dari mesin sesuai dengan data local # attendance_failed = [] # for row_id in get_row_local_att_failed : # attendance_failed.append(self.attendance[row_id[0]]) # #mengumpulkan absensi diatas tanggal yg ditentukan attendance_new = [] attendance_old = [] for row_id in range(attendance_sent, len(self.attendance)): tgl_khusus = datetime.strptime(tanggal, '%Y-%m-%d') tgl_fingerprint = datetime.strptime( self.attendance[row_id]['Tanggal'], '%Y-%m-%d') #convert str to date if tgl_fingerprint >= tgl_khusus: #jika data absensi diatas tanggal yg ditentukan attendance_new.append( self.attendance[row_id] ) #dikumpulkan menjadi absensi baru else: #jika tidak attendance_old.append( self.attendance[row_id] ) #dikumpulkan menjadi absensi lama # #simpan absensi lama dengan status success for attendance in attendance_old: self.insert_absensi(self.mac_address, attendance['Row_ID'], attendance['PIN'], attendance['Tanggal'], attendance['Jam'], attendance['Status'], 'Success') # #absensi yang akan dikirim (gabungan absensi failed dan absensi belum terkirim) #attendance_will_send = attendance_failed + attendance_new # # iterasi absensi yang akan dikirim lcd_.teks(text1='BERSIAP', text2='MENGIRIMKAN', text3='ABSENSI') time.sleep(1.2) if attendance_new: try: for progress, attendance in enumerate( attendance_new): #Kasih loading pengiriman # buat otp token = encrypt(attendance['Jam'] + attendance['Tanggal'] + attendance['PIN'] + str(skpd) + attendance['Status']) # # kirimkan absensi _send_attendance = self.post_server( api['Absensi'], { 'status': attendance['Status'], 'instansi': skpd, 'jam': attendance['Jam'], 'tanggal': attendance['Tanggal'], 'user_id': attendance['PIN'], 'macaddress': self.mac_address, 'token': token }) # lcd_.progress_bar(progress + 1, len(attendance_new), text=attendance['Tanggal']) lcd_.disp.image(lcd_.image) lcd_.disp.display() # jika pengiriman diterima, insert ke database if _send_attendance is 'Success' or _send_attendance is 'Failed': self.insert_absensi( self.mac_address, attendance['Row_ID'], attendance['PIN'], attendance['Tanggal'], attendance['Jam'], attendance['Status'], _send_attendance) else: lcd_.teks(text1='KONEKSI', text2='SERVER', text3='BERMASALAH') time.sleep(1.2) lcd_.teks(text1='TIDAK DAPAT', text2='MENGIRIM ABSENSI', text3='KE SERVER') time.sleep(1.2) raise Exception # print 'KONEKSI KE SERVER BERMASALAH' # print 'TIDAK DAPAT MENGIRIM ABSENSI KE SERVER' time.sleep(1.2) # except Exception as error: lcd_.teks(text2=str(error)) time.sleep(1.2) lcd_.teks(text1='GAGAL', text2='MENGIRIMKAN', text3='ABSENSI') time.sleep(1.2) else: lcd_.teks(text1='TIDAK ADA', text2='ABSENSI', text3='BARU') time.sleep(1.2) # else: lcd_.teks(text1='KESALAHAN PADA', text2='DATABASE', text3='RASPBERRY') time.sleep(1.2) lcd_.teks(text1='HARAP', text2='RESTART', text3='RASPBERRY') time.sleep(1.2) lcd_.teks(text1='JIKA PESAN INI', text2='SELALU MUNCUL') time.sleep(1.2) lcd_.teks(text1='SEGERA', text2='HUBUNGI', text3='DISKOMINFO') time.sleep(1.2) # print 'KESALAHAN PADA DATABASE RASPBERRY' # print 'HARAP RESTART RASPBERRY' # print 'JIKA PESAN INI SELALU MUNCUL, SEGERA HUBUNGI DISKOMINFO' else: lcd_.teks(text1='PERIKSA APAKAH', text2='MESIN TERDAFTAR', text3='DI DISKOMINFO') time.sleep(1.2) lcd_.teks(text1='PERIKSA KEMBALI', text2='KONEKSI MESIN', text3='DENGAN RASPBERRY') time.sleep(1.2)
def main_Program(IP_Address): try: mesin = Mesin(IP_Address) if mesin.registered: version = webAPI.VERSI() trigger = webAPI.TRIGGER() daftar_Pegawai = webAPI.PEGAWAI() daftar_Admin = webAPI.ADMIN() update_Pegawai = webAPI.GANTI_FINGER(IP_Address) absensi = Absensi(IP_Address) absensi.kirim() if trigger is 1: if update_Pegawai is not None: for pegawai in update_Pegawai: oPegawai = Pegawai(IP_Address, pegawai['pegawai_id'], pegawai['nama']) oPegawai.update() if (daftar_Admin and daftar_Pegawai) is not None: if len(daftar_Admin) != mesin.jumlahAdmin: #Admin if mesin.semuaAdmin() is not None: for adminFinger in mesin.semuaAdmin(): hasil = False for adminAPI in daftar_Admin: if str(adminAPI['pegawai_id']) == str( adminFinger['PIN']): hasil = True break else: hasil = False if not hasil: oAdmin = Admin(IP_Address, adminFinger['PIN'], adminFinger['Name']) oAdmin.hapus() for admin in daftar_Admin: oAdmin = Admin(IP_Address, admin['id'], admin['nama']) oAdmin.daftar() else: for admin in daftar_Admin: oAdmin = Admin(IP_Address, admin['id'], admin['nama']) oAdmin.daftar() if len(daftar_Pegawai) != mesin.jumlahPegawai: #Pegawai if mesin.semuaPegawai() is not None: for pegawaiFinger in mesin.semuaPegawai(): hasil = False for pegawaiAPI in daftar_Pegawai: if str(pegawaiAPI['pegawai_id']) == str( pegawaiFinger['PIN']): hasil = True break else: hasil = False if not hasil: oPegawai = Pegawai(IP_Address, pegawaiFinger['PIN'], pegawaiFinger['Name']) oPegawai.hapus() for loading, pegawai in enumerate(daftar_Pegawai): oPegawai = Pegawai(IP_Address, pegawai['id'], pegawai['nama']) oPegawai.daftar() tampil.progress_bar(loading, len(daftar_Pegawai), text='MENAMBAHKAN PEGAWAI') tampil.disp.image(tampil.image) tampil.disp.display() else: for loading, pegawai in enumerate(daftar_Pegawai): oPegawai = Pegawai(IP_Address, pegawai['id'], pegawai['nama']) oPegawai.daftar() tampil.progress_bar(loading, len(daftar_Pegawai), text='MENAMBAHKAN PEGAWAI') tampil.disp.image(tampil.image) tampil.disp.display() elif trigger is 3: if dataLocal.cekversion(version): update(version) else: raise Exception else: tampil.teks(text1='MACADDRESS', text2='FINGERPRINT', text3='BELUM TERDAFTAR') time.sleep(1.2) tampil.teks(text1='SILAKAN', text2='HUBUNGI PIHAK', text3='DISKOMINFO') time.sleep(1.2) except Exception: logger.error(Exception) tampil.teks(text1='ERROR', text2='RESTART', text3='RASPBERRY') exit() # for pegawai in update_Pegawai: # oPegawai = Pegawai('10.10.10.10',pegawai['pegawai_id'], pegawai['nama']) # print "Pendaftaran {}, {}".format(oPegawai.name, oPegawai.update()) # print "Total Pegawai Berhasil Di Daftarkan: {}".format(Pegawai.jumlahPegawai) # if __name__ == "__main__" : # while True: # main_Program('10.10.10.10') # print encrypt("10219110.10.10.1019") #Yang Belum #Konfirmasi Update Pegawai #Update #Main