Zum Inhalt

Heart Rate Stats — Min/Max/Avg pro Stream

Trackt deinen tiefsten/höchsten Puls pro Stream und den Durchschnitt. Bei Stream-Ende automatischer Zusammenfassungs-Post.

Voraussetzung: HypeRate/Pulsoid verbunden Patterns: Heart Rate Trigger + Globals (Min/Max/Sum/Count) + Stream Online/Offline Trigger Sub-Actions: Tracker-Action (5) + Reset-Action (3) + Summary-Action (4)

Drei Actions im Zusammenspiel

Action Trigger Was sie tut
[Sys] HR Stats Reset Stream Online Min/Max/Sum/Count zurücksetzen
[Sys] HR Stats Tracker Heart Rate Pulse Min/Max updaten, Sum/Count hochzählen
[Sys] HR Stats Summary Stream Offline Stats berechnen + posten

Plus optional !hrstats als Chat-Command der den aktuellen Stand zeigt.

Action: [Sys] HR Stats Reset

Trigger: Twitch → Channel → Stream Online

1. Global (Set): hrMin = 999 (Persisted, hoch starten damit erstes Min greift)
2. Global (Set): hrMax = 0 (Persisted)
3. Global (Set): hrSum = 0 (Persisted)
4. Global (Set): hrCount = 0 (Persisted)

Action: [Sys] HR Stats Tracker

Trigger: Heart Rate Pulse (Min 30, Max leer — filter offline-Disconnects mit 0)

Sub-Action 1: Min updaten

1. Global (Get): hrMin → currentMin
2. If/Else: %heartRate% Less Than %currentMin%
   └── Global (Set): hrMin = %heartRate% (Persisted)

Sub-Action 2: Max updaten

3. Global (Get): hrMax → currentMax
4. If/Else: %heartRate% Greater Than %currentMax%
   └── Global (Set): hrMax = %heartRate% (Persisted)

Sub-Action 3: Sum + Count für Avg

5. Global (Set): hrSum = (Increment by %heartRate%) Persisted
6. Global (Set): hrCount = (Increment by 1) Persisted

Wichtig: Increment-Mode in Global (Set) erlaubt "+N" Operationen. Bei Mode = Increment und Increment-Amount = %heartRate% wird der Wert dynamisch um den HR-Wert erhöht.

Action: [Sys] HR Stats Summary

Trigger: Twitch → Channel → Stream Offline

Sub-Action 1-4: Werte lesen + Avg berechnen

1. Global (Get): hrMin → finalMin
2. Global (Get): hrMax → finalMax
3. Global (Get): hrSum → finalSum
4. Global (Get): hrCount → finalCount
5. Set Argument: avg = $div(%finalSum%, %finalCount%)$

$div(a, b)$ ist die Inline-Function für Division.

Sub-Action 5: Summary posten

6. Send Message: "📊 Stream-HR-Stats: Min %finalMin% · Max %finalMax% · Avg %avg% BPM (über %finalCount% Messungen)"

Bonus: Stats in Datei loggen für Langzeit-Vergleich:

7. Write To File:
   File: D:\hr-stats.log
   Mode: Append
   Content: [%timestamp%] Min:%finalMin% Max:%finalMax% Avg:%avg% Count:%finalCount%

Chat-Command: !hrstats

User können den aktuellen Stand abfragen:

Action: [Cmd] !hrstats

Trigger: Command !hrstats

1. Global (Get): hrMin → currentMin
2. Global (Get): hrMax → currentMax
3. Global (Get): hrSum → currentSum
4. Global (Get): hrCount → currentCount
5. If/Else: %currentCount% Less Than 1
   ├── Send Message: "@%user% Noch keine HR-Daten heute."
   └── Break
6. Set Argument: avg = $div(%currentSum%, %currentCount%)$
7. Send Message: "📊 HR diesen Stream: Min %currentMin% · Max %currentMax% · Avg %avg% BPM"

Verwendungsbeispiele

Während des Streams

Chat Resultat
!hrstats (nach 30 min) "📊 HR diesen Stream: Min 68 · Max 142 · Avg 95 BPM"
!hrstats (vor erstem Pulse) "@user Noch keine HR-Daten heute."

Nach Stream-Ende (automatisch)

Bot postet bei Stream-Offline: 📊 Stream-HR-Stats: Min 65 · Max 178 · Avg 102 BPM (über 12.847 Messungen)

Erweiterung: Top-3-Spikes des Streams

Statt nur Max — die Top-3-höchsten Spikes mit Game-Info:

Komplexer ohne C#. Pragmatisch: nur Max tracken plus separates Logging der Spitzen-Events.

Erweiterung: Historie

Bei jedem Stream-Ende ans Log anhängen + im SB-UI auswertbar machen. Oder via Discord-Webhook ein Stats-Embed jeden Stream.

[Sys] HR Stats Summary
├── (Stats berechnen wie oben)
└── Discord Basic Webhook:
    Content: "📊 Stream-Stats — Min %finalMin% Max %finalMax% Avg %avg%"

Häufige Fallen

  • hrMin Initial-Wert — wenn du mit 0 startest, ist Min immer 0. Mit 999 (oder höher als jeder realistische HR) anfangen
  • Avg-Berechnung bei Count=0 — Division durch 0 schlägt fehl. Mit If/Else davor abfangen
  • Persistierte Werte über Streams — Reset bei Stream Online ist Pflicht, sonst akkumuliert ewig
  • Count overflows nicht — bei 4h Stream × 3600s = 14.400 Messungen, problemlos in int

Quellen