Es kann sich auch nichts tun, weil erst der Timer startet, dann abgefragt wird ob er 0 ist (was ja nicht sein kann, weil er gerade erst gestartet wurde), dann wird 30 Sekunden gewartet und dann startet der Timer neu.
Du musst einen Cycle oder Labels verwenden.
Mit Labels machst du das so:
Am Anfang machst du Label #1 und nach dem Einschlafen Go to Label #1.
Ausserdem machst du nach Timer op. Start Label #2 und am Ende das Wait weg (oder 0 Sekunden wait, damit es nicht ruckelt) und stattdessen Go to Label #2.
Übrigens kommen so die Nachrichten nach 20 bzw. 30 Minuten, was zwar in deinem ersten Post steht, aber vermutlich ein Versehen ist. Wenn du die Nachrichten nach 20 und 30 Sekunden willst, kannst du die Abfragen mit Variablen weglassen. Ingesamt sähe das dann so aus:
Label #1
Time.op. Create:30sec.
Timer op. Start
Label #2
FORK opt:Timer 0.10 less
FORK opt Switch(ErsteNachricht)OFF:
Messg: irgendwas..
Change Switch: [Erste Nachricht]-ON set
<>
:END Case
FORK opt:Timer 0.00 less
Messg: So, jetzt sollte ich einschlafen
Go to Label #1
<>
:END Case
Go to Label #2