Senin, 13 Maret 2017

Fingerprint + Arduino + Raspberry PI + Camera Raspi

Sebagai berikut adalah contoh dari kode untuk
mendaftarakn data fingerprint via Arduino yang kemudian di arsupkan ke Raspberry PI.

Juga kode untuk memastikan bahwa sidik jari ybs adalah finger yang mana....


Arduino.ino


#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

char kon;
uint8_t id;
uint8_t getFingerprintEnroll();
String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete

int getFingerprintIDez();
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  {
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(500);
 
  Serial.begin(9600);
 // Serial.println("Adafruit Fingerprint sensor enrollment");
  finger.begin(9600);
 
  if (finger.verifyPassword()) {
   // Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("!Did not find fingerprint sensor :(");
    while (1);
  }
  inputString.reserve(200);
}

uint8_t readnumber(void) {
  uint8_t num = 0;
  boolean validnum = false;
  while (1) {
    while (! Serial.available());
    char c = Serial.read();
    if (isdigit(c)) {
       num *= 10;
       num += c - '0';
       validnum = true;
    } else if (validnum) {
      return num;
    }
  }
}

void loop(){
   if (stringComplete) {
    Serial.println(inputString);
    inputString = "";
    stringComplete = false;
  }
}


void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    kon=inChar;
    inputString += inChar;
    if(inChar=='S'){
       Serial.println("#Please Tap");
      while (kon=='S'){
        int hrs=getFingerprintIDez();
        if(hrs==214){kon='Y';Serial.println(kon);}
        delay(50);
       }
    }
    else if(inChar=='Z'){
          kon='Z';
     int hrs=0;  
       while (hrs<=0){
        hrs=getFingerprintEnroll();
        if(hrs==101){
        kon='E';
        //Serial.println(kon);
        delay(1000);
      }
        delay(50);
       }
       
        delay(50);
    }
   else if(inChar=='D'){
     kon='D';
     int hrs=0;  
   
       while(hrs <=0 ){
       
         ////
        hrs=hapus();
        if(hrs==112){kon='R';Serial.println(kon);delay(1000);}
        delay(50);
       }
        delay(50);
    }

    else if (inChar == '@') {
      stringComplete = true;
    }
  }
}

//===================================XXXX

uint8_t getFingerprintEnroll() {
    Serial.println("#Input Enroll:");
  //Serial.println("Ready to enroll a fingerprint! Please Type in the ID # you want to save this finger as...");
  id = readnumber();
  //Serial.println(id);
 
  int p = -1;
//  Serial.print("Waiting for valid finger to enroll as"); Serial.println(id);
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("@Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("@wait");delay(1000);
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("!Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("!Imaging error");
      break;
    default:
      Serial.println("!Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("@Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("!Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("!Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("!Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("!Could not find fingerprint features");
      return p;
    default:
      Serial.println("!Unknown error");
      return p;
  }
 
  //Serial.println("#Remove finger");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }
  //Serial.print("ID "); Serial.println(id);
  p = -1;
  Serial.println("#Place same finger again");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
    switch (p) {
    case FINGERPRINT_OK:
      Serial.println("@Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("@wait");delay(1000);
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("!Communication error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("!Imaging error");
      break;
    default:
      Serial.println("!Unknown error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(2);
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("@Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("!Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("!Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("!Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("!Could not find fingerprint features");
      return p;
    default:
      Serial.println("!Unknown error");
      return p;
  }
 
  // OK converted!
//  Serial.print("Creating model for #");  Serial.println(id);
 
  p = finger.createModel();
  if (p == FINGERPRINT_OK) {
    Serial.println("#MATCH");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("!Communication error");
    return p;
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {
    Serial.println("#Fingerprints did not match");
    return p;
  } else {
    Serial.println("!Unknown error");
    return p;
  }  
 
//  Serial.print("ID "); Serial.println(id);
  p = finger.storeModel(id);
  if (p == FINGERPRINT_OK) {
    Serial.println("#STORED");
    return 101;
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("!Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("!Could not store in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("!Error writing to flash");
    return p;
  } else {
    Serial.println("!Unknown error");
    return p;
  }  
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
 
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return 214;
 
  // found a match!
  Serial.print("#Found#"); Serial.print(finger.fingerID);
  Serial.print("#"); Serial.println(finger.confidence);
  kon='X';
  delay(3000);
  //return finger.fingerID;
  return 212;
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

int hapus(){
 
  Serial.println("#WHAT ID");

  uint8_t id = readnumber();
//  while (true) {
//    while (! Serial.available());
//    char c = Serial.read();
//    if (! isdigit(c)) break;
//    id *= 10;
//    id += c - '0';
//  }
 
  //Serial.print("#Deleting#");Serial.println(id);
 
 return deleteFingerprint(id);
}

uint8_t deleteFingerprint(uint8_t id) {
  uint8_t p = -1;
 
  p = finger.deleteModel(id);

  if (p == FINGERPRINT_OK) {
    //Serial.println("Deleted!");
    return 112;
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("!Communication error");
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    Serial.println("!Could not delete in that location");
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    Serial.println("!Error writing to flash");
    return p;
  } else {
    Serial.print("!Unknown error: 0x"); Serial.println(p, HEX);
    return p;
  }  
}



Python.py

import serial

import MySQLdb
from time import gmtime, strftime
from random import randint
from picamera import PiCamera
from time import sleep

#camera = PiCamera()
#camera.rotation = 180

db = MySQLdb.connect("localhost","root","","db_project")
cursor = db.cursor()

db2 = MySQLdb.connect("localhost","root","","db_project")
cursor2 = db2.cursor()

id=""
ruang="A09"

read_serial0=""
#ser = serial.Serial('/dev/ttyACM0',9600)
ser = serial.Serial('COM8',9600)

def mtrim(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

def find_str(s, char):
    index = 0

    if char in s:
        c = char[0]
        for ch in s:
            if ch == c:
                if s[index:index+len(char)] == char:
                    return index

            index += 1

    return -1

def simpanEnroll():
    tgl=strftime("%Y-%m-%d", gmtime())
    jam=strftime("%H:%M:%S", gmtime())
    stgl=strftime("%Y%m%d", gmtime())
    sjam=strftime("%H%M%S", gmtime())
    img=   stgl+sjam+".jpg";

    #camera.framerate = 15
    #camera.start_preview()

    sleep(1)
    #camera.capture('/var/www/html/project/ypathfile/'+img)
    sleep(1)
    #camera.stop_preview()
    sql='INSERT INTO `tb_enroll` (`is`, `namaSiswa`) VALUES ("%s", "%s")' % (id, namaSiswa,'-')
    try:
        cursor.execute(sql)
        db.commit()
    except:
        db.rollback()
         
    try:
        cursor2.execute(sql)
        db2.commit()
    except:
        db2.rollback()
    print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
            ###################

           
def enroll():
    print("Proses Enroll")

    ser.write("Z")
    ser.flush()
    #sleep(1)
    print("Start")
   
    lop=0
    while lop<1:
        msg = ser.readline()
        if find_str(msg,"#Input Enroll:")>=0:
            id=str(input("Masukan ID Anda!"))
            ser.write(id)
            ser.write('\n')
            ser.flush()
            ser.flush()
            sleep(1)

        elif find_str(msg,"@Image converted")>=0:
            print(msg)
            print("Silakan Lepas Finger Anda Untuk Persiapan Tap Lagi")
            #sleep(1)
       
        elif find_str(msg,"@")>=0:
            print(msg)
           
        elif find_str(msg,"!")>=0:
            print(msg)
            #sleep(1)
            lop=1

        elif find_str(msg,"E")>=0:
            print(msg)
            #sleep(1)
            lop=1
           
        elif find_str(msg,"#Place same finger again")>=0:
            print("Silakan Tap Finger Yang Sama......")
            #sleep(1)
           
        elif find_str(msg,"#MATCH")>=0:
            print("Sidik Jari Benar.. Sesuai......")
           
        elif find_str(msg,"#STORED")>=0:
            print("Sidik Jari Tersimpan.....")
            simpanEnroll()
            #sleep(1)
            lop=1
           
        elif find_str(msg,"#Fingerprints did not match")>=0:
            print("Sidik Jari Tidak Sama.....")
            #sleep(1)
           
        else:
            print(msg)
            #sleep(1)
            lop=1  
   
def search():
    print("Proses Searching")
    ser.flush()
    ser.write("S")
    sleep(1)
   
    lop=0
    while lop<1:
        msg = ser.readline()
        if find_str(msg,"#Please Tap")>=0:
            ser.flush()
            print("Silahkan Tap your Finger")
            sleep(1)
        elif find_str(msg,"Y")>=0:
            print("Maaf Data Tak Dikenal")
            sleep(1)
            lop=1
        elif find_str(msg,"#Found#")>=0:
            ar=msg.split("#")
            print("Dikenal :",ar[2],":Approx:",ar[3])
            sleep(1)
            lop=1
        else:
            print(msg)
            lop=1
           
def remove():
    print("Proses Remove")
    ser.write("D")
    ser.flush()
    sleep(1)

    lop=0
    while lop<1:
        msg = ser.readline()
        if find_str(msg,"#WHAT ID")>=0:
            id=str(input("Masukan ID Yang Akan Dihapus!"))
            ser.write(id)
            ser.write('\n')
            ser.flush()
            ser.flush()
            sleep(1)
           
        elif find_str(msg,"@")>=0:
            print(msg)
           
        elif find_str(msg,"R")>=0:
            print("Hapus Berhasil")
            sleep(1)
            lop=1
           
        elif find_str(msg,"!")>=0:
            print(msg)
            sleep(1)
            lop=1
           
        else:
            print(msg)
            lop=1

def mulai():
   

    print("Silakan Pilih Operasi?")
    print("    1) Enroll")
    print("    2) Stand By")
    print("    3) Remove")
   
 
    pil=int(input(" Pilihan= "))
 
    if pil==1:
       enroll()
    elif pil==2:
       search()
    elif pil==3:
       remove()
    else:
        print("Tidak Ada Dalam Pilihan")

    print("Apakah Anda Ingin Melanjutkan Operasi?")
    print("    1) Lanjut")
    print("    2) Keluar")
    pil=int(input("Pilihan"))
 
    if pil==1:
        mulai()
 
    else:
        print("Terimakasih")
        try:
            ser.close();
            print("Disconnect")
        except:
            print("Terputus.....")

           
       
print("*****************************************")
print("           Aplikasi Fingerprint          ")          
print("*****************************************")
ser.flush()
ser.write("A")
sleep(4)
mulai()


Database:


CREATE TABLE IF NOT EXISTS `tb_history` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `tanggal` date NOT NULL,
  `jam` time NOT NULL,
  `ruang` varchar(3) NOT NULL,
  `ksj` varchar(5) NOT NULL,
  `image` varchar(30) NOT NULL,
  `note` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;



INSERT INTO `tb_history` (`id`, `tanggal`, `jam`, `ruang`, `ksj`, `image`, `note`) VALUES
(1, '2017-01-12', '16:13:02', '7', '1', 'Chrysanthemum.jpg', '-'),
(2, '2017-01-25', '16:13:32', '', '', 'avatar.jpg', ''),
(3, '2017-01-26', '07:07:42', 'A', '49', '20170126070742.jpg', '-'),
(4, '2017-01-26', '07:08:38', 'A', '87', '20170126070838.jpg', '-'),
(5, '2017-01-26', '07:08:43', 'A', '97', '20170126070843.jpg', '-'),
(6, '2017-01-26', '07:09:56', 'A', '49', '20170126070956.jpg', '-'),
(7, '2017-01-26', '07:10:08', 'A', '87', '20170126071008.jpg', '-'),
(8, '2017-01-26', '07:10:21', 'A', '97', '20170126071021.jpg', '-'),
(9, '2017-01-26', '07:18:51', 'A', '49', '20170126071851.jpg', '1'),
(10, '2017-01-26', '07:19:03', 'A', '87', '20170126071903.jpg', '1'),
(11, '2017-01-26', '07:19:17', 'A', '97', '20170126071917.jpg', '1'),
(12, '2017-01-26', '07:19:26', 'A', '279', '20170126071926.jpg', '1'),
(13, '2017-01-26', '07:21:21', 'A', '49', '20170126072121.jpg', '1'),
(14, '2017-01-26', '08:12:16', 'A', '49', '20170126081216.jpg', '-');

-- --------------------------------------------------------

--
-- Table structure for table `tb_siswa`
--

CREATE TABLE IF NOT EXISTS `tb_siswa` (
  `nis` varchar(10) NOT NULL,
  `nama` varchar(25) NOT NULL,
  `jenis_kelamin` varchar(15) NOT NULL,
  `kelas` varchar(15) NOT NULL,
  `ksj` varchar(5) NOT NULL,
  `username` varchar(25) NOT NULL,
  `password` varchar(25) NOT NULL,
  `hp` varchar(15) NOT NULL,
  PRIMARY KEY (`nis`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



INSERT INTO `tb_siswa` (`nis`, `nama`, `jenis_kelamin`, `kelas`, `ksj`, `username`, `password`, `hp`) VALUES
('SIS001', 'Ali', 'Laki-Laki', '1', '1', 'Ali', 'ali', '08568452535'),
('SIS002', 'Wati', 'Laki-Laki', '1', '2', 'Wati', 'wati', '08568619797');








Arduino + Modem + Raspberry PI

Aplikasi Arduino

Code sebagai berikut adalah contoh dari aplikasi yang akan melakukan pengiriman sms melalui modem jika ada perubahan I/O pada input Arduino.
Juga Proses Akuisisi Data terhadap Raspberry PI 


#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);

#include <SoftwareSerial.h>
SoftwareSerial wavecom(2,3);
char incoming_char=0;

const int sensorIn = A0;
int mVperAmp = 185;
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
char L1='0';
char L2='0';
char L3='0';
char L4='0';


const int tombol_1 = 12;     // the number of the pushbutton pin
const int tombol_2 = 11;
const int tombol_3 = 10;     // the number of the pushbutton pin
const int tombol_4 = 9;

const int lampu_1 =  4;      // the number of the LED pin
const int lampu_2 =  5;
const int lampu_3 =  6;
const int lampu_4 =  7;


int Tombol_1 = 1;         // variable for reading the pushbutton status
int Tombol_2 = 1;
int Tombol_3 = 1;
int Tombol_4 = 1;

int K1=0;
int K2=0;
int K3=0;
int K4=0;
String inputString = "";  

void setup()   {

  lcd.init();                      // initialize the lcd
  lcd.backlight();

  pinMode(lampu_1, OUTPUT);
  pinMode(lampu_2, OUTPUT);
  pinMode(lampu_3, OUTPUT);
  pinMode(lampu_4, OUTPUT);

 digitalWrite(lampu_1, HIGH);     //relay diseting  high,   relay jenis aktif low,  low = hidup , high = mati;
 digitalWrite(lampu_2, HIGH);
 digitalWrite(lampu_3, HIGH);
 digitalWrite(lampu_4, HIGH);

  pinMode(tombol_1, INPUT);
  pinMode(tombol_2, INPUT);
  pinMode(tombol_3, INPUT);
  pinMode(tombol_4, INPUT);

 digitalWrite(tombol_1, HIGH);
 digitalWrite(tombol_2, HIGH);
 digitalWrite(tombol_3, HIGH);
 digitalWrite(tombol_4, HIGH);

Serial.begin(9600);
   //Serial.print("kirim sms");
       wavecom.begin(9600);
       wavecom.flush();
       wavecom.print("AT+CMGS=");             //kirim sms
       wavecom.print("081219590150");
       wavecom.write(13);
       wavecom.println("SMS OK");
       wavecom.write(26);
      delay(2000);

// wavecom.begin(9600);
   wavecom.print("AT+CMGF=1\r");  // set SMS mode to text
   delay(100);
   wavecom.println("AT+CNMI=2,2,0,0,0\r");
   wavecom.print("AT+CLIP=1\r"); // turn on caller ID notification
   delay(100);
   Serial.println("AT+CMGD=1,4");  //Delete all SMS in box

  inputString.reserve(200);
}

void loop()   {

  terima_sms ();

 Voltage = getVPP();                        //RUMUS PERHITUNGAN SENSOR
 VRMS = (Voltage/2.0) *0.707;
 AmpsRMS = (VRMS * 1000)/mVperAmp;
 if ( AmpsRMS < 0.09 ) {
    //AmpsRMS = 0;
  }
 float daya = 220 *  AmpsRMS;              //PERHITUNGAN DAYA

// Serial.print("ARUS PEMAKAIAN: ");        //SERIAL PEMBACAAA SERIAL MONITOR
// Serial.print(AmpsRMS);
// Serial.println(" Amper");
// Serial.print("DAYA PEMAKAIAN: ");
// Serial.print(daya);
// Serial.println(" watt");
// Serial.println();

 Serial.print(AmpsRMS);
 Serial.print("#");
 Serial.print(Voltage);
 Serial.print("#");
 Serial.print(daya);
 Serial.print("#");
 Serial.print(L1);
 Serial.print("#");
 Serial.print(L2);
 Serial.print("#");
 Serial.print(L3);
 Serial.print("#");
 Serial.print(L4);
 Serial.print("#");
 Serial.println("");

 lcd.setCursor(0,0);
 lcd.print("Arus: ");
 lcd.setCursor(6,0);
 lcd.print(AmpsRMS);
 lcd.print(" A  ");
 lcd.setCursor(0,1);
 lcd.print("Daya: ");
 lcd.setCursor(6,1);
 lcd.print(daya);
 lcd.print(" W  ");

  Tombol_1 = digitalRead(tombol_1);
  Tombol_2 = digitalRead(tombol_2);
  Tombol_3 = digitalRead(tombol_3);
  Tombol_4 = digitalRead(tombol_4);


 if (Tombol_1== LOW) {          
        if(K1 == 0) {
          sms_lampu_1_hidup ();
            K1=1; }
  else {
          sms_lampu_1_mati ();
             K1=0; }
            delay (200) ; }
     
  if (Tombol_2== LOW) {
      if(K2 == 0) {
       sms_lampu_2_hidup ();
        K2=1; }
    else {  
      sms_lampu_2_mati ();
        K2=0; }
        delay (200) ; }
     
  if (Tombol_3== LOW) {
      if(K3 == 0) {
       sms_lampu_3_hidup();
        K3=1; }
    else {  
       sms_lampu_3_mati();
        K3=0; }
        delay (200) ; }

  if (Tombol_4 == LOW) {
      if(K4 == 0) {
       sms_lampu_4_hidup();
        K4=1; }
    else {  
       sms_lampu_4_mati();
        K4=0; }
        delay (200) ; }

delay(1000);
//lcd.setCursor(6,0);
//lcd.print("        ");
//lcd.setCursor(6,1);
//lcd.print("        ");
}  //loop

float getVPP()   {
  float result;
  int readValue;             //value read from the sensor
  int maxValue = 0;          // store max value here
  int minValue = 1024;          // store min value here
 
   uint32_t start_time = millis();
   while((millis()-start_time) < 100)   {
       readValue = analogRead(sensorIn);
   if (readValue > maxValue)        {
          maxValue = readValue;    }
   if (readValue < minValue) {
          minValue = readValue; }   }
      result = ((maxValue - minValue) * 5.0)/1024.0;
      return result;
 }

void terima_sms () {
  //Serial.println("sms aktif");
      if(wavecom.available() >0)   {
            incoming_char=wavecom.read();
     if (incoming_char=='#')  {
            delay(10);
   
           incoming_char=wavecom.read();
     if (incoming_char=='A')    {    
         L1='1';  
         //Serial.print("lampu 1 hidup");
            sms_lampu_1_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
       
        //    incoming_char=wavecom.read();
   else if (incoming_char=='a')    {    
             //Serial.print("lampu 1 mati");
             L1='0';
             sms_lampu_1_mati();
             Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
             delay(10); }
 
     // incoming_char=wavecom.read();
    else if (incoming_char=='B')    {    
            //Serial.print("lampu 2 hidup");
            L2='1';
            sms_lampu_2_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
             delay(10);}
   
          //  incoming_char=wavecom.read();
    else if (incoming_char=='b')    {    
            //Serial.print("lampu 2 mati");
            L2='0';
            sms_lampu_2_mati();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10); }
           
         //   incoming_char=wavecom.read();
    else if (incoming_char=='C')    {    
            //Serial.print("lampu 3 hidup");
            L3='1';
            sms_lampu_3_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
 
         //   incoming_char=wavecom.read();
     else if (incoming_char=='c')    {    
             //Serial.print("lampu 3 mati");
              L3='0';
              sms_lampu_3_mati();
             Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
             delay(10); }
         
          //   incoming_char=wavecom.read();
      else if (incoming_char=='D')    {    
            //Serial.print("lampu 4 hidup");
            L4='1';
            sms_lampu_4_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
       
          //  incoming_char=wavecom.read();
       else if (incoming_char=='d')    {    
            //Serial.print("lampu 4 mati");
            L4='0';
            sms_lampu_4_mati();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10); }
           
       else if (incoming_char=='E')    {    
            //Serial.print("lampu 4 hidup");
            L1='1';
            L2='1';
            L3='1';
            L4='1';
            sms_lampu_1_hidup();
            sms_lampu_2_hidup();
            sms_lampu_3_hidup();
            sms_lampu_4_hidup();
           Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
       
          //
       
       else if (incoming_char=='e')    {    
            //Serial.print("lampu 4 mati");
            L1='0';
            L2='0';
            L3='0';
            L4='0';
            sms_lampu_1_mati();
            sms_lampu_2_mati();
            sms_lampu_3_mati();
            sms_lampu_4_mati();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10); }
           
           
    }
    }
  }




void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
  if (inChar=='A')    {    
         L1='1';  
            sms_lampu_1_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
       
   else if (inChar=='a')    {    
             L1='0';
             sms_lampu_1_mati();
             Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
             delay(10); }
 
    else if (inChar=='B')    {    
            //Serial.print("lampu 2 hidup");
            L2='1';
            sms_lampu_2_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
             delay(10);}
   
    else if (inChar=='b')    {    
            L2='0';
            sms_lampu_2_mati();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10); }
           
    else if (inChar=='C')    {    
            //Serial.print("lampu 3 hidup");
            L3='1';
            sms_lampu_3_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
 
     else if (inChar=='c')    {    
             //Serial.print("lampu 3 mati");
              L3='0';
              sms_lampu_3_mati();
             Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
             delay(10); }
         
      else if (inChar=='D')    {    
            //Serial.print("lampu 4 hidup");
            L4='1';
            sms_lampu_4_hidup();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}
       
       else if (inChar=='d')    {    
            //Serial.print("lampu 4 mati");
            L4='0';
            sms_lampu_4_mati();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10); }
           
       else if (inChar=='E')    {    
            L1='1';
            L2='1';
            L3='1';
            L4='1';
            sms_lampu_1_hidup();
            sms_lampu_2_hidup();
            sms_lampu_3_hidup();
            sms_lampu_4_hidup();
           Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10);}

       
       else if (inChar=='e')    {    
            L1='0';
            L2='0';
            L3='0';
            L4='0';
            sms_lampu_1_mati();
            sms_lampu_2_mati();
            sms_lampu_3_mati();
            sms_lampu_4_mati();
            Serial.println("AT+CMGD=1,4");  //Delete all SMS in box
            delay(10); }
  }
}



 void sms_lampu_1_hidup () {
       L1='1';
       digitalWrite(lampu_1,LOW);
       //Serial.print("kirim sms");
       no_penerima ();
       wavecom.println("lampu 1 hidup");
       sms_daya (); }

 void sms_lampu_1_mati () {
   L1='0';
       digitalWrite(lampu_1,HIGH);
       //Serial.print("kirim sms");
       no_penerima ();
       wavecom.println("lampu 1 mati");
       sms_daya (); }  

  void sms_lampu_2_hidup () {
    L2='1';
       digitalWrite(lampu_2,LOW);
       //Serial.print("kirim sms");
       no_penerima ();
       wavecom.println("lampu 2 hidup");
       sms_daya (); }

 void sms_lampu_2_mati () {
   L2='0';
       digitalWrite(lampu_2,HIGH);
        //Serial.print("kirim sms");
        no_penerima ();
       wavecom.println("lampu 2 mati");
       sms_daya (); }

 void sms_lampu_3_hidup () {
   L3='1';
       digitalWrite(lampu_3,LOW);
       //Serial.print("kirim sms");
       no_penerima ();
       wavecom.println("lampu 3 hidup");
       sms_daya (); }

 void sms_lampu_3_mati () {
   L3='0';
       digitalWrite(lampu_3,HIGH);
       //Serial.print("kirim sms");
       no_penerima ();
       wavecom.println("lampu 3 mati");
        sms_daya (); }  
           
 void sms_lampu_4_hidup () {
   L4='1';
       digitalWrite(lampu_4,LOW);
       //Serial.print("kirim sms");
        no_penerima ();
       wavecom.println("lampu 4 hidup");
       sms_daya (); }

 void sms_lampu_4_mati () {
   L4='0';
      digitalWrite(lampu_4,HIGH);
      //Serial.print("kirim sms");
       no_penerima ();
       wavecom.println("lampu 4 mati");
       sms_daya (); }
     
void no_penerima () {
      wavecom.flush();
       wavecom.print("AT+CMGS=");             //kirim sms
       wavecom.print("081219590150");
       wavecom.write(13); }  

void sms_daya () {
     Voltage = getVPP();                        //RUMUS PERHITUNGAN SENSOR
     VRMS = (Voltage/2.0) *0.707;
     AmpsRMS = (VRMS * 1000)/mVperAmp;
     if ( AmpsRMS < 0.08 ) {
          AmpsRMS = 0;}
     float daya = 220 *  AmpsRMS;
       wavecom.print("Arus Pemakaian: ");
       wavecom.print(AmpsRMS);
       wavecom.println(" A");
       wavecom.print("Beban Total: ");
       wavecom.print(daya);
       wavecom.print(" W");
       wavecom.write(26);
       delay(4000); }    


============
Python.py

import serial

import mysql.connector as mdb
from time import gmtime, strftime
from random import randint


db = mdb.connect(host='127.0.0.1',user='root',password='',database='wm10maret')

cursor = db.cursor()

def mtrim(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s


#/dev/ttyACM0
read_serial0=""
ser = serial.Serial('COM1',9600)
s = [0,1]
while True:
 read_serial=ser.readline()
 print read_serial
 read_serial=mtrim(read_serial)

###########
 cursor.execute("SELECT id,lampu,onoff FROM tb_remote where status='0'")
 for row in cursor.fetchall():
     idx=row[0]
     lampu=row[1]
     onoff=row[2]
     print lampu
     print onoff
     print idx
     print "@@@@@@@@@@@@@@@"
     if lampu=="1" and onoff=="1":
         ser.flush()
         ser.write("A")
     elif lampu=="1" and onoff=="0":
         ser.flush()
         ser.write("a")
     elif lampu=="2" and onoff=="1":
         ser.flush()
         ser.write("B")
     elif lampu=="2" and onoff=="0":
         ser.flush()
         ser.write("b")
     elif lampu=="3" and onoff=="1":
         ser.flush()
         ser.write("C")
     elif lampu=="3" and onoff=="0":
         ser.flush()
         ser.write("c")
     elif lampu=="4" and onoff=="1":
         ser.flush()
         ser.write("D")
     elif lampu=="4" and onoff=="0":
         ser.flush()
         ser.write("d")
     elif lampu=="E":
         ser.flush()
         ser.write("E")
     elif lampu=="e":
         ser.flush()
         ser.write("e")
       


   
     sql = "UPDATE `tb_remote`  set status='1' where id='%s'" % (idx)
     try:
         cursor.execute(sql)
         db.commit()
     except:
         db.rollback()
             
 #db.close()
###########

 if len(read_serial) >6:
     if read_serial!=read_serial0:
         c=read_serial.split("#")
         if len(c)>=6:
             read_serial0=read_serial
             I=c[0]
             V=c[1]
             W=c[2]
             P=c[3]
             Q=c[4]
             R=c[5]
             S=c[6]
           
             print "I=",I
             print "V=",V
             print "P=",W
             print "1=",P
             print "2=",Q
             print "3=",R
             print "4=",S

             tgl=strftime("%Y-%m-%d", gmtime())
             jam=strftime("%H:%M:%S", gmtime())

             sql = 'INSERT INTO `tb_history` ( `tanggal`, `jam`, `arus`, `tegangan`, `daya`,`L1`,`L2`,`L3`,`L4`) VALUES ("%s", "%s", "%s","%s","%s", "%s", "%s", "%s", "%s")' % (tgl, jam, I,V,W,P,Q,R,S)
             try:
               cursor.execute(sql)
               db.commit()
             except:
               db.rollback()
             
       
             print"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

#$sudo -i
#cd /home/pi/Desktop/py
#python Help.py
#ls /dev/tty*


CREATE TABLE IF NOT EXISTS `tb_history` (
  `id` int(30) NOT NULL AUTO_INCREMENT,
  `tanggal` date NOT NULL,
  `jam` time NOT NULL,
  `arus` varchar(30) NOT NULL,
  `tegangan` varchar(30) NOT NULL,
  `daya` varchar(30) NOT NULL,
  `keterangan` varchar(30) NOT NULL,
  `L1` char(1) NOT NULL,
  `L2` char(1) NOT NULL,
  `L3` char(1) NOT NULL,
  `L4` char(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=218 ;

INSERT INTO `tb_history` (`id`, `tanggal`, `jam`, `arus`, `tegangan`, `daya`, `keterangan`, `L1`, `L2`, `L3`, `L4`) VALUES
(6, '2017-01-18', '10:00:00', '12', '220', '300', '-', '1', '1', '0', '0'),
(7, '2017-01-18', '10:00:00', '15', '220', '324', '-', '1', '1', '0', '0'),

CREATE TABLE IF NOT EXISTS `tb_remote` (
  `id` int(15) NOT NULL AUTO_INCREMENT,
  `tanggal` date NOT NULL,
  `jam` time NOT NULL,
  `lampu` varchar(1) NOT NULL,
  `onoff` varchar(1) NOT NULL,
  `status` varchar(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


INSERT INTO `tb_remote` (`id`, `tanggal`, `jam`, `lampu`, `onoff`, `status`) VALUES
(2, '2017-03-10', '20:27:17', '4', '1', '1'),
(3, '2017-03-10', '20:28:27', '4', '0', '1');