63
DAFTAR PUSTAKA
Akmal. 2017. Pengertian Flowchart Dan Simbol-Simbolnya Dalam Pemrograman. https://satujam.com. Diakses pada tanggal 10 Juni 2019.
Alamsyah, Andry. 2003. Pengantar Javascript. http://ilmukomputer.com. Diakses pada tanggal 10 Juni 2019.
Andhika, Farid. 2012. “Protokol Interchangeable Data Pada VMeS (Vessel Messaging System) Dan AIS (Automatic Identification System).” Jurnal Teknik ITS Vol.1. Hal.1.
C, Ariata. 2018. Apa Itu HTML? Pemahaman Dasar Tentang Bahasa Markup Hypertext. https://www.hostinger.co.id. Diakses pada tanggal 10 Juni 2019.
Faisal, Lutfi. 2017. Mengenal Node.js. https://www.codepolitan.com. Diakses pada tanggal 10 Juni 2019.
Harini. 2012. Automatic Identification System (AIS) Sebagai Alat
Bantu Pendeteksi Lokasi Kapal. http://re-teknik.com. Diakses pada tanggal 10 Juni 2019
Mahfud dkk. 2018. “Penerapan Protokol MQTT Pada Teknologi Wan (Studi Kasus Sistem Parkir Univeristas Brawijaya).” Informatika Mulawarman : Jurnal Ilmiah Ilmu Komputer Vol.12, Hal. 2.
Muhar Dian. 2015. Belajar MongoDB: Pengenalan Dasar MongoDB untuk Pemula. https://www.petanikode.com. Diakses pada tanggal 10 Juni 2019.
Masyhuri Imron. 2003. “Kemiskinan Dalam Masyarakat Nelayan.” Jurnal Masyarakat Dan Budaya. Vol.5, Hal.63.
Melia, Fenny. 2014. Diagram Swimlane. https://sis.binus.ac.id. Diakses Pada tanggal 9 Agustus 2019.
Novitasari, Candra. 2018. Pengertian Class Diagram Contoh, Dan Simbolnya.
https://pelajarindo.com. Diakses pada tanggal 10 Juni 2019.
Pratama, Aditya Rahmatullah. 2019. Belajar Unified Modeling Language (UML) - Pengenalan. https://www.codepolitan.com. Diakses Pada tanggal 10 Juni 2019.
Purnama, Evan. 2018. Berkenalan Dengan Teknologi MQTT. https://medium.com.
Diakses pada tanggal 9 Agustus 2019.
Riadi, Muchlisin. 2013. Use Case Diagram. https://www.kajianpustaka.com.
Diakses pada tanggal 10 Juni 2019.
Smith, Ryan. 2018. What Is Laravel Framework?. https://www.quora.com. Diakses pada tanggal 10 Juni 2019.
Wahyuni, Ayu Sri. 2016. Apa Itu Ionic Framework. https://www.codepolitan.com.
Diakses pada tanggal 10 Juni 2019.
Yuliano, Triswansyah. 2007. Pengenalan PHP. http://ilmukomputer.com. Diakses pada tanggal 10 Juni 2019
64 LAMPIRAN
Servis.js
var mqtt = require('mqtt');
var mongoose = require('mongoose');
const Device = require('./model/Device');
const TitikIkan = require('./model/TitikIkan');
const DeviceHistory =
require('./model/DeviceHistory');
const Perahu = require('./model/Perahu');
const User = require('./model/User');
mongoose.connect('mongodb://localhost:27017/neldas', {useNewUrlParser: true});
var option = {
host: 'ais.polindra.ac.id', port:1883,
clientId: 'server' };
const client = mqtt.connect(option);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', () => {
console.log('db connected ok');
})
client.on('connect', function () { console.log('mqtt connected ok');
client.subscribe("device/request", function(err){
if (!err) {
// console.log('device request subscribed');
}
function(err){
if (!err) {
// console.log('device request subscribed');
} });
client.subscribe('channel/vessel/+', function(err){
if (!err) {
// console.log('device update subscribed');
} });
client.subscribe("titik-ikan/push", function(err){
if (!err) {
// console.log('titik ikan push subscribed');
} });
client.subscribe("titik-ikan/request", function(err){
if (!err) {
// console.log('titik ikan request subscribed');
} });
client.subscribe("titik-ikan/store", function(err){
if (!err) {
// console.log('titik ikan store subscribed');
} });
client.subscribe("channel/perahu/+", function(err){})
function(err){
if (!err) {
// console.log('device request subscribed');
} });
client.subscribe('channel/vessel/+', function(err){
if (!err) {
// console.log('device update subscribed');
} });
client.subscribe("titik-ikan/push", function(err){
if (!err) {
// console.log('titik ikan push subscribed');
} });
client.subscribe("titik-ikan/request", function(err){
if (!err) {
// console.log('titik ikan request subscribed');
} });
client.subscribe("titik-ikan/store", function(err){
if (!err) {
// console.log('titik ikan store subscribed');
} });
client.subscribe("channel/perahu/+", function(err){})
subscribed');
} });
client.subscribe("channel/perahu/+", function(err){})
// client.subscribe('device/tracking', function(err){
// if(!err){
// console.log('device tracking subscribed');
// } // }) });
client.on("message", function (topic, p) { // var result = [topic, p].join(":");
if(topic.match("device/request")){
var data = JSON.parse(p);
// console.log('device reqested by :', data.id_user);
sendDeviceToUser('user', data.id_user);
}
else if(topic.match('channel/vessel/+')){
// result =
result.replace('device/update:', '');
// result = JSON.parse(result);
var result = p.toString();
broadCastDevice(result);
updateDevice(result);
}
else if(topic.match('channel/perahu/+')){
var result = p.toString();
result = JSON.parse(result);
updateDevice(result);
}
else if(topic.match('channel/perahu/+')){
var result = p.toString();
result = JSON.parse(result);
console.log(result.nama, 'Online');
}
else if(topic.match("titik-ikan/push")){
var data = JSON.parse(p);
console.log('titik ikan push by :', data.id_user);
broadcastTitikIkanToAll();
}
else if(topic.match("titik-ikan/request")){
var data = JSON.parse(p);
// console.log('titik ikan requested by :', data.id_user);
broadcastTitikIkanToUser(data.id_user);
}
else if(topic.match("titik-ikan/store")){
var data = JSON.parse(p);
console.log('titik ikan added by :', data.id_user);
storeTitikIkan(data);
}
})
/*
================================================
================== */
/**
* database service *
function broadCastDevice(data){
var array = data.split(',');
Device.find().where('no_seri').equals(array[0]).
exec(function(err, devices){
if(devices.length !== 0){
Perahu.find().where('id_device').equals(devices[
0]._id).exec(function(err, perahus){
if(perahus.length !== 0){
var photo = '';
if(!perahus[0].photo){
photo = '/storage/perahus/default.svg';
} else { photo = perahus[0].photo;
}
var data = {
nama: perahus[0].nama, no_seri: array[0], photo: photo,
last_information:
devices[0].last_information }
client.publish('channel/perahu/' + array[0], JSON.stringify(data));
} }) }
}) }
} }) }
}) }
function sendDeviceToUser(type, userId){
Device.find().where('status').equals(1).exec(fun ction(err, data){
// console.log(JSON.stringify(data));
if(data.length !== 0){
if(type == 'all'){
client.publish('device/tracking', JSON.stringify(data));
// console.log("Send Devices To All : " + JSON.stringify(data));
} else if(type == 'user'){
client.publish('device/user/' + userId +'/getDevice', JSON.stringify(data));
// console.log("Send Devices to User " + JSON.stringify(data));
} } });
}
function updateDevice(data){
var array = data.split(',');
console.log(array);
let today = new
Date().toISOString().slice(0, 10);
let hour = new Date();
var information = {
console.log(array);
let today = new
Date().toISOString().slice(0, 10);
let hour = new Date();
var information = { position: {
lat: parseFloat(array[2]), lng: parseFloat(array[3]) },
rssi: parseFloat(array[4]), roll: parseFloat(array[5]), pitch:parseFloat(array[6]), battery: parseFloat(array[7]), compass: parseFloat(array[8]), speed: parseFloat(array[9]), time: hour.getHours() + ":" +
hour.getMinutes() + ":" + hour.getSeconds() };
Device.updateOne({no_seri: array[0]}, { last_information: information,
status: parseInt(array[1]) }, function(err, affected, resp) {
DeviceHistory.findOne({no_seri:
array[0], date: today}, function(err, docs){
if(docs == null){
var history = new DeviceHistory({
no_seri: array[0], date: today,
information: [information]
})
history.save();
} else {
docs.update({information:
docs.information.push(information)});
})
history.save();
} else {
docs.update({information:
docs.information.push(information)});
docs.save().then(() => {
console.log('Device History updated');
});
}
// console.log(docs.length + 'HASIL!!');
});
onlineListen(array[0]);
// sendDeviceToUser('all', '');
});
}
function storeTitikIkan(data){
var titikIkan = new TitikIkan({
jenis: data.jenis,
position_lat: data.position_lat, position_lng: data.position_lng, keterangan: data.keterangan
});
titikIkan.save().then(() => {
console.log('titik ikan stored');
broadcastTitikIkanToAll() });
}
function broadcastTitikIkanToAll(){
TitikIkan.find().where('status').equals(true).ex
}
function broadcastTitikIkanToAll(){
TitikIkan.find().where('status').equals(true).ex ec(function (err, data) {
console.log(data)
client.publish('titik-ikan', JSON.stringify(data));
console.log('broadcast titik ikan to all user');
});
}
function treshold(data, userId){
var depreceted_index = [];
var i = 1;
console.log("===================================
=")
var array = [];
data.forEach(function(entry){
if(entry.type == "Private"){
if(entry.canView.includes(userId)){
array.push(entry) }
} else {
array.push(entry);
} })
console.log(array);
return array;
}
function onlineListen(no_seri){
setTimeout(()=> {
return array;
}
function onlineListen(no_seri){
setTimeout(()=> {
let hour = new Date();
var information = { position: { lat: 0, lng: 0 },
rssi: 0, roll: 0, pitch:0, battery: 0, compass: 0, speed: 0,
time: hour.getHours() + ":" + hour.getMinutes() + ":" + hour.getSeconds() };
Device.updateOne({no_seri:
no_seri},{status: 0, last_information:
information}, function(err, affected, resp) { console.log(no_seri + "Offline") });
}, 10000) }
aa
BIODATA PENULIS TUGAS AKHIR
Nama : Bayu Rasukma Raga Nomor Induk Mahasiswa : 1603093
Jenis Kelamin : Pria
Tempat & Tanggal Lahir : Indramayu, 7 September 1998 Status : Belum Nikah
Agama : Islam
Asal Ijazah Sekolah : Nama Sekolah Kota Sekolah Tahun Ijazah SD : MI GUPPI TELUKAGUNG Indramayu 2010
SMP : SMPN 1 INDRAMAYU Indramayu 2013 SMK : SMKN 1 INDRAMAYU Indramayu 2016 Program Studi/Jurusan : Teknik Informatika
Alamat Rumah Asal : Ds. Telukagung, Blok Sindu Praja, RT01B/RW01, Kec.
Indramayu, Kab. Indramayu No Telpon./HP : 08987014563
Email : bayurasukmaraga@gmail.com Nama Orang Tua : Wardinah – Nurcasih
Pekerjaan Orangtua : Wiraswasta
Alamat Orang Tua : Ds. Telukagung, Blok Sindu Praja, RT01B/RW01, Kec.
Indramayu, Kab. Indramayu
Judul Tugas Akhir : Rancang Bangun Aplikasi Tracking Perahu Nelayan Dosen Pembimbing : Sumarudin. S.Pd, M.T., M.Sc
Fachrul Pralienka Bani Muhamad, S.ST., M.Kom
16 Agustus 2019 Penulis,
Bayu Rasukma Raga 1603093