Найти - Пользователи
Полная версия: Python + Sirit IDentity 5100
Начало » Python для новичков » Python + Sirit IDentity 5100
1
Kardinal070
Добрый день! Начал изучать Python… Столкнулся с проблемкой. Коротко изложу поставленную мне задачу: есть оборудование Sirit который считывает метки. Мы хотим поставить это оборудование на КПП на ворота…. Нужно создать базу с данными меток и присвоенных к ним номеров машин. После того как машина подезжает к воротам метка считывается и должен подаваться сигнал охранникам на компьютер выдавая на мониторе инфу о машине (номер, имя). Так же должно вестись логирование. Кто когда приезжал уезжал. Посоветуте с чего начать и как связать с БД.
PooH
Для начала дочитайте учебник до конца.
Kardinal070
PooH
Для начала дочитайте учебник до конца.
Не голова а дом советов…=)
Андрей Светлов
Какой вопрос - такой и ответ. Вы конкретней спрашивайте.
Например: код такой-то (прилагается) генерирует исключение. Как починить?
Kardinal070
#!/usr/bin/python -u
import saturn, re, commands, time, sys, anydbm, thread, threading, datetime, string
from sys import argv
# e-Event )
global e

#const
DB_FILE = 'tag.db'
TIMEOUT_ = 30
# default depart time is 5 sec
DEPARTTIME = 3000
DIO_PIN = "1"
DIO_LO = "0"
DIO_HI = "1"

#
# callback for dio events
#
def evt_rec(data):
evt_type = type_event(data)
if evt_type == "event.tag.arrive":
tag_arrive(data)
if evt_type == "event.tag.report":
tag_report(data)
if evt_type == "event.tag.depart":
tag_depart(data)

def tag_arrive(data):
print "event.tag.arrive"
tagid = parse_data(data, "tag_id=", 26)
if tagid != 'NULL':
print "TagID: %s " % tagid
else:
print "No tag id found: %s " %data
if len(taglist) > 0:
for id in taglist:
if tagid == id:
cd = checkdate()
if cd == 'false':
e.clear()
rc = cmd.sendcommand('dio.in.4')
#ПЕРЕДЕЛАЙ, если подается сигнал на вход не открывать ворота
#т.е. вот так rc[1] != 1:
if rc[1] == "1":
print "gate will be open"
rc = cmd.sendcommand('dio.out.'+DIO_PIN+'='+DIO_HI)
if rc[0] != "ok":
print "setup error for dio.out: %s " % rc[0]
rc = cmd.sendcommand('dio.out.'+DIO_PIN+'='+DIO_LO)
if rc[0] != "ok":
print "setup error for dio.out: %s " % rc[0]
break
else:
break
else:
print "not found key in db"
else:
print "base is empty"
#

def tag_report(data):
tagid = parse_data(data, "tag_id=", 26)
if len(taglist) > 0:
for id in taglist:
if tagid == id:
print "event.tag.report"
e.clear()

def tag_depart(data):
tagid = parse_data(data, "tag_id=", 26)
if len(taglist) > 0:
for id in taglist:
if tagid == id:
print "event.tag.depart"
e.set()

def dio_evt(data):
try:
print "dio out"
except:
print "dio out error"

def parse_data(data, field_name, field_size):
rdata = "NULL"
field_index=data.find(field_name)
if field_index != -1:
field_index += len(field_name)
rdata=data[field_index:field_index+field_size]
return rdata

def type_event(data):
rdata = "NULL"
i=0
s=""
while data[i] != ' ':
s=s+data[i]
i=i+1
if s != '':
rdata=s
return rdata

def timeout(n):
t = time.time()
print "start timeout"
while (time.time() - t < n):
if e.isSet() == False:
t = (time.time())+1
time.sleep(1)
print "timeout completed"
thread.start_new_thread(timeout,(n,))

# if function return TRUE then not open gate :)
def checkdate():
datefile = 'day.cfg'
timefile = 'time.cfg'
rdata = 'false'
today = datetime.date.today()
day = today.strftime("%A")
try:
f = open(datefile,'r')
f.seek(0)
s = 'test'
while not (s==''):
s = f.readline()
s = string.strip(s)
if day == s:
rdata = 'true'
break
f.close()
except:
print "Can't open " + dayfile
try:
f = open(timefile,'r')
f.seek(0)
morning = f.readline() # first string in timefile
evening = f.readline() # second string in timefile
f.close()
now = datetime.datetime.now()
now = now.strftime("%H:%M:%S")
if (morning <> '') and (evening <> ''):
if (morning > now) or (evening < now):
rdata = 'true'
else:
print "Check file " + timefile
except:
print "Can't open " + timefile
return rdata
#

#
# default for timeout
#
try:
timeout_ = argv[1]
except:
timeout_ = TIMEOUT_

try:
departtime = argv[2]
except:
departtime = DEPARTTIME

e = threading.Event()
e.clear()

# starting timeout
thread.start_new_thread(timeout,(20,))

#
# setup the command and event session
#
cmd = saturn.Command('localhost',50007)
evt = saturn.Event('localhost',50008)

temp_str = 'tag.reporting.depart_time = '+str(departtime)
print temp_str
rc = cmd.sendcommand(temp_str)
if rc[0] == "ok":
print "tag.reporting.depart_time is %s msec" % (departtime)
else:
print "err in tag.reporting.depart_time"

evtarr = evt.getid()
evtrep = evt.getid()
evtdep = evt.getid()

print "Event arrive = ",evtarr
print "Event report = ",evtrep
print "Event depart = ",evtdep

#
# make sure the dio output pin is off
#
rc = cmd.sendcommand('dio.out.'+DIO_PIN+'='+DIO_LO)
if rc[0] != "ok":
print "setup error for dio.out: %s " % rc[0]

try:
db = anydbm.open(DB_FILE)
print "base open"
except:
db = anydbm.open(DB_FILE,'c')
print "created new base"

taglist = db.keys()
print "tags in base: "
print taglist
#
# register for tag arrive events
#
rc = cmd.sendcommand('reader.register_event(id='+evtarr+',name=event.tag.arrive)')
if rc[0] == "ok":
print "register event tag.arrive succesfull"
else:
print "error register event tag.arrive"

rc = cmd.sendcommand('reader.register_event(id='+evtrep+',name=event.tag.report)')
if rc[0] == "ok":
print "register event tag.report succesfull"
else:
print "error register event tag.report"

rc = cmd.sendcommand('reader.register_event(id='+evtdep+',name=event.tag.depart)')
if rc[0] == "ok":
print "register event tag.depart succesfull"
else:
print "error register event tag.depart"

evt.receive(evt_rec)
#
#change the operating mode
#

evt.close()
cmd.close()
Андрей Светлов
В шапке написано: КОД ОБОРАЧИВАТЬ В ТЕГИ code
А теперь главный вопрос: и в чем у вас проблема?
Kardinal070
Андрей Светлов
В шапке написано: КОД ОБОРАЧИВАТЬ В ТЕГИ code
А теперь главный вопрос: и в чем у вас проблема?
Надо связать с базой… Но не так как здесь… Возможно ли связать с IBExpert? И как можно логирование осуществить?
Андрей Светлов
IBExpert - не база. Используйте DB API для firebird или что у вас там.
Для логирования есть модуль logging
Kardinal070
Андрей Светлов
IBExpert - не база. Используйте DB API для firebird или что у вас там.
Для логирования есть модуль logging
Спасибо…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB