Koncept
Template

Tids baseret reset

Der er flere forskellige måder, man kan reset-te ting på i vores Flow system. Det afhænger især af, hvilket produkt man har, og hvilket projekt der kører. Der er stor forskel på, hvordan man vil resette en persontæller, og hvordan man vil resette en vandsensor eller andre typer af alarmsystemer.

Folk, der bruger persontællere, vil typisk have dem reset i forhold til antal timer på dagen, dage, uger, måneder og år. Her bliver der naturligvis logget et antal, så man kan køre statistik på det. For en vandsensor er det ikke helt det samme, da man typisk vil tjekke i forhold til hyppighed, fx pr. uge, måned eller sæson. Det betyder, at der kan være forskel både i intervallet og i logikken bag.

Baseret på Tid

At sætte tidsintervaller op til reset er relativt nemt og hurtigt, så længe man holder det enkelt og specifikt. Typisk vil man tage en “current” node og trække timer eller minutter ud, så de kan bruges til at resette med.

Der findes også nogle mere niche metoder, for eksempel hvis man skal resette hver anden time eller et andet sjældent brugt interval. I de tilfælde kan det kræve lidt mere matematik, så tingene kan beregnes dynamisk.

Et simpelt eksempel på et normalt flow er et reset hver time. Det sker ved, at vi tjekker, om minutter er lig med 59. Hver gang vi rammer 59, bliver der resettet. Dette er den mest basale metode at gøre det på. Hvis man ønsker log på, kan man for eksempel indsætte en Delay node mellem logikken og variablen. På den måde kan man tilføje en log node til “Is Equal”, så den først logger og derefter sender signalet videre efter 10 sekunder.

reset-croppedreset-log-cropped

Man kunne lave 12 “Is Equal” noder med værdierne 0, 2, 4, 6, 8 osv. Det kan man godt, men det tager tid og ressourcer. I stedet kan man bruge en “equation” node og lidt matematik. Normalt ville man bruge modulus i algebra. Det refererer til restfunktionen i modulær aritmetik, for eksempel 4 % 2 = 0.

I vores tilfælde ser det matematisk ud på denne måde, da vi ikke har “%” tilgængelig:

				
					Hvis timen er lig med floor(hour / 2) × 2, er den lige. Ellers er den ulige.
isEven=(hour=floor(hour/2)×2)
				
			

Reset baseret på dag(e)

Hvis man vil resette dagligt eller på en specifik dag i ugen, er det ret enkelt. Det samme gælder, hvis det er en specifik dag i måneden. Det er generelt det samme princip hele vejen igennem.

I det første billede kan du se, hvordan man resetter dagligt samt på en bestemt dag i måneden eller på en bestemt ugedag. Man skal dog være opmærksom på, at måneder har forskelligt antal dage, hvilket kan give problemer. Hold dig derfor inden for dag 1-28 eller brug ugedage.

Daily resetReset on specifik days

Månedligt Reset

I forhold til at resette månedligt, så er det rigtig vigtigt at det bliver gjort sidste dag på måneden og ikke første dag. Dette er grundet hvordan vores grafer opfører sig i vores system, hvis man resetter første dag så akkumulere tallende fra sidste måneden. Hvilket vil ende med at give et helt forkert tal. Eftersom det ikke findes en node eller funktion til at få sidste dag på måneden, så skal der lidt matematik og logik til.

				
					DIV4:   if(cos(90 * Y) = 1, 1, 0)
NOT100: if(cos(3.6 * Y) = 1, 0, 1)
DIV400: if(cos(0.9 * Y) = 1, 1, 0)
				
			

Disse formularer kræves grundet skudår og bliver udelukkende brugt til at beregne februar.

DIV4 – Giver et 1 tal hvis året kan divideres med 4.  Hvilket vil tage de fleste skydår.

NOT100 – Giver et 0 tal hvis året kan divideres med 100, ellers givers den 1.  Dette fjerne år som 1900 og 2100 osv.

DIV400 – Giver et 1 tal hvis året kan divideres med 400, hvilket  betyder at den kan håndtere år som 2000, 2400 osv.

Man kan kører et simpelt tjek ved at bruge følgende årstal:
2024 → Div4=1, Not100=1, Div400=0 → Leap=1
1900 → Div4=1, Not100=0, Div400=0 → Leap=0
2000 → Div4=1, Not100=0, Div400=1 → Leap=1
2025 → Div4=0, Not100=1, Div400=0 → Leap=0

I forhold til de andre måneder, så kan vi kategoriserer dem i forhold til antal dage de år, det er endten 30 eller 31.

28-29 dage:
februar

30 dage:
april, juni, september, november.

31 dage:
januar, marts, maj, july, august, oktober, december.

Årligt reset

Et årligt reset er til gengæld nemt. Her resetter vi ganske enkelt på den første dag i januar.

Vil man resette på den sidste dag i måneden, kræver det en del ekstra logik for at håndtere de forskellige månedslængder. Det er generelt ikke noget, vi anbefaler.