119 lines
4.0 KiB
Python
119 lines
4.0 KiB
Python
from time import time, strftime
|
|
from DB import *
|
|
|
|
entities = {}
|
|
|
|
"""
|
|
Entity 880022
|
|
Gemelkerfassung
|
|
"""
|
|
#NR, ART, ITEM, NAME, TYPE, LEN, RESOLUTION, UNIT, CODE
|
|
entities ['880022'] = [
|
|
(1, 'KEY', '900080', 'Rind-ID', 'N', 15, 0, '', 0),
|
|
(2, 'MAN', '800004', 'Betrieb Nr', 'N', 15, 0, '', 0),
|
|
(3, 'MAN', '800043', 'Betriebstaette (AE)', 'N', 2, 0, '', 0),
|
|
(4, 'OPT', '900045', 'Name', 'AN', 24, 0, '', 0),
|
|
(5, 'KEY', '900054', 'Datum (Melken)', 'N', 8, 0, 'CCYYMMDD', 0),
|
|
(6, 'KEY', '900078', 'Startzeit (Melken)', 'N', 6, 0, 'hhmmss', 0),
|
|
(7, 'OPT', '900042', 'Milchmenge im Gemelk', 'N', 3, 1, 'KG', 0),
|
|
(8, 'OPT', '900024', 'Kastennummer', 'N', 6, 0, '', 0),
|
|
(9, 'OPT', '900025', 'Flaschennummer', 'N', 4, 0, '', 0),
|
|
(10, 'OPT', '800700', 'Barcode', 'N', 10, 0, '', 0),
|
|
(11, 'OPT', '800701', 'gemolken', 'N', 1, 0, '', 8889),
|
|
(12, 'OPT', '800703', 'Melkereignis', 'AN', 3, 0, '', 999),
|
|
(13, 'OPT', '800702', 'Zwischenmelkzeit', 'N', 6, 0, '', 0),
|
|
(14, 'OPT', '900070', 'Stallnummer', 'N', 15, 0, '', 0),
|
|
(15, 'OPT', '804841', 'Bemerkungen', 'AN', 30, 0, '', 0),
|
|
(16, 'OPT', '800134', 'RFID', 'AN', 20, 0, '', 0),
|
|
(17, 'OPT', '821005', 'Milchflussdauer', 'N', 5, 3, '', 0),
|
|
(18, 'OPT', '900097', 'Herdenspez. Elektron. ID', 'AN', 16, 9, '', 0)
|
|
]
|
|
|
|
class ADIS:
|
|
def __init__ (self, db, loglevel):
|
|
self.db = db
|
|
self.loglevel = loglevel
|
|
#Optional Fields for an entity
|
|
self.entityfields = {'880022': ['800702', '900070']}
|
|
|
|
|
|
def log (self, msg, _level = 3):
|
|
"""
|
|
Logfile
|
|
Loglevel 9 = print to console
|
|
"""
|
|
if self.loglevel == 9:
|
|
print (msg)
|
|
if _level <= self.loglevel:
|
|
file = open ("/var/log/lactor/" + os.getcwd().split('/')[-1] + '.err', "a")
|
|
dt = datetime.now ()
|
|
file.write ("%4d-%02d-%02d %02d:%02d:%02d.%06d: " %(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond) + msg + "\n")
|
|
file.close ()
|
|
|
|
|
|
def parsedn (self, data):
|
|
"parse an DN and returen datasetdefinition"
|
|
entityid = data [: 6]
|
|
_data = data [8:]
|
|
entity = entities [entityid]
|
|
ds = []
|
|
for i in range (0, len (_data) , 11):
|
|
_item = _data [i: i + 6]
|
|
_len = int (_data [i + 6: i + 8])
|
|
_unit = _data [i + 8: i + 9]
|
|
print _item
|
|
for nr, art, item, name, datatype, length, resolution, unit, code in entity:
|
|
if _item == item:
|
|
ds.append ((nr, art, item, name, datatype, length, resolution, unit, code))
|
|
if _len != length:
|
|
print ("Error Size was %d instead of %d" % (_len, length))
|
|
|
|
print (ds)
|
|
|
|
def createmilkdataset (self, animalinfo):
|
|
"""
|
|
Creating entity for 880022
|
|
"""
|
|
animalnr, earmark, rfid, status = animalinfo
|
|
data = {'900070': animalnr,
|
|
'900080': earmark,
|
|
'800143': rfid
|
|
}
|
|
md = self.db.getlastmilkdatabyanimal (animalnr, 1)
|
|
if len (md):
|
|
ts, animalnr, ammount, time = md [0]
|
|
dt = datetime.strptime (ts, '%Y-%m-%d %H:%M:%S')
|
|
mdate = dt.strftime ('%Y%m%d')
|
|
mtime = dt.strftime ('%H%M%S')
|
|
data ['900054'] = mdate
|
|
data ['900078'] = mtime
|
|
data ['900042'] = ammount
|
|
|
|
ds = "VN880022"
|
|
for nr, art, item, name, datatype, length, resolution, unit, code in entities ['880022']:
|
|
if art == 'KEY' or item in self.entityfields ['880022']:
|
|
self.log ("Item %s needed" % item, 9)
|
|
if item in data:
|
|
if datatype == 'AN':
|
|
ds += data[item].rjust (int (length + 1))
|
|
elif datatype == 'N':
|
|
ds += "%d".rjust (int (length + 1)) % (int (data[item]) * 10**int (resolution))
|
|
|
|
self.log (ds, 9)
|
|
return ds
|
|
|
|
|
|
def testmilkdataset (self):
|
|
animalinfo = self.db.getanimal ('711')
|
|
self.createmilkdataset (animalinfo [0])
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
adis = ADIS (DB ('/opt/data/animaldb.sqlite', '/tmp/talog.sql', logtest, errlogtest), loglevel = 9)
|
|
adis.testmilkdataset ()
|
|
#parsedn ('88002200800004150009000801500080002910000900054080009000780600090004203100800701010008000430200080070303000900070060')
|
|
|
|
|