Using `format()` to build notification and other strings
-
This has been mentioned and used in other threads on the more specific topic of creating and handling lists of failed or otherwise "in need of notification" devices...
You are passing an array into
format()
directly, and asking it to format it as a string using default formatting. The default formatting isn't very interesting/pretty for arrays. But thejoin()
function specifically converts an array to a string using a provided separator (another string). -
This has been mentioned and used in other threads on the more specific topic of creating and handling lists of failed or otherwise "in need of notification" devices...
You are passing an array into
format()
directly, and asking it to format it as a string using default formatting. The default formatting isn't very interesting/pretty for arrays. But thejoin()
function specifically converts an array to a string using a provided separator (another string).@toggledbits Ok got it, I was using joing() before, and it generated the third variable with the final text.
As we discussed in the other threads when using sort() that already generates the final name, I'm adding the space (" " + e.name), so it solved the presentation.
The format() function is very interesting, and worked great with array, eliminated one step and one variable.
Thanks
-
@toggledbits Ok got it, I was using joing() before, and it generated the third variable with the final text.
As we discussed in the other threads when using sort() that already generates the final name, I'm adding the space (" " + e.name), so it solved the presentation.
The format() function is very interesting, and worked great with array, eliminated one step and one variable.
Thanks
@wmarcolin said in Using `format()` to build notification and other strings:
I was using joing() before, and it generated the third variable with the final text.
Don't understand. Can you elaborate?
-
@wmarcolin said in Using `format()` to build notification and other strings:
I was using joing() before, and it generated the third variable with the final text.
Don't understand. Can you elaborate?
@toggledbits as we said, we are good at creating problems, not explaining
this is also valid when we are creative
Ok, before I first created an array with the list of devices with problem (OldFaultOn) and then in a second step without sorting the names, I generated into a new variable the string with the names (OldFaultMSG), separated by comma and space.
With the brilliant sort() function I am already directly generating the list of device names, sorted.
This eliminated having to have other variable to store the information to be displayed. As commented before, when using format() ahead, the function displays the whole array separated only by a comma. To improve the display it would be good to have a comma and space before the next name. So I decided to put space in the sort (" " + e.name).
I previously set up the notification like this.
And now using sort() and format().
I believe we have many ways of doing things, I am looking to improve the use of functions.
-
Since the result of
sort()
is an array, you can wrap thesort()
withjoin()
, no need for an extra variable.FaultOn = join( sort( each id of FaultSensor: do e=getEntity(id), e?.attributes?.x_vera_device?.failed == true ? e.name : null done ), ", " )
This would, of course, change the type of
FaultOn
to a string.If you wanted to preserve the array for other uses, you could also apply the
join()
to theformat()
substitution on the array:${{ format( "Failed devices: {}", join(FaultOn, ", ") ) }}
-
Since the result of
sort()
is an array, you can wrap thesort()
withjoin()
, no need for an extra variable.FaultOn = join( sort( each id of FaultSensor: do e=getEntity(id), e?.attributes?.x_vera_device?.failed == true ? e.name : null done ), ", " )
This would, of course, change the type of
FaultOn
to a string.If you wanted to preserve the array for other uses, you could also apply the
join()
to theformat()
substitution on the array:${{ format( "Failed devices: {}", join(FaultOn, ", ") ) }}
@toggledbits nothing like talking to a Jedi master.
I will go with the second option, to preserve the array, I think it may have a better future use.
Thanks!
-
Since the result of
sort()
is an array, you can wrap thesort()
withjoin()
, no need for an extra variable.FaultOn = join( sort( each id of FaultSensor: do e=getEntity(id), e?.attributes?.x_vera_device?.failed == true ? e.name : null done ), ", " )
This would, of course, change the type of
FaultOn
to a string.If you wanted to preserve the array for other uses, you could also apply the
join()
to theformat()
substitution on the array:${{ format( "Failed devices: {}", join(FaultOn, ", ") ) }}
With the new DynamicGroupController option, is it now possible to override all this instruction to use format() directly?
Or is it necessary to first transform the IDs that appear in the object carrying the name and format, and only then be able to send a text message?
Can you help Patrick, I am not really sure now how to go about this.
Thanks.
-
I will leave this for you to think about, or perhaps some other users can chime in with some assistance. Try some things, observe, fail, and learn.
-
I will leave this for you to think about, or perhaps some other users can chime in with some assistance. Try some things, observe, fail, and learn.
@toggledbits done
sort( each id in getEntity('groups>low_battery').attributes.sys_group.members: getEntity(id).name + " " + int(getEntity(id).attributes.battery_power.level *100) + "%")
-
T toggledbits locked this topic on