[gelöst] Temperaturvergleich mit item state vs item numeric.state
Verfasst: 9. Mär 2024 14:13
Moin zusammen,
mir ist aufgefallen, dass eine Regel nicht wie gewollt funktioniert. Ich habe zwei Temperaturen von unterschiedlichen Quellen, die in zwei verschiedenen Regeln verglichen werden. In ersten Fall funktioniert das nur mit .state im zweiten Fall nur mit .numericState. Mir ist an der Stelle nicht klar wo der Unterschied liegt. Beide Items sind vom Typ Number mit der Einheit °C .
Fall 1 liefert ein getItem folgendes:
Die Rule wird bei der Variable tempist nur ein ".state" benötigt. (Ein numericState liefert als Wert eine "0" zurück)
Fall 2 liefer abgesehen vom Pattern ein augenscheinlich gleiches Ergebnis, beides sind floats mit Einheit
Die Regel dazu , hier benötigt die Variable temp12hMin ein .numericState
Der State ist doch in beiden Fällen ein String mit einer Einheit. Warum muss er in einem Fall als numerischen Wert interpretiert werden und im anderen nicht?
mir ist aufgefallen, dass eine Regel nicht wie gewollt funktioniert. Ich habe zwei Temperaturen von unterschiedlichen Quellen, die in zwei verschiedenen Regeln verglichen werden. In ersten Fall funktioniert das nur mit .state im zweiten Fall nur mit .numericState. Mir ist an der Stelle nicht klar wo der Unterschied liegt. Beide Items sind vom Typ Number mit der Einheit °C .
Fall 1 liefert ein getItem folgendes:
Code: Alles auswählen
{
"link": "https://openhab.athome.xx:8443/rest/items/Kuhltruhe_Temperatur__Temperatur",
"state": "-20.44 °C",
"stateDescription": {
"pattern": "%.2f %unit%",
"readOnly": true,
"options": []
},
"unitSymbol": "°C",
"metadata": {
"semantics": {
"value": "Point",
"config": {
"isPointOf": "Kuhltruhe_Temperatur_"
}
}
},
"editable": true,
"type": "Number:Temperature",
"name": "Kuhltruhe_Temperatur__Temperatur",
"label": "Temperatur",
"category": "Temperature",
"tags": [
"Point"
],
"groupNames": [
"Kuhltruhe_Temperatur_"
]
}
Code: Alles auswählen
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var telegramAction = actions.get("telegram","telegram:telegramBot:076f70b110");
var tempist = itemRegistry.getItem('Kuhltruhe_Temperatur__Temperatur').state;
//logger.info("Im Gefrierschrank sind es " + tempist );
if (tempist > -18) {
telegramAction.sendTelegram("Achtung! Im Gefrierschrank sind es " + tempist );
logger.info("Warnung Gefrierschrank an Telegram Bot geschickt. Temperatur: " + tempist);
}
Code: Alles auswählen
{
"link": "https://openhab.athome.xx:8443/rest/items/Wetter_12h_MinimaleTemperatur",
"state": "7.54 °C",
"stateDescription": {
"pattern": "%.1f %unit%",
"readOnly": true,
"options": []
},
"unitSymbol": "°C",
"metadata": {
"semantics": {
"value": "Point",
"config": {
"hasLocation": "OpenWeatherMap"
}
}
},
"editable": true,
"type": "Number:Temperature",
"name": "Wetter_12h_MinimaleTemperatur",
"label": "Minimale Temperatur 12h",
"category": "Temperature",
"tags": [
"Point"
],
"groupNames": [
"OpenWeatherMap"
]
}
Code: Alles auswählen
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var things = Java.type('org.openhab.core.model.script.actions.Things');
var temp12hMin = items.getItem('Wetter_12h_MinimaleTemperatur').numericState ; //ohne numericState klappte der Vergleich nicht
var offset = 0;
if (temp12hMin < 0 ) {
offset = 1;
}
if (temp12hMin > 8) {
offset = -1;
}
items.getItem('gThermostatOffset').sendCommand(offset);
logger.info("Temp 12h min: " + temp12hMin + " Offset: " + offset );