0

Timer erstellen

Hallo Zusammen, 

ich habe ein Feld Status und ein Feld Timer.

Wenn das Feld Status den Wert 2 hat soll der Timer von 20 Minuten anfangen runterzuzählen. 

Wenn die 20 Minuten abgelaufen sind, soll das Feld Status auf den Wert 3 gesetzt werden. 

Leider komme ich hier nicht weiter. 

Vielen Dank im vorraus.

25 Antworten

null
    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Patrik. Timer weiß ich auch nicht, aber den zeitbezogenen Umschalter kannst Du im Feld Status bei "nach Änderung folgendes Skript ausführen:" eintragen. Nimm zum Testen erst mal sleep(5000), dann dauert es nicht so lange. Mirko

    *

    if Status = 2 then
    sleep(1200000);
    Status := 3
    end

    *

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Der Status wird aber manuell auf 2 gesetzt, damit der Timer loslegt, oder? Du brauchst halt einen Trigger. Also, Auswahlfeld mit 3 Werten 1, 2 und 3. Dann im Feld "Nach Änderung ..." folgendes Script einsetzen:

    if Status = 2 then

    sleep(1200000);

    Status := 3

    end

     

    D. h. wenn der Status im Auswahlfeld manuell auf 2 gesetzt wird, warte 1200000 millisekunden und setze dann den Status auf 3

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Doppelt gemoppelt hält besser :)

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Vielen Dank schon einmal. 

    Ich möchte jedoch nicht, dass das im Hintergrund läuft. Ich möchte also sehen bei wie vielen Minuten der Timer ist. 

    Das müsste eigentlich mit einem Berechnungsfeld gehen, allerdings weis ich nicht genau wie :)

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin, die Lösung mit sleep() könnte bei 20 Minuten eine Abweichung von etwa 3 bis 4 Sekunden haben. Wenn das egal wäre, könnte man die Anzeige bspw. mit einer Schaltfläche und alert() realisieren (das Drumherum mit dem Auswahlfeld lasse ich mal weg):

     

    let myMinutes := 2;
    while myMinutes > 0 do
       myMinutes := myMinutes - 1;
       let mySeconds := 60;
       while mySeconds > 0 and mySeconds <= 60 do
          sleep(1000);
          mySeconds := mySeconds - 1;
          alert(format(myMinutes, "00") + ":" + format(mySeconds, "00"))
       end
    end

     

    Die Anzahl der Minuten wird in der ersten Zeile mit 'myMinutes' festgelegt (und könnte auch aus einem numerischen Datenfeld gelesen werden). Zum Testen kann man ja erst mal klein anfangen ...

     

    #Wenn man es genauer haben will, dann würde es vermutlich etwas komplizierter.

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Gibts denn keine RestAPI Anbindung zu einer verlässlichen Atomuhr?? :)

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin Copytexter, 

    die Abweichung von einigen Sekunden wäre egal. 

    Allerdings sehe ich ja die restliche Zeit nicht in einem Feld sondern in einem alert Feld, was eben dann auftaucht. 

    Ich brauch die restliche Zeit allerdings wirklich in einem extra Feld, also ohne Meldung.

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Also, du willst mit Ninox weiterarbeiten, während der Countdown läuft? Ich habe das noch nicht probiert, fürchte aber, dass es nicht funktionieren wird, weil Ninox ja mit dem Herunterzählen und Anzeigen des Timers beschäftigt ist. Egal, ob mit sleep() oder anders. Ich denke, für sowas ist Ninox einfach nicht gemacht, lasse mich aber gerne eines Besseren belehren. 

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ja genau, so hatte ich mir das eigentlich gedacht. 

    Es würde aber auch reichen, wenn die 20 Minuten runtergezählt werden und dann das Auswahlfeld von dem Wert 2 auf den Wert 3 gesetzt werden würde.

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Genau das macht ja der Code von MZ und Tobias oben.

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Also die restliche Zeit kannst Du dir nicht anzeigen lassen, ohne das Ninox in der Zwischenzeit "einfriert" bzw. "schläft"...  wie Copy schon schrieb. Ich habe mehrere Möglichkeiten versucht, mit while bzw. for-Schleifen usw. - auch 20 mal jeweils eine Minute ablaufen lassen ... NINOX friert ein. Was funktioniert ist: die vollen 20 minuten sleep und dann ein umstellen eines Feldes wie schon beschrieben.

    Andere Lösungen wären evtl. HTML Funktionen mit Counter (da gibt es webseiten) oder gar eine Timer Rest API - da müsste man nochmal genauer das Web durchforsten. Ich schaue da auch gern nochmal nach...

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin, ich hatte das jetzt soweit in meine Datenbank implementiert. 

    Wenn ich jedoch auf Wert 3 setzte, sollte ja eigentlich der Timer im Hintergrund anfangen zu laufen und eben das Feld nach 15 Minuten auf den Wert 4 setzen. Allerdings friert Ninox dabei komplett ein, sodass ich nichts mehr machen kann. Es soll weiterhin möglich sein Datensätz zu erstellen und zu beabreiten.

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Gibt es sonst eine andere Möglichkeit, zum Beispiel über weitere Felder oder eben über html Funktion ?

    • Fabian
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo PatrikRo hast du schon eine Lösung für dein Problem gefunden? Ich suche nach einer ähnlichen Möglichkeit mit einem Timer zu arbeiten :)

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo
    Ich werfe mal meinen Hut in den Ring.
    Man kann eine Art Timer mit Integromat bauen. Die Idee habe ich gerade mal ausprobiert und es klappt. Zwar nicht genau auf die Sekunde, aber nah dran +- 2 Sec.
    Geht halt nur mit der NinoxCloud.
    Integromat-Flow besteht aus einem Webhook, Tool 'Sleep', Ninox-Update.
    Ich kann die Testdatenbank gerne in das WebinarTeam laden zum ausprobieren und Screenshots vom Integromat-Flow bereitstellen. Habe nur einen freien Integromat-Account und kann den Flow deshalb nicht exportieren.
    Die Datenbank ist sehr einfach gehalten zur Anschauung und kann mit etwas Feintuning sicherlich genauer werden.
    Es ging mir nur darum, ob es möglich ist. Der Vorteil hier ist gegenüber der sleep()-Funktion von Ninox, dass man weiter an der Datenbank arbeiten kann.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Kleine Ergänzung:
    Das Sleep-Tool im Integromat kann nur maximal 300sek warten. Will man längere Timer bauen, muss man mehrere Tools hintereinander hängen und die Gesamtzeit entsprechend der Anzahl der ToolKnoten teilen um das gewünschte Ergebnis zu erhalten.
    Sicherlich gibt es noch ein Integromat-Modul, welches diesen Aufwand überflüssig macht, habe ich aber auf die Schnelle nicht gefunden.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich habe mal die TestDatenbank mit den Screenshots des Integromat-Flows in das WebinarTeam geladen.
    Ihr findet sie unter '341_Timer Experiment Integromat'

    • maxmax
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Viele Wege führen nach Rom und ich schlage euch mal einen weiteren Ansatz vor.

    1. Trigger beim Anlegen des Records: Feld "Ablauf" (Typ Datum + Uhrzeit) auf now() + 20min

    2. Berechnungsfeld _Laufzeit: Differenz zwischen Ablauf und now()

    3. Feld Laufzeit anlegen.

    4. Folgendes Script alle 5 Sek. via API laufen lassen: for i in (select Countdown) do let r := record(Countdown, i); r.(Laufzeit := r._Laufzeit); end

    Ninox aktualisert Änderungen über die API in Echtzeit. Das können wir uns für den Counter zu Nutze machen. Um dann einen abgelaufenen Counter mitzubekommen, müssen wir auf Bedingte Formatierungen etc zurückgreifen.

    Der Code zum automatischen Updaten funktioniert in der Console von Ninox, aber leider nicht über die API. Ich bekomme da nur ein Timeout und weiß leider auch nicht weshalb.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Max
    Das ist ein interessanter Ansatz.
    Wie sieht denn dein API-Call ausund wo wird er ausgelöst?
    Das Problem in Ninox ist, dass Ninox das parallele abarbeiten von Scripten in einem Record nicht zulässt. Wenn du also bspw. einen Timer auf 5 Min. setzt, wird die Schleife 5 Min. lang durchlaufen und du kannst in dieser Zeit nichts anderes machen und must bis zu deren Ende warten. Der Api-Call muss ja irgendwie ausgelöst werden und wenn es in der Schleife passiert, dann halt immer wieder für die Dauer des Countdowns. Das gleiche Problem hast du auch, wenn du die sleep()-Funktion als Timer nutzt. In der Zeit, in der die sleep()-Funktion läuft, kannst du nichts machen. Es funktioniert nur, wenn das Script nur einmalig den Timer anstößt und sich dann beendet. Eine Überlegung wäre vielleicht, wenn man die Schleife auf einen extra Record in einer anderen Tabelle legt, die einzig für den Countdown zuständig ist. Da stört es dann möglicherweise nicht, dass die Script-Verarbeitung so lange dauert und man nichts anderes in diesem Record machen kann. Man müsste mal testen, ob dieses Gedankenmodell so funktionieren könnte.

    • maxmax
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Moin Uwe,

    ich hätte mit der Google Cloud Platform eine Cloud Function genutzt, um z.B. alle 5 Sekunden einen HTTP Call auszuführen. Das könnte jedoch auch über andere Lösungen realisiert werden. Integromat ist bei so häufigen Ausführungen wahnsinnig teuer, würde aber auch gehen.

    Gemäß Dokumentation ("Ninox REST API", Unterpunkt "Execute a Ninox Script", https://ninox.com/en/manual/api/rest) kann man über die API ein Script ausführen. Das wäre genau der Code, den ich unter Punkt 4 erwähnt habe. Der Code funktioniert in der Ninox Console (Im Admin Mode im Dashboard erreichbar) und wirft einen Timeout über die API. Ich kann mir leider nicht erklären woran das liegt. Wenn wir diese Problem lösen, dann können beliebig viele (!) Timer gleichzeitg laufen und die UI blockiert nicht.

    • DELETEDufc28496
    • vor 2 Jahren
    • Gemeldet - anzeigen

    <a href="https://google.com">google</a>

    • DELETEDufc28496
    • vor 2 Jahren
    • Gemeldet - anzeigen

    [url=http://google.com]google[/url]

    • DELETEDufc28496
    • vor 2 Jahren
    • Gemeldet - anzeigen

    [google->http://google.com]
    [google](https://google.net)
    [[ https://google.com | ]]

    • DELETEDufc28496
    • vor 2 Jahren
    • Gemeldet - anzeigen

    [google->http://google.com]
    [google](https://google.net)
    [[ https://google.com | ]]

    • DELETEDufc28496
    • vor 2 Jahren
    • Gemeldet - anzeigen

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 25Antworten
  • 1805Ansichten