Seite 2 von 2
Re: Javascript >=
Verfasst: 9. Mai 2022 19:40
von Harka
Mmh, dann bin ich raus. Habe keine Idee warum sich von den anderen logger.warn keiner anspringt wenn es telegramAction.sendTelegram noch ausführt und sonst keine Fehler ausgibt. Meine Überlegung mit einem fehlenden .getState() ist damit auch vom Tisch.
Re: Javascript >=
Verfasst: 10. Mai 2022 09:36
von peter-pan
...lass doch einfach mal die Bedingungen (IF..ELSE) weg und schau mal was passiert.
Re: Javascript >=
Verfasst: 10. Mai 2022 11:07
von peter-pan
...Ich kann zwar kein Java-Script, aber ich hab mal ein bisschen gegoogelt und an dem Script herum gebastelt und bin unter "nested IF" fündidg geworden. Mein Beispiel (mit ein paar Auskommentierungen und Anmerkungen) sieht jetzt so aus:
Code: Alles auswählen
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var cTemperatur = itemRegistry.getItem('radiator_valve_01_Temp').getState(); // Radiator-Temp Type Number:Temperature
cTemperatur = parseFloat(cTemperatur);
logger.info("---------------------------------------------------------------------");
logger.warn(cTemperatur);
var cOrt = "Badezimmer";
var cStatus = "leer";
// telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
logger.warn("log " + cOrt + " " + cStatus);
if (cTemperatur >= 20){
logger.warn("Willkommen im ersten IF");
if (itemRegistry.getItem('Socket_Fritz_01').getState() == 'OFF') // Switch Item - hier muss noch das ".getState()" rein
logger.warn("nun auch im 2. IF");
cStatus = "aktiv";
logger.warn("cStatus ist: " + cStatus);
// events.sendCommand('temperaturbad', 'ON');
// telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
}
else {// es ist noch nicht warm genug
logger.warn("hier ist die ELSE");
cStatus = "deaktiviert";
// events.sendCommand('temperaturbad', 'OFF');
// telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
logger.warn("cStatus ist: " + cStatus);
}
So sollte es eigentlich klappen. Die innere Klammerung in der zweiten If-Condition muss weg und bei der Condition-Abfrage muss das ".getState()" noch rein.
Die Logs sehen dann so aus:
Code: Alles auswählen
2022-05-10 11:01:04.135 [INFO ] [org.openhab.rule.test_ecma ] - ---------------------------------------------------------------------
2022-05-10 11:01:04.140 [WARN ] [org.openhab.rule.test_ecma ] - 20.5
2022-05-10 11:01:04.144 [WARN ] [org.openhab.rule.test_ecma ] - log Badezimmer leer
2022-05-10 11:01:04.148 [WARN ] [org.openhab.rule.test_ecma ] - Willkommen im ersten IF
2022-05-10 11:01:04.165 [WARN ] [org.openhab.rule.test_ecma ] - nun auch im 2. IF
2022-05-10 11:01:04.169 [WARN ] [org.openhab.rule.test_ecma ] - cStatus ist: aktiv
2022-05-10 11:03:12.475 [INFO ] [org.openhab.rule.test_ecma ] - ---------------------------------------------------------------------
2022-05-10 11:03:12.480 [WARN ] [org.openhab.rule.test_ecma ] - 20.5
2022-05-10 11:03:12.484 [WARN ] [org.openhab.rule.test_ecma ] - log Badezimmer leer
2022-05-10 11:03:12.488 [WARN ] [org.openhab.rule.test_ecma ] - hier ist die ELSE
2022-05-10 11:03:12.492 [WARN ] [org.openhab.rule.test_ecma ] - cStatus ist: deaktiviert
Der erste Vergleich war mit 20 und der zweite mit 21.5.
So sollte es dann aber klappen
