· 5 years ago · Jun 02, 2020, 08:38 AM
1#import evverything from tkinter
2from tkinter import *
3import sys
4import tkinter
5import tkinter as tk
6from tkinter import font as tkfont
7from urllib.request import urlopen
8import sqlite3
9import time
10import json
11import random
12from random import uniform
13import matplotlib.pyplot as plt
14
15
16
17def exit_window():
18 sys.exit()
19
20
21# Mebuat windows object
22window = tkinter.Tk()
23window.title("Smart System - IoT")
24
25# Buat menu dari aplikasi
26menubar = tkinter.Menu(window)
27
28# Menu langsung keluar
29menubar.add_command(label = "Exit", command = exit_window)
30# Informasikan menunya yang mana
31window.config(menu = menubar)
32
33# Membuat ukuran Tkinter GUI
34window.geometry("420x700")
35
36# Create Database
37connection = sqlite3.connect("database.db")
38# Create cursor
39c = connection.cursor()
40
41# Create Table
42c.execute("""CREATE TABLE IF NOT EXISTS tabel_tanaman(
43 pohon INTEGER PRIMARY KEY,
44 sensor INTEGER,
45 lat REAL,
46 lon REAL,
47 id_value REAL,
48 id_date TEXT,
49 suhu_udara FLOAT,
50 kelembapan_udara FLOAT,
51 curah_hujan FLOAT,
52 sinar_uv FLOAT,
53 suhu_tanah FLOAT,
54 kelembapan_tanah FLOAT,
55 pH_tanah FLOAT,
56 pH_N FLOAT,
57 ph_P FLOAT,
58 pH_K FLOAT
59 )""")
60
61
62# Mebuat Submit Function Untuk Database
63def record_database():
64 """
65 - for bagian pertama ambil data dari tree,sensor_type,value,date from API
66 - buat masing masing suhu untuk sensor_type
67 - for bagian kedua untuk ambil latitude dan longitude secara random pakai library uniform
68 -
69 """
70
71 tree = id_tree.get()
72
73 repeat = 10
74
75 for sensor_type in range(repeat):
76 alamat = f"https://belajar-python-unsyiah.an.r.appspot.com/sensor/read?npm=1904105010067&id_tree={tree}&sensor_type={sensor_type}"
77
78 # Buka koneksi ke URL
79 url = urlopen(alamat)
80 # Ambil/baca dokumen
81 dokumen = url.read().decode("utf-8")
82 # Proses mengambil dan tampilkan dokumen
83 data = json.loads(dokumen)
84
85 # Mengambil data dari alamat per data
86 data_tree = f"{data['id_tree']}"
87 data_sensor = f"{data['sensor_type']}"
88 data_value = f"{data['value']}"
89 data_when = f"{data['when']}"
90
91
92 ''' suhu_udara '''
93 suhu_udara = float(data_value)
94 air_temperature = suhu_udara + 273
95 print(f"{air_temperature}")
96
97 ''' kelembapan udara '''
98 kelembapan_udara = float(data_value)
99 kelembapan_temperature = kelembapan_udara / 60 * 100
100 print(f"{kelembapan_temperature}")
101
102 ''' curah hujan '''
103 curah_hujan = float(data_value)
104 curah_hujan = curah_hujan / 1440
105 print(f"{curah_hujan}")
106
107 ''' sinar_uv '''
108 sinar_uv = float(data_value)
109 sinar_uv = sinar_uv + 340
110 print(f"{sinar_uv}")
111
112 ''' suhu_tanah '''
113 suhu_tanah = float(data_value)
114 suhu_tanah = suhu_tanah + 5
115 print(f"{suhu_tanah}")
116
117 ''' kelembapan_tanah '''
118 kelembapan_tanah = float(data_value)
119 kelembapan_tanah = kelembapan_udara / 60 * 100 + 5
120 print(f"{kelembapan_tanah}")
121
122 ''' pH_tanah '''
123 pH_tanah = float(data_value)
124 pH_tanah = pH_tanah + 14
125 print(f"{pH_tanah}")
126
127
128 ''' pH_N '''
129 pH_N = float(data_value)
130 pH_N = pH_N + 14 / 100 * 100
131 print(f"{pH_N}")
132
133 ''' pH_P '''
134 pH_P = float(data_value)
135 pH_P = pH_P + 14 / 100 * 100
136 print(f"{pH_P}")
137
138 ''' pH_K '''
139 pH_K = float(data_value)
140 pH_K = pH_K + 14 / 100 * 100
141 print(f"{pH_K}")
142
143
144
145
146
147 for id_sensor in range(1):
148 id_sensor = random.randint(1,10)
149 print(f"{id_sensor}")
150
151
152 for coordinate_x in range(1,20):
153 coordinate_x = uniform(10, 80)
154 for coordinate_y in range(1,20):
155 coordinate_y = uniform(10, 80)
156
157 print(f"{coordinate_x}")
158 print(f"{coordinate_y}")
159
160
161
162
163 # Create Database
164 connection = sqlite3.connect("database.db")
165 # Create cursor
166 c = connection.cursor()
167
168 # Insert Into Table
169 c.execute("INSERT INTO tabel_tanaman VALUES (:id_tree, :coordinate_x, :coordinate_y, :id_sensor, :id_value, :id_when, :suhu_udara, :kelembapan_udara, :curah_hujan, :sinar_uv, :suhu_tanah, :kelembapan_tanah, :pH_tanah, :pH_N, :pH_P, :pH_K)",
170 {
171 'id_tree' : data_tree,
172 'coordinate_x' : coordinate_x,
173 'coordinate_y' : coordinate_y,
174 'id_sensor' : id_sensor,
175 'id_value' : data_value,
176 'id_when' : data_when,
177 'suhu_udara' : suhu_udara,
178 'kelembapan_udara' : kelembapan_udara,
179 'curah_hujan' : curah_hujan,
180 'sinar_uv' : sinar_uv,
181 'suhu_tanah' : suhu_tanah,
182 'kelembapan_tanah' : kelembapan_tanah,
183 'pH_tanah' : pH_tanah,
184 'pH_N' : pH_N,
185 'pH_P' : pH_P,
186 'pH_K' : pH_K
187 })
188
189 # Commit changes
190 connection.commit()
191 # Close connection
192 connection.close()
193
194 # Clear The Text Boxes
195 id_tree.delete(0,END)
196
197# Membuat Execute Function untuk hasil database
198def show_database():
199 """
200 - Ambil data tabel_tanaman dari data yang sudah disimpan
201 - Tampilkan data menggunakan perulangan for dari data yang sudah diambil dari record_database
202 - Tampilkan hasil database di new window(khusus database)
203 """
204
205 # Create Database
206 connection = sqlite3.connect("database.db")
207 # Create cursor
208 c = connection.cursor()
209
210 # Execute the database
211 c.execute("SELECT *, oid FROM tabel_tanaman")
212 records = c.fetchall()
213 print(records)
214
215 show_database = ''
216 for record in records:
217 show_database = show_database + f"\n\n Id : {record[0]} | lat : -{record[1]} | lon : {record[2]} | Value : {record[4]} \n Date : {record[5]} \n\n | Sensor : {record[3]} Suhu_udara : {record[6]},15 K | Sensor : {record[3]} Kelembapan_udara : {record[7]} % | \n | Sensor : {record[3]} curah_hujan : {record[8]} mm | Sensor : {record[3]} Sinar UV : {record[9]} nm | \n | Sensor : {record[3]} Suhu Tanah : {record[10]} C | Sensor : {record[3]} kelembapan Tanah : {record[11]} % \n | Sensor : {record[3]} pH N : {record[12]} | Sensor : {record[3]} pH P : {record[13]} | Sensor : {record[3]} pH K : {record[14]} | "
218
219 # Mebuat windows object
220 window = Tk()
221 window.title("Final Database - IoT")
222
223
224 # Buat menu dari aplikasi
225 menubar = tkinter.Menu(window)
226
227 # Menu operasi
228 menu_operasi = tkinter.Menu(menubar, tearoff=0)
229 # Tempel menu_operasi pada menubar
230 menubar.add_cascade(label = " database ")
231 window.config(menu = menubar)
232
233 # Mmebuat ukuran Tkinter GUI
234 window.geometry("850x750")
235
236 database_fonts = tkfont.Font(family = "Times New Roman", size = 9, weight = "bold")
237 database_labels = Label(window, text="database", font = database_fonts)
238 database_labels.grid(row = 0, column = 1 ,columnspan = 1,ipadx = 400)
239
240 # database box
241 database_box = Label(window, text = show_database)
242 database_box.grid(row = 2 ,column = 1,columnspan = 1)
243
244 # Commit changes
245 connection.commit()
246 # Close connection
247 connection.close()
248
249
250def delete_database():
251 """
252 -
253 -
254 -
255 """
256 # Create Database
257 connection = sqlite3.connect("database.db")
258 # Create cursor
259 c = connection.cursor()
260
261 # Delete record
262 c.execute("DELETE from tabel_tanaman WHERE oid = " + delete_box.get())
263
264 delete_box.delete(0, END)
265
266
267 # Commit save
268 connection.commit()
269 # Close connection
270 connection.close()
271
272def suhu_udara():
273 """
274 -
275 """
276
277
278
279
280
281def kelembapan_udara():
282 """
283 -
284 """
285
286
287def curah_hujan():
288 """
289 -
290 """
291
292def sinar_uv():
293 """
294 -
295 """
296
297def suhu_tanah():
298 """
299 -
300 """
301
302
303def kelembapan_tanah():
304 """
305 -
306 """
307
308
309def pH_tanah():
310 """
311 -
312 """
313
314
315def pH_Nitrogen():
316 """
317 -
318 """
319
320
321def pH_fosfor():
322 """
323 -
324 """
325
326
327def pH_Kalium():
328 """
329 -
330 """
331
332
333def All_grafik():
334 """
335 -
336 """
337
338
339
340
341
342
343
344# Create Text Boxes
345"""
346- Create Text Box
347- Using type design : Background
348"""
349id_tree = Entry(window, width = 19)
350id_tree.configure(background = "gainsboro")
351id_tree.grid(row = 4,column = 1,columnspan = 2,pady = 20,ipady = 3)
352
353delete_box = Entry(window, width = 18)
354delete_box.configure(background = "gainsboro")
355delete_box.grid(row = 7,column = 1,columnspan = 2,ipady = 3)
356
357
358# Create Text Box Labels Names
359"""
360- Create Label Names for Textbox
361- take library tkfont from tkinter library
362- Using type : font family, size, weight(type_text)
363"""
364id_tree_fonts = tkfont.Font(family = "Times New Roman", size = 11, weight = "bold")
365id_tree_labels = Label(window, text=" Coffe Id", font = id_tree_fonts)
366id_tree_labels.grid(row = 4, column = 0, columnspan = 1,pady = 20,padx =30)
367
368delete_box_fonts = tkfont.Font(family = "Times New Roman", size = 11, weight = "bold")
369delete_box_labels = Label(window, text="Delete Id", fg = "darkred",font = delete_box_fonts)
370delete_box_labels.grid(row = 7, column = 0, columnspan = 1,ipady = 20)
371
372
373
374# Create Button
375"""
376- Create Add Record Database To get data from database
377- Create Button To execute data that has been saved from Record Database
378"""
379# Create Submit Button
380submit_button_fonts = tkfont.Font(family = "Times New Roman", size = 10, weight = "bold")
381submit_button = Button(window, text = "Add Record To Database", fg = "darkgreen", font = submit_button_fonts, command = record_database)
382submit_button.grid(row = 6, column = 0, columnspan = 2, pady = 20, padx = 20, ipadx = 100, ipady = 10)
383
384# Create Show Button
385execute_button = Button(window, text = "Show Database",fg = "darkgreen",command = show_database, font = submit_button_fonts)
386execute_button.grid(row = 9,column = 0,ipadx = 20,pady = 20,ipady = 3)
387
388# Create Delete Button
389delete_button = Button(window, text = "Delete Database", fg = "darkred", command = delete_database, font = submit_button_fonts)
390delete_button.grid(row = 9,column = 1,ipadx = 0,pady = 10,ipady = 3)
391
392
393# suhu_udara Button
394suhu_udara_button = Button(window, text = "Suhu udara", command = suhu_udara, font = submit_button_fonts)
395suhu_udara_button.grid(row = 10,column = 0,ipadx = 22,pady = 5,ipady = 3)
396
397
398# Kelembapan_udara Button
399kelembapan_udara_button = Button(window, text = "Kelembapan udara", command = kelembapan_udara, font = submit_button_fonts)
400kelembapan_udara_button.grid(row = 10,column = 1,ipadx = 1,pady = 10,ipady = 3)
401
402# curah_hujan Button
403curah_hujan_button = Button(window, text = "Curah Hujan", command = curah_hujan, font = submit_button_fonts)
404curah_hujan_button.grid(row = 11,column = 0,ipadx = 20,pady = 5,ipady = 3)
405
406# sinar_uv Button
407sinar_uv_button = Button(window, text = "Sinar UV", command = sinar_uv, font = submit_button_fonts)
408sinar_uv_button.grid(row = 11,column = 1,ipadx = 25,pady = 10,ipady = 3)
409
410# suhu_tanah Button
411suhu_tanah_button = Button(window, text = "Suhu Tanah", command = suhu_tanah, font = submit_button_fonts)
412suhu_tanah_button.grid(row = 12,column = 0,ipadx = 23,pady = 5,ipady = 3)
413
414# kelembapan_tanah Button
415kelembapan_tanah_button = Button(window, text = "kelembapan Tanah", command = kelembapan_tanah, font = submit_button_fonts)
416kelembapan_tanah_button.grid(row = 12,column = 1,ipadx = 1,pady = 10,ipady = 3)
417
418# pH_tanah
419pH_tanah_button = Button(window, text = "pH Tanah", command = pH_tanah, font = submit_button_fonts)
420pH_tanah_button.grid(row = 13,column = 0,ipadx = 28,pady = 5,ipady = 3)
421
422# pH_Nitrogen tanah
423pH_nitrogen_tanah_button = Button(window, text = "pH Nitrogen Tanah", command = pH_Nitrogen, font = submit_button_fonts)
424pH_nitrogen_tanah_button.grid(row = 13,column = 1,ipadx = 1,pady = 10,ipady = 3)
425
426# pH_fosfor_tanah_button
427pH_fosfor_tanah_button = Button(window, text = "pH Fospor Tanah", command = pH_fosfor, font = submit_button_fonts)
428pH_fosfor_tanah_button.grid(row = 14,column = 0,ipadx = 8,pady = 5,ipady = 3)
429
430# pH_kalium
431pH_kalium_tanah_button = Button(window, text = "pH Kalium Tanah", command = pH_Kalium, font = submit_button_fonts)
432pH_kalium_tanah_button.grid(row = 14,column = 1,ipadx = 5,pady = 10,ipady = 3)
433
434# A sensor suhu
435semua_suhu_sensor = Button(window, text = "All Suhu Grafik", fg = "darkgreen", font = submit_button_fonts, command = All_grafik)
436semua_suhu_sensor.grid(row = 15, column = 0, columnspan = 2, pady = 20, padx = 20, ipadx = 100, ipady = 10)
437
438# Commit Changes
439connection.commit()
440#Close Connection
441connection.close()
442
443window.mainloop()