### # specify knitr options knitr::opts_chunk$set(echo = FALSE, results = 'asis') ### # initialize section counter robjSecEnum <- rqudocuhelper::SectionEnumerator$new()
\fcolorbox{black}{white}{ \parbox[t]{1.0\linewidth}{ \centering \fontsize{12pt}{20pt}\selectfont % \vspace*{0.5cm} %
\hfill Zusammenfassung/Übersicht \vspace*{0.5cm} }
}
\vspace*{0.5cm}
\fcolorbox{black}{white}{ \parbox[t]{1.0\linewidth}{ \centering \fontsize{25pt}{40pt}\selectfont % \vspace*{0.7cm} Übersicht der Daten \ von DeLaval \ ATDA-ASR \
\vspace*{0.7cm} % Space between the end of the title and the bottom of the grey box }
}
\vspace*{1cm}
\begin{center} \includegraphics[width=0.5\textwidth]{png/Pedigree.png} \end{center}
\vspace{5ex}
{\centering \small
\hfill
\begin{tabular}{l}
Peter von Rohr \
FB EDV, Qualitas AG \
Chamerstrasse 56, CH-6300 Zug \
\verb+http://www.qualitasag.ch+ \
\verb+peter.vonrohr@qualitasag.ch+
\end{tabular}
}
\pagebreak
\tableofcontents
\pagebreak
knitr::opts_chunk$set(echo = FALSE, results = 'asis')
r6objDocStat <- rqudocuhelper::R6ClassDocuStatus$new() r6objDocStat$setProject(psProject = "ATDA-ASR") # r6objDocStat$setVersion(psVersion = "0.0.901") # r6objDocStat$setStatus(psStatus = "Erstellung") # r6objDocStat$setVersion(psVersion = "0.0.902") # r6objDocStat$setStatus(psStatus = "Terminologie") # r6objDocStat$setVersion(psVersion = "0.0.903") # r6objDocStat$setStatus(psStatus = "DeLaval DataDictionary") # r6objDocStat$setVersion(psVersion = "0.0.904") # r6objDocStat$setStatus(psStatus = "Übertragungshäufigkeiten der Daten") # r6objDocStat$setVersion(psVersion = "0.0.905") # r6objDocStat$setStatus(psStatus = "Anhang mit einem UML-Diagramm für einen Event") # r6objDocStat$setVersion(psVersion = "0.0.906") # r6objDocStat$setStatus(psStatus = "UML-Diagramm für Event Milking data") r6objDocStat$setVersion(psVersion = "0.0.907") r6objDocStat$setStatus(psStatus = "Entwurf JSON Format für Milking Data") r6objDocStat$include_doc_stat()
\pagebreak
robjAbrTable <- rqudocuhelper::refObjTable$new() pvecTableHeader <- c("Abkürzung", "Bedeutung") robjAbrTable$setTableHeader(psTableHeader = pvecTableHeader) robjAbrTable$addRow(plTableRow = list(Abr = "AIL", What = "AlproIso Link")) robjAbrTable$addRow(plTableRow = list(Abr = "ATDA-ASR", What = "ASR Projekt zum Automatisierten Tierdatenaustausch")) robjAbrTable$addRow(plTableRow = list(Abr = "ISM", What = "Informationssystem der Melkanlage")) robjAbrTable$addRow(plTableRow = list(Abr = "DD", What = "DataDictionary")) robjAbrTable$addRow(plTableRow = list(Abr = "ADIS", What = "Agricultural Data Interchange Syntax")) robjAbrTable$addRow(plTableRow = list(Abr = "ADED", What = "Agricultural Data Elements Dictionary")) robjAbrTable$addRow(plTableRow = list(Abr = "ISO", What = "International Organization for Standardization")) robjAbrTable$addRow(plTableRow = list(Abr = "dat", What = "daily transfer (tägliche Übertragung)")) robjAbrTable$addRow(plTableRow = list(Abr = "ooc", What = "on occurence (Übertragung beim Auftreten)")) robjAbrTable$addRow(plTableRow = list(Abr = "JSON", What = "JavaScript Object Notation")) robjAbrTable$addRow(plTableRow = list(Abr = "WADL", What = "Web Application Description Language")) #robjAbrTable$addRow(plTableRow = list(Abr = "", # What = "")) robjAbrTable$to_pander_pandoc(psStyle = "grid", psJustify = rep("left", length(pvecTableHeader)), pnSplitCells = c(20,60))
\pagebreak
Dieses Dokument gibt eine Zusammenfassung über das Material, welches von DeLaval zur Verfügung gestellt wurde. Die Datenquellen sind im Text erwähnt. Zusätzliche Kommentare sind in geschweiften Klammern {}. Das Material besteht im Wesentlichen aus zwei Bestandteilen:
Im folgenden werden die Inhalte dieser Dokumente zusammengefasst.
Im Dokument Alpro66_info.doc
beschreibt DeLaval des Systems AlproIso link (AIL). Dieses System wird im ursprünglichen Dokument als Link
bezeichnet, was wahrscheinlich mit einer Implementation eines Interfaces gleichgesetzt werden kann.
Der Datenaustausch in AIL basiert auf dem ISO 11787 Standard. Die Dokumentation von AIL soll externen Entwicklern helfen, wie sie ihre Software mit ALPRO verbinden können unter der Verwendung von AIL.
Alpro System: Ausrüstung, Hard- und Software für die Kontrolle der Herdenereignisse (Melken, Füttern, etc). Die Verwendung von AIL setzt mindestens das APW Programmpaket voraus.
ALPRO: Prozessor der Anlage, wird als "black box" betrachtet
APW: Programmpaket des DeLaval's Management Programm. Besteht aus mehreren Progammen und operiert auf zwei Datenbanken, einer Kopie der ALPRO Datenbank und der erweiterten Datenbank. Die Installation von APW ist erforderlich die Verwendung von AIL.
AlproWindow.exe: ist eines der in APW integrierten Programme und ist das Herdenmanagement Programm von DeLaval. Es enthält einen Browser für die Datenbank.
AlproIso link: verwendet für den Datenaustausch zwischen APW und einem externen Programm. Der Link ist ein Teil des Moduls AlproSync.exe und dies ist die einzige Möglichkeit auf die Datenbank zuzugreifen.
AlproSync.exe: ist Teil von APW und ist verantwortlich für die Kommunikation zwischen dem Prozessor und der Datenbank.
ISO32.exe: ist Teil von APW und ist das Interface-Programm zwischen 3-party PC-Programmen und AIL. Alle 3-party Programme haben Zugriff auf die Datenbank durch den Aufruf dieses Programms.
ISOSync.exe: ist Teil von APW und ein Teil des Interface-Programms
3-party Programm: jedes Programm, welches nicht von DeLaval kommt und AIL für den Datenaustausch mit ALPRO verwendet.
ISO 11787: ISO Standard (ADIS) auf welchem der Datenaustausch basiert
ISO 11788: ISO Standard Data Dictionary (ADED), welcher den ISO Data Dictionary beschreibt
ADIS: Agricultural Data Interchange Syntax
ADED: Agricultural Data Elements Dictionary beschreibt die verschiedenen Datenelemente, welche mit ADIS (ISO 11787) ausgetauscht werden. DeLaval hat eine eigene ADED Dictionary Version
Alpro6_dd: DeLaval Data Dictionary basierend auf dem ADED Standard
DD-nummer: Data Dictionary Nummer, welche jedes Datenelement aus dem ADED identifiziert
{ Die hier beschriebenen und oben aufgelisteten Programme werden verwendet, wenn die Daten mit einem externen Programm exportiert werden sollen. Das Ziel im Projekt ATDA-ASR
ist immer noch, dass der Export von den Herstellern selber übernommen wird und dass wir die exportierten Daten erhalten. }
Das Excel Workbook Alpro6_DD.xls
enthält den von DeLaval erstellten und verwendeten DD. Dieser DD basiert auf dem ADED, welcher in ISO 11788 spezifiziert wurde. Die Elemente in Alpro6_DD
werden in 16 sogenannte Events unterteilt. Die Events und ihre Bedeutung sind in der folgenden Tabelle dargestellt.
dfEventTable <- data.frame(Nummer = c(390001, 390002, 390006, 390010, 390011, 390012, 390013, 390020, 390025, 390030, 390035, 390036, 390040, 390045, 390050, 390055), Event = c("New cow", "General cow", "Breeding items", "Milking data", "Stall place Milking", "Status code Milking", "Milking performance", "Feeding data", "Group data", "Activity data", "Ailment code", "Ailment name", "Parlour Items", "Sort Gate Items", "System Items", "AlproSync"), Bedeutung = c("Kuh, welche Status ändert oder neu in Herde kommt", "Allgemeine Informationen zu einer Kuh", "Status einer Kuh", "Milchleistungsdaten", "Gerät oder Platz wo Kuh gemolken wurde", "Codes für Melkvorgang", "Merkmale der Melkbarkeit", "Fütterungsdaten", "Fütterungs- und Melkgruppen", "Verhaltens- und Aktivitätsdaten", "Krankheits-Code", "Krankheits-Name", "Daten zum Melkstand", "Daten zu Gruppenzugehörigkeit oder Sortierung von Kühen", "System-Daten", "Update-Zeitpunkt der AlproWindows Datenbank"), Datentransfer = c("x", "x", "x", "x", "", "", "x", "x", "", "x", "x", "x", "", "", "x", "x")) knitr::kable(dfEventTable)
In der Kolonne mit der Überschrift Datentransfer
sind provisorisch alle Zeilen mit x
gekennzeichnet, welche vom Datentransfer in ATDA-ASR
berücksichtigt werden. Es sind alle Daten, ausser jene, welche nur Informationen zum Melkstand oder zur Gruppeneinteilung aufweisen. In den System-Daten ist die Identifiaktion des Betriebs drin, welche für uns wichtig ist.
\pagebreak
Die Häufigkeit mit welcher die oben für den Datentransfer markierten Daten übertragen werden ist nicht für alle Datentypen (Events) gleich. Grundsätzlich müssen Daten nur übertragen werden, falls diese neu auftreten und aufgezeichnet werden oder falls sich die Daten ändern.
Die maximale Übertragungshäufigkeit wird auf einmal pro Tag festgelegt. Für die Kühe in Laktation werden Milchleistungs-, Melkbarkeits-, Fütterungs- und Verhaltensdaten laufend erhoben und somit täglich vom ISM zur zentralen Datenbank übertragen. Für nichtlaktierende Kühe werden diese Daten wahrscheinlich nicht erhoben und deshalb werden für diese Kühe auch keine Daten übertragen. Alle Daten, welche nicht täglich erhoben werden, werden beim Auftreten des entsprechenden Ereignisses z. Bsp. einer Krankheit oder der Verabreichung eines Medikaments mit der täglichen Datenübertragung mitgeschickt. Das Ändern von Daten wird nur unter Einhaltung von Konsistenzbedingungen erlaubt.
Die folgende Tabelle gibt eine grobe Übersicht über die Übertragungshäufigkeit der verschiedenen Daten-Events.
dfTransFreq <- data.frame(Nummer = c(390001, 390002, 390006, 390010, 390011, 390012, 390013, 390020, 390030, 390035, 390036, 390050, 390055), Event = c("New cow", "General cow", "Breeding items", "Milking data", "Stall place Milking", "Status code Milking", "Milking performance", "Feeding data", "Activity data", "Ailment code", "Ailment name", "System Items", "AlproSync"), TrfFreq = c("ooc", "ooc", "ooc", "dat", "dat", "ooc", "dat", "dat", "dat", "ooc", "ooc", "ooc", "ooc")) names(dfTransFreq) <- c("Nummer", "Event", "Häufigkeit") knitr::kable(dfTransFreq)
In der Kolonne "Häufigkeit" steht "dat" für tägliche Übertragung und "ooc" für die Übertragung beim Auftreten des Datenereignisses.
Bei der Übertragung der Daten vom ISM zur zentralen Datenbank spielen die Formate eine wichtige Rolle. Gemäss unserer Befragung der Anbieter von Melkanlage setzen diese sehr verschiedene Datenformate ein. Diese müssen auf dem Web zur zentralen Datenbank in ein gemeinsames Format konvertiert werden. Als gemeinsames Format soll JSON verwendet werden. In JSON werden die Daten in assoziative Schlüssel/Werte-Paare oder in geordneten Records analog zu Arrays organisiert. Das Format erlaubt einen rekursiven Aufbau, d.h. Werte können wieder assoziative Schlüssel/Werte-Paare oder geordnete Records sein. Somit können recht komplexe Datenkonstrukte aufgebaut werden. Die JSON Records werden von JAX-RS Resourcen erzeugt. Die Definition dieser Resourcen wird in der sogenannten Web Application Description Language
(WADL) spezifiziert.
Im folgenden Abschnitt sollen Resourcen für die Daten im Event 390010 Milking Data
aus Alpro6_DD
in der WADL dargestellt werden. Die Beschreibung einer WADL für eine bestimmte Resource wird am einfachsten mithilfe des Jersey-Frameworks erzeugt. Für eine Resource mit context root
http://localhost:9998
, dann bekommen wir die entsprechende Beschreibung in WADL über http://localhost:9998/application.wadl
. Optional kann der Parameter detail=true
angefügt werden, damit alle verfügbaren Resourcen in der WADL Beschreibung angezeigt werden.
\pagebreak
390001 New Cow
DiagrammeR::grViz(diagram = "dot/Event_390001_New_Cow.dot", width = 600, height = 600)
\pagebreak
390010 Milking Data
DiagrammeR::grViz(diagram = "dot/Event_390010_Milking_Data.dot", width = 2000, height = 2000)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.