Hallo,
ich habe einen Zigbee Helligkeitssensor, welcher über Zigbee2MQTT einen Wert in lux ausgibt. Also habe ich eine Regel erstellt welche folgendes Skript nach einer Änderung des Helligkeitswertes ausführt :
if (items.getItem('Lichtsensor_1_Helligkeit_String').state < '15') {
console.info('Helligkeit zu gering');
if (items.getItem('Kerze_Helligkeit').state <= '10') {
items.getItem('Kerze_Helligkeit').sendCommand('30');
console.info('Flurlicht über Helligkeit an');
}
} else if (items.getItem('Lichtsensor_1_Helligkeit_String').state > '25') {
console.info('Helligkeit ausreichend');
if (items.getItem('Kerze_Helligkeit').state >= '11') {
items.getItem('Kerze_Helligkeit').sendCommand('0');
console.info('Flurlicht über Helligkeit aus');
}
}
Bei der ersten Helligkeitsprüfung stehe ich aber vor einem Rätsel. Bei Werten zwischen 15 und 99, sowie über 199 ist die Helligkeit ausreichend und die Lampe wird nicht geschaltet. Habe ich aber Hunderter Werte, ist der Vergleich der Meinung die Helligkeit wäre unter 15 und schaltet die Lampe ein.
Ist das ein allgemeines JavaScript Problem oder woran liegt es? Es ist übrigens egal, ob das Item vom Typ Number oder String ist.
if (items.getItem('Lichtsensor_1_Helligkeit_String').numericState < 15) {
Vergleiche müssen immer Number ><= Number oder String ><= String sein. Dabei funktioniert der Vergleich bei String aber anders ('2' > '19').
Ich vermute mal, Du hast das mit Blockly erstellt? numericState findest Du unter dem einfachem getStateOfItem und für die Zahlen gibt es Math die blauen "Dinger". Dort findest Du auch Number(parseFloat) welches ich aber als 2.Wahl ansehe.
Tja, also die blauen Math Teile kann ich leider nicht die Vergleiche < oder > als Operator einfügen und mit den grünen Strings funktioniert die Rechnung nicht.