Zum Inhalt springen
  • Dunkel
  • Hell
  • System

Heart-Rate Zonen mit Edge-Detection

Event: HR Critical Zone

Fortgeschritten

Pro Zone eine Action mit Trigger-Range-Filter + Edge-Detection via Persisted Global.

Steps
7
Cooldown
0s/User
Cooldown
0sglobal
Zugriff
Broadcaster

Statt einer großen If/Else-Cascade pro Action lieber pro Zone eine eigene Action mit Range-Filter direkt im Trigger. Das ist sauberer und performanter. Das Hauptproblem: der Trigger feuert jede Sekunde: du willst aber nur einmal beim Übergang reagieren, nicht permanent. Lösung: Edge-Detection via Persisted Global Globale Variable %currentZone% Speichert die letzte erreichte Zone: resting / active / high / critical. Variablen-Doku .

ActionRange-Filter im TriggerReaktion
[HR] Resting ZoneMin 40, Max 70Calm-Overlay
[HR] Active ZoneMin 70, Max 130Normaler Stream-Modus
[HR] High ZoneMin 130, Max 170”Spannung steigt”-Effekte
[HR] Critical ZoneMin 170, Max 220Stress-Modus + Alarm

Trigger: Integrations > HypeRate.io > Heart Rate Pulse mit Min 170 und Max 220.

Global Get. Letzte Zone

Core Globals Global (Get)

Liest Persisted Global currentZone in lokale Variable previousZone.

Global Name currentZone
Persisted aktiv
Variable Name previousZone
Default Value unknown

If/Else: Schon in Critical?

Core Logic If/Else

Wenn ja: Action sofort beenden.

Input %previousZone%
Operation Equals
Value critical
Then

Break

Core Logic Break

Edge-Detection: bei jedem weiteren Pulse in der Critical-Zone passiert nichts mehr.

Global Set. Zone aktualisieren

Core Globals Global (Set)
Global Name currentZone
Value critical
Persisted aktiv

Send Message: Stress-Alarm

Twitch Chat Send Message to Channel
Message 🚨 Stress-Modus an, Puls bei %heartRate% BPM

Set Source Visibility. Stress-Overlay

OBS Studio Sources Set Source Visibility State
Source StressOverlay
State Visible

Play Sound. Alarm

Core Sounds Play Sound
File C:\sounds\alarm.mp3
Volume 40

Set Active Scene. Intense (optional)

OBS Studio Scenes Set Active Scene
Scene Intense
  1. 1 Global Get: currentZone → previousZone (Persisted, default "unknown")
  2. 2 If/Else: %previousZone% Equals "critical"
    1. Then 2a Break
  3. 3 Global Set: currentZone = "critical" (Persisted)
  4. 4 Send Message: "🚨 Stress-Modus an, Puls %heartRate% BPM"
  5. 5 Set Source Visibility: StressOverlay = Visible
  6. 6 Play Sound: alarm.mp3
  7. 7 Set Active Scene: Intense (optional)

Damit du beim Zurückfallen auf eine niedrigere Zone ebenfalls reagieren kannst, eine weitere Action [HR] Active Zone mit Range 60–140, die im Then-Branch von %previousZone% Equals "critical" eine Chill-Message postet und StressOverlay wieder versteckt.

Damit currentZone nicht zwischen Streams hängen bleibt: eigene System-Action [Sys] HR Reset mit Trigger Twitch > Channel > Stream Online und einer einzigen Sub-Action Core > Globals > Set mit currentZone = unknown.

SituationZoneResultat
Game startet, HR 80ActiveNichts (passive Display)
Boss-Fight, HR 145High”Spannung steigt”-Overlay einmalig
Final-Hit, HR 175CriticalStress-Modus an, Alarm
Boss besiegt, HR fällt auf 95Active (Recovery)“Chillt wieder”-Message
  • Zone-Change-Spam ohne Edge-Detection: ohne den previousZone-Check würde der Alarm jede Sekunde feuern. Persisted Global ist Pflicht.
  • Reset bei Stream-Start vergessen: currentZone bleibt vom letzten Stream, beim nächsten Stream kommt evtl. die falsche Initial-Reaction.
  • Zonen-Overlap: wenn zwei Actions Min/Max-Bereiche überlappen, feuern beide. Bereiche immer disjunkt halten (130–170 und 170–220, nicht 130–170 und 160–200).
  • HR-Disconnect = 0 BPM: fällt in den Resting-Bereich. Filter Min = 30 in jeder Zone-Action setzen, damit Disconnect nicht „Resting“ triggert.
  • Spike-Detection: pro Pulse Differenz zum letzten lastHR Global berechnen. Bei diff > 30 ein „was war das gerade?“-Message posten.
  • HR-Stats: Min/Max/Avg pro Stream tracken, siehe Heart-Rate Stats.
  • vTube-Bridge: Live-Parameter im Avatar mitskalieren: siehe VTube-Parameter-Bridge.