Adidas Running JSON-Daten mit PowerShell analysieren – Laufdaten & Equipment synchronisieren

Ich nutze mehrere Plattformen, um meine Laufdaten zu tracken: Garmin Connect, Strava und Adidas Running (ehem. Runtastic). Dabei lege ich großen Wert darauf, dass meine Laufschuhe korrekt zugeordnet sind – denn ĂŒber die gelaufenen Kilometer entscheide ich, wann ein Paar ausgetauscht wird.

WÀhrend Garmin Connect als Quelle zuverlÀssig alle Informationen enthÀlt und Strava mir sogar die einzelnen LÀufe pro Schuh anzeigt, macht es Adidas Running etwas schwieriger: Hier sehe ich nur die Gesamtkilometer pro Schuh, aber nicht, welche Einheit welchem Schuh zugeordnet wurde. Genau das wollte ich bereinigen.

Der Weg zur Analyse – Adidas Running Datenexport

Über die Kontoeinstellungen bei Adidas Running kann man einen kompletten JSON-Export seiner Daten anfordern. Dieser enthĂ€lt u. a. zwei wichtige Verzeichnisse:

  • \User\Shoes\
json → alle angelegten Schuhe

  • \Sport-sessions\
json → alle getrackten LĂ€ufe

Mein Ziel war es nun, herauszufinden, welche Laufeinheit welchem Schuh zugeordnet ist – und dafĂŒr wurde mir, mit Hilfe eines Kollegen, ein kleines PowerShell-Script geschrieben.

Ziel des PowerShell-Scripts

Das Script erfĂŒllt folgende Aufgaben:

  1. Lesen der Ziel-Schuh-ID aus einer gewÀhlten Schuh-JSON-Datei

  2. Durchsuchen aller Laufeinheiten (ca. 1.500 Dateien) nach dieser Schuh-ID

  3. Wenn ein Treffer gefunden wird:

    • Zeitstempel („start_time“) lesen und in lesbares Datum umrechnen

    • Dateiname und Datum protokollieren

Beispieldateien aus dem Export

  • Schuh:
    \User\Shoes\2023-10-28_11-47-38-UTC_653cf4da91b1b08b92fedf1f.json

  • Lauf:
    \Sport-sessions\2025-02-18_17-34-41-UTC_3e415133-709f-4377-a4cc-4338655d7254.json

PowerShell-Script zur Analyse

if(!([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
  Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList "-File `"$($MyInvocation.MyCommand.Path)`" `"$($MyInvocation.MyCommand.UnboundArguments)`""
  Exit
}

$path = "D:\20250218_Runtastic_export-20250218-000"
$logPath = "$path\logs"
$homeFile = $path + "\User\Shoes\2023-10-28_11-47-38-UTC_653cf4da91b1b08b92fedf1f.json"
$itemsToParse = Get-ChildItem "$path\Sport-sessions"
$execDate = Get-Date -Format "yyyyMMdd_HHmmss"
$logName = "Log_" + $execDate + '.txt'
$log = "$logPath\$logName"
New-Item $log | out-null

function Write-Log {
  param ([string]$logString)
  $timeStamp = Get-Date -Format "yyyy.MM.dd-HH:mm:ss"
  Add-Content $log -Value "$timeStamp : $logString"
}

$homeJSON = Get-Content $homeFile -Raw | ConvertFrom-Json
$idToCheck = $homeJSON.id.ToString().Trim()
Write-Log "checking files for ID: $idToCheck"

foreach ($item in $itemsToParse) {
  if ($item -like '*.json') {
    $itemJSON = Get-Content $item.PSPath -Raw | ConvertFrom-Json
    $item_ue_id_raw = $itemJSON.features | Where {$_.Type -eq 'equipment'} | Select -ExpandProperty attributes | Select -ExpandProperty user_equipment | Select -Property id | Out-String
    $item_ue_id_array = $item_ue_id_raw.Split("--")
    $item_ue_id = $item_ue_id_array[2].Trim().ToString()
    if ($idToCheck -eq $item_ue_id) {
      $unixTimeStamp = $itemJSON.start_time
      $timeStamp = (Get-Date 01.01.1970).AddMilliseconds($unixTimeStamp)
      Write-Log "---Match found!---"
      Write-Log "File : $item"
      Write-Log "Start Time: $(($timeStamp).ToString("yyyy/MM/dd-HH:mm:ss"))"
      Write-Log "UE_ID : $item_ue_id"
    }
  }
}
Write-Host "Finished!"
Read-Host -Prompt "`nPress Enter to exit"

Hinweis zu Berechtigungen

Da PowerShell je nach System restriktiv ist, kann es nötig sein, höhere Rechte zu aktivieren:

Set-ExecutionPolicy Unrestricted

Alternativ: PowerShell als Admin starten und folgende Befehle nutzen:

Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned

Fazit

Mit diesem kleinen PowerShell-Script konnte ich meinen sehr spezifischen Anwendungsfall schnell und zielgerichtet lösen: Ich weiß jetzt exakt, welche Laufeinheit welchem Schuh zugeordnet ist – auch rĂŒckwirkend. Es gibt sicher noch viele weitere spannende Möglichkeiten zur Analyse der Adidas Running-Daten. Das JSON-Format gibt einiges her – man muss es nur nutzen.

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..