Langsung ke konten utama

Kendali Peralatan Internet di BTS RT RW NET via SMS

Bagi yang pernah mengoperasikan RT RW NET dan menggunakan BTS atau sistem pancar ulang wifi mungkin sudah tidak asing lagi dengan kendala perangkat yang kadang kala mengalami error atau hang sehingga tidak dapat bekerja dengan baik. Mengatasi kendala itu biasanya dilakukan dengan mencabut adaptor  perangkat atau mencabut arus DC yang masuk ke perangkat selama beberapa detik.
Untuk wilayah pedesaan sangat dimungkinkan terjadinya error perangkat akibat listrik yang tidak stabil atau sering mengalami pemadaman listrik secara mendadak maupun error karena induksi petir. Perangkat akan normal kembali ketika sistem ini direstart.

Untuk lokasi BTS yang berada di rumah atau kantor kita sendiri yang selalu ada teknisi maka restart perangkat ini tidak menjadi masalah karena dapat dilakukan secara manual. Namun untuk lokasi yang jarang ada penghuninya ataupun berada di tengah hutan atau di atas bukit maka akan sangat merepotkan ketika teknisi harus datang ke lokasi hanya untuk mencabut arus DC beberapa saat. Untuk kasus seperti inilah maka Remote Terminal Unit diperlukan.  

Remote terminal unit menggunakan sms arduino dapat dioperasikan melalui internet maupun melalui sistem seluler (SMS). Ketika backbone atau input internet di BTS yang mengalami gangguan (hang atau macet) maka internet tidak berfungsi sehingga diperlukan Remote Terminal Unit yang menggunakan sistem seluler (SMS).
Artikel ini merupakan artikel pendukung dari Alat RTU ( Remote Terminal Unit) Versi pertama dengan kemampuan hanya melakukan kontrol ( On, Off dan Restart) dari perangkat yang terpasang di remote Area ( jarak jauh ) melaui SMS.

Disclaimer :
"Pada artikel sekaligus tutorial ini program maupun diagram dari perangkat benar-benar bisa diaplikasikan dan dibuat sendiri karena sudah kami ujicoba dan sesuai kondisi aslinya. Seluruh artikel ini boleh dicopy dan dimanfaatkan untuk kepentingan pribadi maupun kepentingan usaha, untuk repost mohon dapat mencantumkan sumbernya."



Gambar 1 Rangkain Sederhana RTU SMS


Cara Kerja Perangkat (Sistem) :
Perangkat RTU dengan sms arduino ini secara garis besar adalah saklar yang bisa dikendalikan jarak jauh. Karena fungsi utamanya adalah untuk melakukan Penyalaan Ulang (Restartt/Reboot), maka default alat-alat yang terhubung ke RTU ini adalah menyala. Ketika dalam posisi menyala, maka relay-relay yang menjadi saklar akan dalam keadaan off (Supaya relay lebih awet) , dan relay akan menyala ketika reboot atau restart sedang berlangsung. Ketika restart berlangsung, relay dalam keadaan menyala selama beberapa detik yang akan memutus arus ke alat yang terhubung ke RTU sehingga alat akan menyala ulang dan error atau Hang bisa teratasi.

Gambar 2. Koneksi perangkat RTU V1.0


SMS yang dikirim ke alat, setelah dieksekuri (dengan mengaktifkan atau menonaktifkan relay), maka nomer pengirim akan mendapat balasan dari alat seperti ditunjukkan pada Gambar 3 di bawah ini :

Gambar 3. Contoh SMS dengan Alat

Piranti Keras (Hardware)
Dalam pembuatan RTU ini terdiri dari 2 jenis perangkat yaitu perangkat keras (Hardware) dan Software (Piranti Lunak). Peralatan yang digunakan dalam pembuatan RTU ini adalah sebagai berikut :

                                                        Tabel 1 Perangkat yang digunakan

Piranti Utama dalam Sistem RTU ini adalah Arduino Nano, berikut ini pinout dari arduino nano beserta koneksi Pin arduino ke piranti lain

Gambar 4. Pinout Arduino Nano

Koneksi dari arduino Nano ke perangkat-perangkat pendukung dapat dilihat pada tabel 2 di bawah ini


Tabel 2 Koneksi Arduino

Untuk yang menguasai elektronika dan terbiasa menyolder bisa menggunakan modem Wavecom baik tipe USB maupun RS232 dan langsung melakukan jumper dari modul GSM pada PCB di dalam modem (casing modem dibuka terlebih dahulu) sehingga akan langsung terkoneksi dengan arduino secara TTL. Titik yang dilakukan penyolderan ditunjukkan pada gambar di bawah ini

Gambar 5. Modem  Wavecom dimodifikasi  TTL

Gambar 6. Modem Wavecom yang telah dimodifikasi ke TTL

Untuk yang belum terlalu menguasai elektronika dapat menggunakan wavecom M1306B versi RS 232, supaya bisa berkomunikasi dengan arduino maka dibutuhkan Kit atau piranti RS 232 Converter.
Gambar 7. PengkabelanModem Wavecom RS232

Setelah semua piranti dirakit dan terhubung sesuai dengan skema pengkabelan, maka selanjutnya dibuat program pada sketch arduino 

Piranti Lunak (Software)
Untuk piranti lunak sms arduino yang digunakan disajikan pada source code di bawah ini, source code ini diambil dari sumber yang telah dituliskan pada header program dan telah dimodifikasi sehingga berfungsi sesuai dengan kinerja alat yang diharapkan.

Library yang digunakan pada program arduino adalah SoftwareSerial.h , sengaja tidak digunakan library khusus untuk GSM karena arduino yang digunakan adalah arduino Nano dengan kapasitas memori yang tidak terlalu besar sehingga jika menggunakan library khusus GSM akan memakan space memori yang cukup besar.

Instruksi SMS arduino dari aksi dari perangkat dapat dilihat pada tabel berikut ini :
Pada RTU Versi pertama ini maka setiap nomer yang mengirim sms dengan format yang benar, maka aksi dari alat akan dilakukan, kemudian sms balasan juga akan diterima oleh nomer pengirim. 

                     Tabel 3 Perintah SMS                   


Setelah semua piranti dirakit dan terhubung sesuai dengan skema pengkabelan, maka selanjutnya dibuat program pada sketch arduino dan kemudian diupload ke arduino nano
                                                                              
Gambar 8. Sketch Arduino

Program lengkap dari Remote Terminal Unit  Versi Pertama ini dapat dilihat pada source code dibawah, untuk penjelasan dari masing-masing code ada di sebelah dari tiap code. Source code  ini dicopy lalu dipastekan di sketch arduino IDE. 

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
// Sumber program : https://www.youtube.com/watch?v=Hq1ZGWWc0e4
// Telah diedit dan disesuaikan


#include <SoftwareSerial.h>

//sender phone number with country code

//GSM Module RX pin to Arduino 11
//GSM Module TX pin to Arduino 12
#define rxPin 11
#define txPin 12
SoftwareSerial wavecom(rxPin,txPin);

#define RELAY_1 2
#define RELAY_2 3
#define RELAY_3 4
#define RELAY_4 5

String smsStatus,senderNumber,receivedDate,msg;
boolean isReply = false;

void setup() {
  digitalWrite(RELAY_1, HIGH);
  digitalWrite(RELAY_2, HIGH);
  digitalWrite(RELAY_3, HIGH);
  digitalWrite(RELAY_4, HIGH);
  delay(1000);
  
  Serial.begin(9600);
  Serial.println("Arduino serial initialize");
  
  wavecom.begin(9600);
  Serial.println("wavecomL software serial initialize");

  pinMode(RELAY_1, OUTPUT); //Relay 1
  pinMode(RELAY_2, OUTPUT); //Relay 2
  pinMode(RELAY_3, OUTPUT); //Relay 3
  pinMode(RELAY_4, OUTPUT); //Relay 4

  smsStatus = "";
  senderNumber="";
  receivedDate="";
  msg="";

  wavecom.print("AT+CMGF=1\r"); //SMS text mode
  delay(1000);
  wavecom.println("AT+CNMI=1,1,0,0,0"); // Kode indikasi sms masuk 
                                        //diaktifkan dengan format 
                                        //+CMTI=<memori>,<indeks> 
  delay(2000);
  wavecom.println("AT+CMGD=1,4");   //delete all sms
  delay(3000);
}

void loop() {
while(wavecom.available()){
  parseData(wavecom.readString());
}
while(Serial.available())  {
  wavecom.println(Serial.readString());
}
} //main loop ends

//***************************************************
void parseData(String buff){
  Serial.println(buff);

  unsigned int len, index;
  //////////////////////////////////////////////////
  //Remove sent "AT Command" from the response string.
  index = buff.indexOf("\r");
  buff.remove(0, index+2);
  buff.trim();
  //////////////////////////////////////////////////

  if(buff != "OK"){
    index = buff.indexOf(":");
    String cmd = buff.substring(0, index);
    cmd.trim();
    
    buff.remove(0, index+2);
    
    if(cmd == "+CMTI"){
      //get newly arrived memory location and store it in temp
      index = buff.indexOf(",");
      String temp = buff.substring(index+1, buff.length()); 
      temp = "AT+CMGR=" + temp + "\r"; 
      //get the message stored at memory location "temp"
      wavecom.println(temp); 
    }
    else if(cmd == "+CMGR"){
      extractSms(buff);
      Serial.print("Pesan : ");
      Serial.println(msg);
      Serial.print("Nomer : ");
      Serial.println(senderNumber);      
        doAction();
        wavecom.println("AT+CMGD=1,4");   //delete all sms
        delay(3000);  
    }
  }
  else{
  //The result of AT Command is "OK"
  }
}

//************************************************************
void extractSms(String buff){
   unsigned int index;
   
    index = buff.indexOf(",");
    smsStatus = buff.substring(1, index-1); 
    buff.remove(0, index+2);
    
    senderNumber = buff.substring(0, 14);
    buff.remove(0,19);
   
    receivedDate = buff.substring(0, 20);
    buff.remove(0,buff.indexOf("\r"));
    buff.trim();
    
    index =buff.indexOf("\n\r");
    buff = buff.substring(0, index);
    buff.trim();
    msg = buff;
    buff = "";
    msg.toLowerCase();
}

void doAction(){
  if(msg == "alat1 off"){  
    digitalWrite(RELAY_1, LOW);
    Reply("Alat 1 dinonaktifkan");
  }
  else if(msg == "rst1"){  
    digitalWrite(RELAY_1, LOW);
    delay(3000);
    digitalWrite(RELAY_1, HIGH);
    Reply("Alat 1 direstart");
  }
  else if(msg == "alat1 on"){
    digitalWrite(RELAY_1, HIGH);
    Reply("Alat 1 diaktifkan");
  }
  else if(msg == "alat2 off"){
    digitalWrite(RELAY_2, LOW);
    Reply("Alat 2 dinonaktifkan");
  }
  else if(msg == "alat2 on"){
    digitalWrite(RELAY_2, HIGH);
    Reply("Alat 2 diaktifkan");
  }
  else if(msg == "rst2"){  
    digitalWrite(RELAY_2, LOW);
    delay(3000);
    digitalWrite(RELAY_2, HIGH);
    Reply("Alat 2 direstart");
  }
   else if(msg == "alat3 off"){
    digitalWrite(RELAY_3, LOW);
    Reply("Alat 3 dinonaktifkan");
  } 
    else if(msg == "alat3 on"){
    digitalWrite(RELAY_3, HIGH);
    Reply("Alat 3 diaktifkan");
  } 
    else if(msg == "rst3"){  
    digitalWrite(RELAY_3, LOW);
    delay(3000);
    digitalWrite(RELAY_3, HIGH);
    Reply("Alat 3 direstart");
  }
    else if(msg == "alat4 off"){
    digitalWrite(RELAY_3, LOW);
    Reply("Alat 4 dinonaktifkan");
  } 
    else if(msg == "alat4 on"){
    digitalWrite(RELAY_3, HIGH);
    Reply("Alat 4 diaktifkan");
  } 
    else if(msg == "rst4"){  
    digitalWrite(RELAY_4, LOW);
    delay(3000);
    digitalWrite(RELAY_4, HIGH);
    Reply("Alat 4 direstart");
  }
    else if(msg == "all on"){
    digitalWrite(RELAY_1, HIGH);
    digitalWrite(RELAY_2, HIGH);
    digitalWrite(RELAY_3, HIGH);
    digitalWrite(RELAY_4, HIGH);
    Reply("Semua Alat diaktifkan");
  } 
    else if(msg == "all off"){
    digitalWrite(RELAY_1, LOW);
    digitalWrite(RELAY_2, LOW);
    digitalWrite(RELAY_3, LOW);
    digitalWrite(RELAY_4, LOW);
    Reply("Semua Alat dinonaktifkan");
  } 

    else if(msg == "rst all"){
    digitalWrite(RELAY_1, LOW);
    digitalWrite(RELAY_2, LOW);
    digitalWrite(RELAY_3, LOW);
    digitalWrite(RELAY_4, LOW);
    delay(3000);
    digitalWrite(RELAY_1, HIGH);
    digitalWrite(RELAY_2, HIGH);
    digitalWrite(RELAY_3, HIGH);
    digitalWrite(RELAY_4, HIGH);
    Reply("Semua Alat direstart");
  } 
  
  smsStatus = "";
  senderNumber="";
  receivedDate="";
  msg="";  
}

void Reply(String text)
{
    wavecom.print("AT+CMGF=1\r");
    delay(1000);
  //  wavecom.print("AT+CMGS=\""+PHONE+"\"\r");
    wavecom.print("AT+CMGS=");
    delay(10);
    wavecom.println(senderNumber);  
    delay(2000);
    wavecom.print(text);
    delay(100);
    wavecom.write(0x1A); //ascii code for ctrl-26 //wavecom.println((char)26); //ascii code for ctrl-26
    delay(5000);
    Serial.println("SMS Balasan Telah Terkirim");
}

Postingan populer dari blog ini

Membuat 2 ISP dalam 1 Mikrotik

  Mikrotik merupakan perangkat yang cukup fleksibel dan bisa kita atur konfigurasinya sesuai dengan kebutuhan jaringan yang ada. Banyak macam fitur yang ditambahkan pada sistemnya, misal seperti fungsi Firewall, Routing, Managment Bandwidth, Web-Proxy, Samba Server, L2 Management, Hotspot, RADIUS, dll. Selain itu produk MikroTik umumnya memiliki beberapa port ethernet yang secara default masing-masing berjalan secara independent, dengan kata lain kita bisa menggunakannya untuk lebih dari satu Jalur ISP dengan metode Loadbalance atau juga Failover. Atau bisa juga kita konfigurasi dengan mode bridging untuk kebutuhan L2 Management. Pada artikel kali ini kita akan mencoba untuk melakukan konfigurasi router MikroTik dengan menggunakan koneksi 2 jalur ISP. Dengan 2 jalur ISP tersebut, kita akan buat misal 'ISP A' hanya khusus untuk jalur internet 'Network A' sedangkan 'ISP B' khusus untuk jalur internet 'Network B'. Untuk kebutuhan diatas nanti kita bisa meng...

MINI SERVER (DATABASE DAN WEBSITE) dari STB HG680P FIBERHOME

 Pada artikel kali ini akan dibahas mengenai pembuatan mini server dari STB HG680P Fiberhome. STB tipe ini dapat diinstal Operating System (OS) Linux ARM sehingga dapat berfungsi sebagai komputer mini maupun sebagai mini server. STB Fiberhome ini memiliki spesifikasi sebagai berikut : oC Amlogic CPU quad core ARM Cortex-A53 @ up to 1.51 GHz GPU Mali-450MP RAM 2GB Storage Total 8GB (ROM System dan Internal 4GB) Built in WiFi HDMI 1x Port LAN 2x Slot USB 1x Slot SD-CARD 1x Port RCA Aux 1x Port SPDIF Gambar 1 STB Fiberhome HG680P STB jenis ini banyak digunakan oleh operator TV internet seperti Indihome, produk bekasnya banyak dijumpai di marketplace seperti Tokopedia, Shoope, Bukalapak, dll. Langkah-langkah Pembuatan STB menjadi mini server Linux STB yang akan dibuat menjadi mini server adalah STB yang telah di root sebelumnya, cara root dapat dilihat pada artikel lain. Peralatan yang harus dipersiapkan adalah           - STB HG680P (sudah di root)  ...

Cara Program Handy Talkie (HT) Motorola CP1300

 Motorola adalah salah satu brand yang cukup terkenal di bidang radio telekomunikasi karena kualitasnya yang baik dan kehandalannya untuk komunikasi radio walaupun harganya jauh lebih mahal dari merk lain. Pada artikel ini akan dibagikan cara program HT Motorola CP 1300.  Gambar 1 HT CP 1300 Dalam memrogram Motorola CP1300 diperlukan interface antara komputer/laptop dengan perangkat radio komunikasi yang dapat diprogram. Banyak interface yang sudah dijual jadi, namun seringkali pada tipe HT Motorola CP1300 ini kabel tidak bisa digunakan yang biasanya ditandai dengan perangkat radio yang ridak terdeteksi pada program (software). Kami merakit sendiri Kabel data atau interface yang digunakan untuk melakukan pemrograman Motorola CP 1300 ini. Gambar-gambar di bawah ini akan menunjukkan skema dan foto-foto pada Kabel Data Motorola CP 1300 hasil rakitan sendiri. Gambar 2 Kabel Data Rakitan  Skema atau wiring dari Kabel Data USB yang ditunjukkan pada gambar 2, dijabarkan pada ga...