Sabtu, 16 April 2022

Source Code Python Program Perpustakaan CRUD (LinkedList, Sorting, Fibbonaci Search, Queue)

#Copyright Kalam Aulia Sistem Informasi 2020 

import time

from time import sleep
from datetime import datetime
from datetime import date
from typing import Deque
import os

today = date.today()
day = today.strftime("%d-%m-%Y")
now = datetime.now()
current_time = now.strftime("%H:%M:%S")

# data

adm = {"nama":"admin", "pin":"2021"}

mahasiswa =  [
            {

                "nama":"pina",
                "pin":"6036",
            },
            {

                "nama":"farah",
                "pin":"6007",
            },
            {

                "nama":"kalam",
                "pin":"6005",
            },
            {

                "nama":"anisa",
                "pin":"6008",
            }
        ]

user = {"nama":"", "pin":""}
# functions

class Library:
    def __init__(self):
        self._judulBuku = ''
        self._genre = ''
        self._tahunTerbit = 0
    def addbook(self):
        try:
            self._judulBuku = input('Masukkan Judul Buku: ')
            self._genre = input('Masukkan Genre Buku: ')
            self._tahunTerbit = int(input('Masukkan Tahun Terbit Buku: '))
            queue.enqueue(self._judulBuku)
            data1.append(self._judulBuku)
            link.addLast(self._judulBuku)
            histori.append(self._judulBuku)
            histori1.append(self._genre)
            histori2.append(self._tahunTerbit)
            return True
        except ValueError:
            print('Buku Tidak Dapat Ditambahkan')
            print('Mohon Memasukkan Tahun Buku Hanya Menggunakan Angka')
            return False
    def backbook(self):
        try:
            self._judulBuku = input('Masukkan Judul Buku: ')
            self._genre = input('Masukkan Genre Buku: ')
            self._tahunTerbit = int(input('Masukkan Tahun Terbit Buku: '))
            if self._judulBuku in histori and self._genre in histori1 and self._tahunTerbit in histori2:
                data1.append(self._judulBuku)
                return True
            else:
                print("Nama Buku Tidak sesuai Dengan Yang Dipinjam")
        except ValueError:
            print('Mohon Memasukkan Tahun Buku Hanya Menggunakan Angka')
            return False
    def __str__(self):
        return '\t'.join(str(x) for x in [self._judulBuku, self._genre, self._tahunTerbit])

class Lemari:
    def __init__(self):
        self.books = []
    def addBook(self):
        book = Library()
        if book.addbook() == True:
            self.books.append(book)
            print ()
            print('Buku Telah Ditambahkan')
    def backBook(self):
        book = Library()
        if book.backbook() == True:
            self.books.append(book)
            print ()
            print('Buku Telah Dikembalikan')
    def viewLemari(self):
        print('\t'.join(['No.','Judul', 'Genre','Tahun']))
        for idx, book in enumerate(self.books) :
            print(idx + 1, end='\t')
            print(book)

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None
        self.count = 0
   
    def addLast(self, data):
        if self.head is None:
            self.head = Node(data)
            self.count += 1
        else:
            nodeAkhir = self.head
            while nodeAkhir.next is not None:
                nodeAkhir = nodeAkhir.next
            nodeAkhir.next = Node(data)
            self.count += 1
           
    def deleteNode(self,position):
        if self.head == None:
            return
        temp = self.head
       
        if position == 0:
            self.head = temp.next
            temp = None
            return
       
        for i in range (position,-1):
            temp = temp.next
            if temp is None:
                break
        if temp is None :
            return
        if temp.next is None:
            return
        next = temp.next.next
        temp.next = None
        temp.next = next
       
    def printList(self):
        if self.head is None:
            print('Linked List Kosong')
        else:
            nodeTampil = self.head
            print("Buku Yang Pernah Masuk: ")
            while nodeTampil is not None:
                print('-> ', nodeTampil.data)
                nodeTampil = nodeTampil.next
        print()
       
    def iterate_item(self):
        # Iterate the list.
        current_item = self.head
        while current_item:
            val = current_item.data
            current_item = current_item.next
        yield val

# sort with quickSort
def partition(arr, low, high):
    i = (low-1)      
    pivot = arr[high]    
    for j in range(low, high):
        if arr[j] <= pivot:
            i = i+1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i+1], arr[high] = arr[high], arr[i+1]
    return (i+1)

def quickSort(arr, low, high):
    if len(arr) == 1:
        return arr
    if low < high:
        pi = partition(arr, low, high)
        quickSort(arr, low, pi-1)
        quickSort(arr, pi+1, high)

# search with fibonacci search
def searching(isi, x, n):
    fibonaci2 = 0
    fibonaci1 = 1
    fibonaci = fibonaci2 + fibonaci1
    while (fibonaci < n):
        fibonaci2 = fibonaci1
        fibonaci1 = fibonaci
        fibonaci = fibonaci2 + fibonaci1
    offset = -1
    while (fibonaci > 1):
        i = min(offset+fibonaci2, n-1)
        if (isi[i] < x):
            fibonaci = fibonaci1
            fibonaci1 = fibonaci2
            fibonaci2 = fibonaci - fibonaci1
            offset = i
        elif (isi[i] > x):
            fibonaci = fibonaci2
            fibonaci1 = fibonaci1 - fibonaci2
            fibonaci2 = fibonaci - fibonaci1
        else:
            return i
    if(fibonaci1 and isi[n-1] == x):
        return n-1
    return -1

def search():
    n = len(data1)
    x = input("Masukan Judul Buku Yang anda cari : ")
    time.sleep(1.5)
    isi = searching(data1, x, n)
    if isi >= 0:
        print("Ditemukan di Rak ke :",isi)
    else:
        print(x,"Tidak ada di Rak atau Telah Dipinjam")

# Queue
class Queue:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def enqueue(self, item):
        self.items.insert(0, item)
    def dequeue(self):
        return self.items.pop()
    def size(self):
        return len(self.items)
    def peek(self):
        return self.items[len(self.items)-1]
    def semua(self):
        return self.items

#database
###########################
lemari = Lemari()         #
book = Library()          #
queue = Queue()           #
link = LinkedList()       #
mhs1=[]                   #
data1 = ["0"]             #
histori = []              #
histori1 = []             #
histori2 = []             #
###########################


# log in and menus

def log():
    log1 = input("Masukkan Nama: ")
    log2 = input("Masukkan PIN: ")
    for each in mahasiswa:
        if log1 in each["nama"] and log2 in each["pin"]:
            print ("Selamat datang", each["nama"])
            menu_member()
            break
    else:
        print("Nama atau NIM Anda Salah")
        log()

def baru():
    user["nama"] = input("Masukkan Username Baru: ")
    user["pin"] = input("Masukkan PIN Baru: ")
    mhs1.append(user["nama"])
    print("Selamat Akun Anda Berhasil dibuat")
    print("Silahkan Login Menggunakan Menu Member Baru")
    welcome()
   
       
def member():
    log1 = input("Masukkan Nama: ")
    log2 = input("Masukkan PIN: ")
    if log1 == user["nama"] and log2 == user["pin"]:
        print ("Selamat datang", user["nama"])
        menu_member()
    else:
        print("Nama atau NIM Anda Salah")
        member()
 
def admin():
    nama = input("Masukkan Nama: ")
    pin = input("Masukkan PIN: ")
    if nama == adm['nama'] and pin == adm['pin']:
        print("Selamat Datang Admin")
        menu_admin()
    else:
        print("Nama atau PIN Anda Salah")
        admin()
       
def regis1():
    log2 = input("Masukkan PIN Lama: ")
    for each in mahasiswa:
        if log2 in each["pin"]:
            each["pin"] = input("Masukkan PIN Baru: ")
            print("PIN Anda Berhasil Diganti")
            print("Login Kembali")
            log()
            break
    else:
        print("PIN Anda Salah")
        regis1()
       
def regis2():
    log2 = input("Masukkan Nama Lama: ")
    for each in mahasiswa:
        if log2 in each["nama"]:
            each["nama"] = input("Masukkan Nama Baru: ")
            print("Nama Anda Berhasil Diganti")
            print("Login Kembali")
            log()
            break
    else:
        print("Nama Anda Salah")
        regis2()

def regis():
    print('Pilihan')
    print('1. Edit Nama')
    print('2. Edit PIN')
    print('3. Menu')
    while True:
        try:
            pilih = int(input('Masukkan Pilihan: '))
            break
        except:
            print("Masukan Dengan Angka")
    if pilih == 1:
        regis2()
    elif pilih == 2:
        regis1()
    elif pilih == 3:
        welcome()
    else:
        print('Pilihan Tidak Ada')
        regis()

def welcome():
    print("Tanggal: ", day)
    print("Logged in time: ", current_time)
    print("=====================================")
    print("Selamat datang di Perpustakaan Python")
    print("Pilih menu dibawah sesuai dengan role anda")
    print("1. Admin")
    print("2. Member")
    print("3. Member Baru")
    print("4. Daftar Member Baru")
    print("5. Keluar")
    print("============================================")
    while True:
        try:
            options = int(input("Enter your choice: "))
            os.system('cls')
            break
        except:
            print("Masukan Dengan Angka")
    if options == 1:
        os.system('cls')
        time.sleep(1.5)
        admin()
    elif options == 2:
        os.system('cls')
        time.sleep(1.5)
        log()
    elif options == 3:
        os.system('cls')
        time.sleep(1.5)
        member()
    elif options == 4:
        os.system('cls')
        time.sleep(1.5)
        baru()
    elif options == 5:
        print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
        raise SystemExit
    else:
        print("Pilihan Tidak Ada")
        os.system('cls')
        welcome()

def menu_admin():
    ulang = 'ya'
    while ulang == 'ya':
        print("=======================")
        print("1. Tambah Buku")
        print("2. Lihat Buku")
        print("3. Hapus Buku")
        print("4. Lihat Data Member")
        print("5. Update Buku")
        print("6. Data Buku")
        print("7. Search Data Buku")
        print("8. Kembali Ke Menu Login")
        print("9. Keluar")
        print("=======================")
        while True:
            try:
                pilih = int(input("Masukkan Pilihan Anda: "))
                break
            except:
                print("Masukan Dengan Angka")
        if __name__ == '__main__':
            if pilih == 1:
                time.sleep(1.5)
                lemari.addBook()
                time.sleep(1.5)
            elif pilih == 2:
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.viewLemari()
                time.sleep(1.5)
            elif pilih == 3:
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.viewLemari()
                while True:
                    try:
                        item = int(input('Pilih Nomor Buku Yang Ingin Dihapus: '))
                        time.sleep(1.5)
                        break
                    except:
                        print("Masukan Dengan Angka")
                if item - 1  > len(lemari.books):
                    print('Pilihan Nomor Tidak Ada')
                    time.sleep(1.5)
                else:
                    lemari.books.remove(lemari.books[item - 1])
                    data1.pop(item)
                    print ()
                    print("Buku Yang Anda Pilih Telah Dihapus")
                    time.sleep(1.5)
                   
            elif pilih == 4:
                time.sleep(1.5)
                for y in mahasiswa:
                    y = y["nama"]
                    mhs1.append(y)    
                n = len(mhs1)
                quickSort(mhs1, 0, n-1)
                for x in mhs1:
                    print("->",x)
                time.sleep(1.5)
            elif pilih == 5:
                time.sleep(1.5)
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.viewLemari()
                while True:
                    try:
                        item = int(input('Pilih Nomor Buku Yang Ingin Diupdate: '))
                        time.sleep(1.5)
                        break
                    except:
                        print("Masukan Dengan Angka")
                if item - 1  > len(lemari.books):
                    print('Pilihan Nomor Tidak Ada')
                    time.sleep(1.5)
                else:
                    library = Library()
                    if library.addbook() == True :
                        lemari.books.remove(lemari.books[item - 1])
                        lemari.books.insert(item - 1, library)
                        print ()
                        print('Buku Yang Anda Pilih Telah Diupdate')
                        time.sleep(1.5)
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
            elif pilih == 6:
                time.sleep(1.5)
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Pernah Di Data atau Kosong')
                    time.sleep(1.5)
                    continue
                print(link.printList())
                #print("Buku Yang Pernah Masuk: ",link.printList())
                print("Banyaknya Buku Yang Pernah Masuk: ", queue.size())
                time.sleep(1.5)
            elif pilih == 7:
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.viewLemari()
                search()
            elif pilih == 8:
                os.system('cls')
                welcome()
                time.sleep(1.5)
            elif pilih == 9:
                print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
                raise SystemExit
            else:
                print("Pilihan Hanya 1-10!")
                print("Jika Ingin Kembali Ketik ya atau Jika Tidak Tekan Enter")
                ulang = input('Ingin Kembali? ')
    else:
        print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
        raise SystemExit

def menu_member():
    ulang = 'ya'
    while ulang == 'ya':
        print("========================")
        print("1. Lihat buku")
        print("2. Peminjaman Buku")
        print("3. Kembalikan Buku")
        print("4. Edit Akun")
        print("5. Kembali Ke Menu Login")
        print("6. Keluar")
        print("========================")
        while True:
            try:
                pilih = int(input("Masukkan Pilihan Anda: "))
                break
            except:
                print("Masukan Dengan Angka")
        if __name__ == '__main__':
            if pilih == 1:
                time.sleep(1.5)
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.viewLemari()
                time.sleep(1.5)
            elif pilih == 2:
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.viewLemari()                
                while True:
                    try:
                        item = int(input('Pilih Nomor Buku Yang Ingin Dipinjam: '))
                        time.sleep(1.5)
                        break
                    except:
                        print("Masukan Dengan Angka")
                if item - 1  > len(lemari.books):
                        print('Pilihan Nomor Tidak Ada')
                else:
                    lemari.books.remove(lemari.books[item - 1])
                    data1.pop(item)
                    print ()
                    print("Sukses Meminjam Buku")
                    time.sleep(1.5)
            elif pilih == 3:
                time.sleep(1.5)
                if len(lemari.books) < 1:
                    print('Tidak Ada Buku Yang Ditambahkan Atau Tidak Tersedia')
                    time.sleep(1.5)
                    continue
                lemari.backBook()
                time.sleep(1.5)
            elif pilih == 4:
                time.sleep(1.5)
                regis()
            elif pilih == 5:
                os.system('cls')
                time.sleep(1.5)
                welcome()
            elif pilih == 6:
                print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
                raise SystemExit
            else:
                print("Pilihan Hanya 1-6!")
                print("Jika Ingin Kembali Ketik ya atau Jika Tidak Tekan Enter")
                ulang = input('Ingin Kembali? ')
               
    else:
        print("Terima Kasih Telah Mengunjungi Perpustakaan Python")
        raise SystemExit

welcome()

Selasa, 25 Mei 2021

Source Code Program Pemilihan Umum (Pemilu) Menggunakan Python

import os

from matplotlib import pyplot as plt

from matplotlib import style

import time

from tabulate import tabulate


calon1 = ["Messi", "Ronaldo"]

calon2 = [0,0]


pemilih =  [

            {


                "nama":"kalam",

                "nim":"6005",

                "kesempatan":1

            },

            {


                "nama":"ibnu",

                "nim":"6076",

                "kesempatan":1

            },

            {


                "nama":"nanda",

                "nim":"6060",

                "kesempatan":1

            },

            {


                "nama":"abi",

                "nim":"6001",

                "kesempatan":1

            }

        ]




def log():

    log1 = input("Masukkan Nama: ")

    log2 = input("Masukkan NIM: ")

    for each in pemilih:

        if log1 in each["nama"] and log2 in each["nim"] and each["kesempatan"] >= 1:

            each["kesempatan"] -= 1

            print ("Berhasil Login", each["nama"])

            pemilihan()

            break

    else:

        print("Anda Sudah Memilih")

        

def tabulasi():

    data = [["Nama Calon","Hasil Voting"],[calon1[0],calon2[0]],[calon1[1],calon2[1]]]

    print(tabulate(data))

    if calon2[0] > calon2[1]:

        print("Untuk Sementara Calon 1 Unggul")

        time.sleep(1)

        os.system('cls')

    elif calon2[0] ==  calon2[1]:

        print("Untuk Sementara Hasil Seri Dari 2 Calon")

        time.sleep(1)

        os.system('cls')

    else:

        time.sleep(1)

        os.system('cls')

        print("Untuk Sementara Calon 2 Unggul")

        time.sleep(1)

        os.system('cls')

        

def batang():

    style.use('ggplot')

    color = ['yellow','red']

    plt.bar(calon1, height = calon2, width = 0.4, color = color )

    plt.title('Live Voting')

    plt.ylabel('Hasil voting')

    plt.xlabel('Calon Manager')

    plt.show()

    if calon2[0] > calon2[1]:

        os.system('cls')

        print("Untuk Sementara Calon 1 Unggul")

        time.sleep(1)

        os.system('cls')

    elif calon2[0] ==  calon2[1]:

        os.system('cls')

        print("Untuk Sementara Hasil Seri Dari 2 Calon")

        time.sleep(1)

        os.system('cls')

    else:

        os.system('cls')

        print("Untuk Sementara Calon 2 Unggul")

        os.system('cls')

        

def vote():

    print("1.Lihat Hasil Vote Menggunakan Tabulasi Table")

    print("2.Lihat Hasil Vote Menggunakan Diagram Batang")

    while True:

            try:

                pilih = int(input("Masukkan Pilihan: "))

                break

            except:

                print("Masukan Dengan angka")

    if pilih == 1:

        time.sleep(1)

        os.system('cls')

        tabulasi()

    elif pilih == 2:

        time.sleep(1)

        os.system('cls')

        diagram()

    else:

        time.sleep(1)

        os.system('cls')

        print ("Pilihan Hanya 1 - 2 ")

        vote()

        

def menu():

    ulang = 'ya'

    while ulang == 'ya':

        print("1. Login")

        print("2. Lihat Hasil E-Voting")

        print("")

        pilih = int(input("Masukkan Pilihan: "))

        if pilih == 1:

            time.sleep(1)

            os.system('cls')

            log()

            ulang = input("Kembali ke Menu? [ya/tIdak] ")

        elif pilih == 2:

            time.sleep(1)

            os.system('cls')

            vote()

            ulang = input("Kembali ke Menu? [ya/tIdak] ")

        else:

            time.sleep(1)

            os.system('cls')

            print ("Pilihan Tidak Tersedia")

            ulang = input("Kembali ke Menu? [ya/tIdak] ")

    else:

        print("Terima Kasih Telah Memberi Hak Suara Anda")


def pemilihan():

    print("-----------------")

    print("Pemilihan Manager")

    print("-----------------")

    print("1. Messi")

    print("2. Ronaldo")

    pilih = int(input("Masukkan Pilihan: "))

    if pilih == 1:

        print("Anda Memilih Messi")

        calon2[0] += 1

    elif pilih == 2:

        print("Anda Memilih Ronaldo")

        calon2[1] += 1

    else:

        print("Pilihan Tidak Ada")


menu()

Minggu, 02 Desember 2018

Pengertian dari WDS dan Cara Konfigurasinya


Pengertian Wireless Distribution System (WDS)


Wireless Distribution System (WDS) adalah sebuah sistem untuk memperluas jangkauan jaringan wireless dengan menggunakan dua atau lebih Access Point. Dengan teknik WDS ini, penggunaan kabel sebagai backbone jaringan tidak dibutuhkan, sehingga lebih mudah, murah, dan efisien untuk instalasinya. Access Point tersebut bisa berupa main, relay, atau remote base station.
WDS adalah kependekan dari Wireless Distribution System. Dengan WDS kita dapat memperluas jaringan dari access point tanpa menggunakan kabel seperti yang biasa dilakukan jaringan dengan kabel. Kita perlu memahami WDS untuk melakukan disain atas jaringan yang akan kita buat. Dengan memahami WDS diharapkan dapat merancang jaringan wirelles yang optimal.
Suatu Access Point dapat berfungsi sebagai:

1. Main base station
Access Point yang berfungsi sebagai main base station mempunyai koneksi langsung dengan backbone menggunakan kabel.

2. Relay base station
Access Point yang berfungsi dari relay base station akan melakukan pancar ulang atau relay dari access point satu ke access point yang lain.

3. Remote base station
Access Point yang berfungsi sebagai remote base station akan berfungsi melayani koneksi wirelles dari client.

Dalam penerapan di kantor kita akan menemui produk untuk Access Point, Repeater, Client Router maupun gabungan ketiganya.


Syarat untuk membangun Wireless Distribution System (WDS) :
1. Access Point utama maupun Access Point Repeater harus mendukung fitur WDS
2. Masing-masing IP Address  Access Point tidak boleh sama.
3. Sebagian besar Authentication access point yang didukung dalam WDS adalah WEP 64/128 bit. Dan semua Access Point yang terlibat dalam 1 koneksi harus menggunakan Methoda Inkripsi / Authentication yang sama.
4. Channel Radio yang digunakan harus sama. Misal Channel 10.
5. Matikan layanan DHCP Server pada Access Point Repeater, karena DHCP akan diambil alih Access Point utama yang sebagai default gateway.
6. Ada kemungkinan WDS tidak berfungsi jika Access Point utama danAccess Point Repeater berbeda merk.
Macam-Macam Mode Pada Wireless Distribution System (WDS)o-A bisa dibagi menjadi dua mode konektifitas wireless, yaitu :
 

1. Wireless bridge, dimana Access Point WDS hanya berkomunikasi satu sama lain (sesama Access Point , dan tidak mengizinkan station (STA) untuk mengaksesnya.
 

 
2. Wireless repeater, dimana Access Point-Access Point saling berkomunikasi satu sama lain dan mengizinkan station (STA) untuk mengakses mereka.
 

Wireless Distribution System (WDS) bisa diterapkan dengan diterapkan oleh Access Point yang berbeda merk (untuk merk dan tipe tertentu, dan tidak semua Access Point memiliki fitur Wireless Distribution System / WDS).

Di era modern kebutuhan akan koneksi internet hampir bisa dikatakan kebutuhan yang penting. Banyak perusahaan atau instansi pendidikan kemudian mencoba memberikan akses internet di area terbuka sehingga pengguna bisa jauh lebih nyaman. Kasus yang muncul adalah dengan kebutuhan cover area yang luas seperti sekolah, kampus atau area terbuka, terkadang tidak dapat dijangkau dengan satu perangkat wireless. Terlebih user wireless yang bersifat mobile atau berpindah - pindah. MikroTik memberikan solusi kebutuhan roaming wireless dengan fitur WDS.

Topologi
Ada lebih dari satu access point yang nantinya akan memancarkan wireless dengan SSID yang sama. Client bisa terkoneksi ke access point manapun, tergantung signal dari access point mana yang terdetct bagus di sisi client. Ketika client berpindah lokasi dan terputus dengan salah satu access point, client akan secara otomastis berpindah ke access point lain yang menjangkau client tersebut.


Static WDS
MikroTik memiliki fitur Dynamic WDS dan Static WDS. Biasanya dengan pertimbangan kestabilan koneksi, admin jaringan lebih memilih static WDS. Memang secara konfigurasi sedikit lebih rumit, namun koneksi tidak mudah berganti - ganti jika signal turun. Ketika koneksi antar repeter berpindah, koneksi biasanya akan putus kurang lebih dalam satu ping. Jika terlalu sering, maka akan muncul kesan koneksi seperti  putus - putus. Maka dari itu, banyak yang memilih untuk mengimplementasikan static WDS. Artinya, kita tentukan ke access point mana repeater akan terkoneksi.  Sehingga walaupun signal turun, koneksi tidak akan berpindah - pindah. Sebagai contoh, kita akan coba bangun implementasi static WDS dengan detail topologi seperti berikut:


Access Point Master
Router yang menjadi AP master harus terkoneksi ke internet. Jika sudah terkoneksi ke internet dengan baik, saatnya setting sebagai AP master. Pertama buat interface Bridge. Pada setting STP, pilih RSTP pada opsi Protocol Mode.

Kemudian tambahkan interface wlan kedalam port bridge tersebut. Masuk ke tab port, kemudian klik tombol +. Pilih interface wlan1 dan arahkan pada bridge yang sudah dibuat, kemudian klik OK.



Setting bridge sudah selesai, kemudian kita setting interface wlan sebagai access point. Double-klik interface wireless kemudian masuk ke tab Wireless. Set dengan mode AP-Bridge. Parameter lainnya bisa disesuaikan dengan kebutuhan.


selanjutnya kita mulai setting static WDS. Double klik interface wireless, kemudian masuk ke Tab "WDS". Pada opsi WDS Mode, silahkan pilih static. Kemudian pada opsi WDS Default Bridge, pilih bridge yang sudah dibuat sebelumnya.

Kemudian buat interface WDS baru secara manual di menu Wireless. Klik tombol + dan pilih WDS.


Pada opsi WDS Address isi dengan mac-address repeater yang akan terkoneksi ke AP master. Coba perhatikan gambar topologi sebelumnya. AP Master terkoneksi ke Repeater 1 dan Repeater 3. Maka pada opsi WDS Address akan kita isi dengan mac-address inetrface wireless Repeater 1 dan Repeater 3.
Setting WDS sudah selesai, selanjutnya kita tinggal setting Hotspot Server pada AP Master di interface Bridge yang sudah dibuat. Jika Hotspot Server dipasang pada interface wlan maka laptop yang terkoneksi ke repeater tidak akan mendapatkan service Hotpsot.
Repeater 1
Cara setting repeater 1 pertama buat interface bridge dengan port wlan1, pada langkah ini cara yang dilakukan hampir sama ketika setting bridge pada AP Master. Jika setting bridge sudah selesai, setting interface wireless sebagai WDS Slave.
 

Kemudian setting pada Tab WDS dengan WDS Mode = Static dan WDS Default Bridge pilih interface Bridge yang sudah dibuat. Selanjutnya buat WDS static di menu Wireless. Sedikit berbeda dengan setting pada AP Master, kali ini setting WDS Address pada Repeater 1 diisi dengan mac-address interface wireless AP Master dan Repeater 2. Ingat, Repeater 1 terkoneksi dengan AP Master dan Repeater 2.


Setting static WDS pada Repeater 1 sudah selesai. Jika kita ingin repeater 1 bisa konek ke interne, tinggal berikan ip address di interface bridge yang dibuat sebelumnya. Tambahkan pula DNS dan gateway. Jika AP Master menjalankan service hotpsot, jangan lupa binding mac-address masing - masing repeater mengingat Router MikroTik tidak mempunyai browser untuk login hotspot.
Repeater 2
Setting pada repeater 2 juga hampir sama dengan repeater 1, seperti setting bridge, dan setting WDS pada interface wireless. Yang sedikit membedakan adalah ketika menambahkan static WDS. Rada Repeater 2, WDS Address diisi dengan mac-address Repeater 1 dan Repeater 3 karena Repeater 2 nantinya akan terkoneksi dengan kedua repeater tersebut.


Repeater 3
Sama halnya dengan Repeater 2, setting bridge dan juga setting WDS pada interface wireless sama dengan setting pada repeater 1. Dan Pada saat membuat static WDS, WDS Address kita isi dengan mac-address AP Master dan mac-address Repeater 2. Dimana Repeater 3 ini akan terkoneksi ke AP Master dan ke Repeater 2.

Setting static WDS Sudah selesai. Jika semua perangkat baik AP master dan Repeater bisa saling terkoneksi dengan baik, maka interface static WDS yang sudah kita buat sebelumnya akan berstatus RSA (Running, Slave, Active).

 

Kemudian coba konek ke wireless lewat laptop, akan muncul halaman login, walaupun laptop terkoneksi dengan selain access point master, bisa jadi Repeater 1 atau repeater lainnya.

Source Code Python Program Perpustakaan CRUD (LinkedList, Sorting, Fibbonaci Search, Queue)

#Copyright Kalam Aulia Sistem Informasi 2020   import time from time import sleep from datetime import datetime from datetime import ...