Kamis, 02 Juni 2016

SIM800L : Filtering Authentication Number SMS Command ( Hanya Menerima Perintah SMS dari Nomor Tertentu )



Yang Dimaksud Filtering Authentication Number adalah Hanya menerima perintah SMS dari Nomor Hp yang sudah terdaftar/kita Set ke dalam sistem.

Apabila ada SMS masuk ke dalam GSM Module Sistem kita maka akan dicek terlebih dahulu oleh Program apakah Nomor Pengirim SMS sudah terdaftar pada sistem (diijinkan control sistem) atau tidak.

baca terlebih dulu : control led / relay dengan perintah SMS

Apabila Nomor Pengirim SMS terverifikasi maka Sistem akan melanjutkan Proses pembacaan perintah pada Content SMS dan meng-Eksekusi isi Perintah

Namun Jika Nomor Pengirim SMS gagal diferifikasi maka Sistem akan menolak perintah/membiarkan SMS / tidak meng-Eksekusi isi perintah pada SMS

Library menggunakan Standar GSM atau menggunakan Seeduino

Disini saya Mencoba Program Menggunakan SIM800L Module
Wiring sebagai berikut :

Wiring SIM800L <--> Arduino Uno
RXD <--> D8
TXD <--> D7
VCC <--> 3.7V melalui stepdown dari 5V Arduino
GND <--> GND

LED Merah (+) ==> D5
LED Biru (+) ==> D6
LED Merah & Biru (-) ==> GND

Berikut adalah Contoh Simple Sketch Filtering Authentication Number 
Silahkan dikembangkan lagi


  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
// **** FILTERING AUTHENTICATION NUMBER BY DANI ****

#include <gprs.h>
#include <softwareserial.h>
 
#define TIMEOUT    5000
#define LED_PIN    13
#define ON 1
#define OFF 0

const int MERAH = 5;
const int BIRU = 6;
 
int StatusMerah;
int StatusBIRU;
int AuthNumber = 0;
GPRS gprs;
 
void setup() {
  pinMode (MERAH , OUTPUT);
  pinMode (BIRU , OUTPUT);
  Serial.begin(9600);
  while(!Serial);
 
  Serial.println("Starting SIM800 Auto Read SMS");
  gprs.preInit();
  delay(1000);
 
  while(0 != gprs.init()) {
      delay(1000);
      Serial.print("init error\r\n");
  } 
 
  //Set SMS mode to ASCII
  if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
   
  //Start listening to New SMS Message Indications
  if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;
  }
 
  Serial.println("Init success");
}
 
//Variable to hold last line of serial output from SIM800
char currentLine[500] = "";
int currentLineIndex = 0;
 
//Boolean to be set to true if message notificaion was found and next
//line of serial output is the actual SMS message content
bool nextLineIsMessage = false;
 
void loop() {
  //Write current status to LED pin
  digitalWrite(MERAH, StatusMerah);
  digitalWrite(BIRU, StatusBIRU);
   
  //If there is serial output from SIM800
  if(gprs.serialSIM800.available()){
    char lastCharRead = gprs.serialSIM800.read();
    //Read each character from serial output until \r or \n is reached (which denotes end of line)
    if(lastCharRead == '\r' || lastCharRead == '\n'){
        String lastLine = String(currentLine);
         
        //If last line read +CMT, New SMS Message Indications was received.
        //Hence, next line is the message content.
        if(lastLine.startsWith("+CMT:")){
        
          Serial.println(lastLine);
        //Authentication Number
          if(lastLine.indexOf("+6289XXXXXXXX") >= 0){   //Ganti pakai Nomor Hp kamu ya bro
          AuthNumber = 1; 
          Serial.println("------------------------");   // Keterangan FAILED Authentication
          Serial.println("Authentication Success.."); 
          Serial.println("------------------------"); 
          nextLineIsMessage = true;  }

          if(AuthNumber == 0){
          Serial.println("xxxxxxxxxxxxxxxxxxxxxxx");   // Keterangan SUCCESS Authentication 
          Serial.println("Authentication Failed.."); 
          Serial.println("xxxxxxxxxxxxxxxxxxxxxxx");  
          }
        } 
        
        else if (lastLine.length() > 0) {
           
          if(nextLineIsMessage) {
            Serial.println(lastLine);
             

// ########## MEMBACA KONTEN SMS DAN MENCARI+MENGARTIKAN KONTEN SMS KE PROGRAM #########
            //Kendali LED MERAH
            if(lastLine.indexOf("MERAH ON") >= 0){
              StatusMerah = 1;
              Serial.println("LED MERAH DINYALAKAN");} 
              else if(lastLine.indexOf("MERAH OFF") >= 0) {
              StatusMerah = 0;
              Serial.println("LED MERAH DIMATIKAN");}
            //Kendali LED BIRU
            if(lastLine.indexOf("BIRU ON") >= 0){
              StatusBIRU = 1;
              Serial.println("LED BIRU DINYALAKAN");} 
              else if(lastLine.indexOf("BIRU OFF") >= 0) {
              StatusBIRU = 0;
              Serial.println("LED BIRU DIMATIKAN");}
             
            nextLineIsMessage = false;
            AuthNumber = 0;  // Mengembalikan Status AuthNumber Untuk SMS berikutnya
          }
           
        }
         
        //Clear char array for next line of read
        for( int i = 0; i < sizeof(currentLine);  ++i ) {
         currentLine[i] = (char)0;
        }
        currentLineIndex = 0;
    } else {
      currentLine[currentLineIndex++] = lastCharRead;
    }
  }
}


Berikut Hasil Testing menggunakan Serial Monitor dengan 2 kali kirim SMS dengan Nomor yang berbeda (1 terdaftar dan 1 tidak terdaftar)


 Terimakasih Sudah Mampir......

Semoga Bermanfaat...........

 

6 komentar:

  1. mas, boleh bantu saya mas ?
    saya lagi kebingungan buat tugas, saya buat projek kunci pintu sms dan alarm sensor,
    untuk sms nya saya pakai modem wavecom, coding nya sama dengan sim900
    untuk mikro nya saya pakek arduino uno,
    sensor nya saya pakek pir,
    saya udah coba buat projek hidup mati led dengan perintah dari sms, dan sukses,
    saya juga dah coba alarm sensor pir dengan pengaplikasian sms(kalok pir ngebaca gerakan, maka uno akan kirim sms ke no yg terdaftar)

    nah pas saya coba gabungin 2 source code ini, muncul trouble mas,
    trouble sampe saat ini sih uno nya gak bisa kontrol led via sms (receiving sms)
    tapi uno tetep kirim sms saat program jalan, dan saat alarm aktif,

    mohon dibantu mas. trima kasih

    BalasHapus
    Balasan
    1. mas saya mau tanya bagaimana cara menerima smsnya saya pakek yg versi 2

      Hapus
  2. kalau nomor lebih dari satu gimana ?

    BalasHapus
  3. infonya bagus dan bermanfaat mas.
    mau tanya, kalau setelah diperintah lampu ON kemudian ada delay 2 detik kemudian kembali ke OFF gmn ya mas? terima kasih

    BalasHapus
  4. thanks gan.. Yup sukses gan.. ane dah terapkan sisipan authentikasinya dan bekerja.. nomor lain gak bisa ngakses meski isi SMS nya sama.. kemaren ane nyoba nggabungin kontrol relay ini sama sketch agar auto answer.. lumayan kan bisa sekalian nyadap tapi nggak hasil hasil.. akhirnya kepikiran nambahin AT command biar bisa auto answer dan sukses dengan nambahin seperti perintah SMS ASCII mode
    Serial.begin(9600);
    while (!Serial);

    Serial.println("Starting SIM800 Auto Read SMS");
    gprs.preInit();
    delay(1000);

    //Set to auto answer
    if(0 != gprs.sendCmdAndWaitForResp("ATS0=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:ATSO");
    return;
    }

    while (0 != gprs.init()) {
    delay(1000);
    Serial.print("init error\r\n");
    }

    //Set SMS mode to ASCII
    if (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
    ERROR("ERROR:CNMI");
    return;

    BalasHapus
  5. Mas, bisa tau flowchart programnya ga. Saya mau lebih memahami programnya
    Terimakasih

    BalasHapus

Copyright © 2014 Belajar Arduino | Designed With By Blogger Templates | Distributed By Gooyaabi Templates
Scroll To Top