Ja, Du machst da einen Denkfehler

Aber Du befindest Dich in guter Gesellschaft.
Es ist wichtig, zu verstehen, wie das mit den Timern funktioniert.
createTimer(a,b) ist eine Funktion. Diese Funktion tut exakt eine Sache: Sie legt einen Timer an. Dauer für diese Aktion: etwa 0.001 Sekunden (+/-)
Dein Code legt also zwei Timer an, innerhalb etwa zwei Millisekunden, die beide drei Sekunden später fast exakt zeitgleich (Abstand vielleicht eine Millisekunde) auslösen.
Die Ausführung der gesamten Rule dauert etwa zwei Millisekunden, das ist der Witz an Timern.
Es gibt verschiedene Möglichkeiten:
Code: Alles auswählen
createTimer(now.plusSeconds(3), [ |
echo_wohnzimmer_TTS.sendCommand('Willkommen zuhause')
])
createTimer(now.plusSeconds(6), [ |
echo_wohnzimmer_TTS_Volume.sendCommand(25)
])
Der Code legt also zwei Timer an, der erste wird nach drei Sekunden ausgeführt, der zweite nach sechs Sekunden (also drei Sekunden nach dem ersten Timer).
Etwas komplexer und hier nur zweite Wahl (weil es nur um zwei Timer geht):
Code: Alles auswählen
// Globale Variablen ganz am Anfang der Rule-Datei anlegen
var Timer tMyTimer = null // Objekt für den Timer
var Integer iMyTimer = 0 // Zähler für den Timer
...
tMyTimer?.cancel // Timer löschen, falls gerade einer läuft
if(tMyTimer === null) // alternativ prüfen, ob der Timer nicht existiert
iMyTimer = 0 // globale Variable auf einen definierten Anfangswert setzen
tMyTimer = createTimer(now.plusMillis(10), [| // Timer anlegen und dem Objekt zuordnen
iMyTimer += 1 // Zähler erhöhen
switch(iMyTimer) { // welcher Schritt ist gerade aktiv
case 2: { // zweiter Durchlauf
echo_wohnzimmer_TTS.sendCommand('Willkommen zuhause')
}
case 3: { // dritter Durchlauf
echo_wohnzimmer_TTS_Volume.sendCommand(25)
}
}
if(iMyTimer < 3) { // falls noch nicht dreimal gelaufen
tMyTimer.reschedule(now.plusSeconds(3)) // Timer erneut ausführen
} else { // ansonsten
tMyTimer = null // Objekt leeren
}
])
Der Witz an diesem Code ist, dass es nur einen Timer braucht, egal wie viele Schritte in einer Abfolge benötigt werden. Benötigt man unterschiedliche zeitliche Abstände, kann der Reschedule auch individuell pro Schritt gesetzt werden.
Man sollte allerdings darauf achten, dass es immer einen sicheren Ausstieg aus dem Timer gibt (hier der if-Teil).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet