Blockly rule: if speed > x km/h doesn't work correctly - what's wrong?

Dear all,

I created a rule which is planned to move some roller shutter depending on wind speed. Unfortunately, my test case doesn’t work as expected, I get:

 [INFO ] [enhab.automation.script.ui.Wind_Test] - 0 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - 0 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 10 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 20 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 30 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 40 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed changed to:
 [INFO ] [enhab.automation.script.ui.Wind_Test] - 1.8 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - 1.8 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 10 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 20 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 30 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 40 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed changed to:
 [INFO ] [enhab.automation.script.ui.Wind_Test] - 3.6 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - 3.6 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed >= 10 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed >= 20 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 30 km/h
 [INFO ] [enhab.automation.script.ui.Wind_Test] - Gust_Speed < 40 km/h

But of course 3.6 km/h is not >= 10 km/h…

I already changed from get state item… to get quantity state of item… but without success. Here is my rule:

console.info('Gust_Speed changed to:');
console.info(items.getItem('Wetterstation_Gust_Speed').state);
console.info(items.getItem('Wetterstation_Gust_Speed').quantityState);
if (items.getItem('Wetterstation_Gust_Speed').quantityState >= Quantity('10' + 'km/h')) {
  console.info('Gust_Speed >= 10 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState < Quantity('10' + 'km/h')) {
  console.info('Gust_Speed < 10 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState >= Quantity('20' + 'km/h')) {
  console.info('Gust_Speed >= 20 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState < Quantity('20' + 'km/h')) {
  console.info('Gust_Speed < 20 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState >= Quantity('30' + 'km/h')) {
  console.info('Gust_Speed >= 30 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState < Quantity('30' + 'km/h')) {
  console.info('Gust_Speed < 30 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState >= Quantity('40' + 'km/h')) {
  console.info('Gust_Speed >= 40 km/h');
}
if (items.getItem('Wetterstation_Gust_Speed').quantityState < Quantity('40' + 'km/h')) {
  console.info('Gust_Speed < 40 km/h');
}

With my item like:

label: Windgeschwindigkeit (Böen)
type: Number:Speed
category: Wind
groupNames:
- Wetterstation
groupType: None
function: null
tags:
- Measurement
- Wind

Why do some comparisons give incorrect results?

Thank you for your help.

Best,
Bernd

You might be using the wrong block for the comparisons. It’s hard to be certain without a screen shot of the Blockly blocks or the full rule (i.e. full contents of the Code tab).

You are using the block from “Logic”.

image

You need to use the block from “Units of Measurement”.

image

You’re absolutely right, thanks a lot!

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.