Merge branch 'develop' into timo

# Conflicts:
#	.idea/workspace.xml
#	cmd/server/server.go
#	core/collectors.go
#	core/format.go
#	core/http.go
#	core/pipeline.go
#	go.mod
This commit is contained in:
Timo Volkmann 2020-12-09 11:21:30 +01:00
commit 63a6db0b57
8 changed files with 995 additions and 448 deletions

391
.idea/workspace.xml generated
View File

@ -1,391 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BranchesTreeState">
<expand>
<path>
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
</path>
<path>
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="GROUP_NODE:sensor" type="e8cecc67:BranchNodeDescriptor" />
</path>
</expand>
<select>
<path>
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
<item name="BRANCH:timo" type="e8cecc67:BranchNodeDescriptor" />
</path>
</select>
</component>
<component name="ChangeListManager">
<list default="true" id="99c957e4-aa42-481d-843d-3fbc901e0f79" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/cmd/server/server.go" beforeDir="false" afterPath="$PROJECT_DIR$/cmd/server/server.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/cmd/tcp_only/tcp_only.go" beforeDir="false" afterPath="$PROJECT_DIR$/cmd/tcp_only/tcp_only.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/core/collectors.go" beforeDir="false" afterPath="$PROJECT_DIR$/core/collectors.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/core/dispatcher.go" beforeDir="false" afterPath="$PROJECT_DIR$/core/dispatcher.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/core/format.go" beforeDir="false" afterPath="$PROJECT_DIR$/core/format.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/core/http.go" beforeDir="false" afterPath="$PROJECT_DIR$/core/http.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/core/pipeline.go" beforeDir="false" afterPath="$PROJECT_DIR$/core/pipeline.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ex_websocketMessage.json" beforeDir="false" afterPath="$PROJECT_DIR$/static/ex_websocketMessage.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/hyperimu.json" beforeDir="false" afterPath="$PROJECT_DIR$/static/hyperimu.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/static/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ublox/decode.go" beforeDir="false" afterPath="$PROJECT_DIR$/ublox/decode.go" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Go Application" />
<option value="Go File" />
</list>
</option>
</component>
<component name="GOROOT" path="/usr/local/Cellar/go/1.15.5/libexec" />
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="master" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="1jq0r5aMzeueG8kqyThltUQyqCa" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="DefaultGoTemplateProperty" value="Go File" />
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="configurable.Global.GOPATH.is.expanded" value="true" />
<property name="configurable.Module.GOPATH.is.expanded" value="true" />
<property name="configurable.Project.GOPATH.is.expanded" value="true" />
<property name="go.import.settings.migrated" value="true" />
<property name="go.sdk.automatically.set" value="true" />
<property name="go.tried.to.enable.integration.vgo.integrator" value="true" />
<property name="last_opened_file_path" value="$USER_HOME$" />
<property name="settings.editor.selected.configurable" value="project.propVCSSupport.Mappings" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/static" />
<recent name="$PROJECT_DIR$/core" />
<recent name="$PROJECT_DIR$/net" />
<recent name="$PROJECT_DIR$/cmd/server" />
<recent name="$PROJECT_DIR$/serial_ubx" />
</key>
</component>
<component name="RunManager" selected="Go Build.go build git.timovolkmann.de/gyrogpsc/cmd/server">
<configuration name="go build git.timovolkmann.de/gyrogpsc/cmd/serial_only" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
<module name="gyrogpsc" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
<filePath value="$PROJECT_DIR$/cmd/serial_only/serial_only.go" />
<package value="git.timovolkmann.de/gyrogpsc/cmd/serial_only" />
<directory value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<configuration name="go build git.timovolkmann.de/gyrogpsc/cmd/server" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
<module name="gyrogpsc" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
<filePath value="$PROJECT_DIR$/cmd/server/server.go" />
<package value="git.timovolkmann.de/gyrogpsc/cmd/server" />
<directory value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<configuration name="go build git.timovolkmann.de/gyrogpsc/serial" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
<module name="gyrogpsc" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
<filePath value="$PROJECT_DIR$/serial/serial.go" />
<package value="git.timovolkmann.de/gyrogpsc/serial" />
<directory value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<configuration name="go build server.go (1)" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
<module name="gyrogpsc" />
<working_directory value="$PROJECT_DIR$" />
<kind value="FILE" />
<filePath value="$PROJECT_DIR$/cmd/server/server.go" />
<directory value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<configuration name="go build server.go" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
<module name="gyrogpsc" />
<working_directory value="$PROJECT_DIR$" />
<kind value="FILE" />
<filePath value="$PROJECT_DIR$/server.go" />
<directory value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Go Build.go build git.timovolkmann.de/gyrogpsc/cmd/server" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="99c957e4-aa42-481d-843d-3fbc901e0f79" name="Default Changelist" comment="" />
<created>1604516509922</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1604516509922</updated>
</task>
<task id="LOCAL-00001" summary="initial working version">
<created>1604747925521</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1604747925521</updated>
</task>
<task id="LOCAL-00002" summary="added dispatcher.go">
<created>1604747940729</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1604747940729</updated>
</task>
<task id="LOCAL-00003" summary="3d orientation visualization html/css">
<created>1604768327573</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1604768327573</updated>
</task>
<task id="LOCAL-00004" summary="switched to relative sensor data (gyroscope)">
<created>1604777752387</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1604777752387</updated>
</task>
<task id="LOCAL-00005" summary="changed orientation">
<created>1605444355479</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1605444355479</updated>
</task>
<task id="LOCAL-00006" summary="refactored cmd &amp; server">
<created>1606332601566</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1606332601566</updated>
</task>
<task id="LOCAL-00007" summary="refactor and implemented data pipeline">
<created>1606934501184</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1606934501184</updated>
</task>
<option name="localTasksCounter" value="8" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="CUSTOM_BOOLEAN_PROPERTIES">
<map>
<entry key="Show.Git.Branches" value="true" />
</map>
</option>
<option name="FILTERS">
<map>
<entry key="branch">
<value>
<list>
<option value="timo" />
</list>
</value>
</entry>
</map>
</option>
</State>
</value>
</entry>
</map>
</option>
<option name="oldMeFiltersMigrated" value="true" />
</component>
<component name="VcsManagerConfiguration">
<ignored-roots>
<path value="$PROJECT_DIR$/serial/SparkFun_Ublox_Arduino_Library" />
</ignored-roots>
<MESSAGE value="initial working version" />
<MESSAGE value="added dispatcher.go" />
<MESSAGE value="3d orientation visualization html/css" />
<MESSAGE value="switched to relative sensor data (gyroscope)" />
<MESSAGE value="changed orientation" />
<MESSAGE value="refactored cmd &amp; server" />
<MESSAGE value="refactor and implemented data pipeline" />
<option name="LAST_COMMIT_MESSAGE" value="refactor and implemented data pipeline" />
</component>
<component name="VgoProject">
<integration-enabled>true</integration-enabled>
</component>
<component name="WindowStateProjectService">
<state x="756" y="546" key="#GOROOT" timestamp="1606935753174">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state x="756" y="546" key="#GOROOT/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606935753174" />
<state x="640" y="377" key="#Go_Modules" timestamp="1604584628285">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state x="640" y="377" key="#Go_Modules/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604584628285" />
<state x="523" y="282" key="#com.intellij.openapi.keymap.impl.ui.EditKeymapsDialog" timestamp="1606822254644">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state x="523" y="282" key="#com.intellij.openapi.keymap.impl.ui.EditKeymapsDialog/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606822254644" />
<state x="603" y="247" key="#xdebugger.evaluate" timestamp="1604750409547">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state x="603" y="247" key="#xdebugger.evaluate/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750409547" />
<state width="595" height="466" key="DebuggerActiveHint" timestamp="1606953226425">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state width="595" height="466" key="DebuggerActiveHint/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606953226425" />
<state x="100" y="123" width="1480" height="827" key="DiffContextDialog" timestamp="1604517986662">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state x="100" y="123" width="1480" height="827" key="DiffContextDialog/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604517986662" />
<state x="739" y="405" key="EnvironmentVariablesDialog" timestamp="1604585759907">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state x="739" y="405" key="EnvironmentVariablesDialog/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604585759907" />
<state width="1638" height="346" key="GridCell.Tab.-1.bottom" timestamp="1604750445987">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.-1.bottom/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750445987" />
<state width="1638" height="346" key="GridCell.Tab.-1.center" timestamp="1604750445987">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.-1.center/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750445987" />
<state width="1638" height="346" key="GridCell.Tab.-1.left" timestamp="1604750445987">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.-1.left/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750445987" />
<state width="1638" height="346" key="GridCell.Tab.-1.right" timestamp="1604750445987">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.-1.right/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750445987" />
<state width="1878" height="402" key="GridCell.Tab.0.bottom" timestamp="1606957947578">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state width="1638" height="273" key="GridCell.Tab.0.bottom/0.-1417.2560.1417/0.23.1680.1027@0.-1417.2560.1417" timestamp="1604948042531" />
<state width="1638" height="273" key="GridCell.Tab.0.bottom/0.23.1680.1027/0.-1417.2560.1417@0.-1417.2560.1417" timestamp="1604913985770" />
<state width="1638" height="273" key="GridCell.Tab.0.bottom/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604760252890" />
<state width="1638" height="273" key="GridCell.Tab.0.bottom/0.23.1680.1027@0.23.1680.1027" timestamp="1604933111805" />
<state width="1638" height="273" key="GridCell.Tab.0.bottom/0.23.1920.1116@0.23.1920.1116" timestamp="1605380018474" />
<state width="1878" height="406" key="GridCell.Tab.0.bottom/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1606335310969" />
<state width="1638" height="273" key="GridCell.Tab.0.bottom/0.23.1920.1177@0.23.1920.1177" timestamp="1605533225921" />
<state width="1878" height="402" key="GridCell.Tab.0.bottom/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606957947578" />
<state width="1878" height="402" key="GridCell.Tab.0.center" timestamp="1606957947577">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state width="1638" height="273" key="GridCell.Tab.0.center/0.-1417.2560.1417/0.23.1680.1027@0.-1417.2560.1417" timestamp="1604948042530" />
<state width="1638" height="273" key="GridCell.Tab.0.center/0.23.1680.1027/0.-1417.2560.1417@0.-1417.2560.1417" timestamp="1604913985769" />
<state width="1638" height="273" key="GridCell.Tab.0.center/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604760252890" />
<state width="1638" height="273" key="GridCell.Tab.0.center/0.23.1680.1027@0.23.1680.1027" timestamp="1604933111805" />
<state width="1638" height="273" key="GridCell.Tab.0.center/0.23.1920.1116@0.23.1920.1116" timestamp="1605380018473" />
<state width="1878" height="406" key="GridCell.Tab.0.center/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1606335310968" />
<state width="1638" height="273" key="GridCell.Tab.0.center/0.23.1920.1177@0.23.1920.1177" timestamp="1605533225920" />
<state width="1878" height="402" key="GridCell.Tab.0.center/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606957947577" />
<state width="1878" height="402" key="GridCell.Tab.0.left" timestamp="1606957947577">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state width="1638" height="273" key="GridCell.Tab.0.left/0.-1417.2560.1417/0.23.1680.1027@0.-1417.2560.1417" timestamp="1604948042530" />
<state width="1638" height="273" key="GridCell.Tab.0.left/0.23.1680.1027/0.-1417.2560.1417@0.-1417.2560.1417" timestamp="1604913985768" />
<state width="1638" height="273" key="GridCell.Tab.0.left/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604760252889" />
<state width="1638" height="273" key="GridCell.Tab.0.left/0.23.1680.1027@0.23.1680.1027" timestamp="1604933111805" />
<state width="1638" height="273" key="GridCell.Tab.0.left/0.23.1920.1116@0.23.1920.1116" timestamp="1605380018472" />
<state width="1878" height="406" key="GridCell.Tab.0.left/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1606335310967" />
<state width="1638" height="273" key="GridCell.Tab.0.left/0.23.1920.1177@0.23.1920.1177" timestamp="1605533225919" />
<state width="1878" height="402" key="GridCell.Tab.0.left/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606957947577" />
<state width="1878" height="402" key="GridCell.Tab.0.right" timestamp="1606957947578">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state width="1638" height="273" key="GridCell.Tab.0.right/0.-1417.2560.1417/0.23.1680.1027@0.-1417.2560.1417" timestamp="1604948042531" />
<state width="1638" height="273" key="GridCell.Tab.0.right/0.23.1680.1027/0.-1417.2560.1417@0.-1417.2560.1417" timestamp="1604913985770" />
<state width="1638" height="273" key="GridCell.Tab.0.right/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604760252890" />
<state width="1638" height="273" key="GridCell.Tab.0.right/0.23.1680.1027@0.23.1680.1027" timestamp="1604933111805" />
<state width="1638" height="273" key="GridCell.Tab.0.right/0.23.1920.1116@0.23.1920.1116" timestamp="1605380018473" />
<state width="1878" height="406" key="GridCell.Tab.0.right/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1606335310968" />
<state width="1638" height="273" key="GridCell.Tab.0.right/0.23.1920.1177@0.23.1920.1177" timestamp="1605533225920" />
<state width="1878" height="402" key="GridCell.Tab.0.right/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606957947578" />
<state width="1638" height="346" key="GridCell.Tab.1.bottom" timestamp="1604750442086">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.1.bottom/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750442086" />
<state width="1638" height="346" key="GridCell.Tab.1.center" timestamp="1604750442085">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.1.center/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750442085" />
<state width="1638" height="346" key="GridCell.Tab.1.left" timestamp="1604750442085">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.1.left/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750442085" />
<state width="1638" height="346" key="GridCell.Tab.1.right" timestamp="1604750442085">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="1638" height="346" key="GridCell.Tab.1.right/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750442085" />
<state x="204" y="157" width="1501" height="766" key="SettingsEditor" timestamp="1606924055987">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state x="179" y="138" width="1501" height="766" key="SettingsEditor/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604757277174" />
<state x="204" y="155" key="SettingsEditor/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1605609479939" />
<state x="204" y="157" key="SettingsEditor/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606924055987" />
<state x="560" y="351" key="Vcs.Push.Dialog.v2" timestamp="1606332623194">
<screen x="0" y="23" width="1920" height="1177" />
</state>
<state x="560" y="351" key="Vcs.Push.Dialog.v2/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1606332623194" />
<state width="840" height="513" key="XDebugger.FullValuePopup" timestamp="1604750505120">
<screen x="0" y="23" width="1680" height="1027" />
</state>
<state width="840" height="513" key="XDebugger.FullValuePopup/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604750505120" />
<state x="661" y="245" width="597" height="735" key="find.popup" timestamp="1606955246024">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state x="661" y="245" width="597" height="735" key="find.popup/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606955246024" />
<state x="694" y="331" key="git4idea.branch.GitSmartOperationDialog" timestamp="1606335339469">
<screen x="0" y="23" width="1920" height="1177" />
</state>
<state x="694" y="331" key="git4idea.branch.GitSmartOperationDialog/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1606335339469" />
<state x="577" y="285" width="766" height="774" key="search.everywhere.popup" timestamp="1606957420261">
<screen x="0" y="25" width="1920" height="1175" />
</state>
<state x="505" y="250" width="670" height="676" key="search.everywhere.popup/0.23.1680.1027/0.-1417.2560.1417@0.23.1680.1027" timestamp="1604757918385" />
<state x="577" y="285" width="766" height="774" key="search.everywhere.popup/0.25.1920.1175/0.-1415.2560.1415@0.25.1920.1175" timestamp="1606957420261" />
<state x="596" y="393" key="vcs.readOnlyHandler.ReadOnlyStatusDialog" timestamp="1605566567276">
<screen x="0" y="23" width="1920" height="1177" />
</state>
<state x="596" y="393" key="vcs.readOnlyHandler.ReadOnlyStatusDialog/0.23.1920.1177/0.-1417.2560.1417@0.23.1920.1177" timestamp="1605566567276" />
</component>
<component name="XDebuggerManager">
<watches-manager>
<configuration name="GoApplicationRunConfiguration">
<watch expression="*(*&quot;&lt;-chan time.Time&quot;)(824634171712)" />
</configuration>
</watches-manager>
</component>
</project>

View File

@ -15,9 +15,8 @@ func main() {
log.Println("setup dispatcher") log.Println("setup dispatcher")
dispatcher := core.NewDispatcher() dispatcher := core.NewDispatcher()
log.Println("initialize processing pipeline") log.Println("initialize processing pipeline")
processor := core.NewPipeline(dispatcher, 50, 1000) processor := core.NewPipeline(dispatcher, 50, 494)
processor.Run() processor.Run()
log.Println("start data collectors")
collectRoutines(processor) collectRoutines(processor)
log.Println("start http server") log.Println("start http server")
core.HttpListenAndServe(dispatcher, HTTP_PORT) core.HttpListenAndServe(dispatcher, HTTP_PORT)

View File

@ -2,14 +2,17 @@ package core
import ( import (
"fmt" "fmt"
"git.timovolkmann.de/gyrogpsc/ublox"
"go.bug.st/serial"
"log" "log"
"net" "net"
"os" "os"
"git.timovolkmann.de/gyrogpsc/ublox"
"go.bug.st/serial"
) )
func TcpCollector(proc Processor, tcpPort string) { func TcpCollector(proc Processor, tcpPort string) {
log.Println("start tcp collectors")
listener, err := net.Listen("tcp", tcpPort) listener, err := net.Listen("tcp", tcpPort)
if err != nil { if err != nil {
fmt.Println("Error listening:", err.Error()) fmt.Println("Error listening:", err.Error())
@ -25,6 +28,8 @@ func TcpCollector(proc Processor, tcpPort string) {
fmt.Println("Error accepting: ", err.Error()) fmt.Println("Error accepting: ", err.Error())
os.Exit(1) os.Exit(1)
} }
log.Println("...new incoming tcp connection...")
// Handle connections in a new goroutine. // Handle connections in a new goroutine.
go jsonHandler(conn, proc) go jsonHandler(conn, proc)
} }
@ -32,6 +37,7 @@ func TcpCollector(proc Processor, tcpPort string) {
// handles incoming tcp connections with json payload. // handles incoming tcp connections with json payload.
func jsonHandler(conn net.Conn, proc Processor) { func jsonHandler(conn net.Conn, proc Processor) {
defer conn.Close() defer conn.Close()
// TRY reader := bufio.NewReader(conn) OR NewScanner(conn) // TRY reader := bufio.NewReader(conn) OR NewScanner(conn)
@ -45,7 +51,7 @@ func jsonHandler(conn net.Conn, proc Processor) {
} }
//json := pretty.Pretty(buf[:n]) //json := pretty.Pretty(buf[:n])
//fmt.Println(string(json)) //fmt.Println(string(json))
fmt.Println(string(buf[:n])) //fmt.Println(string(buf[:n]))
sd, err := ConvertSensorDataPhone(buf[:n]) sd, err := ConvertSensorDataPhone(buf[:n])
if err != nil { if err != nil {
log.Println(err) log.Println(err)
@ -61,6 +67,7 @@ func jsonHandler(conn net.Conn, proc Processor) {
} }
func SerialCollector(proc Processor, serialPort string) { func SerialCollector(proc Processor, serialPort string) {
log.Println("start serial collectors")
mode := &serial.Mode{ mode := &serial.Mode{
BaudRate: 115200, BaudRate: 115200,
} }

View File

@ -3,7 +3,9 @@ package core
import ( import (
"errors" "errors"
"git.timovolkmann.de/gyrogpsc/ublox" "git.timovolkmann.de/gyrogpsc/ublox"
"github.com/tidwall/gjson"
"log" "log"
"math"
"time" "time"
"github.com/m7shapan/njson" "github.com/m7shapan/njson"
@ -70,6 +72,23 @@ func (s Sensordata) Consolidate(n Sensordata) Sensordata {
return n return n
} }
func (s Sensordata) Consolidate2(n Sensordata) Sensordata {
null := Sensordata{}
//if s.Timestamp == null.Timestamp { s.Timestamp = n.Timestamp }
//if s.Position == null.Position { s.Position = n.Position }
//if s.Orientation == null.Orientation { s.Orientation = n.Orientation }
//if n.Timestamp == null.Timestamp {
// n.Timestamp = s.Timestamp
//}
if n.Position == null.Position {
n.Position = s.Position
}
if n.Orientation == null.Orientation{
n.Orientation = s.Orientation
}
return n
}
var ( var (
errNotImplemented = errors.New("message not implemented") errNotImplemented = errors.New("message not implemented")
errRawMessage = errors.New("raw message") errRawMessage = errors.New("raw message")
@ -84,22 +103,22 @@ func ConvertUbxToSensorData(msg interface{}) (*Sensordata, error) {
//log.Println("NAV-PVT") //log.Println("NAV-PVT")
sd.itow = v.ITOW_ms sd.itow = v.ITOW_ms
sd.Timestamp = time.Date(int(v.Year_y), time.Month(v.Month_month), int(v.Day_d), int(v.Hour_h), int(v.Min_min), int(v.Sec_s), int(v.Nano_ns), time.UTC).UnixNano() sd.Timestamp = time.Date(int(v.Year_y), time.Month(v.Month_month), int(v.Day_d), int(v.Hour_h), int(v.Min_min), int(v.Sec_s), int(v.Nano_ns), time.UTC).UnixNano()
sd.Position[0] = float64(v.Lat_dege7) sd.Position[0] = float64(v.Lat_dege7) / 1e+7
sd.Position[1] = float64(v.Lon_dege7) sd.Position[1] = float64(v.Lon_dege7) / 1e+7
sd.Position[2] = float64(v.Height_mm) sd.Position[2] = float64(v.HMSL_mm) / 1e+3 // mm in m
case *ublox.HnrPvt: case *ublox.HnrPvt:
//log.Println("HNR-PVT") //log.Println("HNR-PVT")
sd.itow = v.ITOW_ms sd.itow = v.ITOW_ms
sd.Timestamp = time.Date(int(v.Year_y), time.Month(v.Month_month), int(v.Day_d), int(v.Hour_h), int(v.Min_min), int(v.Sec_s), int(v.Nano_ns), time.UTC).UnixNano() sd.Timestamp = time.Date(int(v.Year_y), time.Month(v.Month_month), int(v.Day_d), int(v.Hour_h), int(v.Min_min), int(v.Sec_s), int(v.Nano_ns), time.UTC).UnixNano()
sd.Position[0] = float64(v.Lat_dege7) sd.Position[0] = float64(v.Lat_dege7) / 1e+7
sd.Position[1] = float64(v.Lon_dege7) sd.Position[1] = float64(v.Lon_dege7) / 1e+7
sd.Position[2] = float64(v.Height_mm) sd.Position[2] = float64(v.HMSL_mm) / 1e+3 // mm in m
case *ublox.NavAtt: case *ublox.NavAtt:
//log.Println("NAV-ATT") //log.Println("NAV-ATT")
sd.itow = v.ITOW_ms sd.itow = v.ITOW_ms
sd.Orientation[0] = float64(v.Pitch_deg) sd.Orientation[0] = float64(v.Pitch_deg) * 1e-5
sd.Orientation[1] = float64(v.Roll_deg) sd.Orientation[1] = float64(v.Roll_deg) * 1e-5
sd.Orientation[2] = float64(v.Heading_deg) sd.Orientation[2] = float64(v.Heading_deg) * 1e-5
case *ublox.RawMessage: case *ublox.RawMessage:
//class := make([]byte, 2) //class := make([]byte, 2)
//binary.LittleEndian.PutUint16(class, v.ClassID()) //binary.LittleEndian.PutUint16(class, v.ClassID())
@ -112,9 +131,33 @@ func ConvertUbxToSensorData(msg interface{}) (*Sensordata, error) {
} }
func ConvertSensorDataPhone(jsonData []byte) (*Sensordata, error) { func ConvertSensorDataPhone(jsonData []byte) (*Sensordata, error) {
if gjson.Get(string(jsonData), "os").String() == "hyperimu" {
return convertAndroidHyperImu(jsonData) return convertAndroidHyperImu(jsonData)
}
return convertIPhoneSensorLog(jsonData)
} }
func convertIPhoneSensorLog(jsonData []byte) (*Sensordata, error) {
timestamp := gjson.Get(string(jsonData), "locationTimestamp_since1970").Float()
lat := gjson.Get(string(jsonData), "locationLatitude").Float()
lon := gjson.Get(string(jsonData), "locationLongitude").Float()
alt := gjson.Get(string(jsonData), "locationAltitude").Float()
pitch := gjson.Get(string(jsonData), "motionPitch").Float() * 180 / math.Pi
roll := gjson.Get(string(jsonData), "motionRoll").Float() * 180 / math.Pi
yaw := gjson.Get(string(jsonData), "motionYaw").Float() * 180 / math.Pi
sd := &Sensordata{
SourceId: SOURCE_TCP,
Timestamp: int64(timestamp * float64(time.Second)),
//Timestamp: time.Unix(0, prep.Timestamp * int64(time.Millisecond)),
Position: [3]float64{lat, lon, alt},
Orientation: [3]float64{pitch, roll, yaw},
}
//log.Println(string(pretty.Pretty(jsonData)))
//log.Println(sd)
return sd, nil
}
func convertAndroidHyperImu(jsonData []byte) (*Sensordata, error) { func convertAndroidHyperImu(jsonData []byte) (*Sensordata, error) {
prep := struct { prep := struct {
Timestamp int64 `njson:"Timestamp"` Timestamp int64 `njson:"Timestamp"`

View File

@ -30,7 +30,7 @@ func echo(sub Subscriber) func(w http.ResponseWriter, r *http.Request) {
dispatcherId, channel := sub.Subscribe() dispatcherId, channel := sub.Subscribe()
defer sub.Unsubscribe(dispatcherId) defer sub.Unsubscribe(dispatcherId)
for { for {
log.Println("") //log.Println("")
//if err != nil { //if err != nil {
// log.Println("read:", err) // log.Println("read:", err)
// break // break

View File

@ -3,6 +3,7 @@ package core
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"log" "log"
"sync" "sync"
"time" "time"
@ -15,16 +16,16 @@ type Processor interface {
} }
type pipeline struct { type pipeline struct {
synchronizer syn synchronizer
aggregator agr aggregator
Publisher pub Publisher
publishTicker *time.Ticker publishTicker *time.Ticker
} }
func NewPipeline(d Publisher, publishIntervalMs int, delayUpdateIntervalMs int) *pipeline { func NewPipeline(d Publisher, publishIntervalMs int, delayUpdateIntervalMs int) *pipeline {
return &pipeline{ return &pipeline{
synchronizer{ synchronizer{
bufferSize: 100, //bufferSize: 100,
mutex: &sync.Mutex{}, mutex: &sync.Mutex{},
updateTicker: time.NewTicker(time.Duration(delayUpdateIntervalMs) * time.Millisecond), updateTicker: time.NewTicker(time.Duration(delayUpdateIntervalMs) * time.Millisecond),
}, },
@ -38,12 +39,12 @@ func NewPipeline(d Publisher, publishIntervalMs int, delayUpdateIntervalMs int)
} }
func (p *pipeline) Run() { func (p *pipeline) Run() {
go p.schedule() go p.scheduleSynchronizer()
go func() { go func() {
for { for {
<-p.publishTicker.C <-p.publishTicker.C
err := p.Publish() err := p.Publish()
if err != nil /*&& err.Error() != "no data available"*/ { if err != nil && err.Error() != "no data available" {
log.Println(err) log.Println(err)
} }
} }
@ -52,30 +53,30 @@ func (p *pipeline) Run() {
} }
func (p *pipeline) Publish() error { func (p *pipeline) Publish() error {
p.tcpMutex.Lock() p.agr.tcpMutex.Lock()
p.serialMutex.Lock() p.agr.serialMutex.Lock()
//log.Println(p.tcpSensorData) //log.Println(pub.tcpSensorData)
//log.Println(p.serialSensorData) //log.Println(pub.serialSensorData)
if (p.tcpSensorData == Sensordata{} && p.serialSensorData == Sensordata{}) { if (p.agr.tcpSensorData == Sensordata{} && p.agr.serialSensorData == Sensordata{}) {
p.tcpMutex.Unlock() p.agr.tcpMutex.Unlock()
p.serialMutex.Unlock() p.agr.serialMutex.Unlock()
return errors.New("no data available") return errors.New("no data available")
} }
data := map[string]Sensordata{ data := map[string]Sensordata{
string(SOURCE_TCP): p.tcpSensorData, string(SOURCE_TCP): p.agr.tcpSensorData,
string(SOURCE_SERIAL): p.serialSensorData, string(SOURCE_SERIAL): p.agr.serialSensorData,
} }
p.tcpSensorData = Sensordata{} //p.agr.tcpSensorData = Sensordata{}
p.serialSensorData = Sensordata{} //p.agr.serialSensorData = Sensordata{}
p.tcpMutex.Unlock() p.agr.tcpMutex.Unlock()
p.serialMutex.Unlock() p.agr.serialMutex.Unlock()
jdata, err := json.Marshal(data) jdata, err := json.Marshal(data)
log.Println(string(jdata)) //log.Println(string(pretty.Pretty(jdata)))
if err != nil { if err != nil {
return err return err
} }
p.Publisher.Publish(string(jdata)) p.pub.Publish(string(jdata))
return nil return nil
} }
@ -89,11 +90,10 @@ type aggregator struct {
type UnixNanoTime int64 type UnixNanoTime int64
type synchronizer struct { type synchronizer struct {
tcpDelayMs int tcpSerialDelayMs int64
serialDelayMs int //tcpBuffer map[UnixNanoTime]Sensordata
tcpBuffer map[UnixNanoTime]Sensordata //serialBuffer map[UnixNanoTime]Sensordata
serialBuffer map[UnixNanoTime]Sensordata //bufferSize int
bufferSize int
mutex *sync.Mutex mutex *sync.Mutex
updateTicker *time.Ticker updateTicker *time.Ticker
// should run concurrently // should run concurrently
@ -104,19 +104,34 @@ type synchronizer struct {
// Schedule() // Schedule()
} }
func (s *synchronizer) schedule() { func (p *pipeline) scheduleSynchronizer() {
log.Println("synchronizer: started") log.Println("synchronizer: started")
for { for {
<-s.updateTicker.C <-p.syn.updateTicker.C
err := s.refreshDelay() err := p.refreshDelay()
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }
} }
} }
func (s *synchronizer) refreshDelay() error { func (p *pipeline) refreshDelay() error {
// TODO: implement log.Println("refreshing delay....")
fmt.Println("Delay TCP/SERIAL", p.syn.tcpSerialDelayMs)
p.agr.serialMutex.Lock()
p.agr.tcpMutex.Lock()
tcpTime := time.Unix(0, p.agr.tcpSensorData.Timestamp)
serTime := time.Unix(0, p.agr.serialSensorData.Timestamp)
p.agr.serialMutex.Unlock()
p.agr.tcpMutex.Unlock()
if tcpTime.UnixNano() == 0 || serTime.UnixNano() == 0 {
return errors.New("no sync possible. no data to compare")
}
log.Println("TCP", tcpTime.String())
log.Println("SER", serTime.String())
log.Println("Difference", tcpTime.Sub(serTime).Milliseconds())
delay := tcpTime.Sub(serTime).Milliseconds()
p.syn.tcpSerialDelayMs += delay
return nil return nil
} }
@ -137,14 +152,18 @@ func (p *pipeline) Process(data *Sensordata) error {
} }
func (p *pipeline) pushTcpDataToBuffer(data Sensordata) { func (p *pipeline) pushTcpDataToBuffer(data Sensordata) {
time.Sleep(time.Duration(p.tcpDelayMs)) if p.syn.tcpSerialDelayMs > 0 {
p.tcpMutex.Lock() time.Sleep(time.Duration(p.syn.tcpSerialDelayMs) * time.Millisecond)
p.tcpSensorData = data }
p.tcpMutex.Unlock() p.agr.tcpMutex.Lock()
p.agr.tcpSensorData = p.agr.tcpSensorData.Consolidate2(data)
p.agr.tcpMutex.Unlock()
} }
func (p *pipeline) pushSerialDataToBuffer(data Sensordata) { func (p *pipeline) pushSerialDataToBuffer(data Sensordata) {
time.Sleep(time.Duration(p.serialDelayMs)) if p.syn.tcpSerialDelayMs < 0 {
p.serialMutex.Lock() time.Sleep(time.Duration(-p.syn.tcpSerialDelayMs) * time.Millisecond)
p.serialSensorData = p.serialSensorData.Consolidate(data) }
p.serialMutex.Unlock() p.agr.serialMutex.Lock()
p.agr.serialSensorData = p.agr.serialSensorData.Consolidate2(data)
p.agr.serialMutex.Unlock()
} }

1
go.mod
View File

@ -5,6 +5,7 @@ go 1.15
require ( require (
github.com/gorilla/websocket v1.4.2 github.com/gorilla/websocket v1.4.2
github.com/m7shapan/njson v1.0.1 github.com/m7shapan/njson v1.0.1
github.com/tidwall/gjson v1.6.0
github.com/tidwall/pretty v1.0.2 github.com/tidwall/pretty v1.0.2
go.bug.st/serial v1.1.1 go.bug.st/serial v1.1.1
golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf // indirect golang.org/x/sys v0.0.0-20201107080550-4d91cf3a1aaf // indirect

869
static/iphone.json Normal file
View File

@ -0,0 +1,869 @@
[
{
"accelerometerAccelerationX" : "0.037598",
"accelerometerAccelerationY" : "-0.007950",
"accelerometerAccelerationZ" : "-1.003952",
"accelerometerTimestamp_sinceReboot" : "77700.804899",
"avAudioRecorderAveragePower" : "-34.990307",
"avAudioRecorderPeakPower" : "-30.574509",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.008506",
"gyroRotationY" : "-0.076335",
"gyroRotationZ" : "0.000154",
"gyroTimestamp_sinceReboot" : "77700.794635",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876174",
"locationHeadingTimestamp_since1970" : "1607291137.949005",
"locationHeadingX" : "-36.616150",
"locationHeadingY" : "-2.895218",
"locationHeadingZ" : "-25.625000",
"locationMagneticHeading" : "85.920738",
"locationTrueHeading" : "89.001564",
"loggingTime" : "2020-12-06 22:45:37.964 +0100",
"logSampleNr" : "765",
"magnetometerTimestamp_sinceReboot" : "77700.802641",
"magnetometerX" : "187.223969",
"magnetometerY" : "188.439392",
"magnetometerZ" : "-710.010864"
},
{
"accelerometerAccelerationX" : "0.036438",
"accelerometerAccelerationY" : "-0.008789",
"accelerometerAccelerationZ" : "-1.003464",
"accelerometerTimestamp_sinceReboot" : "77700.821012",
"avAudioRecorderAveragePower" : "-35.768673",
"avAudioRecorderPeakPower" : "-30.574509",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876176",
"locationHeadingTimestamp_since1970" : "1607291137.968956",
"locationHeadingX" : "-36.500809",
"locationHeadingY" : "-2.983276",
"locationHeadingZ" : "-25.554626",
"locationMagneticHeading" : "85.920799",
"locationTrueHeading" : "89.001625",
"loggingTime" : "2020-12-06 22:45:37.989 +0100",
"logSampleNr" : "766",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034999",
"motionGravityY" : "-0.009051",
"motionGravityZ" : "-0.999346",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.500809",
"motionMagneticFieldY" : "-2.983276",
"motionMagneticFieldZ" : "-25.554626",
"motionPitch" : "0.009051",
"motionQuaternionW" : "-0.008792",
"motionQuaternionX" : "-0.017541",
"motionQuaternionY" : "0.004372",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035007",
"motionRotationRateX" : "0.002088",
"motionRotationRateY" : "-0.004357",
"motionRotationRateZ" : "-0.000906",
"motionTimestamp_sinceReboot" : "77700.804614",
"motionUserAccelerationX" : "0.002599",
"motionUserAccelerationY" : "0.001101",
"motionUserAccelerationZ" : "-0.004606",
"motionYaw" : "-3.124165"
},
{
"accelerometerAccelerationX" : "0.033234",
"accelerometerAccelerationY" : "-0.008926",
"accelerometerAccelerationZ" : "-1.002014",
"accelerometerTimestamp_sinceReboot" : "77700.837125",
"avAudioRecorderAveragePower" : "-35.768673",
"avAudioRecorderPeakPower" : "-30.574509",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.008186",
"gyroRotationY" : "-0.076672",
"gyroRotationZ" : "0.000862",
"gyroTimestamp_sinceReboot" : "77700.824603",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876178",
"locationHeadingTimestamp_since1970" : "1607291137.989421",
"locationHeadingX" : "-36.537552",
"locationHeadingY" : "-2.889069",
"locationHeadingZ" : "-25.606628",
"locationMagneticHeading" : "85.920822",
"locationTrueHeading" : "89.001648",
"loggingTime" : "2020-12-06 22:45:37.996 +0100",
"logSampleNr" : "767"
},
{
"accelerometerAccelerationX" : "0.034439",
"accelerometerAccelerationY" : "-0.009415",
"accelerometerAccelerationZ" : "-1.006668",
"accelerometerTimestamp_sinceReboot" : "77700.853239",
"avAudioRecorderAveragePower" : "-31.989109",
"avAudioRecorderPeakPower" : "-30.574509",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876178",
"locationHeadingTimestamp_since1970" : "1607291138.008792",
"locationHeadingX" : "-36.428513",
"locationHeadingY" : "-2.911438",
"locationHeadingZ" : "-25.462769",
"locationMagneticHeading" : "85.921715",
"locationTrueHeading" : "89.002541",
"loggingTime" : "2020-12-06 22:45:38.012 +0100",
"logSampleNr" : "768",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034996",
"motionGravityY" : "-0.009039",
"motionGravityZ" : "-0.999347",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.537552",
"motionMagneticFieldY" : "-2.889069",
"motionMagneticFieldZ" : "-25.606628",
"motionPitch" : "0.009039",
"motionQuaternionW" : "-0.008788",
"motionQuaternionX" : "-0.017540",
"motionQuaternionY" : "0.004366",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035005",
"motionRotationRateX" : "0.000459",
"motionRotationRateY" : "-0.000712",
"motionRotationRateZ" : "-0.001314",
"motionTimestamp_sinceReboot" : "77700.834613",
"motionUserAccelerationX" : "-0.000923",
"motionUserAccelerationY" : "0.000250",
"motionUserAccelerationZ" : "-0.003110",
"motionYaw" : "-3.124172"
},
{
"accelerometerAccelerationX" : "0.035385",
"accelerometerAccelerationY" : "-0.012100",
"accelerometerAccelerationZ" : "-1.011292",
"accelerometerTimestamp_sinceReboot" : "77700.869321",
"avAudioRecorderAveragePower" : "-31.288141",
"avAudioRecorderPeakPower" : "-30.269579",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.010996",
"gyroRotationY" : "-0.081939",
"gyroRotationZ" : "0.002051",
"gyroTimestamp_sinceReboot" : "77700.854571",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"loggingTime" : "2020-12-06 22:45:38.029 +0100",
"logSampleNr" : "769",
"magnetometerTimestamp_sinceReboot" : "77700.860777",
"magnetometerX" : "187.028076",
"magnetometerY" : "188.409332",
"magnetometerZ" : "-709.159546"
},
{
"accelerometerAccelerationX" : "0.035950",
"accelerometerAccelerationY" : "-0.011780",
"accelerometerAccelerationZ" : "-1.006134",
"accelerometerTimestamp_sinceReboot" : "77700.885435",
"avAudioRecorderAveragePower" : "-32.153595",
"avAudioRecorderPeakPower" : "-29.939217",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876180",
"locationHeadingTimestamp_since1970" : "1607291138.029312",
"locationHeadingX" : "-36.654816",
"locationHeadingY" : "-3.019150",
"locationHeadingZ" : "-24.858765",
"locationMagneticHeading" : "85.921791",
"locationTrueHeading" : "89.002617",
"loggingTime" : "2020-12-06 22:45:38.047 +0100",
"logSampleNr" : "770",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034864",
"motionGravityY" : "-0.009091",
"motionGravityZ" : "-0.999351",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.654816",
"motionMagneticFieldY" : "-3.019150",
"motionMagneticFieldZ" : "-24.858765",
"motionPitch" : "0.009091",
"motionQuaternionW" : "-0.008783",
"motionQuaternionX" : "-0.017474",
"motionQuaternionY" : "0.004393",
"motionQuaternionZ" : "0.999799",
"motionRoll" : "0.034872",
"motionRotationRateX" : "0.000922",
"motionRotationRateY" : "-0.000872",
"motionRotationRateZ" : "-0.000288",
"motionTimestamp_sinceReboot" : "77700.864581",
"motionUserAccelerationX" : "0.001284",
"motionUserAccelerationY" : "-0.001514",
"motionUserAccelerationZ" : "-0.011895",
"motionYaw" : "-3.124182"
},
{
"accelerometerAccelerationX" : "0.035431",
"accelerometerAccelerationY" : "-0.008698",
"accelerometerAccelerationZ" : "-1.001877",
"accelerometerTimestamp_sinceReboot" : "77700.901548",
"avAudioRecorderAveragePower" : "-32.153595",
"avAudioRecorderPeakPower" : "-29.939217",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.005874",
"gyroRotationY" : "-0.076437",
"gyroRotationZ" : "0.000249",
"gyroTimestamp_sinceReboot" : "77700.884570",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationAltitude" : "187.182343",
"locationCourse" : "-1.000000",
"locationFloor" : "-9999",
"locationHeadingAccuracy" : "14.876182",
"locationHeadingTimestamp_since1970" : "1607291138.049074",
"locationHeadingX" : "-36.686508",
"locationHeadingY" : "-3.035675",
"locationHeadingZ" : "-24.890198",
"locationHorizontalAccuracy" : "30.000000",
"locationLatitude" : "49.066370",
"locationLongitude" : "9.135756",
"locationMagneticHeading" : "85.922256",
"locationSpeed" : "0.000000",
"locationTimestamp_since1970" : "1607291137.995236",
"locationTrueHeading" : "89.003082",
"locationVerticalAccuracy" : "4.000000",
"loggingTime" : "2020-12-06 22:45:38.061 +0100",
"logSampleNr" : "771",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034944",
"motionGravityY" : "-0.009061",
"motionGravityZ" : "-0.999348",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.686508",
"motionMagneticFieldY" : "-3.035675",
"motionMagneticFieldZ" : "-24.890198",
"motionPitch" : "0.009061",
"motionQuaternionW" : "-0.008780",
"motionQuaternionX" : "-0.017514",
"motionQuaternionY" : "0.004377",
"motionQuaternionZ" : "0.999799",
"motionRoll" : "0.034952",
"motionRotationRateX" : "-0.001064",
"motionRotationRateY" : "-0.001599",
"motionRotationRateZ" : "0.000173",
"motionTimestamp_sinceReboot" : "77700.894549",
"motionUserAccelerationX" : "-0.000566",
"motionUserAccelerationY" : "-0.000552",
"motionUserAccelerationZ" : "-0.007701",
"motionYaw" : "-3.124187"
},
{
"accelerometerAccelerationX" : "0.033325",
"accelerometerAccelerationY" : "-0.009155",
"accelerometerAccelerationZ" : "-1.004761",
"accelerometerTimestamp_sinceReboot" : "77700.917661",
"avAudioRecorderAveragePower" : "-32.501255",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876183",
"locationHeadingTimestamp_since1970" : "1607291138.068919",
"locationHeadingX" : "-36.387695",
"locationHeadingY" : "-2.955109",
"locationHeadingZ" : "-25.351074",
"locationMagneticHeading" : "85.922218",
"locationTrueHeading" : "89.003044",
"loggingTime" : "2020-12-06 22:45:38.077 +0100",
"logSampleNr" : "772"
},
{
"accelerometerAccelerationX" : "0.035431",
"accelerometerAccelerationY" : "-0.008286",
"accelerometerAccelerationZ" : "-1.005096",
"accelerometerTimestamp_sinceReboot" : "77700.933775",
"avAudioRecorderAveragePower" : "-33.457474",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.004643",
"gyroRotationY" : "-0.075107",
"gyroRotationZ" : "0.001784",
"gyroTimestamp_sinceReboot" : "77700.914538",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876183",
"locationHeadingTimestamp_since1970" : "1607291138.088690",
"locationHeadingX" : "-36.463043",
"locationHeadingY" : "-2.722488",
"locationHeadingZ" : "-25.380981",
"locationMagneticHeading" : "85.921844",
"locationTrueHeading" : "89.002670",
"loggingTime" : "2020-12-06 22:45:38.094 +0100",
"logSampleNr" : "773",
"magnetometerTimestamp_sinceReboot" : "77700.918913",
"magnetometerX" : "187.101776",
"magnetometerY" : "188.768005",
"magnetometerZ" : "-709.771484",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034961",
"motionGravityY" : "-0.009001",
"motionGravityZ" : "-0.999348",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.463043",
"motionMagneticFieldY" : "-2.722488",
"motionMagneticFieldZ" : "-25.380981",
"motionPitch" : "0.009001",
"motionQuaternionW" : "-0.008782",
"motionQuaternionX" : "-0.017522",
"motionQuaternionY" : "0.004348",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.034970",
"motionRotationRateX" : "-0.003020",
"motionRotationRateY" : "0.004743",
"motionRotationRateZ" : "0.000997",
"motionTimestamp_sinceReboot" : "77700.924548",
"motionUserAccelerationX" : "0.001217",
"motionUserAccelerationY" : "-0.000520",
"motionUserAccelerationZ" : "-0.003139",
"motionYaw" : "-3.124183"
},
{
"accelerometerAccelerationX" : "0.035904",
"accelerometerAccelerationY" : "-0.009094",
"accelerometerAccelerationZ" : "-1.001312",
"accelerometerTimestamp_sinceReboot" : "77700.949857",
"avAudioRecorderAveragePower" : "-33.457474",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.006907",
"gyroRotationY" : "-0.079628",
"gyroRotationZ" : "0.000950",
"gyroTimestamp_sinceReboot" : "77700.944507",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"loggingTime" : "2020-12-06 22:45:38.109 +0100",
"logSampleNr" : "774"
},
{
"accelerometerAccelerationX" : "0.036209",
"accelerometerAccelerationY" : "-0.010406",
"accelerometerAccelerationZ" : "-1.005539",
"accelerometerTimestamp_sinceReboot" : "77700.965971",
"avAudioRecorderAveragePower" : "-33.588783",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876184",
"locationHeadingTimestamp_since1970" : "1607291138.108779",
"locationHeadingX" : "-36.467972",
"locationHeadingY" : "-2.907425",
"locationHeadingZ" : "-25.277100",
"locationMagneticHeading" : "85.922852",
"locationTrueHeading" : "89.003677",
"loggingTime" : "2020-12-06 22:45:38.125 +0100",
"logSampleNr" : "775",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034963",
"motionGravityY" : "-0.009011",
"motionGravityZ" : "-0.999348",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.392593",
"motionMagneticFieldY" : "-3.084808",
"motionMagneticFieldZ" : "-25.575867",
"motionPitch" : "0.009012",
"motionQuaternionW" : "-0.008775",
"motionQuaternionX" : "-0.017523",
"motionQuaternionY" : "0.004353",
"motionQuaternionZ" : "0.999799",
"motionRoll" : "0.034972",
"motionRotationRateX" : "-0.000240",
"motionRotationRateY" : "-0.000722",
"motionRotationRateZ" : "0.001070",
"motionTimestamp_sinceReboot" : "77700.954516",
"motionUserAccelerationX" : "0.000376",
"motionUserAccelerationY" : "-0.001273",
"motionUserAccelerationZ" : "-0.004177",
"motionYaw" : "-3.124197"
},
{
"accelerometerAccelerationX" : "0.037720",
"accelerometerAccelerationY" : "-0.010132",
"accelerometerAccelerationZ" : "-1.008987",
"accelerometerTimestamp_sinceReboot" : "77700.982084",
"avAudioRecorderAveragePower" : "-34.231152",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.004129",
"gyroRotationY" : "-0.077557",
"gyroRotationZ" : "-0.000793",
"gyroTimestamp_sinceReboot" : "77700.974505",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876186",
"locationHeadingTimestamp_since1970" : "1607291138.128763",
"locationHeadingX" : "-36.392593",
"locationHeadingY" : "-3.084808",
"locationHeadingZ" : "-25.575867",
"locationMagneticHeading" : "85.922737",
"locationTrueHeading" : "89.003563",
"loggingTime" : "2020-12-06 22:45:38.141 +0100",
"logSampleNr" : "776",
"magnetometerTimestamp_sinceReboot" : "77700.977079",
"magnetometerX" : "186.895142",
"magnetometerY" : "188.252991",
"magnetometerZ" : "-710.194702"
},
{
"accelerometerAccelerationX" : "0.036057",
"accelerometerAccelerationY" : "-0.008194",
"accelerometerAccelerationZ" : "-1.002792",
"accelerometerTimestamp_sinceReboot" : "77700.998197",
"avAudioRecorderAveragePower" : "-34.738995",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876188",
"locationHeadingTimestamp_since1970" : "1607291138.148931",
"locationHeadingX" : "-36.706497",
"locationHeadingY" : "-3.118759",
"locationHeadingZ" : "-25.621033",
"locationMagneticHeading" : "85.923042",
"locationTrueHeading" : "89.003868",
"loggingTime" : "2020-12-06 22:45:38.168 +0100",
"logSampleNr" : "777",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.034977",
"motionGravityY" : "-0.009047",
"motionGravityZ" : "-0.999347",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.706497",
"motionMagneticFieldY" : "-3.118759",
"motionMagneticFieldZ" : "-25.621033",
"motionPitch" : "0.009047",
"motionQuaternionW" : "-0.008772",
"motionQuaternionX" : "-0.017530",
"motionQuaternionY" : "0.004370",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.034985",
"motionRotationRateX" : "0.000625",
"motionRotationRateY" : "-0.000442",
"motionRotationRateZ" : "0.000817",
"motionTimestamp_sinceReboot" : "77700.984485",
"motionUserAccelerationX" : "0.001827",
"motionUserAccelerationY" : "-0.000368",
"motionUserAccelerationZ" : "-0.007046",
"motionYaw" : "-3.124204"
},
{
"accelerometerAccelerationX" : "0.034225",
"accelerometerAccelerationY" : "-0.008728",
"accelerometerAccelerationZ" : "-1.000931",
"accelerometerTimestamp_sinceReboot" : "77701.014310",
"avAudioRecorderAveragePower" : "-34.738995",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.003781",
"gyroRotationY" : "-0.076643",
"gyroRotationZ" : "0.000894",
"gyroTimestamp_sinceReboot" : "77701.004474",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876190",
"locationHeadingTimestamp_since1970" : "1607291138.168952",
"locationHeadingX" : "-36.616852",
"locationHeadingY" : "-2.912506",
"locationHeadingZ" : "-25.239990",
"locationMagneticHeading" : "85.923080",
"locationTrueHeading" : "89.003906",
"loggingTime" : "2020-12-06 22:45:38.173 +0100",
"logSampleNr" : "778"
},
{
"accelerometerAccelerationX" : "0.033676",
"accelerometerAccelerationY" : "-0.007309",
"accelerometerAccelerationZ" : "-1.001099",
"accelerometerTimestamp_sinceReboot" : "77701.030424",
"avAudioRecorderAveragePower" : "-35.218269",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"loggingTime" : "2020-12-06 22:45:38.189 +0100",
"logSampleNr" : "779",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.035004",
"motionGravityY" : "-0.008995",
"motionGravityZ" : "-0.999347",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.715759",
"motionMagneticFieldY" : "-2.925949",
"motionMagneticFieldZ" : "-25.069214",
"motionPitch" : "0.008995",
"motionQuaternionW" : "-0.008769",
"motionQuaternionX" : "-0.017544",
"motionQuaternionY" : "0.004344",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035013",
"motionRotationRateX" : "-0.003867",
"motionRotationRateY" : "0.001772",
"motionRotationRateZ" : "0.000104",
"motionTimestamp_sinceReboot" : "77701.014453",
"motionUserAccelerationX" : "-0.000825",
"motionUserAccelerationY" : "0.000175",
"motionUserAccelerationZ" : "-0.000272",
"motionYaw" : "-3.124209"
},
{
"accelerometerAccelerationX" : "0.037369",
"accelerometerAccelerationY" : "-0.007599",
"accelerometerAccelerationZ" : "-1.002563",
"accelerometerTimestamp_sinceReboot" : "77701.046537",
"avAudioRecorderAveragePower" : "-35.218269",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.006077",
"gyroRotationY" : "-0.077056",
"gyroRotationZ" : "0.001649",
"gyroTimestamp_sinceReboot" : "77701.034442",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876190",
"locationHeadingTimestamp_since1970" : "1607291138.188685",
"locationHeadingX" : "-36.715759",
"locationHeadingY" : "-2.925949",
"locationHeadingZ" : "-25.069214",
"locationMagneticHeading" : "85.923744",
"locationTrueHeading" : "89.004570",
"loggingTime" : "2020-12-06 22:45:38.206 +0100",
"logSampleNr" : "780",
"magnetometerTimestamp_sinceReboot" : "77701.035215",
"magnetometerX" : "187.234955",
"magnetometerY" : "188.355042",
"magnetometerZ" : "-709.823547"
},
{
"accelerometerAccelerationX" : "0.035263",
"accelerometerAccelerationY" : "-0.011368",
"accelerometerAccelerationZ" : "-1.005341",
"accelerometerTimestamp_sinceReboot" : "77701.062620",
"avAudioRecorderAveragePower" : "-35.783520",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876191",
"locationHeadingTimestamp_since1970" : "1607291138.208948",
"locationHeadingX" : "-36.388031",
"locationHeadingY" : "-3.009003",
"locationHeadingZ" : "-25.307068",
"locationMagneticHeading" : "85.924210",
"locationTrueHeading" : "89.005035",
"loggingTime" : "2020-12-06 22:45:38.228 +0100",
"logSampleNr" : "781",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.035031",
"motionGravityY" : "-0.009005",
"motionGravityZ" : "-0.999346",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.388031",
"motionMagneticFieldY" : "-3.009003",
"motionMagneticFieldZ" : "-25.307068",
"motionPitch" : "0.009005",
"motionQuaternionW" : "-0.008762",
"motionQuaternionX" : "-0.017557",
"motionQuaternionY" : "0.004350",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035040",
"motionRotationRateX" : "-0.002688",
"motionRotationRateY" : "0.001089",
"motionRotationRateZ" : "0.000186",
"motionTimestamp_sinceReboot" : "77701.044452",
"motionUserAccelerationX" : "0.002337",
"motionUserAccelerationY" : "0.001406",
"motionUserAccelerationZ" : "-0.003218",
"motionYaw" : "-3.124224"
},
{
"accelerometerAccelerationX" : "0.033936",
"accelerometerAccelerationY" : "-0.008270",
"accelerometerAccelerationZ" : "-1.008591",
"accelerometerTimestamp_sinceReboot" : "77701.078733",
"avAudioRecorderAveragePower" : "-35.894341",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.006742",
"gyroRotationY" : "-0.078071",
"gyroRotationZ" : "0.000371",
"gyroTimestamp_sinceReboot" : "77701.064441",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876193",
"locationHeadingTimestamp_since1970" : "1607291138.229093",
"locationHeadingX" : "-36.477371",
"locationHeadingY" : "-3.081924",
"locationHeadingZ" : "-25.343933",
"locationMagneticHeading" : "85.924126",
"locationTrueHeading" : "89.004951",
"loggingTime" : "2020-12-06 22:45:38.238 +0100",
"logSampleNr" : "782"
},
{
"accelerometerAccelerationX" : "0.034683",
"accelerometerAccelerationY" : "-0.010590",
"accelerometerAccelerationZ" : "-1.008743",
"accelerometerTimestamp_sinceReboot" : "77701.094846",
"avAudioRecorderAveragePower" : "-36.771626",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876195",
"locationHeadingTimestamp_since1970" : "1607291138.248836",
"locationHeadingX" : "-36.430481",
"locationHeadingY" : "-2.969254",
"locationHeadingZ" : "-25.259521",
"locationMagneticHeading" : "85.924248",
"locationTrueHeading" : "89.005074",
"loggingTime" : "2020-12-06 22:45:38.254 +0100",
"logSampleNr" : "783",
"magnetometerTimestamp_sinceReboot" : "77701.093351",
"magnetometerX" : "186.871170",
"magnetometerY" : "188.533890",
"magnetometerZ" : "-709.817078",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.035061",
"motionGravityY" : "-0.009031",
"motionGravityZ" : "-0.999344",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.430481",
"motionMagneticFieldY" : "-2.969254",
"motionMagneticFieldZ" : "-25.259521",
"motionPitch" : "0.009031",
"motionQuaternionW" : "-0.008761",
"motionQuaternionX" : "-0.017572",
"motionQuaternionY" : "0.004362",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035070",
"motionRotationRateX" : "0.002348",
"motionRotationRateY" : "0.000247",
"motionRotationRateZ" : "0.000621",
"motionTimestamp_sinceReboot" : "77701.074420",
"motionUserAccelerationX" : "-0.000393",
"motionUserAccelerationY" : "-0.000308",
"motionUserAccelerationZ" : "-0.008239",
"motionYaw" : "-3.124226"
},
{
"accelerometerAccelerationX" : "0.033768",
"accelerometerAccelerationY" : "-0.008774",
"accelerometerAccelerationZ" : "-1.005692",
"accelerometerTimestamp_sinceReboot" : "77701.110960",
"avAudioRecorderAveragePower" : "-36.771626",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.002831",
"gyroRotationY" : "-0.076265",
"gyroRotationZ" : "0.001715",
"gyroTimestamp_sinceReboot" : "77701.094409",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876197",
"locationHeadingTimestamp_since1970" : "1607291138.268665",
"locationHeadingX" : "-36.766403",
"locationHeadingY" : "-2.885361",
"locationHeadingZ" : "-25.336365",
"locationMagneticHeading" : "85.924141",
"locationTrueHeading" : "89.004967",
"loggingTime" : "2020-12-06 22:45:38.270 +0100",
"logSampleNr" : "784",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.035022",
"motionGravityY" : "-0.008936",
"motionGravityZ" : "-0.999347",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.766403",
"motionMagneticFieldY" : "-2.885361",
"motionMagneticFieldZ" : "-25.336365",
"motionPitch" : "0.008936",
"motionQuaternionW" : "-0.008761",
"motionQuaternionX" : "-0.017552",
"motionQuaternionY" : "0.004315",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035031",
"motionRotationRateX" : "-0.001589",
"motionRotationRateY" : "-0.001877",
"motionRotationRateZ" : "-0.000561",
"motionTimestamp_sinceReboot" : "77701.104388",
"motionUserAccelerationX" : "0.000745",
"motionUserAccelerationY" : "0.000620",
"motionUserAccelerationZ" : "-0.007642",
"motionYaw" : "-3.124223"
},
{
"accelerometerAccelerationX" : "0.035889",
"accelerometerAccelerationY" : "-0.009491",
"accelerometerAccelerationZ" : "-1.000381",
"accelerometerTimestamp_sinceReboot" : "77701.127073",
"avAudioRecorderAveragePower" : "-37.050854",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"loggingTime" : "2020-12-06 22:45:38.290 +0100",
"logSampleNr" : "785"
},
{
"accelerometerAccelerationX" : "0.035278",
"accelerometerAccelerationY" : "-0.008865",
"accelerometerAccelerationZ" : "-1.004211",
"accelerometerTimestamp_sinceReboot" : "77701.143186",
"avAudioRecorderAveragePower" : "-37.257305",
"avAudioRecorderPeakPower" : "-29.852339",
"batteryLevel" : "0.660000",
"batteryState" : "1",
"deviceID" : "my_iOS_device",
"deviceOrientation" : "5",
"gyroRotationX" : "0.001609",
"gyroRotationY" : "-0.076717",
"gyroRotationZ" : "0.001673",
"gyroTimestamp_sinceReboot" : "77701.124377",
"identifierForVendor" : "1B07EE58-F14E-4E47-ABF8-7E919F119960",
"IP_en0" : "10.41.8.38",
"IP_pdp_ip0" : "100.78.225.228",
"label" : "0",
"locationHeadingAccuracy" : "14.876198",
"locationHeadingTimestamp_since1970" : "1607291138.288638",
"locationHeadingX" : "-36.884933",
"locationHeadingY" : "-3.087875",
"locationHeadingZ" : "-25.284058",
"locationMagneticHeading" : "85.924454",
"locationTrueHeading" : "89.005280",
"loggingTime" : "2020-12-06 22:45:38.302 +0100",
"logSampleNr" : "786",
"motionAttitudeReferenceFrame" : "XTrueNorthZVertical",
"motionGravityX" : "0.035028",
"motionGravityY" : "-0.008846",
"motionGravityZ" : "-0.999347",
"motionMagneticFieldCalibrationAccuracy" : "2.000000",
"motionMagneticFieldX" : "-36.644531",
"motionMagneticFieldY" : "-2.917130",
"motionMagneticFieldZ" : "-25.302368",
"motionPitch" : "0.008846",
"motionQuaternionW" : "-0.008759",
"motionQuaternionX" : "-0.017555",
"motionQuaternionY" : "0.004270",
"motionQuaternionZ" : "0.999798",
"motionRoll" : "0.035037",
"motionRotationRateX" : "-0.003860",
"motionRotationRateY" : "-0.000956",
"motionRotationRateZ" : "-0.001445",
"motionTimestamp_sinceReboot" : "77701.134387",
"motionUserAccelerationX" : "0.002051",
"motionUserAccelerationY" : "0.000881",
"motionUserAccelerationZ" : "-0.002896",
"motionYaw" : "-3.124227"
}
]