So we should generally write a - b instead of a-b and similar in all formulas to avoid issues?
Homey has quite a steep learning curve. The scarce documentation doesnât help either, and on top of that you usually need apps written by the community that follow different, inconsistent design concepts.
In short: you are not the problem.
But Homey still has a good concept. It gives you a reasonably stable basis to build on. I have tried various smart home systems and Homey is IMO the best, even if it has some weaknesses.
Indeed!
(Altho i never realized it before, lol)
In a Math.js-expressie card I found this.
Expressie waarde (Tekst) > 00 and Expressie waarde (Tekst) < 06 is waar.
For a part of my need a can work with it.
Now I was thinking of the possibility to use âorâ in the same way like
Expressie waarde (Tekst) = 04 or
Expressie waarde (Tekst) = 10 or
Expressie waarde (Tekst) = 16 or
Expressie waarde (Tekst) = 22 is waar
But no.
SyntaxError: Invalid left hand side of assignment operator = (char 5)
The value of the tag Expressie waarde (Tekst) is 22.
Do I have to do it in a other way or is it not working at all.
In JS, you need 2 or 3 equal signs: ==
.
And in stead of the or
, use ||
Thanks but only changing the = in to == signs was needed.
I just remembered the app Temporary variables which also can do some limited calculations. I checked now and it has no problems with negative numbers, i.e. the following example calculates just fine:
Ignore the zeros, I added them so that the â1-â is displayed in front of the variable and itâs clear that there are no spaces. Maybe @spkesDE has some ideas how to solve that?
I donât know the issue. Maybe a tl;dr would be nice.
But FYI: all my code is open source.
See this simple flow:
I set a variable to a negative number and then calculate 1 minus that variable.
- Logic flow card works fine and sets a second variable to 6
- Temporary variables works fine and calculates 6
- BLL fails with an error
- But if one adds a space between the minus sign and the variable, BLL works just fine
@DirkH summarised it pretty well:
So the question is pretty much if you @spkesDE have any idea what can be done to improve the handling of variables within BLL as your app doesnât have that problem.
Wasnât there recently a finding that there should be better always a blank before and after the minus? Am not sure whether you did that. Difficult to see.
Arie would have to check this in his code with debugging. I bet there is a check in place that I donât have.
Is it possible to make a BLL-expression like an Excel cell formula like:
IF calculated-value > 2 THEN calculated-value ELSE 0
It is called ternary operator.
variable = (condition) ? expression1 : expression2
In the BLL field you delete the âvariable =â part and you can use something like
(5 > 1) ? 61: 90;
Thanks for this solution.
8 x 2 cards could be left out of a flow.
The card itself replaced another BLL card.
They were needed to reduce hours above 23 by 24.
(HH > 23) ? HH-24: HH;
If you have to do date and time calculations, you might use EPOCH format, the time in milliseconds since 1-1-1970. Then the functions Date.now()
and Date(<EPOCHnumber>)
come in handy in any field that supports expressions or BLL expressions for BLL variables and fields in AVDâs.
The first one returns the epoch number of the current date & time, whilst the second reverse the operations. Pitty that one cannot use text formatting in the reverse operation, at least I did not find it yet.
What do you mean with this?
You mean convert milliseconds into a Date and then format it a certain way? If so, you can do that:
date('shorttime', now + (90*60000) )
FYI: Same as :
date('shorttime', Date.now() + (90*60000) )
FYI: in BLL expressions, Date.now()
is available as now
. Just to make it more readable and have for each execution a fix value of now
.
I was trying some like Date(1718960326112, âdd-mm-yy HH:mm:ssâ).
I will try your suggestions. Thanks
PS: I think there is a difference when you write âdateâ or âDateâ, probably because they are different function from different libraries/packages. In this case BLL library and JavaScript.
Yes, the Date
is the default Javascript object, while the date
is the BLL Custom date-formating function.
See the BLL settingscreen for more info about the date
(and other) method(s).
To be clear, to convert a millisecond to a Javascript Date object, you use the
Date(1718960326112)
However, formating it into a certain text-format, you use the BLL date
method:
date('dd-MM-yy HH:mm:ss')
Using the date
with only the format definition, will make the function use Date.now() as input.
However, the optional second parameter/argument to the date
method can be any of the input:
- A valid Date object, like
Date(1718960326112)
orDate.now()
date('dd-MM-yy HH:mm:ss', Date(1718960326112))
- A number, as in milliseconds
date('dd-MM-yy HH:mm:ss', 1718960326112)
- A text containing a ISO date, like
2022-11-10T19:17:01.439Z
date('dd-MM-yy HH:mm:ss', '2022-11-10T19:17:01.439Z')
- A text containing a default date makeup (Thus only English format right now)
Thanks, I was really mixing up those two functions.
Would it be possible to format text in different colors? And show it in the status field of an AVD?