Added Animalrecognition over TCP-Socket

This commit is contained in:
2018-02-19 20:20:43 +01:00
parent aa608bbad4
commit 7e7389f561
3 changed files with 60 additions and 44 deletions

15
DB.py
View File

@@ -122,6 +122,18 @@ class DB:
return cursor.fetchall ()
def getanimalnrbyrfid (self, rfid):
"""
Get Animalnr by RFID
"""
try:
cursor = self.executesql ("SELECT animalnr FROM animals WHERE rfid = '%s';" % rfid)
except:
print ("Couldnt read from animals")
return cursor.fetchone ()
def addmilkdata (self, data):
"""
Add Milkingdata
@@ -175,6 +187,9 @@ class DB:
if __name__ == "__main__":
conn = DB ('/opt/data/animaldb.sqlite', '/tmp/talog.sql', logtest, errlogtest)
anr = conn.getanimalnrbyrfid ('7678l43'.lstrip('0'))
if anr:
print (anr [0])
data = {'animalnr' : 711,
'earmark' : 'DE09 4711',
'rfid' : '123543546'

View File

@@ -15,5 +15,5 @@ herdewritefile = TAU_PRC.2
[Animal Recognition]
animalrecognition = 1
rfiddev = /dev/serial0
rfidip = 192.168.178.101
rfidport = 100

View File

@@ -2,12 +2,13 @@
import sys, os
from pathlib import Path
import can
import serial
from DB import *
from time import sleep, time, strftime
from datetime import *
from configparser import *
from Taurus import *
from socket import *
from select import select
bus = None
infotype = {0 : 'S-Buffer deleted',
@@ -19,7 +20,7 @@ infotype = {0 : 'S-Buffer deleted',
6 : 'state'
}
ganimalnr = 0
grfid = 0
class CanListener (can.Listener):
def on_message_received (self, msg):
@@ -105,10 +106,13 @@ class CanListener (can.Listener):
if infotype [_info_type] == 'animal nr':
if 'REQ' in str (_data):
self.log ("Anforderung Tiernummer von Tiererkennung", 3)
#FixMe AnimalNr from rFID
animalnr = ganimalnr
#AnimalNr from RFID
animalnr = 0
anr = conn.getanimalnrbyrfid (grfid.lstrip('0'))
if anr:
animalnr = int (anr)
#_sendecho = 0
_repdata = bytearray (('REP00%03d' % animalnr).encode ())
_repdata = bytearray (('REP00%03d' % anr).encode ())
self.waitack [_address] = 1
elif self.waitack [_address]:
@@ -296,32 +300,25 @@ if __name__ == "__main__":
c_animalrecognition = config.get ('Animal Recognition', 'animalrecognition')
c_animalrecognition = 0
if c_animalrecognition:
print ('Animalrecognition configured')
c_rfiddev = config.get ('Animal Recognition', 'rfiddev')
print (' with device %s' % c_rfiddev)
if not c_rfiddev:
c_rfidip = config.get ('Animal Recognition', 'rfidip')
c_rfidport = int (config.get ('Animal Recognition', 'rfidport'))
print (' with ip %s port %s' % (c_rfidip, c_rfidport))
if not c_rfidip or not c_rfidport:
print ('No RFID Device configured')
sys.exit (0)
"""
Nedap RFID Reader
Nedap RFID Reader over RS232 / TCP
"""
print ('RFID configured')
rfid = serial.Serial (port = c_rfiddev,\
baudrate = "9600",\
bytesize = 8,\
parity = "N",\
stopbits = 1,\
timeout = 0,\
xonxoff = 0,\
rtscts = 0,\
writeTimeout = None)
srfid = socket(AF_INET, SOCK_STREAM)
srfid.connect ((c_rfidip, c_rfidport))
herdefiletslatch = None
herdechanged = 0
readbuffer = ''
online = 0
animalnr = ''
rfidonline = 0
rfidnr = ''
while 1:
if c_herde:
if Path (c_herdepath + c_herdereadfile).exists ():
@@ -337,29 +334,33 @@ if __name__ == "__main__":
herdefiletslatch = _herdets
#Tiererkennung
if c_animalrecognition:
try:
d = rfid.read ()
if len (d):
try:
b = d.decode("utf-8")
except:
print ("Decode Error %s" % d)
b = ''
readbuffer += b
reads = [srfid]
writes = []
(read, writes, xlist) = select (reads, writes, [], 0.01)
for i in read:
data = i.recv (512)
if len (data):
d = data.decode("utf-8", "ignore")
readbuffer += d
if readbuffer [-2:] == '\r\n':
if online:
if rfidonline:
data = readbuffer.split (' ')
if len (data) == 3:
newanimalnr = data [2]
print ("Tiernummer gelesen %s" % newanimalnr)
if newanimalnr != animalnr:
print ("Neue Tiernummer %s" % newanimalnr)
animalnr = newanimalnr
ganimalnr = animalnr
readbuffer = ''
online = 1
except KeyboardInterrupt:
newrfid = data [2]
if newrfid != rfidnr:
print ("Neue RFID %s" % newrfid)
rfidnr = newrfid
grfid = rfidnr
readbuffer =''
rfidonline = 1
for i in xlist:
print ("Closed Socket")
i.close ()
bus.shutdown ()
rfid.close ()
sys.exit (0)
try:
foo = 0
except KeyboardInterrupt:
bus.shutdown ()
srfid.close ()