Rule Engine - string compare does not work

Hi,

i’m using the rule engine for Weather events
e.g. When “weatherunderground_weather_local_current_conditions changed from Bedeckt to Gewitter mit Regen”
then something should happen.

Therefor i have configured a rule…
The rule is triggered when the weather changes - THIS works. See the log…

In the part “but only if…”

If the new Weather condition string is equal to “Gewitter mit Regen” then something should happen.

You can see in the log that nothing happens… the string compare seems not to be true.

2018-05-24 03:24:26.938 [vent.ItemStateChangedEvent] - weatherunderground_weather_local_current_conditions changed from Bedeckt to Gewitter mit Regen
2018-05-24 03:24:26.945 [vent.ItemStateChangedEvent] - weatherunderground_weather_local_current_temperature changed from 14.7 ℃ to 14.9 ℃
2018-05-24 03:24:26.947 [.event.RuleStatusInfoEvent] - bcae9ff1-1ed5-4632-b08a-7d3710f8a967 updated: RUNNING
2018-05-24 03:24:26.948 [.event.RuleStatusInfoEvent] - bcae9ff1-1ed5-4632-b08a-7d3710f8a967 updated: IDLE

Any ideas?

You need to put strings in ""

weatherunderground_weather_local_current_conditions changed from "Bedeckt" to "Gewitter mit Regen"

Thx, i’ve changed it… lets wait for the next rainy day :slight_smile:

I’ve used “=” to compare.
How do i “contains”?

example:
Value1: “Regen”
Value2: “Regenschauer”
Value3: “Leichte Regenschauer”
Value4: “Leichte Gewitter mit Regen”

Use “==” to compare
one “=” is assign a value to a variable

var String Value1 = "Leichte Regenschauer"
if (Value1.contains("Regen")) { //true
    //Do this
} else {
    //Do that
}

Hi, i’ve tried it with " and ’ and without. Both doesn’t work. The rule newer becomes true. Why… i can’t see in the log.
any ideas?

Now i’ve tried it with a rule file.

1st i’ve created an item called Robonect_Wetter (Because i can’t use the Channel-Value directly (???)

Then i’ve written this rule file. In the openhab.log i haven’t got an error message
Everything seems to be fine
[INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model ‘R40LI.rules’

Now the current conditions value has changed from

events.log:

weatherunderground_weather_local_current_conditions changed from Heiter to Teils Wolkig

If i create the rule with the gui, i can see in the events.log when the rule was executed. Now, with the rules file, i can’t see if it was triggerd or if the rule was ignored…

This is my rule

rule "R40LI Wettersteuerung"
when
    Channel "weatherunderground:weather:local:current#conditions" triggered
then
if (Robonect_Wetter == 'Teils Wolkig' || Robonect_Wetter == 'Wolkig' || Robonect_Wetter == 'Heiter' || Robonect_Wetter == 'Gewitter mit Regen' || Robonect_Wetter == 'Leichte Gewitter mit Regen' || Robonect_Wetter == 'Leichte Regenschauer' || Robonect_Wetter == 'Regenschauer' || Robonect_Wetter == 'Gewitter' || Robonect_Wetter == 'Regen') Robonect_Modus.sendCommand(JOB)
end

What is Robonect_Wetter?
Is it the same channel as weatherunderground:weather:local:current#conditions?

Then you rule should be:

rule "R40LI Wettersteuerung"
when
    Channel "weatherunderground:weather:local:current#conditions" triggered
then
    val weather = Robonect.state.toString
    if (weather == 'Teils Wolkig' || weather == 'Wolkig' || weather == 'Heiter' || weather == 'Gewitter mit Regen' || weather == 'Leichte Gewitter mit Regen' || weather == 'Leichte Regenschauer' || weather == 'Regenschauer' || weather == 'Gewitter' || weather == 'Regen') Robonect_Modus.sendCommand(JOB)
end

Robonect_Weather is the item i have created

String Robonect_Wetter "Robonect_Wetter [MAP(robonect_wetter.map):%s]" {channel="weatherunderground:weather:local:current#conditions"}

Now it’s working :slightly_smiling_face: My Mower now stops mowing when it starts to rain

Items:

String Robonect_Wetter "Robonect_Wetter" {channel="weatherunderground:weather:local:current#conditions"}
String Robonect_Modus  "Robonect_Modus" {channel="robonect:mower:9929677f:mowerStatus#mode"}

Rule:

rule "R40LI Wettersteuerung1"
when
	Item Robonect_Wetter changed
then
	val weather = Robonect_Wetter.state.toString
	if (weather == 'Gewitter mit Regen' || weather == 'Leichte Gewitter mit Regen' || weather == 'Leichte Regenschauer' || weather == 'Regenschauer' || weather == 'Gewitter' || weather == 'Regen') {
	sendCommand(Robonect_Modus, "EOD")
	}
end