Javascript >=

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

manes
Beiträge: 231
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Javascript >=

Beitrag von manes »

Hi,
das hier klappt nicht ab der if Abfrage. Auch nicht Else. Fehlermeldung im LOG File gibt es auch nicht

Code: Alles auswählen

var cTemperatur = itemRegistry.getItem('GenericMQTTThing_esp7C627ATemperaturBadezimmer').getState();
var cOrt        = "Badezimmer";
var cStatus     = "leer";
telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
if (cTemperatur >= 20){
  if (itemRegistry.getItem('temperaturbad') == 'OFF'){
    cStatus = "aktiv";
    events.sendCommand('temperaturbad', 'ON');
    telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
  }
}else{// es ist noch nicht warm genug
  cStatus = "deaktiviert";
  events.sendCommand('temperaturbad', 'OFF');
  telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
}
das klappt.

Code: Alles auswählen

var cTemperatur = itemRegistry.getItem('GenericMQTTThing_esp7C627ATemperaturBadezimmer').getState();
var cOrt        = "Badezimmer";
var cStatus     = "leer";
telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
if (cTemperatur == 20){
  if (itemRegistry.getItem('temperaturbad') == 'OFF'){
    cStatus = "aktiv";
    events.sendCommand('temperaturbad', 'ON');
    telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
  }
}else{// es ist noch nicht warm genug
  cStatus = "deaktiviert";
  events.sendCommand('temperaturbad', 'OFF');
  telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);
}
wo ist mein Denkfehler?
---------------------
liebe Grüße Manfred

Benutzeravatar
udo1toni
Beiträge: 15312
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Javascript >=

Beitrag von udo1toni »

Mein erster Tipp wäre Units of Measurement. Allerdings nutze ich kein ECMA und weiß auch nicht, wie man das korrekt in ECMA verwendet.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Harka
Beiträge: 517
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Javascript >=

Beitrag von Harka »

versuch mal es mal mit
cTemperatur = parseFloat(cTemperatur);
OH+Javascipt stolpert öfter über das Format.
Ggf. wäre die Rückgabe für cTemperatur via Telegramm interessant (Komma oder Punkt als Dezimaltrenner).

manes
Beiträge: 231
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Re: Javascript >=

Beitrag von manes »

klappt auch nicht.
Rückgabe ist mit "."
---------------------
liebe Grüße Manfred

Benutzeravatar
udo1toni
Beiträge: 15312
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Javascript >=

Beitrag von udo1toni »

Was ist denn der exakte Inhalt von cTemperatur? geloggt?
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

manes
Beiträge: 231
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Re: Javascript >=

Beitrag von manes »

je nachdem. Eine Zahl. (z.B. 20.1)Ich bin leider noch nicht so fit in javascript, deshalb habe ich eh nicht verstanden, wieso eine Zahl zurückkommt, die ich aber mit einem String direkt kombinieren kann, ohhe sie vorher in einen String selbst umzuwandeln. Aber wenn ich den in Hochkomma verpacke und dann abfrage, passiert auch nichts.
---------------------
liebe Grüße Manfred

Benutzeravatar
peter-pan
Beiträge: 2782
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Javascript >=

Beitrag von peter-pan »

Schau mal hier. Vielleicht hilft dir das weiter.

Das hab ich auf die Schnelle mal gegoogelt, aber selber nicht ausprobiert. Deshalb ohne Gew(e)ähr. ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH5.0.0 openhabian

Benutzeravatar
udo1toni
Beiträge: 15312
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Javascript >=

Beitrag von udo1toni »

Kannst Du bitte die Zeile aus dem Log einfügen? Es geht mir nicht darum, dass Du ein Beispiel zeigst, sondern dass ich eine konkrete Zeile aus dem Log sehe.

Grundsätzlich: Die Definition var cTemperatur erzeugt ein Objekt (weil nichts anderes angegeben wurde). Dies ist zunächst vom Typ void (unbestimmt) und mit dem Zuweisen des state wird es vermutlich zu State (oder so).
Was wichtigste dabei: jedes Objekt erbt die Methoden der Eltern. Und es gibt eine Methode, die das Ur-Objekt hat, die also auch alle anderen Objekte haben, diese Methode heißt .toString. openHAB wird bei gemischter Verwendung von Typen immer versuchen, diese ineinander zu konvertieren, es wird also automatisch einen String erzeugen, indem es die Methode .toString anwendet.
Soll der Status hingegen als Zahl betrachtet werden, ist der Fall nicht so einfach, denn es gibt keine Methode .toNumber oder .toDecimal (oder irgendwas in der Art).
In der DSL muss man einfach nur den Type casten var Number nZahl = MeinItem.state as Number aber ob das in JavaScript auch so funktioniert, weiß ich nicht. Bisher wurden bei mir die Werte immer direkt als Zahl verwendet... wobei ich JavaScript auch nur in den Transformations nutze.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Harka
Beiträge: 517
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Javascript >=

Beitrag von Harka »

Zusätzlich könntest Du auch mal versuchen mit den Fehler einzugrenzen. Ich nutze dafür gerne Log-Ausgaben.

Code: Alles auswählen

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var cTemperatur = itemRegistry.getItem('GenericMQTTThing_esp7C627ATemperaturBadezimmer').getState();
cTemperatur = parseFloat(cTemperatur);
logger.warn(cTemperatur);
var cOrt        = "Badezimmer";
var cStatus     = "leer";
telegramAction.sendTelegram("Raumtemperatur " + cOrt + " derzeit " + cTemperatur + " Grad. Status: Sonnenschutz " + cStatus);

if (cTemperatur >= 20){
  logger.warn("Willkommen im ersten IF");
  if (itemRegistry.getItem('temperaturbad') == 'OFF'){
	logger.warn("nun auch im 2. IF");
    cStatus = "aktiv";
    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);
}

manes
Beiträge: 231
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Re: Javascript >=

Beitrag von manes »

also der logger schreibt genau das weg, was ich auch über telegram erhalte.

Code: Alles auswählen

2022-05-09 11:26:34.585 [WARN ] [org.openhab.rule.temperaturbad      ] - 22.1
---------------------
liebe Grüße Manfred

Antworten