Wait, I just saw something: With the above code this error is logged:
Extra operation: IfCondition=(>=10) (NS2Win (Nightscout BG Monitor)\NS2Win.ini - [MeasureIOB])
What does this mean? Does this help to fix the issue?
I just tried to change
"IfCondition=([MeasureIOB]>=10)"
to
"IfCondition=(MeasureIOB>=10)"
--> this eliminates the error message, but the effect is the same as above. The NumOfDecimals bang simply does not work here.
One more tweak I tried:
IfTrueAction=[!SetOption MeterIOB NumOfDecimals "0"][!UpdateMeter MeterIOB][!Redraw]
IfFalseAction=[!SetOption MeterIOB NumOfDecimals "1"][!UpdateMeter MeterIOB][!Redraw]
--> no change... meter always the two digits currently stored in [MeterIOB]. No decimals are cut at all.
It is currently March 28th, 2024, 11:22 pm
Text meter: Limit number of digits displayed with IfCondition >10
-
- Posts: 78
- Joined: October 7th, 2022, 8:08 pm
-
- Rainmeter Sage
- Posts: 16110
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Text meter: Limit number of digits displayed with IfCondition >10
No, this is not a problem. You get this message because when you refresh the skin, the parent WebParser measure needs a little bit of time to get the value. But since its child measure has an IfCondition set, the measure tries to evaluate the IfCondition immediately. But since there is no value yet, the IfCondition is not numeric, which leads to the error message. There is a simple solution, but this is not a problem which prevents the setting to be executed.
I was, however, am not anymore . This needs a little bit of study, but unfortunately setting the NumOfDecimals with IfCondition on a WebParser measure seems not to be working. Didn't know about this detail, it surprised me extremely, but definitely will try to figure out what1s going on here (assuming someone won't have a solution in meantime).
-
- Posts: 78
- Joined: October 7th, 2022, 8:08 pm
Re: Text meter: Limit number of digits displayed with IfCondition >10
Strange! I just checked my skin and found another WebParser measure for which IfConditions work perfectly:
So the principle works, I'm 100% sure for [MeasureGlucose], see code below, since I tested/optimized this heavily
So, I guess, the NumOfDecimals setting seems to be the problem..?? Are we sure, that my code in the meter is not the issue? I also tried but all the same effect...
One more variant I tried, including the OnUpdateAction --> also no effect:
Code: Select all
[MeasureGlucose]
; Last received nightscout glucose value in mg/dl
Measure=WebParser
URL=[MeasureSite]
StringIndex=2
; ***Change BG Color to Red
IfCondition=MeasureGlucose < #LowGlucoseAlert#
IfTrueAction=[!SetOption meterGlucose FontColor 255,0,0]
; ***Change BG Color to Orange
IfCondition2=MeasureGlucose > #HighGlucoseAlert#
IfTrueAction2=[!SetOption meterGlucose FontColor 255,155,0]
; ***Change BG Color to Colorful-Gradient @100
IfCondition3=MeasureGlucose = 100
IfTrueAction3=[!SetOption meterGlucose InlineSetting "GradientColor | 180 | 255,0,0,255 ; 0.0 | 0,255,0,255 ; 0.5 | 0,0,255,255 ; 1.0"]
; ***Change BG Color to White if "in-range" AND not @100
IfCondition4=((MeasureGlucose >= #LowGlucoseAlert#) && (MeasureGlucose <= #HighGlucoseAlert#) && (MeasureGlucose <> 100))
IfTrueAction4=[!SetOption meterGlucose FontColor 250,250,250][!SetOption meterGlucose InlineSetting ""]
OnUpdateAction=[!UpdateMeter meterGlucose][!Redraw]
So, I guess, the NumOfDecimals setting seems to be the problem..?? Are we sure, that my code in the meter
Code: Select all
Text="%1"
Code: Select all
Text=%1
One more variant I tried, including the OnUpdateAction --> also no effect:
Code: Select all
[MeasureIOB]
; IOB = Insulin on Board
Measure=WebParser
URL=[MeasureSite]
StringIndex=7
IfCondition=(MeasureIOB<10)
IfTrueAction=[!SetOption MeterIOB NumOfDecimals "1"]
IfFalseAction=[!SetOption MeterIOB NumOfDecimals "0"]
OnUpdateAction=[!UpdateMeter MeterIOB][!Redraw]
-
- Rainmeter Sage
- Posts: 16110
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Text meter: Limit number of digits displayed with IfCondition >10
The only solution I found so far is to add a Calc measure, which takes the value of the [MeasureIOB] measure and sets the number of decimals accordingly:
Further study required, however only tomorrow from my part...
Code: Select all
[MeasureNum]
Measure=Calc
Formula=[MeasureIOB]
IfCondition=(MeasureNum>=10)
IfTrueAction=[!SetOption MeterIOB NumOfDecimals "0"][!UpdateMeter "MeterIOB"][!Redraw]
IfFalseAction=[!SetOption MeterIOB NumOfDecimals "1"][!UpdateMeter "MeterIOB"][!Redraw]
DynamicVariables=1
-
- Posts: 78
- Joined: October 7th, 2022, 8:08 pm
Re: Text meter: Limit number of digits displayed with IfCondition >10
I can confirm, that NumOfDecimals is the problem here! Even when "hardcoding" this command directly into the meter, it still shows e.g. "11.89" instead of "12" (MeasureIOB = 11.89, number and string). I triend NumOfDecimals=1, =3 ... all having no effect. So now it's clear where the problem is coming from... But what to do?
Code: Select all
[MeterIOB]
; Meter "Insulin on Board"
Meter=String
MeterStyle=StyleRightText
FontSize=8
MeasureName=MeasureIOB
X=138
Y=26
W=40
H=21
; Adding ":1" ensures display of 1 decimal, also for X.0 otherwise giving X !
;Text=[&MeasureIOB:1]
NumOfDecimals=0
Text=%1
DynamicVariables=1
-
- Rainmeter Sage
- Posts: 2588
- Joined: March 23rd, 2015, 5:26 pm
Re: Text meter: Limit number of digits displayed with IfCondition >10
The reason for this oddness is a quirk in Rainmeter. The value coming from WebParser is actually a string ("11.89", not 11.89). And when you use MeasureName=MeasureIOB in your meter, it is fetching the string value of the measure, not the number value. I'm not sure why xenium's suggestion didn't work (seems like it should have), but balala's suggestion should definitely work (be sure to change MeasureName to MeasureName=MeasureNum), as the value will be a real number that NumOfDecimals can deal with.emp00 wrote: ↑November 7th, 2022, 10:04 pm I can confirm, that NumOfDecimals is the problem here! Even when "hardcoding" this command directly into the meter, it still shows e.g. "11.89" instead of "12" (MeasureIOB = 11.89, number and string). I triend NumOfDecimals=1, =3 ... all having no effect. So now it's clear where the problem is coming from... But what to do?
-
- Rainmeter Sage
- Posts: 16110
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Text meter: Limit number of digits displayed with IfCondition >10
Good point! Sorry, I forgot to specify this. My bad...SilverAzide wrote: ↑November 7th, 2022, 10:28 pm (be sure to change MeasureName to MeasureName=MeasureNum), as the value will be a real number that NumOfDecimals can deal with.
Do this:
Code: Select all
...
[MeasureIOB]
; IOB = Insulin on Board
Measure=WebParser
URL=[MeasureSite]
StringIndex=7
[MeasureNum]
Measure=Calc
Formula=[MeasureIOB]
IfCondition=(MeasureNum>=10)
IfTrueAction=[!SetOption MeterIOB NumOfDecimals "0"][!UpdateMeter "MeterIOB"][!Redraw]
IfFalseAction=[!SetOption MeterIOB NumOfDecimals "1"][!UpdateMeter "MeterIOB"][!Redraw]
DynamicVariables=1
[MeterIOB]
; Meter "Insulin on Board"
Meter=String
MeterStyle=StyleRightText
FontSize=8
MeasureName=MeasureNum
X=138
Y=26
W=40
H=21
; Adding ":1" ensures display of 1 decimal, also for X.0 otherwise giving X !
Text=%1
NumOfDecimals=0
Text=%1
-
- Posts: 78
- Joined: October 7th, 2022, 8:08 pm
Re: Text meter: Limit number of digits displayed with IfCondition >10
@balala / @SilverAzide: THANKS, now it finally works.
Constructively meant critics and proposal (to whom should this be adressed?):
THANKS so much for helping me through this - I could never, ever have done this without you (YOU did it!)
Constructively meant critics and proposal (to whom should this be adressed?):
- Creating an extra Calc measure only for converting a string (which is even shown as a regular number in the measure list tab and there was no error message using the IfCondition ==> how should I possibly have known?!) is - well - not very elegant. With this workaround we have additional code, an additional redundant measure, lots of room for mistakes and many partially frustrated users, at least one = me (yesterday)
- Honestly - there should be a Rainmeter function such as MeasureName=StringToNumber([Measure]) to do this rather "simple conversion job" in one line, directly in the existing e.g. Webparser measure
THANKS so much for helping me through this - I could never, ever have done this without you (YOU did it!)
-
- Rainmeter Sage
- Posts: 16110
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Text meter: Limit number of digits displayed with IfCondition >10
Sorry, I have no other / better solution.emp00 wrote: ↑November 8th, 2022, 8:13 pm
- Creating an extra Calc measure only for converting a string (which is even shown as a regular number in the measure list tab and there was no error message using the IfCondition ==> how should I possibly have known?!) is - well - not very elegant. With this workaround we have additional code, an additional redundant measure, lots of room for mistakes and many partially frustrated users, at least one = me (yesterday)
- Honestly - there should be a Rainmeter function such as MeasureName=StringToNumber([Measure]) to do this rather "simple conversion job" in one line, directly in the existing e.g. Webparser measure
Maybe post a request in the Bugs & Feature Suggestions section, if you think it'd be needed.emp00 wrote: ↑November 8th, 2022, 8:13 pm For me it's a learning and I feel happy now - but all those discussions and our time could have been saved with a "small" (?) code addition in Rainmeter. Maybe there are very good historical reasons for this - but it's really, really "special" to say it in nice words.
No, we (or at least me for sure) didn't do it. You did it, with a little bit of help from our / my side.