[Openhab] Temperaturwerte runden

  • Moins!

    Nachdem ich schon mit @horschte drüber geschrieben habe, hier noch mal als eigener Thread.

    Das Problem:
    Durch die Xiaomi Temperatursensoren werden Werte wie 23.333333 an OH2 übergeben. Will ich diese Werte per Alexa ansagen lassen liest mir die gute alle Nachkommastellen vor. Anfangs lustig, dann nur noch nervig.
    Daher eine Regel zusammengebastelt um den Wert auf 2 Stellen zu runden, Resultat wie folgt:

    JavaScript: temp_convert.rules
    rule "Temp Wohnzimmer runden"
    when
    	Item Xiaomi_1_Temperature changed
    then
    	val dummy = (Xiaomi_1_Temperature.state as DecimalType).floatValue() *100
    	dummy = Math::round(dummy)
    	dummy = dummy / 100
    	postUpdate(Xiaomi_1_Temp_Dummy, dummy)
    	logInfo("TempConvert.rules", "Sensor1: " + Xiaomi_1_Temperature.state + " >>> " + Xiaomi_1_Temp_Dummy.state)
    end

    Jetzt noch ein Item anlegen womit Alexa was anfangen kann:

    Code: Sensoren.items
    Number	Xiaomi_1_Temp_Dummy	"Temperatur Wohnzimmer [%.1f °C]"	temperature>	[ "CurrentTemperature" ]


    Das ganze funktioniert zwar, ist aber code-technisch nicht schön. Ich hab versucht das in eine Zeile zu packen aber trotz Verwendung unzähliger Klammern kam immer nur der ganzzahlige Wert raus. Keine Ahnung warum.
    Daher halt jeder Schritt einzeln. Vielleicht kann das jemand der mit JS fit genug ist noch optimieren. Ansonsten kann das so genutzt werden.

    Wenn man, wie ich, mehrere Sensoren verwendet bietet sich eigentlich an daraus eine Funktion zu machen und dann pro Sensor nur ein Mal den Wert zum Umrechnen wegzuschicken. Leider hab ich da nicht genug Ahnung von JS.

    Kodi-Basis: Intel® NUC7PJYH | 4GB DDR4 | 60GB Sandisk SSD | LibreElec 10 | Horizon V | Emby
    Sound: Sony HT-CT290 2.1 Soundbar
    TV: 55" Sony KD-55XE8577
    Server: Intel Core i5-4690 @ Asrock Z97 Anniversary | 8GB DDR3 | Xubuntu 18.04.4 LTS @ 256GB Samsung 840Pro | 5x 3TB WD-Red @ ZFS RAID 5 | Emby-Server | Monitorix

    2 Mal editiert, zuletzt von killercorny (18. Juni 2018 um 01:55)

  • Hi,

    vielen Dank für die Code Vorlage.

    Ich habe den Code auf meine Bedürfnisse soweit angepasst und funktioniert auch soweit gut.
    Wie müsste der Code denn aussehen, wenn man auf volle Zahlen runden möchte, und die Nachkommastelle weglässt?
    Bei mir wird die Zahl nach dem umwandeln nämlich z.B. wie folgt angezeigt: 23,6
    Das stört aber immer noch bei der Sprachausgabe von Alexa, da Alexa "Komma" nicht ausspricht.
    Ich bekomme es leider selber nicht hin den Code anzupassen.

    Vlt. kann mir jemand sagen wie der Code dann aussehen muss?
    Vielen Dank vorab.

  • einfach die rechenoperationen weglassen und nur .floatValue() nutzen
    bspw

    Code
    rule "runden"
    when
        Item Temperatur changed
    then
    postUpdate(Temperatur_Dummy, Math::round((Temperatur.state as DecimalType).floatValue()))	
    end

    edit:
    @Bakka du brauchst deine beiträge nicht zu löschen wenn darauf geantwortet wurde, damit machst du den lesefluss für besucher kaputt.
    wenn sich das thema erledigt hat weil du eine lösung gefunden hast bevor jemand geantwortet hast dann editiere sie doch einfach in deinen beitrag rein.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!