Added Initial Version

This commit is contained in:
2019-10-14 15:15:10 +02:00
parent 393b57d12f
commit e37df75742

211
ADIS_LKV.py Executable file
View File

@@ -0,0 +1,211 @@
from time import time, strftime
from datetime import datetime
import os
entities = {}
"""
Entity 990001
Header AGRO 2014
"""
#NR, ART, ITEM, NAME, TYPE, LEN, RESOLUTION, UNIT, CODE
entities ['990001'] = [
(1, 'KEY', '00000000', 'DD-Typ', 'AN', 8, 0, '', 0),
(2, 'MAN', '00900002', 'DD ISO Version', 'AN', 8, 0, '', 0),
(3, 'MAN', '00900003', 'Erstelldatum', 'N', 8, 0, 'CCYYMMDD', 0),
(4, 'MAN', '00900004', 'Erstellzeit', 'N', 6, 0, 'hhmmss', 0),
(5, 'OPT', '00900005', 'Systemstatus', 'N', 1, 0, '', 0),
(6, 'MAN', '00900006', 'Absender', 'AN', 24, 0, '', 0),
(7, 'OPT', '00900007', 'Empfaenger', 'AN', 24, 0, '', 0),
(8, 'OPT', '00900008', 'Senderversion', 'AN', 8, 0, '', 0),
(9, 'MAN', '00900009', 'ADED-Nation.-Vers.', 'AN', 8, 0, '', 0),
(10, 'OPT', '00900010', 'Module 10 Checksumme', 'AN', 1, 0, '', 0),
(11, 'OPT', '00900011', 'Bez. Prozesscomputer', 'AN', 10, 0, '', 0),
(12, 'OPT', '00900012', 'ADED-Herstellerversion', 'AN', 10, 0, '', 0)
]
"""
Entity 880022
Gemelkerfassung AGRO 2014
"""
#NR, ART, ITEM, NAME, TYPE, LEN, RESOLUTION, UNIT, CODE
entities ['880022'] = [
(1, 'KEY', '00900080', 'Rind-ID', 'N', 15, 0, '', 0),
(2, 'MAN', '00800004', 'Betrieb Nr', 'N', 15, 0, '', 0),
(3, 'MAN', '00800043', 'Betriebstaette (AE)', 'N', 2, 0, '', 0),
(4, 'OPT', '00900045', 'Name', 'AN', 24, 0, '', 0),
(5, 'KEY', '00900054', 'Datum (Melken)', 'N', 8, 0, 'CCYYMMDD', 0),
(6, 'KEY', '00900078', 'Startzeit (Melken)', 'N', 6, 0, 'hhmmss', 0),
(7, 'OPT', '00900042', 'Milchmenge im Gemelk', 'N', 3, 1, 'KG', 0),
(8, 'OPT', '00900024', 'Kastennummer', 'N', 6, 0, '', 0),
(9, 'OPT', '00900025', 'Flaschennummer', 'N', 4, 0, '', 0),
(10, 'OPT', '00800700', 'Barcode', 'N', 10, 0, '', 0),
(11, 'OPT', '00800701', 'gemolken', 'N', 1, 0, '', 8889),
(12, 'OPT', '00800703', 'Melkereignis', 'AN', 3, 0, '', 999),
(13, 'OPT', '00800702', 'Zwischenmelkzeit', 'N', 6, 0, '', 0),
(14, 'OPT', '00900070', 'Stallnummer', 'N', 15, 0, '', 0),
(15, 'OPT', '00804841', 'Bemerkungen', 'AN', 30, 0, '', 0),
(16, 'OPT', '00800134', 'RFID', 'AN', 20, 0, '', 0),
(17, 'OPT', '00821005', 'Milchflussdauer', 'N', 5, 3, '', 0),
(18, 'OPT', '00900097', 'Herdenspez. Elektron. ID', 'AN', 16, 0, '', 0),
(19, 'OPT', '00800122', 'Melkplatz', 'AN', 3, 0, '', 0)
]
class ADIS:
def __init__ (self, loglevel):
self.loglevel = loglevel
#Optional Fields for an entity
self.entityfields = {'880022': ['00900042', '00821005'],
'990001': [ '00900007', '00900009']}
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/LKV" + 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 generated (self, entity):
#Generate Datadefiniton
l = 'DN' + entity
for nr, art, item, name, datatype, length, resolution, unit, code in entities [entity]:
if art in ['KEY', 'MAN'] or item in self.entityfields [entity]:
l += '%s%02d%01d' % (item, length, resolution)
return l
def createaheader (self, fields):
"""
Header
"""
data = {'00000000': 'DD'}
data ['00900002'] = 1996
data ['00900003'] = datetime.now().strftime ('%Y%m%d')
data ['00900004'] = datetime.now().strftime ('%H%M%S')
data ['00900006'] = 'Siliconform'
data ['00900007'] = 'LKV'
data ['00900008'] = '1.00'
data ['00900009'] = 'AGRO2014'
ds = "VH990001"
for nr, art, item, name, datatype, length, resolution, unit, code in fields:
if art in ['KEY', 'MAN'] or item in self.entityfields ['990001']:
self.log ("Item %s needed" % item, 9)
print ("Item %s" % item)
if item in data:
if datatype == 'AN':
_v = str (data[item]).rjust (int (length))
ds += _v [len (_v) - int (length):]
elif datatype == 'N':
_v = "%d" % (int (data[item] * (10**int (resolution))))
_v = _v.rjust (int (length))
ds += _v[len (_v) - int (length):]
else:
print ("do")
ds += '?' * length
self.log (ds, 9)
return ds
def createmilkdataset (self, animalinfo, milkdata):
"""
Creating entity for 880022
"""
animalnr, earmark, rfid, forbidmilk, tsforbidstart, tsforbidend = animalinfo
#Check milking forbidden
milkforbid = 0
if forbidmilk and tsforbidstart:
dttsforbidstart = datetime.strptime (tsforbidstart + ' 00:00:00', '%Y-%m-%d %H:%M:%S')
if datetime.now () > dttsforbidstart:
if tsforbidend:
dttsforbidend = datetime.strptime (tsforbidend + ' 23:59:59', '%Y-%m-%d %H:%M:%S')
if datetime.now () <= dttsforbidend:
milkforbid = 1
else:
milkforbid = 1
if len (milkdata):
ammount, time, mdate = milkdata
data = {'00900070': animalnr}
data ['00800004'] = '0'
data ['00800043'] = '9'
data ['00900080'] = earmark
data ['00800143'] = rfid
data ['00900054'] = mdate.replace ("-","")
data ['00900078'] = "000000" #mtime
data ['00900042'] = float (ammount) / 1000.0 #0.1kg
data ['00821005'] = int (time)
#data ['00201860'] = milkplace
print (data ['00900042'])
ds = "VN880022"
for nr, art, item, name, datatype, length, resolution, unit, code in entities ['880022']:
if art in ['KEY', 'MAN'] or item in self.entityfields ['880022']:
self.log ("Item %s needed" % item, 9)
if item in data:
if datatype == 'AN':
_v = str (data[item]).rjust (int (length))
ds += _v [len (_v) - int (length):]
elif datatype == 'N':
_v = "%d" % (int (data[item] * (10**int (resolution))))
_v = _v.rjust (int (length))
ds += _v[len (_v) - int (length):]
self.log (ds, 9)
return ds
def createlkv (animalinfos, milkdata):
"""
LKV Daten generieren
"""
adis = ADIS (loglevel = 0)
retval =""
#Datendefinition und Header generieren
dh = adis.generated ('990001').replace ('DN', 'DH')
print ("Debug HEADER DEF:\n" + dh)
retval += dh + "\n"
header = adis.createaheader (entities ['990001'])
print ("Debug HEADER:\n" + header)
retval += header + "\n" + "TN\n"
#Datendefinition Melkungen generieren
print ("DEBUG MDEF\n")
dd = adis.generated ('880022')
print (dd)
retval += dd + "\n"
if animalinfos:
for animalnr, earmark, rfid, forbidmilk, tsforbidstart, tsforbidend in animalinfos:
if milkdata [animalnr]:
ds = adis.createmilkdataset ((animalnr, earmark, rfid, forbidmilk, tsforbidstart, tsforbidend), milkdata[animalnr])
print ("Debug Dataset")
print (ds)
retval += ds + "\n"
else:
return "help"
retval += "TN\n"
retval += "ZN\n"
print ("Debug End")
print retval
if __name__ == "__main__":
animalinfos = [(90, '2730000000000000', '', '1', '2019-09-11', '2019-09-20')]
milkdata = {90 : (10992, 503.2, '2018-05-01')}
createlkv (animalinfos, milkdata)