diff --git a/Bachelorarbeit.tex b/Bachelorarbeit.tex index c7e6a60..02911aa 100644 --- a/Bachelorarbeit.tex +++ b/Bachelorarbeit.tex @@ -1288,7 +1288,7 @@ car:CarTireWearEvent rdfs:subClassOf car:CarWearEvent . \end{lstlisting} Durch diese TBox ist es nun möglich, mit Hilfe von aktiviertem Reasoning alle Verschleißereignisse aus den vier erzeugten Ereignisdatenströmen zu extrahieren, ohne die einzelnen Verschleißereignistypen direkt nennen zu müssen. Um den jeweiligen Fahrer eines PKW den Verschleißereignissen zuordnen zu können, wird dieser über das lokale Domänenwissen unter Nutzung des Prädikats \texttt{car:isDrivenBy} ermittelt. Der folgende C-SPARQL-Query demonstriert dies: \begin{lstlisting} -REGISTER QUERY getWearEvents AS +REGISTER STREAM getWearEvents AS PREFIX rdf: PREFIX rdfs: PREFIX f: @@ -1311,17 +1311,39 @@ WHERE { } } \end{lstlisting} +Da sämtliche \texttt{CarWearEvent}s für Erkennung von Wartungsbedarf eine Rolle spielen, wird auch diese Abfrage als Datenstrom unter der URI \path{http://example.org/carSim/stream/getWearEvents} an der Engine registriert. Beobachtet man die Ergebnisse dieser Abfrage, so hat man die Möglichkeit, nutzungsbedingten Verschleiß dem Fahrer eines PKW zuzuordnen und umgekehrt natürlich auch, verschleißarmes Fahrverhalten durch günstigere Tarife zu belohnen. \subsection{Erkennung von Wartungsbedarf am Fahrzeug} -\todo{\dots} - +Um Wartungsbedarf zu signalisieren soll eine Abfrage erzeugt werden, die Ereignisse vom Typ \texttt{CarMaintenanceNeededEvent} für jeden PKW liefert, für den ein Wartungsbedarf existiert. Ein Wartungsbedarf ist dann gegeben, wenn ein PKW entweder ein Ereignis vom Typ \texttt{CarCheckEngineEvent} auslöst, oder wenn über einen größeren Zeitraum eine bestimmte Menge von \texttt{CarWearEvent}s ausgelöst wurde. +\todo{!!} \subsection{Unfallerkennung} -\todo{\dots} - - +Die Erkennung von schweren Unfällen ist anhand von Ereignissen vom Typ \texttt{Car\allowbreak Airbag\allowbreak Triggered\allowbreak Event} relativ leicht. Die Erkennung kleinerer Kollisionen hingegen stellt selbst mit Daten von Schocksensoren eine Herausforderung dar und kann somit im Rahmen dieses Szenarios nicht durchgeführt werden. Es bleibt die direkte Auswertung der \texttt{Car\allowbreak Airbag\allowbreak Triggered\allowbreak Event}s, um Unfälle zu erkennen. Die abstrakte CEP-Regel dafür sieht wie folgt aus: +\begin{lstlisting}[mathescape=true,label={},caption={}] +CONDITION ($(CarAirbagTriggeredEvent\ AS\ airbagEvent)$)[WindowSize:5s,StepSize:5s] + $\wedge$ lookup("driver", airbagEvent.relatedCar) AS driver +ACTION + callEmergencyResponseService(driver=driver, relatedCar=airbagEvent.relatedCar) +\end{lstlisting} +Ein entsprechender C-SPARQl-Query sieht wie folgt aus: +\begin{lstlisting}[label={lst:scenario_react_to_airbag},caption={Selektion von Fahrern deren Airbag ausgelöst wurde}] +REGISTER QUERY getDriversWithAirbagTriggered AS +PREFIX rdf: +PREFIX f: +PREFIX xsd: +PREFIX car: +SELECT ?driver ?car +FROM STREAM [RANGE 5s TUMBLING] +FROM +WHERE { + ?airbagEvent rdf:type car:CarLockEvent . + ?airbagEvent car:relatedCar ?car . + ?car car:isDrivenBy ?driver . +} +\end{lstlisting} +Für diesen Query wird nun noch ein eigener Observer benötigt, der aus den Ergebnissen die betroffenen Fahrer und PKW extrahiert und damit einen Service anstößt, der solche Vorfälle behandeln soll. \subsection{Prävention unbeabsichtigt wegrollender PKW} Ein immer wieder auftauchendes Phänomen, vor dem frühzeitig gewarnt werden soll, betrifft PKW, welche ohne angezogene Handbremse abgestellt wurden und dann weggerollt sind. Eine abstrakte CEP-Regel hierfür sieht wie folgt aus: