Files
sf_lactor/ADED.py
2017-11-14 07:39:49 +01:00

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')