· 5 years ago · Jun 02, 2020, 11:16 PM
1from urllib.request import urlopen
2from tkinter import *
3from random import uniform
4from tkinter import font as tkfont
5from tkinter import messagebox
6import matplotlib.pyplot as plt
7import json
8import sqlite3
9
10# Create window home Tkinter
11home = Tk()
12home.title("Aplikasi Data Tanaman");home.geometry("600x250")
13
14# Databases
15# create a database or connect to one
16conn = sqlite3.connect("kebun.db")
17
18# Create cursor
19kursor = conn.cursor()
20
21# Create table data_pohon
22kursor.execute("""CREATE TABLE IF NOT EXISTS data_pohon (
23 id_tree INTEGER PRIMARY KEY,
24 sensor_tree INTEGER,
25 loc_lat REAL,
26 loc_lon REAL,
27 date TEXT
28 )""")
29
30# Create tabel sensor_pohon if not exists
31kursor.execute("""CREATE TABLE IF NOT EXISTS data_sensor(
32 id_tree INTEGER PRIMARY KEY, date_time TEXT,
33 air_temp REAL, air_hum REAL,
34 rainfall REAL, uv_lvl REAL,
35 soil_temp REAL, soil_hum REAL,
36 soil_ph REAL, n_ph REAL,
37 p_ph REAL, k_ph REAL
38 )""")
39
40# Create submit function for database
41def get_loc():
42 tree = id_tree.get()
43 sensor = sensor_tree.get()
44 # connect to api
45 address = f"https://belajar-python-unsyiah.an.r.appspot.com/sensor/read?npm=1904105010004&id_tree={tree}&sensor_type={sensor}"
46 # open Url
47 url = urlopen(address)
48 # read url
49 documents = url.read().decode("utf-8")
50 # process
51 data = json.loads(documents)
52 # Get data
53 result_id = f"{data['id_tree']}"
54 result_sensor = f"{data['sensor_type']}"
55 result_date = f"{data['when']}"
56 # Search Random location Latitude & Longitude
57 for i in range(100):
58 loc_lat = uniform(1, 20)
59 for j in range(100):
60 loc_lon = uniform(1, 360)
61
62 # create a database or connect to one
63 conn = sqlite3.connect("kebun.db")
64 # Create cursor
65 kursor = conn.cursor()
66 # Insert Into Table data_pohon
67 kursor.execute("INSERT INTO data_pohon VALUES (:id_tree, :sensor_tree, :loc_lat, :loc_lon, :date)",
68 {
69 'id_tree': result_id,
70 'sensor_tree': result_sensor,
71 'loc_lat': loc_lat,
72 'loc_lon': loc_lon,
73 'date': result_date
74 })
75
76 # Commit changes
77 conn.commit()
78 # Close connection
79 conn.close()
80
81 # Clear The Text Boxes
82 id_tree.delete(0, END)
83 sensor_tree.delete(0, END)
84
85# Create Function to Sensor Tree
86def option_sensor():
87 def ambil_data():
88 tree = id_tree.get()
89 # Create variabel
90 result_api = []
91 # Get data
92 for sensor_type in range(10):
93 address = f"https://belajar-python-unsyiah.an.r.appspot.com/sensor/read?npm=1904105010004&id_tree={tree}&sensor_type={sensor_type}"
94 url = urlopen(address)
95 documents = url.read().decode("utf-8")
96 data = json.loads(documents)
97 result_api.append(data['value'])
98
99 id_kopi = f"{data['id_tree']}"
100 date_time = f"{data['when']}"
101
102
103 # create Database
104 conn = sqlite3.connect("kebun.db")
105 # Create kursor
106 kursor = conn.cursor()
107
108 # Insert data in Table
109 kursor.execute("INSERT INTO data_sensor VALUES (:id_tree, :date_time, :air_temp, :air_hum, :rainfall, :uv_lvl, :soil_temp, :soil_hum, :soil_ph, :n_ph, :p_ph, :k_ph)",
110 {
111 'id_tree': id_kopi,'date_time': date_time,
112 'air_temp': result_api[0],'air_hum': result_api[1],
113 'rainfall': result_api[2],'uv_lvl': result_api[3],
114 'soil_temp': result_api[4],'soil_hum': result_api[5],
115 'soil_ph': result_api[6],'n_ph': result_api[7],
116 'p_ph': result_api[8],'k_ph': result_api[9]
117 })
118 # Commit changes
119 conn.commit()
120 # Close connection
121 conn.close()
122 id_tree.delete(0, END)
123
124 def show_data():
125 opsi_show = Tk()
126 opsi_show.title("Semua Data Sensor")
127 opsi_show.geometry("600x500")
128
129 # connect database
130 conn = sqlite3.connect("kebun.db")
131 # Create cursor
132 kursor = conn.cursor()
133 # Result the database
134 kursor.execute("SELECT *, oid FROM data_sensor")
135 records = kursor.fetchall()
136
137 # loop thur result
138 print_records = ""
139 for record in records:
140 #Print for looping
141 print_records += f"\n\nID : {record[0]}\nDate : {record[1]}\n\nAir Temperature : {record[2]} | Air Humidity : {record[3]} | Rainfall : {record[4]} | UV Level : {record[5]}\nSoil Temperature : {record[6]} | Soil Humidity : {record[7]} | Soil pH : {record[8]}\nN Level : {record[9]} | P Level : {record[10]} | K Level : {record[11]}"
142
143 # Result in label
144 title_sensor_result = Label(opsi_show, text="Daftar Data Semua Sensor Setiap ID", font="chilanka")
145 title_sensor_result.grid(row=1, column=0, columnspan=2)
146 sensor_result = Label(opsi_show, text=print_records, font="chilanka");sensor_result.grid(row=2, column=0, rowspan=40, columnspan=2, padx=10, pady=10)
147
148 def air_temp():
149 # connect database
150 conn = sqlite3.connect("kebun.db")
151 # Create cursor
152 kursor = conn.cursor()
153 # Result database from data_sensor
154 kursor.execute("SELECT *, oid FROM data_sensor")
155 records = kursor.fetchall()
156
157 # Create variabel
158 x = []
159 y = []
160 for air_temp in records:
161 x.append(air_temp[1])
162 y.append(air_temp[2])
163
164 # Create plot
165 plt.plot(x, y, '-o')
166 plt.title('Air Temperature')
167 plt.show()
168
169 # connect close
170 conn.close()
171 def air_hum():
172 # connect database
173 conn = sqlite3.connect("kebun.db")
174 # Create cursor
175 kursor = conn.cursor()
176 # Result database from data_sensor
177 kursor.execute("SELECT *, oid FROM data_sensor")
178 records = kursor.fetchall()
179
180 # Create variabel
181 x = []
182 y = []
183 for air_hum in records:
184 x.append(air_hum[1])
185 y.append(air_hum[3])
186
187 # Create plot
188 plt.plot(x, y, '-o')
189 plt.title('Air Humidity')
190 plt.show()
191
192 # connect close
193 conn.close()
194 def rainfall():
195 # connect database
196 conn = sqlite3.connect("kebun.db")
197 # Create cursor
198 kursor = conn.cursor()
199 # Result database from data_sensor
200 kursor.execute("SELECT *, oid FROM data_sensor")
201 records = kursor.fetchall()
202
203 # Create variabel
204 x = []
205 y = []
206 for rainfall in records:
207 x.append(rainfall[1])
208 y.append(rainfall[4])
209
210 # Create plot
211 plt.plot(x, y, '-o')
212 plt.title('Rainfall')
213 plt.show()
214
215 # connect close
216 conn.close()
217
218 def uv_lvl():
219 # connect database
220 conn = sqlite3.connect("kebun.db")
221 # Create cursor
222 kursor = conn.cursor()
223 # Result database from data_sensor
224 kursor.execute("SELECT *, oid FROM data_sensor")
225 records = kursor.fetchall()
226
227 # Create variabel
228 x = []
229 y = []
230 for uv_lvl in records:
231 x.append(uv_lvl[1])
232 y.append(uv_lvl[5])
233
234 # Create plot
235 plt.plot(x, y, '-o')
236 plt.title('UV Level')
237 plt.show()
238
239 # connect close
240 conn.close()
241 def soil_temp():
242 # connect database
243 conn = sqlite3.connect("kebun.db")
244 # Create cursor
245 kursor = conn.cursor()
246 # Result database from data_sensor
247 kursor.execute("SELECT *, oid FROM data_sensor")
248 records = kursor.fetchall()
249
250 # Create variabel
251 x = []
252 y = []
253 for soil_temp in records:
254 x.append(soil_temp[1])
255 y.append(soil_temp[6])
256
257 # Create plot
258 plt.plot(x, y, '-o')
259 plt.title('Soil Temperature')
260 plt.show()
261
262 # connect close
263 conn.close()
264 def soil_hum():
265 # connect database
266 conn = sqlite3.connect("kebun.db")
267 # Create cursor
268 kursor = conn.cursor()
269 # Result database from data_sensor
270 kursor.execute("SELECT *, oid FROM data_sensor")
271 records = kursor.fetchall()
272
273 # Create variabel
274 x = []
275 y = []
276 for uv_lvl in records:
277 x.append(uv_lvl[1])
278 y.append(uv_lvl[7])
279
280 # Create plot
281 plt.plot(x, y, '-o')
282 plt.title('Soil Humidity')
283 plt.show()
284
285 # connect close
286 conn.close()
287 def soil_ph():
288 # connect database
289 conn = sqlite3.connect("kebun.db")
290 # Create cursor
291 kursor = conn.cursor()
292 # Result database from data_sensor
293 kursor.execute("SELECT *, oid FROM data_sensor")
294 records = kursor.fetchall()
295
296 # Create variabel
297 x = []
298 y = []
299 for soil_ph in records:
300 x.append(soil_ph[1])
301 y.append(soil_ph[8])
302
303 # Create plot
304 plt.plot(x, y, '-o')
305 plt.title('Soil pH')
306 plt.show()
307
308 # connect close
309 conn.close()
310 def n_lvl():
311 # connect database
312 conn = sqlite3.connect("kebun.db")
313 # Create cursor
314 kursor = conn.cursor()
315 # Result database from data_sensor
316 kursor.execute("SELECT *, oid FROM data_sensor")
317 records = kursor.fetchall()
318
319 # Create variabel
320 x = []
321 y = []
322 for n_ph in records:
323 x.append(n_ph[1])
324 y.append(n_ph[9])
325
326 # Create plot
327 plt.plot(x, y, '-o')
328 plt.title('N Level')
329 plt.show()
330
331 # connect close
332 conn.close()
333 def p_lvl():
334 # connect database
335 conn = sqlite3.connect("kebun.db")
336 # Create cursor
337 kursor = conn.cursor()
338 # Result database from data_sensor
339 kursor.execute("SELECT *, oid FROM data_sensor")
340 records = kursor.fetchall()
341
342 # Create variabel
343 x = []
344 y = []
345 for p_ph in records:
346 x.append(p_ph[1])
347 y.append(p_ph[10])
348
349 # Create plot
350 plt.plot(x, y, '-o')
351 plt.title('P Level')
352 plt.show()
353
354 # connect close
355 conn.close()
356 def k_lvl():
357 # connect database
358 conn = sqlite3.connect("kebun.db")
359 # Create cursor
360 kursor = conn.cursor()
361 # Result database from data_sensor
362 kursor.execute("SELECT *, oid FROM data_sensor")
363 records = kursor.fetchall()
364
365 # Create variabel
366 x = []
367 y = []
368 for p_ph in records:
369 x.append(p_ph[1])
370 y.append(p_ph[11])
371
372 # Create plot
373 plt.plot(x, y, '-o')
374 plt.title('K Level')
375 plt.show()
376
377 # connect close
378 conn.close()
379 def total_sensor():
380 # connect database
381 conn = sqlite3.connect("kebun.db")
382 # Create cursor
383 kursor = conn.cursor()
384 # Result database from data_sensor
385 kursor.execute("SELECT *, oid FROM data_sensor")
386 records = kursor.fetchall()
387
388 rst_sensor = 4
389 for one_tipe in range(0, 10):
390 x = []
391 y = []
392 for row in records:
393 x.append(row[0])
394 y.append(row[rst_sensor])
395 print(x)
396 print(y)
397 rst_sensor += 1
398
399 plt.plot(x, y, '-o')
400
401 plt.show()
402
403 conn.close()
404
405 global option_sensor
406 option_sensor = Tk()
407 option_sensor.title("Sensor Tanaman")
408 option_sensor.geometry("540x450")
409
410 # Create text box
411 id_tree = Entry(option_sensor, width=30)
412 id_tree.grid(row=3, column=1, pady=5)
413 # Create Label
414 id_tree_lbl = Label(option_sensor, text="ID Tanaman\t: ", font="Purisa")
415 id_tree_lbl.grid(row=3, column=0, pady=5)
416 # Create Button
417 id_tree_btn = Button(option_sensor, text="Tambahkan Data", command=ambil_data, font="chilanka")
418 id_tree_btn.grid(row=6, column=0, columnspan=1, pady=11, padx=11, ipadx=27)
419 result_btn = Button(option_sensor, text="Tampilkan Semua Data", command=show_data, font="chilanka")
420 result_btn.grid(row=6, column=1, columnspan=6, pady=12, padx=12, ipadx=5)
421 # Create Button Graph
422 # air_temp
423 air_temp_btn = Button(option_sensor, text="Suhu udara", font="chilanka", command=air_temp)
424 air_temp_btn.grid(row=8, column=0, columnspan=1, pady=10, padx=10, ipadx=48)
425 # air_hum
426 air_hum_btn = Button(option_sensor, text="Kelembaban udara", font="chilanka", command=air_hum)
427 air_hum_btn.grid(row=9, column=0, columnspan=1, pady=11, padx=11, ipadx=22)
428 # rainfall
429 rainfall_btn = Button(option_sensor, text="Curah Hujan", font="chilanka", command=rainfall)
430 rainfall_btn.grid(row=10, column=0, columnspan=1,pady=11, padx=11, ipadx=44)
431 # uv_lvl
432 uv_lvl_btn = Button(option_sensor, text="UV Level", font="chilanka", command=uv_lvl)
433 uv_lvl_btn.grid(row=11, column=0, columnspan=1, pady=11, padx=11, ipadx=58)
434 # soil_temp
435 soil_temp_btn = Button(option_sensor, text="Suhu Tanah", font="chilanka", command=soil_temp)
436 soil_temp_btn.grid(row=12, column=0, columnspan=1, pady=11, padx=11, ipadx=45)
437 # soil_hum
438 soil_hum_btn = Button(option_sensor, text="Kelembaban Tanah", font="chilanka", command=soil_hum)
439 soil_hum_btn.grid(row=8, column=1, columnspan=1, pady=11, padx=11, ipadx=15)
440 #soil_ph
441 soil_ph_btn = Button(option_sensor, text="ph Tanah", font="chilanka", command=soil_ph)
442 soil_ph_btn.grid(row=9, column=1, columnspan=1, pady=11, padx=11, ipadx=50)
443 #n_lvl
444 n_lvl_btn = Button(option_sensor, text="N Level", font="chilanka", command=n_lvl)
445 n_lvl_btn.grid(row=10, column=1, columnspan=1, pady=11, padx=11, ipadx=60)
446 # p_lvl
447 p_lvl_btn = Button(option_sensor, text="P Level", font="chilanka", command=p_lvl)
448 p_lvl_btn.grid(row=11, column=1, columnspan=1, pady=11, padx=11, ipadx=60)
449 # k_lvl
450 k_lvl_btn = Button(option_sensor, text="K Level", font="chilanka", command=k_lvl)
451 k_lvl_btn.grid(row=12, column=1, columnspan=1, pady=11, padx=11, ipadx=60)
452 # Show all_grafik
453 all_grafik_btn = Button(option_sensor, text="Tampilkan Semua Grafik", font="chilanka", command=total_sensor)
454 all_grafik_btn.grid(row=13, column=0, columnspan=2, pady=11, padx=11, ipadx=22)
455
456
457
458 # Main Loop
459 option_sensor.mainloop()
460
461
462# Create Function to Delete A Record
463def option_delete():
464 # delete from ID data
465 def delete_1():
466 # create a database or connect to one
467 conn = sqlite3.connect("kebun.db")
468 # Create cursor
469 # Create a Delete Button
470 kursor = conn.cursor()
471 # Delete a record
472 kursor.execute("DELETE FROM data_pohon WHERE oid = " + delete_box.get())
473 kursor.execute("DELETE FROM data_sensor WHERE oid = " + delete_box.get())
474 delete_box.delete(0, END)
475 # Commit changes
476 conn.commit()
477 # Close connection
478 conn.close()
479
480 # Delete a Tabel data_pohon
481 def delete_2():
482 # create a database or connect to one
483 conn = sqlite3.connect("kebun.db")
484 # Create cursor
485 kursor = conn.cursor()
486 # Delete a tabel
487 kursor.execute("DROP TABLE IF EXISTS data_pohon;")
488 # Create table data_pohon
489 kursor.execute("""CREATE TABLE IF NOT EXISTS data_pohon (
490 id_tree INTEGER PRIMARY KEY, sensor_tree INTEGER,
491 loc_lat REAL, loc_lon REAL, date TEXT)""")
492
493 kursor.execute("DROP TABLE IF EXISTS data_sensor;")
494 # Create Tabel sensor_pohon
495 # Create tabel sensor_pohon if not exists
496 kursor.execute("""CREATE TABLE IF NOT EXISTS data_sensor(
497 id_tree INTEGER PRIMARY KEY, date_time TEXT,
498 air_temp REAL, air_hum REAL,
499 rainfall REAL, uv_lvl REAL,
500 soil_temp REAL, soil_hum REAL,
501 soil_ph REAL, n_ph REAL,
502 p_ph REAL, k_ph REAL
503 )""")
504 # Commit changes
505 conn.commit()
506 # Close connection
507 conn.close()
508
509 global option_delete
510 option_delete = Tk()
511 option_delete.title("Hapus Data")
512 option_delete.geometry('450x200')
513
514 # Create Text Boxes
515 delete_box = Entry(option_delete, width=30)
516 delete_box.grid(row=3, column=1, pady=5)
517 # Create a label delete
518 delete_box_lbl = Label(option_delete, text="Select ID : ", font="Purisa")
519 delete_box_lbl.grid(row=3, column=0, pady=5)
520 # Create a Delete Button
521 delete_btn = Button(option_delete, text="Hapus Data ID", command=delete_1, font="chilanka")
522 delete_btn.grid(row=4, column=1, columnspan=1, pady=11, padx=11, ipadx=27)
523 # Create a Delete All Button
524 del_all_btn = Button(option_delete, text="Hapus Semua Data", command=delete_2, font="chilanka")
525 del_all_btn.grid(row=5, column=1, columnspan=1, ipadx=7)
526
527 # Main loop
528 option_delete.mainloop()
529
530# Create result function
531def result():
532 option_result = Tk()
533 option_result.title("Tampilkan Data")
534 option_result.geometry("850x350")
535
536 # create a database or connect to one
537 conn = sqlite3.connect("kebun.db")
538 # Create cursor
539 kursor = conn.cursor()
540 # Result the database
541 kursor.execute("SELECT *, oid FROM data_pohon")
542 records = kursor.fetchall()
543
544 # loop thur Result
545 print_records = ""
546 for record in records:
547 # Print for looping
548 print_records += f"\n\n id : {record[0]} | sensor : {record[1]} | Latitude : - {record[2]:1.7f} | Longitude : {record[3]:1.7f} | Date : {record[4]}"
549
550 # Result in box
551 title_result = Label(option_result, text="Daftar Data Koordinat ID dan Sensor", font="chilanka")
552 title_result.grid(row=1,column=0, columnspan=2)
553 result_lbl = Label(option_result, text=print_records, font="chilanka")
554 result_lbl.grid(row=2, column=0, rowspan=40, columnspan=2, padx=10, pady=10)
555 # Commit changes
556 conn.commit()
557 # Close connection
558 conn.close()
559
560
561 #Main loop
562 option_result.mainloop()
563
564def exit_window():
565 answer = messagebox.askquestion("Keluar", "Anda yakin keluar dari Aplikasi?")
566 if answer == 'yes' or 'YES':
567 home.quit()
568
569# Create Text Boxes
570id_tree = Entry(home, width=20)
571id_tree.grid(row=0, column=1, padx=20, pady=(10,0))
572sensor_tree = Entry(home, width=20)
573sensor_tree.grid(row=1, column=1)
574
575# Create Text Box Labels
576id_tree_lbl = Label(home, text="ID Tanaman\t\t\t: ", font="Purisa")
577id_tree_lbl.grid(row=0, column=0, pady=(10,0))
578sensor_tree_lbl = Label(home, text="No. Sensor (0 s/d 9)\t\t: ", font="Purisa")
579sensor_tree_lbl.grid(row=1, column=0)
580
581
582# Create get_data Button
583get_data_btn = Button(home, text="Tambahkan Data", font="chilanka", command=get_loc)
584get_data_btn.grid(row=6, column=0, columnspan=1, pady=10, padx=10, ipadx=42)
585
586# Create Result Button
587result_btn = Button(home, text="Tampilkan\nKoordinat", font="chilanka",command=result)
588result_btn.grid(row=7, column=0, columnspan=1, ipadx=63)
589
590# Create Delete Button
591delete_btn = Button(home, text="Hapus Data", font="chilanka", command=option_delete)
592delete_btn.grid(row=8, column=0, columnspan=1, ipadx=60)
593
594# Create an Sensor Button
595sensor_btn = Button(home, text="Sensor Tanaman", font="chilanka", command=option_sensor)
596sensor_btn.grid(row=7, column=1, columnspan=2, pady=11, padx=11, ipadx=22)
597
598exit_btn = Button(home, text="Keluar", font="chilanka", command=exit_window)
599exit_btn.grid(row=8, column=1, columnspan=2, ipadx=64)
600
601
602# Commit changes
603conn.commit()
604# Close connection
605conn.close()
606# Main loop
607home.mainloop()