19 Haziran 2019, 05:24:23

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


Python hakkında kısa kısa notlar

Başlatan fide, 22 Mart 2019, 13:12:02

fide

Arkadaşlar okulda kullanmak için hazırladığım python çalışma notlarını paylaşıyorum.
içinde başlangıç seviyesinden veritabanı ve dosya okuma yazma işlemlerine kadar kısa kısa notlar var.

https://drive.google.com/file/d/1vndDvc25Jf0jbSOFhql1txHVckJkGuzW/view?usp=sharing
https://drive.google.com/file/d/17BoFyXDCtaUuFG2HE-79GzXqGTCwjYuO/view?usp=sharing
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

22 Mart 2019, 22:44:43 #1 Son düzenlenme: 23 Mart 2019, 09:30:51 fide
Serial port erişimi için bunu kullanıyorum.
#gsm modül iletişim seri portu
import serial

ser
=serial.Serial()
ser.baudrate=115200
ser
.port='/dev/ttyS1'        # windows için  com2 comvb olacak
ser.open()
sleep(0.1)
Veri almak kontrol etmek ve yazmak için de aşağıdaki komutlar kullanılıyor.
ser.inwaiting --> seri port bufferda bekleyen veri miktarını verir.

ser.read() ile istenen byte kadar veri okuma  yapılıyor.

ser.read(ser.inwaiting)  komutuyla da bekleyen verinin tamamı okunur.

komut="AT\r"
ser.write(komut.encode('utf-8')) ile seri port veri gönderme yapılıyor
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

urllib kütüphanesiyle dosya indirme işlemi

import urllib.request

req 
urllib.request.Request('http://httpbin.org')
with urllib.request.urlopen(req) as response:
	
the_page response.read().decode('utf-8')
	
print (
"req Stat:{}\r\n".format(req.status))

dosya=open("/home/site.html","w")
print(
the_page,file=dosya,flush=True)
dosya.close()
print(
"dosyaya yazdim")
#print(the_page)
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

SQlite veritabanı ile işlemlerin fonksiyona dökülmüş hali

#kütüphane import
import sqlite3
import os
dbFile
="/home/arts/db/dbArts.sqlite"
# dosya yolunu kendi projenizde değiştirin


Veritabanı dosyası var mı kontrol et
def dbKontrol():
	
dosyaMevcut=os.path.exists(dbFile)
	
if 
not dosyaMevcut:
	
	
dbOlustur()
	
else:
	
	
print(
"db dosyası var.\r\n")
	
	
Veritabanı dosyası ve tabloları oluştur
def dbOlustur():
	
vt=db.connect(dbFile)
	
im=vt.cursor()
	
#im.execute("CREATE TABLE arac(id,plate,marka,model,yas,barcode)")
	
#vt.commit()
	
im.execute("""
	
CREATE TABLE action(
	
'id' INTEGER PRIMARY KEY AUTOINCREMENT,
	
'longitude' VARCHAR(25),
	
'longitudeDir'  VARCHAR(5),
	
'latitude' VARCHAR(25), 
	
'latitudeDir' VARCHAR(5), 
	
'rakim'  REAL,
	
'yon' REAL,
	
'kms' REAL,
	
'knot' REAL,
	

	
'tarih' VARCHAR(10), 
	
'saat' VARCHAR(10)
	
)"""
)
	
#im.execute("CREATE TABLE action(id,enlem,boylam,rakim,yon,hiz,tarih,saat)")
	
vt.commit()
	
vt.close()
	
print(
"Veritabanı olusturuldu\r\n")
Veritabanına veri ekle
def veriGir(longitude,longitudeDir,latitude,latitudeDir,rakim,yon,kms,knot,gsmTarih,gsmSaat):
	
with db.connect(dbFile) as vt:
	
	
im=vt.cursor()
	
	
sorguText="""INSERT INTO 
	
	
action(longitude,longitudeDir,latitude,latitudeDir,rakim,yon,kms,knot,tarih,saat) 
	
	
values('{}','{}','{}','{}','{}','{}','{}','{}','{}','{}') """
.format(longitude,longitudeDir,latitude,latitudeDir,rakim,yon,kms,knot,gsmTarih,gsmSaat)
	
	
#print (sorguText)
	
	
im.execute(sorguText)
	
	
vt.commit()
	
	
print(
"Veritabanına eklendi")
	

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

Veritabanınadan sorgu yap

def sorgula():
	
global 
veri
	
with db.connect(dbFile) as vt:
	
	
im=vt.cursor()
	
	
sorguText="select * from ogrenci"
	
	
#sorguText="""INSERT INTO 
	
	
#ogrenci(adi,soyadi,ogrNo,sinif) 
	
	
#values('{}','{}','{}','{}') """.format(adi,soyadi,ogrNo,sinif)
	
	
#print (sorguText)
	
	
im.execute(sorguText)
	
	
veri=im.fetchall()
	
	
vt.commit()
	
	

	
	
#print("veriler: {}".format(veri))
	

parametrik sorgu yap
def paramSorgu(adi,soyadi,ogrNo,sinif):
	
global 
veri
	
with db.connect(dbFile) as vt:
	
	
im=vt.cursor()
	
	
#sorguText="""select * from ogrenci where adi like'%{}%'""".format(adi)
	
	
if 
adi!="":
	
	
	
sorguText="""select * from ogrenci where adi='{}'""".format(adi)
	
	
if 
soyadi!="":
	
	
	
sorguText="""select * from ogrenci where soyadi='{}'""".format(soyadi)
	
	
if 
ogrNo!="":
	
	
	
sorguText="""select * from ogrenci where ogrNo='{}'""".format(ogrNo)
	
	
if 
sinif!="":
	
	
	
sorguText="""select * from ogrenci where sinif='{}'""".format(sinif)
	
	

	
	
if 
adi=="" and soyadi=="" and ogrNo=="" and sinif=="":
	
	
	
sorguText="""select * from ogrenci"""
	
	
#sorguText="""INSERT INTO 
	
	
#ogrenci(adi,soyadi,ogrNo,sinif) 
	
	
#values('{}','{}','{}','{}') """.format(adi,soyadi,ogrNo,sinif)
	
	
#print (sorguText)
	
	
im.execute(sorguText)
	
	
veri=im.fetchall()
	
	
vt.commit()
	
	
if 
len(veri)==0:
	
	
	
return 
"Sorgu Sonucu Boş"
	
	
else:
	
	
	
return 
veri
	
	
#print("veriler: {}".format(veri))
	

parametreye dayalı veri sil
def paramSil(adi):
	
global 
veri
	
with db.connect(dbFile) as vt:
	
	
im=vt.cursor()
	
	
sorguText="""delete from ogrenci where adi='{}'""".format(adi)
	
	
im.execute(sorguText)
	
	

	
	
vt.commit()
	
	
	

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

25 Mart 2019, 12:22:19 #5 Son düzenlenme: 25 Mart 2019, 12:25:17 fide
Omega2+ ve GM862 GSM modül ile girilen lokasyonu google maps linki şeklinde SMS atan Python uygulaması

from time import sleep
import onionGpio
import serial


# define pins
pinLed=
pinGsmBoot
=3
pinGsmPwrCtl
=2

# define states
ON=1
OFF
=0
gsmPwrState
=0
line
=""
commResp=["OK","ERROR","+CPIN: SIM PIN","+CPIN: READY","$GPSACP:","+CREG:","#MONI:"]
bckspc=bytes([26])
bigger=">"
tryOut=30
sayac
=0

gpsText
=""
gsmRespText=""
bekleyen=0

dummyText
=""


#_freegpio
#onionGpio._freegpio(pinLed)
#onionGpio._freegpio(pinGsmBoot)
#onionGpio._freegpio(pinGsmPwrCtl)

# pin tanımlama ve konfigürasyonu
ledonionGpio.OnionGpio(pinLed)
gsmBootonionGpio.OnionGpio(pinGsmBoot)
gsmPwrCtlonionGpio.OnionGpio(pinGsmPwrCtl)

# pin direction
led.setOutputDirection(ON)
	
#led için çıkış
gsmBoot.setOutputDirection(OFF#gsmBoot için çıkış
gsmPwrCtl.setInputDirection() #gsmPwrCtl için giriş olarak ayarlandı

def gsmBootProc():
	
gsmPwrStateint(gsmPwrCtl.getValue())
	
#print(type(gsmPwrCtl))
	
print(
"Gsm Power:{}\r\n".format(gsmPwrState))
	
if 
gsmPwrState==1:
	
	
print(
"Gsm zaten acik\r\n")
	
else:
	
	
led.setValue(OFF)
	
# işaret ver
	
	
gsmBoot.setValue(ON)
	
	
sleep(1)
	
	
gsmBoot.setValue(OFF)
	
	
sleep(5)
	
	

	
	
print(
"Gsm Boot\r\n")
	
led.setValue(ON)
	
# işaret ver
def smsGonder(num,text):
	
if 
"+90" in num:
	
	
numType=145
	
else:
	
	
numType=129
	
	

	
komut="AT+CMGS={},{}\r".format(num,numType)
	
	
# SMS göndermek için başla
	
ser.write(komut.encode('utf-8'))
	
sleep(3)
	
if 
ser.in_waiting>0:
	
	
	
	
	
# > gelirse
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
print(
"gsmRespText: {} \r\n".format(gsmRespText))
	
	
	
	
	
	

	
if 
bigger in gsmRespText
	

	
	

	
	
ser.write(text.encode('utf-8'))
	
	
ser.write(bckspc)
	


def atGonder(komut):
	

	
if 
komut.startswith("AT+CPIN="): #komut pin girme ise komutu göndermeden önce pin durumu sorgusu yap 
	
	
atPin="AT+CPIN?\r"
	
	
	
# eğer pin girilmedi ise gir, girildi ise pass geç
	
	
ser.write(atPin.encode('utf-8'))
	
	
sleep(0.5)
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
if 
"+CPIN: SIM PIN" in gsmRespText:
	
# eğer SIM PIN dönerse
	
	
	
print(
"Simm Pin\r\n")
	
	
	
ser.write(komut.encode('utf-8'))
	
#pin gir"
	
	
	
sleep(1)
	
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
	
if 
"OK" in gsmRespText:
	
	
# pin girme işi tamam
	
	
	
	
print(
"Pin Ok\r\n")
	
	
	
	
#break
	
	
	
elif "ERROR" in gsmRespText:
	
# pinde hata var burayla ilgili uyarı yap
	
	
	
	
print(
"Pin ERROR\r\n")
	
	
	
	
#break
	
	
elif "+CPIN: READY" in gsmRespText:
	
# diyelim ki board resetlendi ama gsm modül açık. bu durumda tekrar pin girme
	
	
	
print(
"Pin zaten girilmiş\r\n")
	
	
	
#break
	
elif "AT#MONI" in komut:
	
#eğer komut "AT#MONI\r" ise
	
	
sayac=0
	
	
while(
True):
	
#Burda sonsuz döngü ile ya bağlanana ya da deneme sayısı aşılana kadar dön
	
	
	
print(
"{}\r\n Sayac{}\r\n ".format(komut,sayac))
	
	
#komutu yazdır
	
	
	
sayac=sayac+1
	
	
	
ser.write(komut.encode('utf-8'))
	
	
	
sleep(2)
	
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
	

	
	
	
print(
"{}\r\nSayac:{}".format(gsmRespText,sayac))
	
# bulduğunu ve sayacı yazdır
	
	
	
if (
sayac>tryOut) or ("BSIC:" in gsmRespText): #Eğer cevap "OK" döndü ise (bu ileride GPSACP gibisonunda bir de OK döndüren komutlarda sıkıntı olabilir.)
	
	
	
	
print(
"MONI: out\r\n")
	
	
	
	
#tamamsa çık (modül değişince burası da değişecek)
	
	
	
	
break
	
	

	
else:
	
	
# eğer komut CPIN ve MONI komutu değilse normal işleme devam et
	
	
	

	

	
	
print(
komut+"\r\n")
	
	
#komutu yazdır
	
	
ser.write(komut.encode('utf-8'))
	
	
sleep(1)
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	

	
	
if 
"OK" in gsmRespText:  #Eğer cevap "OK" döndü ise (bu ileride GPSACP gibisonunda bir de OK döndüren komutlarda sıkıntı olabilir.)
	
	
	
pass
	
	
	
#break
	
	

#-----------------başlıyoruz ------------------
# terminal seri portu 
terminal=serial.Serial()
terminal.baudrate=115200
terminal
.port='/dev/ttyS0'
terminal.open()

gsmBootProc()
#sm modül iletişim seri portu
ser=serial.Serial()
ser.baudrate=115200
ser
.port='/dev/ttyS1'
ser.open()

sayac=0

	

atGonder("AT\r")
atGonder("AT+CPIN=3711\r")
atGonder("AT#MONI\r")
atGonder("AT+CNMI=2,1\r")
atGonder("AT+CMGF=1\r")
atGonder("AT+CMGD=1,4\r")
#atGonder("""AT+CMGL="REC UNREAD"\r""") 

while(True):
	
print(
"sayac: {}\r\n".format(sayac))
	
sayac=sayac+1
	
if 
terminal.in_waiting>0:
	
	
break

	
#led.setValue(OFF)
	

	
if 
ser.in_waiting>4:
	
# eğer veri varsa al ve değerlendir.
	
	
#seriporttan veri gelirken kesme oluşmadığı için bekleme yaparak 
	
	
#veri alınıyor. Bu bekleme esnasında da bazen veri alınırken veri 
	
	
#ortada kesilebiliyor
	
	
#bunun için küçük bir bekleme test rutini ekledim.
	
	
bekleyen=ser.in_waiting
	
	
sleep(0.1)
	
	
if 
ser.in_waiting != bekleyen:
	
	
	
sleep(0.2)
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
print(
"Veri: {}".format(gsmRespText))
	
	
print(
"------------------------\r\n")
	
	

	
	
print(
"gsmRespText:{}\r\n".format(gsmRespText))
	
smsKoordinat="Konum: https://www.google.com.tr/maps/place/{}.{}{}+{}.{}{}".format(10,22222,"N",33,15255,"E")
	

	
smsGonder("+90505xxxxxxx",smsKoordinat)
	
sleep(15)
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

25 Mart 2019, 12:29:50 #6 Son düzenlenme: 25 Mart 2019, 12:32:48 fide
SMS ile led yak / söndür / blink ve google maps linki şeklinde gönderen python uygulaması

Telit GM862  ve Omega2+ üzerinde geliştirildi.


#! /usr/bin/env python
# -*- coding: UTF-8 -*-
#Bismillahirrahmanirrahim
from time import sleep
import onionGpio
import serial
import sqlite3 
as db
import os


# define pins
pinLed=
pinGsmBoot
=3
pinGsmPwrCtl
=2

# define states
ON=1
OFF
=0
gsmPwrState
=0
line
=""
commResp=["OK","ERROR","+CPIN: SIM PIN","+CPIN: READY","$GPSACP:","+CREG:","#MONI:"]
bckspc=bytes([26])
bigger=">"
tryOut=30
sayac
=0

# tanımlar
dbFile="/home/arts/db/dbArts.sqlite"
gpsText=""
gsmRespText=""
bekleyen=0
# saat ve tarih tanımları
sa=0
dk
=0
san
=0
gun
=0
ay
=0
yil
=0
dkEx
=0

dummyText
=""

saat=""
enlem=""
boylam=""
rakim=0
yon
=0
hiz
=0
tarih
=""
uydu=0

#_freegpio
#onionGpio._freegpio(pinLed)
#onionGpio._freegpio(pinGsmBoot)
#onionGpio._freegpio(pinGsmPwrCtl)

# pin tanımlama ve konfigürasyonu
ledonionGpio.OnionGpio(pinLed)
gsmBootonionGpio.OnionGpio(pinGsmBoot)
gsmPwrCtlonionGpio.OnionGpio(pinGsmPwrCtl)

# pin direction
led.setOutputDirection(ON)
	
#led için çıkış
gsmBoot.setOutputDirection(OFF#gsmBoot için çıkış
gsmPwrCtl.setInputDirection() #gsmPwrCtl için giriş olarak ayarlandı

#fonksiyonlar
def dbOlustur():
	

	
vt=db.connect(dbFile)
	
im=vt.cursor()
	
#im.execute("CREATE TABLE arac(id,plate,marka,model,yas,barcode)")
	
#vt.commit()
	
im.execute("""CREATE TABLE action (id INTEGER PRIMARY KEY, enlem VARCHAR(25),boylam VARCHAR(25), rakim  REAL, yon REAL,hiz REAL, tarih VARCHAR(10), saat VARCHAR(10))""")
	
#im.execute("CREATE TABLE action(id,enlem,boylam,rakim,yon,hiz,tarih,saat)")
	
vt.commit()
	
vt.close()
	
print(
"Veritabanı olusturuldu\r\n")
	

def gsmBootProc():
	
gsmPwrStateint(gsmPwrCtl.getValue())
	
#print(type(gsmPwrCtl))
	
print(
"Gsm Power:{}\r\n".format(gsmPwrState))
	
if 
gsmPwrState==1:
	
	
print(
"Gsm zaten acik\r\n")
	
else:
	
	
led.setValue(OFF)
	
# işaret ver
	
	
gsmBoot.setValue(ON)
	
	
sleep(1)
	
	
gsmBoot.setValue(OFF)
	
	
sleep(5)
	
	

	
	
print(
"Gsm Boot\r\n")
	
led.setValue(ON)
	
# işaret ver
def smsGonder(num,text):
	
if 
"+9" in num:
	
	
numType=145
	
else:
	
	
numType=129
	
	

	
komut="AT+CMGS={},{}\r".format(num,numType)
	
	
# SMS göndermek için başla
	
ser.write(komut.encode('utf-8'))
	
sleep(3)
	
if 
ser.in_waiting>0:
	
	
	
	
	
# > gelirse
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
print(
"gsmRespText: {} \r\n".format(gsmRespText))
	
	
	
	
	
	

	
if 
bigger in gsmRespText
	

	
	

	
	
ser.write(text.encode('utf-8'))
	
	
ser.write(bckspc)
	


def dbKontrol():
	
dosyaMevcut=os.path.exists(dbFile)
	
if 
not dosyaMevcut:
	
	
dbOlustur()
	
else:
	
	
print(
"db dosyası var.\r\n")

def atGonder(komut):
	

	
if 
komut.startswith("AT+CPIN="): #komut pin girme ise komutu göndermeden önce pin durumu sorgusu yap 
	
	
atPin="AT+CPIN?\r"
	
	
	
# eğer pin girilmedi ise gir, girildi ise pass geç
	
	
ser.write(atPin.encode('utf-8'))
	
	
sleep(0.5)
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
if 
"+CPIN: SIM PIN" in gsmRespText:
	
# eğer SIM PIN dönerse
	
	
	
print(
"Simm Pin\r\n")
	
	
	
ser.write(komut.encode('utf-8'))
	
#pin gir"
	
	
	
sleep(1)
	
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
	
if 
"OK" in gsmRespText:
	
	
# pin girme işi tamam
	
	
	
	
print(
"Pin Ok\r\n")
	
	
	
	
#break
	
	
	
elif "ERROR" in gsmRespText:
	
# pinde hata var burayla ilgili uyarı yap
	
	
	
	
print(
"Pin ERROR\r\n")
	
	
	
	
#break
	
	
elif "+CPIN: READY" in gsmRespText:
	
# diyelim ki board resetlendi ama gsm modül açık. bu durumda tekrar pin girme
	
	
	
print(
"Pin zaten girilmiş\r\n")
	
	
	
#break
	
elif "AT#MONI" in komut:
	
#eğer komut "AT#MONI\r" ise
	
	
sayac=0
	
	
while(
True):
	
#Burda sonsuz döngü ile ya bağlanana ya da deneme sayısı aşılana kadar dön
	
	
	
print(
"{}\r\n Sayac{}\r\n ".format(komut,sayac))
	
	
#komutu yazdır
	
	
	
sayac=sayac+1
	
	
	
ser.write(komut.encode('utf-8'))
	
	
	
sleep(2)
	
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
	

	
	
	
print(
"{}\r\nSayac:{}".format(gsmRespText,sayac))
	
# bulduğunu ve sayacı yazdır
	
	
	
if (
sayac>tryOut) or ("BSIC:" in gsmRespText): #Eğer cevap "OK" döndü ise (bu ileride GPSACP gibisonunda bir de OK döndüren komutlarda sıkıntı olabilir.)
	
	
	
	
print(
"MONI: out\r\n")
	
	
	
	
#tamamsa çık (modül değişince burası da değişecek)
	
	
	
	
break
	
	

	
else:
	
	
# eğer komut CPIN ve MONI komutu değilse normal işleme devam et
	
	
	

	

	
	
print(
komut+"\r\n")
	
	
#komutu yazdır
	
	
ser.write(komut.encode('utf-8'))
	
	
sleep(1)
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	

	
	
if 
"OK" in gsmRespText:  #Eğer cevap "OK" döndü ise (bu ileride GPSACP gibisonunda bir de OK döndüren komutlarda sıkıntı olabilir.)
	
	
	
pass
	
	
	
#break
	
	

#-----------------başlıyoruz ------------------
dbKontrol() #veritabanı var kontrol et yoksa oluştur varsa aşağıda bağlan
# terminal seri portu 
terminal=serial.Serial()
terminal.baudrate=115200
terminal
.port='/dev/ttyS0'
terminal.open()

gsmBootProc()
#sm modül iletişim seri portu
ser=serial.Serial()
ser.baudrate=115200
ser
.port='/dev/ttyS1'
ser.open()

sayac=0

	

atGonder("AT\r")
atGonder("AT+CPIN=3711\r")
atGonder("AT#MONI\r")
atGonder("AT+CNMI=2,1\r")
atGonder("AT+CMGF=1\r")
atGonder("AT+CMGD=1,4\r")
#atGonder("""AT+CMGL="REC UNREAD"\r""") 

while(True):
	
print(
"sayac: {}\r\n".format(sayac))
	
sayac=sayac+1
	
if 
terminal.in_waiting>0:
	
	
break

	
#led.setValue(OFF)
	

	
if 
ser.in_waiting>4:
	
# eğer veri varsa al ve değerlendir.
	
	
#seriporttan veri gelirken kesme oluşmadığı için bekleme yaparak 
	
	
#veri alınıyor. Bu bekleme esnasında da bazen veri alınırken veri 
	
	
#ortada kesilebiliyor
	
	
#bunun için küçük bir bekleme test rutini ekledim.
	
	
bekleyen=ser.in_waiting
	
	
sleep(0.1)
	
	
if 
ser.in_waiting != bekleyen:
	
	
	
sleep(0.2)
	
	
gsmRespText=ser.read(ser.in_waiting).decode('utf-8')
	
	
print(
"Veri: {}".format(gsmRespText))
	
	
print(
"------------------------\r\n")
	
	

	
	
print(
"gsmRespText:{}\r\n".format(gsmRespText))
	
	
#gelen veri üzerinde çalış
	
	
#SMS bildirimi gelince SMS okumak için komut ver
	
	
if 
"+CMTI:" in gsmRespText:
	
	
	
print(
"+CMTI: {}\r\n".format(gsmRespText))
	
	
	
komut="""AT+CMGL="REC UNREAD"\r"""
	
	
	
ser.write(komut.encode('utf-8'))
	
	
#gelen SMS i okuma komutu
	
	
if 
"+CMGL:" in gsmRespText:
	
	
	
#yeni SMS metnini aldım 
	
	
	
#gerekli işlemleri yaptıktan sonra SMSi sil, simm kart hafızası dolmasın
	
	
	
print(
"SMS:{}\r\n".format(gsmRespText))
	
	
	
#gelen SMSi parçala ve bildir
	
	
	
# gelen veri: :b'\r\n+CMGL:  20,"REC UNREAD","+90505xxxxxxxxx"\r\nABCDEFG\r\nOK\r\n'
	
	
	

	
	
	
smsRecvText=gsmRespText[gsmRespText.find("+"):]
	
	
	
smsTextList=list(smsRecvText.split("\r\n"))
	
	
	
for 
i in smsTextList:
	
	
	
	
print(
"smsTextlist:{}\r\n".format(i))
	
	
	
#Çıktılar:
	
	
	
#b'\r\n+CMGL:  20
	
	
	
#"REC UNREAD"
	
	
	
#"+90505xxxxxxx"\r\nABCDEFG\r\nOK\r\n
	
	
	

	
	
	
smsTelNumList=smsTextList[0].split(",")
	
	
	
for 
i in smsTelNumList:
	
	
	
	
print (
"smsTelNumList:{}\r\n".format(i))
	
	
	
	

	
	
	
telNum=smsTelNumList[2].replace('"','')
	
	
	

	
	
	
print(
"Telefon:{}\r\n".format(telNum))
	
	
	

	
	
	
smsBody=smsTextList[1]
	
	
	
print(
"smsBody:{}--\r\n".format(smsBody))
	
	
	
#artık SMS ve telefon ile istediğimi yapabilirim.
	
	
	
smsComm=["On","Off","Blink","Sms"]
	
	
	
if 
smsBody in smsComm:
	
	
	
	
#eğer gelen SMS ON OFF blink ise
	
	
	
	
if 
"On" in smsBody:
	

	
	
	
	
	
led.setValue(ON)
	
	
	
	
if 
"Off" in smsBody:
	
	
	
	
	
led.setValue(OFF)
	
	
	
	
if 
"Blink" in smsBody:
	
	
	
	
	
for 
ii in range(25):
	
	
	
	
	
	
sleep(0.2)
	
	
	
	
	
	
led.setValue(ii%2)
	
	

	
	
	
	
if 
"Sms" in smsBody:
	
	
	
	
	
#smsGonder("+90505xxxxxxxx","SMS test for Python")
	
	
	
	
	
#smsKoordinat="e:{}, b:{}, y:{}, h:{}".format(enlem,boylam,yon,hiz)
	
	
	
	
	
#google koordinatlara çevir
	
	
	
	
	

	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
en_der=enlem[:2]
	
	
	
	
	
en_toplu=enlem[2:len(enlem)-1]
	
	
	
	
	
#print("enlem: {}\r\n".format(enlem))
	
	
	
	
	
#print("en_toplu: {}\r\n".format(en_toplu))

	
	
	
	
	
en_int=float(en_toplu)/60
	
	
	
	
	
en_str=str(en_int)[2:8]

	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
en_pol=enlem[len(enlem)-1:len(enlem)]
	
	
	
	
	
boy_der=boylam[:3]
	
	
	
	
	
boy_toplu=boylam[3:len(boylam)-1]

	
	
	
	
	
#print("boylam: {}\r\n".format(boylam))
	
	
	
	
	
#print("boy_toplu: {}\r\n".format(boy_toplu))

	
	
	
	
	
boy_int=float(boy_toplu)/60
	
	
	
	
	
boy_str=str(boy_int)[2:8]

	
	
	
	
	
#print("boy_str:{}\r\n".format(boy_str))

	
	
	
	
	
boy_pol=boylam[len(boylam)-1:len(boylam)]

	
	
	
	
	
smsKoordinat="Konum: https://www.google.com.tr/maps/place/{}.{}{}+{}.{}{}".format(en_der,en_str,en_pol,boy_der,boy_str,boy_pol)
	
	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
smsGonder(telNum,smsKoordinat)
	
	
	
	
	
sleep(10)
	
	
	
	
#gelen komut için bu komut mu? karşılaştırması koy ve gelen text istenen uzunlukta mı bak
	

	
	
if ( (
"$GPSACP"in gsmRespText) and (len(gsmRespText)>85): # gelen veri $GPSACP ve 80 karakterden uzunsa
	
	
	
#eğer gps cümlesinin önünde başka bir komutun cevabı gelirse bölmek sıkıntı oluşturuyor
	
	
	
#bunun için $GPSACP: konumu alınıp onunla işlem yapılıyor.
	
	

	
	
	
gpsText=gsmRespText[gsmRespText.find("$"):]
	

	
	
	
params=list(gpsText.split(","))
	
	
	
saat=params[0]
	
	
	
saat=saat[saat.find(":")+2:saat.find(":")+8]
	
	
	
#saat=saat[8:len(saat)]
	
	
	
enlem=params[1]
	
	
	
boylam=params[2]
	
	
	
rakim=float(params[4])
	
	
	
yon=round(float(params[6]))
	
	
	
hiz=round(float(params[7]))
	
	
	
tarih=params[9]
	
	
	
uydu=int(params[10][:2])
	
	
	
#bulduklarını yazdır
	
	
	
#print( "saat: {}\r\n".format(saat))
	
	
	
#print( "enlem: {}\r\n".format(enlem))
	
	
	
#print( "boylam: {}\r\n".format(boylam))
	
	
	
#print( "rakım: {}\r\n".format(rakim))
	
	
	
#print( "yön: {}\r\n".format(yon))
	
	
	
#print( "hiz: {}\r\n".format(hiz))
	
	
	
#print( "tarih: {}\r\n".format(tarih))
	
	
	
#print( "uydu: {}\r\n".format(uydu))
	
	
	

	
	
	
dkEx=dk
	
	
	
#sleep(1)
	
	
	
# zaman ifadelerini çek
	
	
	
sa=int(saat[0:2])
	
	
	
dk=int(saat[2:4])
	
	
	
san=int(saat[4:6])
	
	
	
#tarih ifadelerini çek
	
	
	
gun=int(tarih[0:2])
	
	
	
ay=int(tarih[2:4])
	
	
	
yil=int(tarih[4:6])
	
	
	

	
	
	
print(
"Tarih ve Saat {}/{}/{} {}:{}:{}\r\n".format(gun,ay,yil,sa,dk,san))
	
	
	

	
	
	
# dakika değişiminde çalış
	
	
	
if 
dk!=dkEx
	
	
	
	
#bulduklarını veritabanına yazdır
	
	
	
	

	
	
	
	
with db.connect(dbFile) as vt:
	
	
	
	
	
im=vt.cursor()
	
	
	
	
	
sorguText="""INSERT INTO action(enlem,boylam,rakim,yon,hiz,tarih,saat) VALUES("{}","{}","{}","{}","{}","{}","{}")""".format(enlem,boylam,rakim,yon,hiz,tarih,saat)
	
	
	
	
	
#print (sorguText)
	
	
	
	
	
im.execute(sorguText)
	
	
	
	
	
vt.commit()
	
	
	
	
	
print(
"Veritabanına eklendi")
	
	
	

	
# gönderilecek komutları buraya gir.
	
#sonra bir süre beklet
	
#Sonra komut içindeki tüm texti yukarıda ayıklasın
	

	

	
komut="AT$GPSACP\r"
	
ser.write(komut.encode('utf-8'))
	
sleep(0.5)
	

	

	

ser.close()
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com