Aus Modul mehrere Variablen nach Zeit zurücksetzen

Hallo,

ich habe in einem Modul mehrere Variablen, die durch eine bestimmte Aktion auf true gesetzt werden.
Nach einer gewissen Anzahl an Sekunden, soll diese Variable wieder auf false gesetzt werden.
Wäre hier auch der richtige Weg, für jede Variable ein Script mit einem ScriptTimer anzulegen?
Oder geht es einfacher?

Grüße,
Kai

Warum sollten Variablen ohne ein Ereignis von alleine zurückgesetzt werden?
Und wieso ScriptTimer? Ich denke du meinst ein Modul? (Wobei wir dann im falschen Foren Bereich sind)
Statusvariablen dürfen nur von ihrer jeweiligen Instanz mit Werten beschrieben werden.
Michael

Hallo Kai,

vielleicht meinst Du so etwas wie hierangewandt:
Der Nutzer kann im Webfront die Nebelmaschine starten, der Status wird auf True gesetzt, parallel ein Timer gestartet und nach den voreingestellten x Sekunden wieder auf false gesetzt.
In diesem Fall soll die Nebelmaschine eben x Sekunden arbeiten…

Joachim

@Michael, ja falsches Forum…
Sowas wie Joachim gezeigt hat wäre schon was ich suche.

Allerdings weiß ich nie, wieviele Variablen existieren. Die werden nämlich zur Laufzeit angelegt und da ist nicht bekannt wieviele es sind.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

In dem Modul wird aber eine Aktion gestartet nach Ablauf des Timers.
Also passiert dort etwas.
Wenn nur Variablen verändert werden sollen, warum überhaupt die Variable vorher setzen?
Mich interessieren da eher immer die Hintergründe :slight_smile:
Um z.B. nur eine Aktion auszulösen, reicht eine Intergervariable mit einer Assoziation und der Wert der Variable wird nie verändert.
Michael

Genau, deswegen frage ich nach. Um einen besseren Weg zu finden. :smiley:
Also es geht um folgendes.

Ich habe einen RFID Reader, der sendet per MQTT bei Erkennung des Chips die ID, des Chips. Nun habe ich mir überlegt, lege ich für jeden Chip, erstmal eine Variable an mit inaktive und active. Die ich halt nach einer einstellbaren Zeit von active wieder auf inactive setze.

Vielleicht ist es jetzt verständlicher was ich vor habe.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

…vielleicht versuchst Du mal zu beschreiben was Du vor hast.
Bei Statusvariablen - auch wenn sie zur Laufzeit angelegt wurden - muss doch eine Kontrolle möglich sein…
Im Übrigen könntest Du ja parallel zur erzeugten Variable auch einen dazugehörigen Timer anlegen?

Joachim

…da hat sich etwas überschnitten…

Da würde ich eine String-Variable nutzen und in dieser per serialize die ID sichern, in das Array ggf. dann auch andere Informationen wie z.B. den Zeitstempel der letzten Verbindung…

Joachim

Nein bloß nicht. Timer können nur im Create erzeugt werden und zyklische Ereignisse sind eigentlich dem User vorbehalten.

Das ist simpel, nur aktualisieren beim lesen. Nie zurück setzen.
So wie auch Taster-Impulse oder andere Geräte welche nur eine Aktion auslösen.
Der User triggert dann auf Aktualisieren.
Oder nur eine Variable anlegen wo die ID des Tag aktualisiert wird.
Dann kann der User über die Aktualisierung dieser Variable auswerten welcher Tag gelesen wurde.
Michael

Wozu? Den Zeitstempel hast du doch schon automatisch in IPS sobald die Variable aktualisiert wird.
Michael

…wenn man den Weg wählt, ist das richtig.
Gibt ja bekanntlich viele Wege die nach Rom führen…

Ich versuche immer den Weg nach Rom zu nehmen, welcher durch die Original IPS Module schon ausgetrampelt ist :smiley:
Michael

Danke ihr beiden.
Michael, an die Aktualisierung hatte ich erst gar nicht gedacht. Ich war immer an der Stelle, prüfen, wann eine Variablenänderung kommt, also wenn der Wert verändert wird. :smiley:

Danke!

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Man kann das durchaus kombinieren. Du hängst an Deine Variable mit den RFID-Daten ein Event „bei Variablenaktualisierung“ an, welches die andere Variable auf „Aktiv“ und einen vorher erstellten Timer auf die gewünschte Zeit setzt. Als Routine für den Timer definierst Du eine Funktion im Modul, die die Variable auf „Inaktiv“ setzt und den Timer ausschaltet. Dann beginnt das Spiel wieder von vorne oder der Timer wird vor Ablauf durch das Einlesen wieder neu gestartet.

Tommi