Nice app! Can you add a When or And card (preferably both) for something or anything changing on a boolean list?
That would reduce my When questionnaire to one single card:
Nice idea, and I understand why this would make the flow much cleaner.
Unfortunately, this is not something Flow Gadgets can do in a reliable generic way. The “Anything has changed” cards in your example are device triggers from the device apps themselves. Flow Gadgets does not receive all arbitrary device change events from Homey, so it cannot offer one single WHEN card that triggers when any boolean tag from such devices changes.
Flow Gadgets can evaluate boolean values inside a flow, but the flow first needs to be started by an actual trigger. For this specific case, the current solution with the separate device trigger cards connected to ANY is still the correct approach.
Hi Pascal, I’m really impressed by your app, but I’m still having a little trouble understanding how to use some of the Flow cards.
What I hope to achieve:
I want to store the outdoor temperature in a temporary variable every 30 minutes. After 29 minutes, the stored value should be compared with the current temperature. If the difference is greater than or equal to -2 °C, an action should be performed.
I found the following flow card in the And section
If I understand the card’s meaning correctly, it might be helpful for my flow.
But I have absolutely no idea how to use this flow card correctly in a flow.
Can you show me the way?
Ok, thanks for the explanation. ![]()
This is quite easy to do with the card shown in your screenshot.
Explanation:
The card “Value changed enough from last accepted value” has its own internal memory.
The first time the Flow runs with a new ID, no last accepted value exists yet. In that case, the current temperature is stored under the ID tmp_temp_outdoor and the card returns true.
On the following runs, the card compares the current temperature with the last accepted value stored under that ID.
With your settings: + 0 / - 2 the card will only return true when the current temperature is at least 2 °C lower than the last accepted value. Small changes are ignored. If the change is not large enough, the card returns false and the stored reference value is not updated. If the change is large enough, the card returns true, your action runs, and the current temperature is stored as the new reference value.
Please consider:
This does not compare the current temperature with the temperature from exactly 30 minutes ago. It compares the current temperature with the last accepted reference value.
Example:
Initial value: 20 °C
After 30 minutes: 18.5 °C
Difference: -1.5 °C
Result: false, the stored reference value remains 20 °C
After another 30 minutes: 17.5 °C
Difference compared to the stored reference value 20 °C: -2.5 °C
Result: true, the action runs, and 17.5 °C becomes the new reference value.
So in this example, it takes 60 minutes before the action runs. From your description, I think this is actually what you want.
Important:
The value stored by this card is kept in its own internal “last accepted value” store. This is not the same store as the Temporary Value cards. So you should not mix this card with the Temporary Number cards unless you intentionally want two separate mechanisms.
Please note that the first run will return true, because no reference value exists yet. If you do not want the action to run on the first execution, you need to work around this for now.
I may create an upgraded version of this card in the future with two additional options:
true or false.I see that your cards are in German. If you prefer, and if it is easier for you, I can also reply in German by private message. My German is quite good.
Hi Pascal,
Thank you very much for the detailed explanation… ![]()
Unfortunately, I can’t use this card for my purposes (yet), because the reference value needs to be replaced by the current temperature value every 30 minutes.
So this is exactly what I need:
So it would be great if you could add this option at some point.
Maybe I’ll get back to you about your offer at some point. Thank you very much!
Hi Dirk,
You can get it to work with a little more complex workaround. Not one card, but functional until the card will be updated … that may take some time as I’m in hollidays.
Edit: This is even easier and works also:
Beste Grüsse, Pascal.
Hello everyone,
Version 1.2.0 is now available:
The old Value changed enough card has been deprecated. It will continue to work in existing flows, but it can no longer be added to new flows.
A new extended version has been added with two additional options:
This makes it possible to check either for a meaningful accumulated change over time, or for a change compared with the most recent checked value.
The mathematical formula logic used across many numeric fields has been extended with several new functions:
abs(value)min(value; value; ...)max(value; value; ...)clamp(value; min; max)round(value)round(value; decimals)floor(value)floor(value; decimals)ceil(value)ceil(value; decimals)The power operator ^ is now supported in formulas.
Examples:
2 ^ 3 returns 8(2 + 3) ^ 2 returns 25These additions allow power users to build quite advanced calculations directly inside a single card. Of course, complex formulas can become harder to read and maintain. In many cases, especially for regular users, it may still be better to use a few extra Flow Gadgets cards to keep the flow easier to understand.
Hello everyone,
Version 1.2.1 is now available for testing and has also been submitted for certification.
This is a small update that adds a new AND condition card for expression lists.
The new card accepts a pipe-separated list of expressions and compares the results against a selectable mode:
This makes it possible to combine multiple checks in one compact card, while still keeping the logic readable. Numeric comparisons also support the existing Flow Gadgets formula logic.
Hello everyone,
Version 1.2.2 is another small update, but it adds a feature that can have a big impact in many flows.
I added the new time() function to the shared formula logic. This means it works in any Flow Gadgets card or field that supports formulas.
The time() function converts a time value into seconds since midnight.
Examples:
time(15:30) returns 55800
time(15:30:10) returns 55810
time(#Time) can be used with a resolved Homey time tag
This makes it possible to use time values directly in numeric formulas and expression comparisons.
For example:
time(#Time) > time(15:00)
or, for a time range across midnight:
time(#Time) >= time(22:00) | time(#Time) < time(06:00)
with the expression list mode:
At least one expression is true
Supported formats are H:mm, HH:mm, H:mm:ss and HH:mm:ss.
Hours from 0 to 24 are accepted. Values like 24:00 and 24:30 are treated like 00:00 and 00:30. Hours above 24 are invalid.
Hello everyone,
Version 1.2.3 is now available for testing and has also been submitted for certification.
This update adds a new Continue Flow card set.
The idea is simple: you can place one card where your Flow should continue, and another card at the place where the Flow should continue from. Both cards use the same key.
This can be used on the same Advanced Flow canvas or across different Flows.
It is a bit like Homey’s built-in Start Flow cards, but instead of only starting a Flow from the beginning, it can continue at any point inside an Advanced Flow. You can even continue at different places on the same canvas.
These cards can also help split complex Flows into clearer sections and avoid long crossing lines across the canvas.
Hello everyone,
Version 1.3.0 is now available for testing and has also been submitted for certification.
This update adds two new features that should make Advanced Flows cleaner and easier to manage.
The first one is a new true-once card set. These cards can be used when something should only happen once until it is released again. For example, a shutter can be closed once when sun protection becomes active, and the same action will not repeat again and again while the conditions stay true.
There are two condition cards:
The second one is useful for opposite states. For example, an “open” state can release a “protect” state, and the “protect” state can release the “open” state again. This makes it much easier to build flows where two paths should unlock each other.
There is also a matching release card that can release one or more keys with a pipe-separated list.
All true-once keys are stored only in RAM. They are cleared when the app or Homey restarts, or when you release them manually.
The second improvement is for the expression cards. Until now, a single pipe character was used as AND:
A | B
This still works exactly as before.
You can now also use double pipes to create OR groups:
A | B || C | D
This means:
(A AND B) OR (C AND D)
This makes expression-based conditions and trigger capture much more flexible without adding more dropdowns or new card arguments. Existing flows that only use single pipes stay compatible.
As always, feedback is welcome.
Reminder, doc is here: Pascal Nohl
Hello everyone,
Version 1.4.0 is soon available as beta and brings a nice upgrade for formulas and expression-based logic.
Two new date-related functions have been added to the math/formula logic:
day() returns the current local day of the monthmonth() returns the current local month of the yearBoth use Homey’s local timezone, so they follow the correct local date.
This makes seasonal or date-based logic much easier. For example:
month() >= 4 | month() <= 10
This can be used to check if the current month is between April and October.
Expression cards now support parentheses.
Before, expressions already supported:
| for AND|| for OR groupsExample:
A | B || C | D
This means:
(A AND B) OR (C AND D)
With version 1.4.0, you can now group expression logic with parentheses and create much more flexible conditions:
(A | B || C | D) | E || ((F | G | H) || I | J)
This allows more complex AND/OR combinations without creating long chains of separate Flow cards.
A more practical example could be:
month() >= 4 | month() <= 10 | ((#Azimuth >= 110 | #Azimuth <= 210 | #Altitude > 20) || (#Azimuth > 210 | #Azimuth <= 290 | #Altitude > 12))
This could be used for sun protection logic that only runs between April and October and reacts differently depending on the sun position.
Existing expressions using only | and || remain compatible.
As always, feedback is welcome.
Hello everyone,
A small update from the upcoming Flow Gadgets 1.4.0 Alpha.
The expression logic has been extended again. In addition to the existing symbols:
| = AND
|| = OR
you can now also use the more readable aliases:
and = AND
or = OR
So these expressions are equivalent:
A | B || C | D
and:
A and B or C and D
Both mean:
(A AND B) OR (C AND D)
You can also mix both styles if needed, although I would recommend using one style consistently inside the same expression for better readability.
Together with the new parentheses support, this makes complex expression cards much easier to read. For example:
The old syntax with | and || remains fully supported, so existing Flows stay compatible.
This is still Alpha, so feedback is welcome.
1.4.0 is online
Flow Gadgets 1.5.0 is on the way — Observed Values
Hello everyone,
Version 1.5.0 of Flow Gadgets is on the way.
This update adds a new set of cards for Observed Values. The idea is to observe any numeric value over a rolling time window and react only when the value has matched a condition for the selected duration.
It is a bit like cards such as “Illumination was above 200 lx for 20 minutes”, but more flexible: it can be used with any numeric value or numeric tag, and the value can also come from math or formulas.
The new cards are:
Add observed value
Adds a numeric value to an observation window for a selected ID.
Observed value matches
Checks whether the observed values match a condition, using every value, average value, minimum value or maximum value.
Clear observed values
Clears one or more observed IDs.
Get observed values
Returns statistics as tags, such as latest value, average value, minimum value, maximum value, sample count and whether the observation window is ready.
Observed value matches trigger
Triggers a Flow when the observed values match a condition. It can trigger every time or only when the condition changes from false to true.
The observation window is boundary-aware. This means Flow Gadgets keeps the last value before the beginning of the window, so it can check whether a condition was stable for at least the selected duration, even if values are only added every few minutes.
Observed values are stored in memory only. They are cleared when the app or Homey restarts, or when they are cleared manually.
This update should make it easier to build Flows that react to stable values instead of short spikes.
Feedback and test results are welcome.
Note: Version 1.5.0 features over 60 cards.
Just FYI: do you know this card/functionality already exists in the Device Capabilities app? ![]()
Thank you for your reply.
Yes, I am aware that some functionality may also exist in other apps, and I think that is perfectly fine. Flow Gadgets is not meant to replace apps like Device Capabilities, but to provide a broad set of helper cards that work app-wide and are not bound to a specific device.
The idea behind Flow Gadgets is to offer reusable logic for Advanced Flows: calculations, comparisons, temporary values, observed values, trigger helpers and similar building blocks that can be used with values from any device, tag or formula.
For example, in this card the observed value is not taken directly from one device. It is calculated from the average luminance of two different devices:
But it could also be a much more complex formula, using math functions, tags and deadband logic before the value is observed.
So yes, there can be some overlap with other apps in specific cases, but Flow Gadgets tries to provide these tools in a generic, app-wide way for building more complex Advanced Flows.
Edit: Here is a block from one of my actual Flows. It fills four different observed values. These values can then be reused by the other Flow Gadgets cards, for example for conditions, triggers or statistics tags.
Here is an example of the Trigger card based on observed values and the flexibility it offers:
It is checked only when a new data point is added to the observed value.
With the setting Every time, the card triggers every time a new data point is added and the condition is true.
With the setting Only when false becomes true, the card triggers once when a new data point is added and the condition changes from false to true. As long as the condition stays true, it will not trigger again. It can only trigger again after the condition became false and then true again.
Hello everyone,
Version 1.5.1 brings just a small change.
By popular request, the maximum hold time for temporary values has been extended beyond 60 minutes. Temporary number, text and boolean values can now also be held for:
2 hours
4 hours
12 hours
24 hours
The existing options remain unchanged, so existing Flows stay compatible.
This update is useful when you need temporary states that should last longer than one hour, but still do not need a permanent Homey variable.