• Tidak ada hasil yang ditemukan

BAB V PENUTUP

5.2 Saran

Setelah melakukan penelitian ini, masih terdapat kekurangan dan peningkatan yang bisa dilakukan agar bisa didapat hasil yang lebih baik dengan saran sebagai berikut:

1. Implementasi TLS sebaiknya menggunakan sertifikat yang ditandatangani oleh Certificate Authority. Hal ini menggantikan metode self-signed yang dicap sebagai

Bad Certificate

.

2. Menambah parameter pengukuran untuk setiap perangkat IoT agar bisa

mendukung bukan hanya sensor ultrasonic, waterlevel dan power.

3. Mengintegrasikan layanan dan data lain seperti lokasi shelter dan penanganan tanggap bencana lainnya.

4. Penelitian ini menggunakan Node.js yang memanfaatkan JavaScript yang bersifat single-threaded sebagai program utamanya. Hal tersebut membuatnya hanya bisa memaksimalkan satu core CPU saja. Penerapan konkurensi CPU dengan metode multi-threading atau clustering dapat meningkatkan performa.

5. Penelitian ini menggunakan komputer dengan sistem operasi Lubuntu

Desktop sebagai server. Hal tersebut menyebabkan server harus

memberikan kapasitas memory pada GUI. Menggunakan sistem operasi

tanpa GUI dapat menghemat penggunaan memory secara signifikan.

[1] Lidwina A., Juni 2020. [Online]. Available:

https://databoks.katadata.co.id/datapublish/2020/06/08/berapa-jumlah-kejadian-banjir-dalam-lima-tahun-terakhir. [Diakses August 2020].

[2] Sulaeman D., A. Pradana dan H. Hamzah, Juli 2019. [Online]. Available:

https://wri-indonesia.org/id/blog/3-faktor-utama-penyebab-banjir-di-indonesia-dan-bagaimana-mencegahnya.

[3] Patel K. K. dan S. M. Patel, “Internet of Things-IOT: Definition, Characteristics, Architecture, Enabling Technologies, Application & Future Challenges,” IJESC, vol. 6, no. 5, 2016.

[4] Wilianto dan A. Kurniawan, “Sejarah, Cara Kerja dan Manfaat Internet Of Things,” Jurnal Matrix, vol. 8, no. 2, pp. 36-41, Juli 2018.

[5] Dahlqvist F., M. Patel, A. Rajko dan J. Shulman, July 2019. [Online].

Available: https://www.mckinsey.com/industries/private-equity-and- principal-investors/our-insights/growing-opportunities-in-the-internet-of-things.

[6] Hossain E. dan M. Hasan, “5G Cellular: Key Enabling Technologies and Research Challenges,” IEEE Instrumentation and Measurement Magazine, vol. 18, no. 3, February 2015.

[7] Ghosh A., D. Chakraborty dan A. Law, “Artificial Intelligence in Internet of Things,” CAAI Transactions on Intelligence Technology, vol. 3, no. 4, October 2018.

[8] Gupta A., T. Tsai, D. Rueb, M. Yamaji dan P. Middleton, December 2017.

[Online]. Available:

https://www.gartner.com/en/documents/3840665/forecast-internet-of-things-endpoints-and-associated-ser.

[9] Anonim, “ITU-T Series Y: Global Information Infrastructure, Internet

Protocol Aspects and Next Generation Networks,” 2012.

[10] Anonim, “Supporting Internet of Things Activities on Innovation Ecosystems,” 2016.

[11] Sarhan A., “Cloud-based IoT Platform: Challanges and Applied Solutions,”

2019.

[12] Tukade T. M. dan R. M. Banakar, “Data Transfer Protocols in IoT-An Overview,” International Journal of Pure and Applied Mathematics, vol.

118, no. 16, pp. 121-138, January 2018.

[13] Musliyana Z., M. Dwipayana, A. Helinda dan Z. Maizi, “Improvement of Data Exchange Security on HTTP using Client-side Encryption,” Journal of Physics Conference Series, vol. 1019, Juni 2018.

[14] Anonim, “SSL Operation,” dalam SSL & TLS Essentials: Securing the Web, John Wiley & Sons, Inc, 2000, pp. 37-65.

[15] Pusparisa Y., September 2020. [Online]. Available:

https://databoks.katadata.co.id/datapublish/2020/09/15/pengguna-smartphone-diperkirakan-mencapai-89-populasi-pada-2025.

[16] Jaikar S. P. dan D. K. R. Iyer, “A Survey of Messaging Protocols for IoT Systems,” International Journal of Advanced in Management, Technology and Engineering Sciences, vol. 8, no. 2, pp. 510-514, February 2018.

[17] Sethi P. dan S. R. Sarangi, “Internet of Things: Architectures, Protocols, and Applications,” Journal of Electrical and Computer Engineering, pp. 1-25, 2017.

[18] Kim H.-S., J. Ko, D. E. Culler dan J. Paek, “Challenging the IPv6 Routing Protocol for Low-Power and Lossy Networks (RPL): A Survey,” IEEE Communications Surveys & Tutorials, vol. 19, no. 4, 2017.

[19] Mundra S. dan P. T. E. Teib, “TCP/IP PROTOCOL LAYERING,”

International Journal of Computer Science and Information Technology Research, vol. 3, no. 1, pp. 415-417, January-March 2015.

[20] Khan I. U., F. Numan dan S. Ahmad, “Open Systems Interconnection model

Seven Layers of Computer Networks,” International Journal of Mechanical

Engineering & Computer Applications, vol. 4, no. 5, pp. 367-370, September-October 2016.

[21] Olasoji B. O., O. M. Olanrewaju dan I. O. Adebayo, “Transmission Control Protocol and Congestion Control: A Review Of TCP Variants,” International Journal of Computer Science and Information Security (IJCSIS), vol. 14, no.

3, pp. 127-135, March 2016.

[22] AL-Dhief F. T., N. Sabri, N. M. A. Latiff dan Fellows, “Performance Comparison between TCP and UDP Protocols in Different Simulation Scenarios,” International Journal of Engineering and Technology, vol. 7, no.

4.36, pp. 172-176, December 2018.

[23] Anonim, [Online]. Available: https://tools.ietf.org/html/rfc793. [Diakses 6 August 2020].

[24] Anonim, “TCP,” dalam An Introduction to TCP/IP, Devis, Z-World, Inc., 2001, pp. 22-25.

[25] Anonim, [Online]. Available: https://tools.ietf.org/html/rfc7230. [Diakses September 2020].

[26] Anonim, [Online]. Available: https://tools.ietf.org/html/rfc3986.

[27] Anonim, [Online]. Available: https://tools.ietf.org/html/rfc7231.

[28] Anonim, [Online]. Available: https://tools.ietf.org/html/rfc7519.

[29] Rahmatulloh A., H. Sulastri dan R. Nugroho, “Keamanan RESTful Web Servvice Menggunakan JSON Web Token (JWT) HMAC SHA-512,” Jurnal Nasional Teknik Elektro dan Teknologi Informasi (JNTETI), vol. 7, no. 2, Mei 2018.

[30] Anonim, [Online]. Available: https://tools.ietf.org/html/rfc8446.

[31] Anonim, “How Node Application Works,” dalam Node.js The Right Way, Raleigh, Pragmatic Express.

[32] Geisendörfer F., April 2010. [Online]. Available:

http://www.debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb.

[33] Krisnan H., M. S. Elaydom dan T. Santhanakrishnan, “MongoDB - A Comparasion with NoSQL Databases,” International Journal of Scienctific &

Engineering Research, vol. 7, no. 5, May 2016.

[34] Anonim, [Online]. Available:

https://www.nginx.com/resources/glossary/nginx/.

[35] Meier R., Professional Android 4 Application Development, Indianapolis, Indiana: John Wiley & Sons, Inc, 2012.

[36] Anonim, C. Software, August 2019. [Online]. Available:

https://medium.com/@concisesoftware/what-is-flutter-here-is-everything-you-should-know-faed3836253f.

[37] Anonim, [Online]. Available: https://openstreetmap.id/about/tentang-openstreetmap/.

[39] Y. G. Putra, Zulfatman, and N. Kasan, “Peringatan Sistem Peringatan Dini Banjir Berbasis SMS,” Seminar Nasional Teknologi dan Rekayasa (SENTRA), vol. IV, pp. 9–18, 2018.

[40] Mokh. D. A. T. D. K. S. F. S. W. Sholihul Hadi, “1. IoT Cloud Data Logger Untuk Sistem Pendeteksi Dini Bencana Banjir Pada Pemukiman Penduduk Terintegrasi Media Sosial,” Jurnal Edukasi Elektro, vol. 1, no. 2, November 2017.

[41] Jonathan P. M. E. N. S. D. K. Nainggolan, “1. Pengembangan Sistem Informasi Peringatan Dini Banjir Di Kota Manado Berbasis Internet of Things,” Jurnal Teknik Informatika, vol. 15, no. 1, Maret 2020.

[42] Edwin A. V. L. K. F. P. Tenda, “3. Sistem Peringatan Dini Banjir Berbasis IoT dan TwitterFlood Early Warning Sistem Based On Iot And Twitter,”

Cogito Smart Journal, vol. 7, no. 1, pp. 26-39, 2021.

[43] Nicko U. D. N. D. N. Pratama, “Perancangan Sistem Monitoring Ketinggian

Air Sebagai Pendeteksi Banjir Berbasis IoT Menggunakan Sensor

Ultrasonik,” JURNAL MEDIA INFORMATIKA BUDIDARMA, vol. 4, no. 1,

pp. 117-123, Januari 2020.

LAMPIRAN

Lampiran A Berkas Konfigurasi dan Catatan

Lampiran A.1 Struktur Program IoT Platform

cloud

├── admin

│ ├── babel.config.js ... [lampiran B.1]

│ ├── package.json ... [lampiran B.2]

│ ├── public

│ │ ├── index.html ... [lampiran B.3]

│ │ ├── marker.png ... [lampiran B.4]

│ ├── src

│ │ ├── api.js ... [lampiran B.5]

│ │ ├── App.vue ... [lampiran B.6]

│ │ ├── assets

│ │ │ ├── fonts

│ │ │ │ └── Lato # https://fonts.google.com/specimen/Lato

│ │ │ └── styles

│ │ │ ├── _overrides.scss ... [lampiran B.7]

│ │ │ └── _variables.scss ... [lampiran B.8]

│ │ ├── main.js ... [lampiran B.9]

│ │ ├── main.scss ... [lampiran B.10]

│ │ ├── registerServiceWorker.js ... [lampiran B.11]

│ │ ├── router

│ │ │ └── index.js ... [lampiran B.12]

│ │ └── views

│ │ ├── Device.vue ... [lampiran B.13]

│ │ ├── List.vue ... [lampiran B.14]

│ │ └── Login.vue ... [lampiran B.15]

│ └── vue.config.js ... [lampiran B.16]

├── server

│ ├── index.js ... [lampiran B.17]

│ ├── package.json ... [lampiran B.18]

│ ├── scripts

│ │ └── cron-aweek-aggregate.js ... [lampiran B.19]

│ └── src

│ ├── admin-actions.js ... [lampiran B.20]

│ ├── auth.js ... [lampiran B.21]

│ ├── device-actions.js ... [lampiran B.22]

│ ├── firebase.js ... [lampiran B.23]

│ └── mongodb.js ... [lampiran B.24]

└── utils

├── package.json ... [lampiran B.25]

├── src

│ ├── create-bot.js ... [lampiran B.26]

│ ├── create-jwt.js ... [lampiran B.27]

│ ├── create-key-pairs.js ... [lampiran B.28]

│ ├── measure-server-performance.js ... [lampiran B.29]

│ ├── simulate-device-write-log.js ... [lampiran B.30]

│ └── simulate-mobile-app-endpoint.js ... [lampiran B.31]

└── util.js ... [lampiran B.32]

Lampiran A.2 Catatan Instal Packages dan Build Web admin

yarn install v1.19.2

[1/4] Resolving packages...

[2/4] Fetching packages...

info [email protected]: The platform "linux" is incompatible with this module.

info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.

info [email protected]: The platform "linux" is incompatible with this module.

info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.

[3/4] Linking dependencies...

warning "@vue/eslint-config-standard > [email protected]" has unmet peer dependency "webpack@>=1.11.0".

warning " > [email protected]" has unmet peer dependency

"webpack@^4.36.0 || ^5.0.0".

[4/4] Building fresh packages...

Done in 129.21s.

yarn run v1.19.2

$ vue-cli-service build

⠧ Building for production...

WARNING Compiled with 3 warnings 12:12:33

warning in ./src/main.js

Module Warning (from ./node_modules/thread-loader/dist/cjs.js):

/home/arsfiqball/Kuliah/implementasi-awas-banjir/cloud/admin/src/main.js

26:7 warning Unexpected console statement no-console

✖ 1 problem (0 errors, 1 warning)

@ multi ./src/main.js warning

asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).

This can impact web performance.

Assets:

img/fa-solid-900.664de393.svg (896 KiB) img/fa-brands-400.2f122423.svg (730 KiB) css/app.fce2367c.css (264 KiB)

warning

entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.

Entrypoints:

app (431 KiB)

css/chunk-vendors.593f4b54.css js/chunk-vendors.a33acf89.js

css/app.fce2367c.css js/app.bbd4ed6f.js

File Size Gzipped

dist/js/chunk-04ee647f.85d296e5.js 155.50 KiB 45.23 KiB

dist/js/chunk-vendors.a33acf89.js 143.16 KiB 49.92 KiB

dist/js/app.bbd4ed6f.js 9.52 KiB 3.46 KiB

dist/js/chunk-17e55962.4f3e9950.js 6.12 KiB 2.64 KiB

dist/precache-manifest.92fa0b5e3c8b4574ac29cc78e 2.26 KiB 0.76 KiB

d1c5531.js

dist/service-worker.js 1.04 KiB 0.61 KiB

dist/css/app.fce2367c.css 263.92 KiB 40.38 KiB

dist/css/chunk-vendors.593f4b54.css 14.58 KiB 6.14 KiB

dist/css/chunk-04ee647f.28367998.css 0.04 KiB 0.05 KiB

Images and other types of assets omitted.

DONE Build complete. The dist directory is ready to be deployed.

INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html

Done in 27.69s.

Lampiran A.3 Catatan Instal Packages API Gateway

yarn install v1.19.2

[1/4] Resolving packages...

[2/4] Fetching packages...

[3/4] Linking dependencies...

warning "firebase-admin > @firebase/database > @firebase/[email protected]" has unmet peer dependency "@firebase/[email protected]".

[4/4] Building fresh packages...

Done in 43.89s.

Lampiran A.4 Catatan Generate SSL Certificate

Generating a 2048 bit RSA private key

...

...+++

...+++

writing new private key to '/etc/ssl/private/self-signed-skripsi.key'

---

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank For some fields there will be a default value,

If you enter '.', the field will be left blank.

---

Country Name (2 letter code) [AU]:ID

State or Province Name (full name) [Some-State]:Banten Locality Name (eg, city) []:Cilegon

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universitas Sultan Ageng Tirtayasa

Organizational Unit Name (eg, section) []:Teknik Elektro Common Name (e.g. server FQDN or YOUR name) []:arsfiqball Email Address []:[email protected]

Lampiran A.5 Berkas self-signed-skripsi.key

---BEGIN PRIVATE KEY---

MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCuySHaWmZEoqIj PSgZoreGzVZ4bDb5fdtU/Qd0Yb4X/jM7xwRKsM7ZytK8OKhYvLh8FBrh8TdTjy3w g9fWbVdoAzrjAsFx26xiFevB4nBmFv23LWUt2+XHmtVtQhONxmI3RjNo3ZAjkaNx NP27UL8bz/jAv4lhFbPWKBShYoOnf1uOfxHzPVRkl7/IT5xYIW3aAxu6bMho0qB5 rybafD1v0tkzU1QrYQvYpBm45eH67xucUztIsCU5Py+4xflrRZ8RpYoZ6UxbPEuO Ax7BuBfSZdMR8dF89zGL9SB9nJtSrbGAGIyUTepufOCOEx6JbK1NK/5tXzx5QVia HVoOnpmPAgMBAAECggEAaZ96Ka2/Z3KwcIMgnH1MUtX7j0I15oc76BwQSTBX47/l zhXybgBywAJlXwEOGrHQ+opbxHY0bPZ1WIcUA6yHyX9KMq0ToW6SuaNtmPjx23/B StTP8+qS7RCQMTpg/qgH6kcuAg0Ccbws/Nh9DJk7I9+F/1S//D9VMfF+phgWXz0D r3syxFkQuGetd/8Wu3ky/7M3Ksd/EZTtgMJ1EXa0R0LzA4M+Z09GO3MtalQm42aD SEdtxxcIAMnPyYon2CAR2dOXDMx49VYpkzkHb5ty+823ZMFemiCK3rz/uBB4q1xk gfTpDZdg139C2elHJgCA+mpLxtF4PA8PJ4bZ/w1gAQKBgQDXZoQO2WccJREtZ5P2 iQb5wbqTWrXowEKHjWTnbdfYaGoh/WAbhyDbFyhZRxtF8IZUTuBSQqurnSPMUoLz qWR+cqEvvtdGUhiGKDdZghRMUW6jFSjQ2BW6GKI1MV2ODsZ4R/I9uXtcudUWV1E6 ZT5xJ0u+StxERPW40fkb1B/9jwKBgQDPuuAiGuyAK4K1Bufen7Wz4C/6E1gtWUM7 xBWRO7LCYdUW1gkifgz1tYDDH7BHwMnMdKekpN8ROvrvcIo4jLG4fKUlRVq+vTTX 0vFs66QWpWRh5jvb4U/JoBt30XR9yqG/1hGakhzZDqjPF9Uy4J8Gelols+rkDXbc RKAIGYGkAQKBgQDBRxW8FUu2L3SIX2afUzlVJoZ57m1IGiwYYcFnAGMrphWFxktU qB3NOaxU378TNM30HIqghX5xESGsF2W1qguogscrhny4drXWu4Ne55+7E17JKxVi wGJOiAgU3uTpsUxZZYVx6VtOStlvoI4cbfhnpDEM4TNgdtheLNrwI5lI9QKBgQC0 b6CMP1K6qhCo6cyyZYvRKKTD1dW73lM2MMaDFpXZnl0XrubUXSUosHWeB4J5cQ5Y V+PecY+JSe/514lYQW2F0E8qpqmCEJs79PDcKXqoaRVerDvGbFl/y2DQnNFRCpeh KHK2DsCcEc2zxQHdZZr8Z36yTSt01/UsszdGkdE4AQKBgQC4dqettR53ETcewPgL nKQoyc40mYnWJJEOJfLRW56YMi1EoWAx8sLWzQmj2uRm9AkNfjLuYU5kSROxSGJY mZk38CwC8wKRQa8plEudgM6zcDoxOxkP7JAZK8IzClEsPWURuTRw1f6/Z925MkD4 EtHqszx1BzsOrPIlU7nizYZDfg==

---END PRIVATE KEY---

Lampiran A.6 Berkas self-signed-skripsi.crt

---BEGIN CERTIFICATE---

MIIENTCCAx2gAwIBAgIJALK0F96RYaKiMA0GCSqGSIb3DQEBCwUAMIGwMQswCQYD VQQGEwJJRDEPMA0GA1UECAwGQmFudGVuMRAwDgYDVQQHDAdDaWxlZ29uMSswKQYD VQQKDCJVbml2ZXJzaXRhcyBTdWx0YW4gQWdlbmcgVGlydGF5YXNhMRcwFQYDVQQL DA5UZWtuaWsgRWxla3RybzETMBEGA1UEAwwKYXJzZmlxYmFsbDEjMCEGCSqGSIb3 DQEJARYUaXFiYWxsbWFnc0BnbWFpbC5jb20wHhcNMjEwMTIzMDY1ODU2WhcNMjIw

MTIzMDY1ODU2WjCBsDELMAkGA1UEBhMCSUQxDzANBgNVBAgMBkJhbnRlbjEQMA4G A1UEBwwHQ2lsZWdvbjErMCkGA1UECgwiVW5pdmVyc2l0YXMgU3VsdGFuIEFnZW5n IFRpcnRheWFzYTEXMBUGA1UECwwOVGVrbmlrIEVsZWt0cm8xEzARBgNVBAMMCmFy c2ZpcWJhbGwxIzAhBgkqhkiG9w0BCQEWFGlxYmFsbG1hZ3NAZ21haWwuY29tMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArskh2lpmRKKiIz0oGaK3hs1W eGw2+X3bVP0HdGG+F/4zO8cESrDO2crSvDioWLy4fBQa4fE3U48t8IPX1m1XaAM6 4wLBcdusYhXrweJwZhb9ty1lLdvlx5rVbUITjcZiN0YzaN2QI5GjcTT9u1C/G8/4 wL+JYRWz1igUoWKDp39bjn8R8z1UZJe/yE+cWCFt2gMbumzIaNKgea8m2nw9b9LZ M1NUK2EL2KQZuOXh+u8bnFM7SLAlOT8vuMX5a0WfEaWKGelMWzxLjgMewbgX0mXT EfHRfPcxi/UgfZybUq2xgBiMlE3qbnzgjhMeiWytTSv+bV88eUFYmh1aDp6ZjwID AQABo1AwTjAdBgNVHQ4EFgQUdFmRbbZB4YtgHtHu5obLBktNivwwHwYDVR0jBBgw FoAUdFmRbbZB4YtgHtHu5obLBktNivwwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B AQsFAAOCAQEAWF8qZTeP4kOJA5kw4WXWbDk7ru/eXzmVPjI/5qMfdyb31bjwFMBy zTpO5sdkKwiMavvxx9uM+r2KgGbOUVSyRziB7PWbrbjhNrmGwuHV7fqcx9zW5C4s vVKbeSm3lKCijaACDoyw+qGXdAsP9S4GMe6uTScZYB0WtdL+Evx1M2T6eIxHMEm0 CMxnlMty6PQ7TRRBhh5W00oFshlF8kspUGp2pvJYGC2JAxrLyQnGSZlqOmU/T5Ms cbNQKG7rSKZtC3GFWfZMXhOV4mgs1bofnpEjc6DbGlh62zJ+qCupMG5uuWHStlbY lwvd8M1bpkGzXhMZltNEw218ZrXrCcTdhw==

---END CERTIFICATE---

Lampiran A.7 Berkas fcm-key.json

{

"type": "service_account",

"project_id": "arsfiqball-awas-banjir",

"private_key_id": "92891353cf6642512e0254740e6360374bfc7cad", "private_key": "---BEGIN PRIVATE

KEY---\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvDBrVFACaTqD2

\nX+M461SugrJDy9VrV5N2ReIHITnosd6muJrFwUWZElnlfK7ro2jl61Z2HEzPAfAd

\nOGLFSX9XOJMpEIGvNgWzj6kxRe8xH+n4Ro0ijcg/fiX96xnrqrLzkC7txhU13aeE

\ntM7+ASVEnHL9Uh5NlClAr0iWqXH6NQmoAyEQ4Be3QETrSJ080X2tNNEfdYv3qVWD

\np/QA6Ab9Pf7cSGNp44jP9QaTYQ0NVbR9ESlQgK3QWIcZWZ6/o3/Tlee0l/GGeNjx

\ntfUdv6zXpxMkplmA4q00TX2K14Bf44UzSMn4EWEoTb/QOabjjD4fyehHUNybLYn8

\nM9BpbvVDAgMBAAECggEAAonI5Wt5IZB5UG+ntYThp5Dyl8p5XKlnVH3P6+2Lgutg

\njW28CzKk8s+SArwrmlqDJC5YHk9SJJnkSvAtEnit2+xqMEK/UEFjlMZ4NbD/aZvX

\n9ZP3hCRAXpdSlehJg6IBuHsDPmRmA1Y+KxqNRwadbTpdh0nTcamJbZj9EvfMoZjX

\nV9Gr00MCkSlrx3Pir50iSaObGA4XdzSSIseEK25uK9BHuzxi/+QbnP0DNt8dJ0lt

\nSPxU1MX+dtYVEkOmqt0wBTXOaT3D4v2lLPNG55/F41X1Zku14SDrX8dJPTdrOtBI

\nJRTaC4rqtBSBe+RnlYD8vy8KffmPWbb4K3fZFuNO9QKBgQDZ7AD1Fdh9hSBHp2Q3

\nhUMYQO16hXBLSvxAejtuMsg3vpLz+JCN072DX3m7NYkHly0qsqC5H+Xbd4Yopef8

\nf7G1JdjYGg4wqGGHDFvpTBs8rjrnDrArPbc3tKUuX6N14V8rqiNCKmRV4PwkUjSo

\n9LWaOG3Qw4ToJUBMxAVf2tbwFwKBgQDNokBH6EVPvo96biRQFdY94kywshuUUgs/

\n1EJuVB4/FUa1yQszVvmSK0TL3oXukDapaeLKB5jYUblr6GgI9q7TbzTMZ8PFrK03

\nfz1CuFNnG6TsQMPI6Gm9qx7cySFVPaUlQd4HEGntS+VZi+VmKDnXqT30KrIkA7o/

\nf8e0z3aTtQKBgQDLZcSq/F3ZIhUz69/VFlO+YnOFBOD/1ZhF0hCAVXOc3AorHphF

\nWBktckKbYmdop0in7pumzkfrJM8aR2eUu9aw3gdcBE20SqTkuLtcsAVICNK/cG0r

\nnunQW5JFC0z1LIp4pc9M5WZK5bhRakzuWaDatcqBrMvzJTmzrM3bXtV4twKBgGQv

\nmtXt6mcR1uG1a+fA2+LGsMqd3CYFWwm8JqmOPjZJ7WuACf73bxyyDBCv190FUjx0

\nJFR+Iw+xsX9LefR0C3VkBvtXyuAyYypYycYJ/EiOBWo9m6X05h/MkXrMW3smT6G5

\nV61lZ9Z/VbytFhURoCzcfhzJ+ITndASgAvKq6YDJAoGAFN2d/dEt6aQUf4hjX5JM

\nAvwoa1z6AQh9xVAmrPxCPZhHWwDSg9qrvjPAop+HpdM8jsofjX0RMzHL2QmL4aub

\ng3vlH1MO2wEhADwXuiqfP1Agb55B/wfljZyKPoQCdIFouFBpHtKMTPQSJvlFvsPW

\nptzDyzDwMpEOj7h1cnNdukg=\n---END PRIVATE KEY---\n", "client_email": "firebase-adminsdk-t1uhn@arsfiqball-awas-banjir.iam.gserviceaccount.com",

"client_id": "114727792299410545488",

"auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url":

"https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url":

"https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-t1uhn%40arsfiqball-awas-banjir.iam.gserviceaccount.com"

}

Lampiran A.8 Struktur Program Aplikasi Mobile

mobile

├── android

│ ├── app

│ │ ├── build.gradle ... [lampiran C.1]

│ │ └── src

│ │ ├── debug

│ │ │ └── AndroidManifest.xml ... [lampiran C.2]

│ │ ├── main

│ │ │ ├── AndroidManifest.xml ... [lampiran C.3]

│ │ │ ├── kotlin

│ │ │ │ └── com

│ │ │ │ └── arsfiqball

│ │ │ │ └── awas_banjir

│ │ │ │ └── MainActivity.kt .... [l 3.4]

│ │ │ └── res

│ │ │ ├── drawable

│ │ │ │ └── launch_background.xml ... [l 3.5]

│ │ │ ├── mipmap-hdpi

│ │ │ │ └── ic_launcher.png ... [lampiran C.6]

│ │ │ ├── mipmap-mdpi

│ │ │ │ └── ic_launcher.png ... [lampiran C.6]

│ │ │ ├── mipmap-xhdpi

│ │ │ │ └── ic_launcher.png ... [lampiran C.6]

│ │ │ ├── mipmap-xxhdpi

│ │ │ │ └── ic_launcher.png ... [lampiran C.6]

│ │ │ ├── mipmap-xxxhdpi

│ │ │ │ └── ic_launcher.png ... [lampiran C.6]

│ │ │ └── values

│ │ │ └── styles.xml ... [lampiran C.7]

│ │ └── profile

│ │ └── AndroidManifest.xml ... [lampiran C.8]

│ ├── build.gradle ... [lampiran C.9]

│ ├── gradle

│ │ └── wrapper

│ │ └── gradle-wrapper.properties ... [lampiran C.10]

│ ├── gradle.properties ... [lampiran C.11]

│ └── settings.gradle ... [lampiran C.12]

├── assets

│ └── icon

│ └── icon.png ... [lampiran C.13]

├── lib

│ ├── app_api_service.dart ... [lampiran C.14]

│ ├── entities

│ │ ├── sensor_data.dart ... [lampiran C.15]

│ │ └── sensor_record_data.dart ... [lampiran C.16]

│ ├── main.dart ... [lampiran C.17]

│ ├── screens

│ │ ├── sensoraddtolist_screen.dart ... [lampiran C.18]

│ │ ├── sensoritem_screen.dart ... [lampiran C.19]

│ │ └── sensorlist_screen.dart ... [lampiran C.20]

│ └── widgets

│ ├── sensor_add_to_list_item.dart ... [lampiran C.21]

│ ├── sensor_list_item.dart ... [lampiran C.22]

│ ├── sensor_parameter_chart.dart ... [lampiran C.23]

│ └── simple_time_series_chart.dart .... [lampiran C.24]

└── pubspec.yaml ... [lampiran C.25]

Lampiran A.9 Catatan Keygen Android

Enter keystore password:

Re-enter new password:

What is your first and last name?

[Unknown]: Iqbal Mohammad Abdul Ghoni What is the name of your organizational unit?

[Unknown]: Teknik Elektro

What is the name of your organization?

[Unknown]: Universitas Sultan Ageng Tirtayasa What is the name of your City or Locality?

[Unknown]: Cilegon

What is the name of your State or Province?

[Unknown]: Banten

What is the two-letter country code for this unit?

[Unknown]: ID

Is CN=Iqbal Mohammad Abdul Ghoni, OU=Teknik Elektro, O=Universitas Sultan Ageng Tirtayasa, L=Cilegon, ST=Banten, C=ID correct?

[no]: yes

Generating 2.048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10.000 days

for: CN=Iqbal Mohammad Abdul Ghoni, OU=Teknik Elektro, O=Universitas Sultan Ageng Tirtayasa, L=Cilegon, ST=Banten, C=ID Enter key password for <key>

(RETURN if same as keystore password):

Re-enter new password:

[Storing /home/arsfiqball/skripsi-key.jks]

Warning:

The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using

"keytool -importkeystore -srckeystore /home/arsfiqball/skripsikey.jks destkeystore /home/arsfiqball/skripsi/home/arsfiqball/skripsikey.jks

-deststoretype pkcs12".

Lampiran A.10 Catatan Flutter Clean

Deleting build...

418ms

Deleting .dart_tool...

42ms

Deleting Generated.xcconfig...

13ms

Deleting flutter_export_environment.sh...

1ms

Lampiran A.11 Catatan Flutter Build APK

Running "flutter pub get" in mobile...

1,8s

You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64.

If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size.

To generate an app bundle, run:

flutter build appbundle --target-platform android-arm,android-arm64,android-x64

Learn more on: https://developer.android.com/guide/app-bundle

To split the APKs per ABI, run:

flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi

Learn more on:

https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split

Running Gradle task 'assembleRelease'...

Removed unused resources: Binary resource data reduced from 254KB to 214KB: Removed 15%

Running Gradle task 'assembleRelease'...

Running Gradle task 'assembleRelease'... Done 220,4s (!)

✓ Built build/app/outputs/flutter-apk/app-release.apk (20.2MB).

Lampiran A.12 Catatan Instalasi Alat Utilitas Pengujian

yarn global v1.19.2

[1/4] Resolving packages...

[2/4] Fetching packages...

info [email protected]: The platform "linux" is incompatible with this module.

info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.

info [email protected]: The platform "linux" is incompatible with this module.

info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.

[3/4] Linking dependencies...

warning "@vue/cli > [email protected]" has unmet peer dependency

"@babel/preset-env@^7.1.6".

[4/4] Building fresh packages...

success Installed "[email protected]" with binaries:

- awban-util Done in 78.27s.

Lampiran A.13 Berkas skripsi-private.pem

---BEGIN EC PRIVATE KEY---

MHcCAQEEIPNYnCqr/6jO7RTquLfU6to9QYLsnKOprjwiqFNo8uJUoAoGCCqGSM49 AwEHoUQDQgAEm+4o5Iy8Nxf6k2IiJbo+jRxdIC/gHJkHndgM7wTVO9tiLkYbMP5i NGL1wBmG03KhHpEZKdrXDc361FK+3eavvQ==

---END EC PRIVATE KEY---

Lampiran A.14 Berkas skripsi-public.pem

---BEGIN PUBLIC KEY---

MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEm+4o5Iy8Nxf6k2IiJbo+jRxdIC/g HJkHndgM7wTVO9tiLkYbMP5iNGL1wBmG03KhHpEZKdrXDc361FK+3eavvQ==

---END PUBLIC KEY---

Lampiran A.15 Berkas .env

PORT=8080 HOST=127.0.0.1

MONGO_URL=mongodb://localhost:27017 MONGO_DB=awasbanjir

APP_SECRET=random123 ADMIN_USERNAME=admin ADMIN_PASSWORD=admin

Lampiran A.16 Berkas konfigurasi Nginx

server {

root /var/www/html;

index index.html index.htm index.nginx-debian.html;

server_name default_server;

location / {

proxy_pass http://127.0.0.1:8080;

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection 'upgrade';

proxy_set_header Host $host;

proxy_cache_bypass $http_upgrade; } listen 80;

listen [::]:80;

listen 443 ssl;

listen [::]:443 ssl;

ssl_certificate /etc/ssl/certs/self-signed-skripsi.crt;

ssl_certificate_key /etc/ssl/private/self-signed-skripsi.key;

}

Lampiran A.17 Skema HTTP

Request Response Deskripsi

GET / (halaman web) Digunakan untuk menampilkan halaman Web admin IoT Platform.

POST /admin/login Body {

username: string, password: string }

Body { token: string }

Autentikasi untuk mendapatkan JWT khusus admin

GET /admin/revoke-token Header {

Body { token: string }

Memperbaharui JWT admin dengan masa aktif yang baru

Authorization: Bearer <jwt>

}

GET /device/list Query {

search: string, ids: string[], limit: number }

Header {

Authorization: Bearer <jwt>

}

Code 200 Body { _id: string, name: string, description: string, last_recorded: date, coordinate: { lat: number, lng: number }

}[]

Berguna untuk mengambil list IoT Device yang tersedia. Header Authorization hanya diperlukan oleh Web admin IoT Platform agar bisa mengakses data konfidensial seperti secret_key.

GET /device/:id/write Query {

ultrasonic: number, waterlevel: number, power: number, notify: number, _token: string }

Code 201 Digunakan untuk merekam data dari IoT Device dengan ID tertentu. Query notify diatur ke true jika IoT Device ingin memberikan notifikasi.

POST /device Header {

Authorization: Bearer <jwt>

} Body { name: string, description: string, secret_key: string, coordinate: { lat: number, lng: number }

}

Code 201 Body { _id: string, name: string, description: string, last_recorded: date, coordinate: { lat: number, lng: number }

}

Digunakan oleh Web admin IoT Platform untuk menambahkan perangkat IoT baru yang belum terdaftar.

PUT /device/:id Header {

Authorization: Bearer <jwt>

} Body { name: string, description: string, secret_key: string, coordinate: { lat: number, lng: number }

}

Code 200 Body { _id: string, name: string, description: string, last_recorded: date, coordinate: { lat: number, lng: number }

}

Berguna untuk memperbaharui data IoT Device dengan ID tertentu.

DELETE /device/:id Header {

Code 200 Berguna untuk menghapus IoT Device dengan ID tertentu.

Authorization: Bearer <jwt>

}

GET /device/:id Header {

Authorization: Bearer <jwt>

} Query {

with_log: boolean,

log_mode: enum (realtime | 1hour | 2days | 2weeks) }

Code 200 Body { _id: string, name: string, description: string, last_recorded: date, coordinate: { lat: number, lng: number }

}

Untuk mengambil rekaman data dari suatu IoT Device dengan ID tertentu.

Lampiran A.18 Spesifikasi Pengujian Fungsional

No Spesifikasi Masukan Tindakan Keluaran Diharapkan

1 Login web admin Memasukan username, password, lalu Login

Muncul layar utama berisi list perangkat IoT

2

Membuat identitas perangkat IoT

Menekan “Tambahkan” Muncul form perangkat IoT

Mengisi data

Menekan “Simpan”

Pindah ke layar utama

Perangkat IoT (sesuai data) baru muncul 3

Mengubah data identitas perangkat IoT

Menekan nama perangkat IoT pada list

Muncul form perangkat IoT yang terisi data lama

Mengubah data

Menekan “Simpan”

Pindah ke layar utama

Perangkat IoT yang baru diubah muncul

4

Menghapus identitas perangkat IoT

Menekan nama perangkat IoT pada list

Muncul form perangkat IoT yang terisi data lama Menekan “Hapus” Muncul alert konfirmasi Menekan “Tidak” Alert tertutup

Menekan “Hapus” lagi Muncul alert konfirmasi Menekan “Ya”

Pindah ke layar utama Perangkat IoT yang dihapus tidak ada di list 5

Menambahkan perangkat IoT ke List di aplikasi

Menekan “Tambah” pada halaman List Device

Muncul list perangkat yang belum ditambahkan ke List

Menekan “Tambahkan”

pada satu perangkat IoT

Tombol “Tambahkan”

berubah menjadi centang Menekan tombol

“Kembali”

Muncul list perangkat IoT yang telah ditambahkan 6

Perangkat IoT mengirim data pengukuran

Perangkat IoT mengirim data pengukuran dengan Id yang sebelumnya

ditambahkan pada List aplikasi mobile dan secret key yang sesuai

Hasil pengukuran terbaru muncul pada Grafik aplikasi mobile

Dokumen terkait