Code: Alles auswählen
Number Item
Code: Alles auswählen
if (Item > 0)
oder
if (Item.state > 0)
oder
if ((Item.state as Number) > 0)
oder
if ((Item.state as Number).floatValue >0)
Code: Alles auswählen
Number Item
Code: Alles auswählen
if (Item > 0)
oder
if (Item.state > 0)
oder
if ((Item.state as Number) > 0)
oder
if ((Item.state as Number).floatValue >0)
Code: Alles auswählen
if(Item > 0) // Das ist Quatsch (bzw. wurde einfach das .state vergessen)
if(Item.state > 0) // Prüfe, ob der Status des Items größer 0 ist. Das kann funktionieren, sicher ist es aber nicht
if((Item.state as Number) > 0) // Prüfe, ob der Status des Items, als Nummer betrachtet, größer 0 ist
if((Item.state as Number).floatValue >0) // Prüfe, ob der Status des Items, als Nummer, die nach Float gewandelt wurde größer 0 ist
Code: Alles auswählen
if(!(Item.state instanceof Number)) return; //Falls Status keine gültige Zahl enthält, brich die Rule ab.
Code: Alles auswählen
String item
Code: Alles auswählen
if(item.state == "bla")
if(item.state.toString == "bla")
if ((item.state instanceof String) == "bla" )
Der Punkt ist ein anderer. Stell Dir vor, Du hast ein Thermostat, welches die Temperatur in °F liefert. Die Channel sind UoM Channel. Dann wird ide Temperatur bei Dir in °C angezeigt. OHNE irgendetwas zu tun!!! Dein System ist nämlich auf SI-Einheiten konfiguriert, nicht auf imperiale Einheiten.shuo hat geschrieben: ↑9. Dez 2021 08:11 Wo ich UoM Items verwenden könnte ist mir noch nicht ganz klar, denn die Einhat kann ich ja auch in der Beschreibung des Items definieren. Das heißt aber auch im Umkehrschluss das es - vorausgesetzt es gibt keine Einheit - es keinen Unterschied zwischen den letzten beiden gibt?
Das gibt es nicht in DSL.
Hier wandelst du erst einen x-beliebigen Typ (z.B. Number) in einen String-Typ um und vergleichst ihn dann mit einem String.
Das ist eigentlich der "normale" String-Vergleich
Code: Alles auswählen
if (Season_Name.state instanceof Number){
logInfo("Test instance", "Season_Name ist String: {}", Season_Name.state)
}
else {logInfo("Test instance", "Season_Name ist kein String: {}", Season_Name.state)}
if (Moon_illumination.state.toString == "43.004910823431565"){
logInfo("Test instance", "Season_Name ist {}", Moon_illumination.state)
}
else {logInfo("Test instance", "Season_Name ist nicht: {}", Moon_illumination.state)}
if (Season_Name.state == "AUTUMN"){
logInfo("Test instance", "Season_Name ist {}", Season_Name.state)
}
else {logInfo("Test instance", "Season_Name ist nicht: {}", Season_Name.state)}
Code: Alles auswählen
2021-12-10 10:28:54.288 [INFO ] [nhab.core.model.script.Test instance] - Season_Name ist kein String: AUTUMN
2021-12-10 10:28:54.294 [INFO ] [nhab.core.model.script.Test instance] - Season_Name ist 43.004910823431565
2021-12-10 10:28:54.300 [INFO ] [nhab.core.model.script.Test instance] - Season_Name ist AUTUMN
Ja, glatt überlesen... peter-pan hat's ja schon erläutert, aber der Vollständigkeit halber...
Code: Alles auswählen
if(Item.state == OFF) // hier wird der Status verwendet
if(Item.state.toString == "OFF") // hier wird der Status zunächst in einen String gewandelt.
if(Item.state == "OFF") // Das ist falsch. Kann funktionieren, muss aber nicht.