### # specify knitr options
knitr::opts_chunk$set(echo = FALSE, results = 'asis')

### # initialize section counter
robjSecEnum <- rqudocuhelper::SectionEnumerator$new()

Qualitas Logo

\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

Abkürzungen

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

Erklärung

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:

  1. dem DeLaval DataDictionary für Alpro Version 6.80 (Alpro6_DD.xls) und
  2. dem AlproIso Link User Guide (Alpro66_info.doc)

Im folgenden werden die Inhalte dieser Dokumente zusammengefasst.

Alpro66_info

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.

Einführung

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.

Terminologie

{ 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. }

Alpro6_DD

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)

Datenübertragung

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

Häufigkeit der Datenübertragung

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.

Datenformat für Übertragung

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

Anhang

UML Diagramme der Events und Tabellen

Event 390001 New Cow

DiagrammeR::grViz(diagram = "dot/Event_390001_New_Cow.dot", width = 600, height = 600)

\pagebreak

Event 390010 Milking Data

DiagrammeR::grViz(diagram = "dot/Event_390010_Milking_Data.dot", width = 2000, height = 2000)


pvrqualitasag/ATDAProjectPlan documentation built on May 26, 2019, 11:33 a.m.