Type mismatch: cannot convert from int to DecimalType

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Diesisteinname

Type mismatch: cannot convert from int to DecimalType

Beitrag von Diesisteinname »

Hallo,

in VisualStudioCode werden mir für den folgenden Code die Fehler "Type mismatch: cannot convert from int to DecimalType" und "Ambiguous binary operation.The operator declarations operator_equals(Number, Number) in NumberExtensions and operator_equals(Type, Number) in NumberExtensions both match." angezeigt.

Code: Alles auswählen

rule "Wecker Manuell"
    when
        Time cron "0 * * * * ?"
    then
	if (Wecker_Switch.state == ON) {
		var sollMinute = (Wecker_M.state as DecimalType).intValue
		var sollStunde = (Wecker_H.state as DecimalType).intValue

        // 30 Minuten vor Weckzeit
        var DecimalType dreissigmin
        var DecimalType dreissigh
        
        if (sollMinute > 29) {
            dreissigmin = sollMinute-30
            dreissigh = sollStunde
        } else{
            dreissigh = sollStunde-1
            dreissigmin = sollMinute+30
        }

		if (dreissigmin == now.getMinuteOfHour && dreissigh == now.getHourOfDay) {...}
Die Regel funktioniert aber einwandfrei und im LogViewer werden auch keine Fehler angezeigt. Was muss ich verändern um die Fehlermeldungen in VisualStudioCode zu beheben?

Vielen Dank im Voraus.

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

Re: Type mismatch: cannot convert from int to DecimalType

Beitrag von udo1toni »

Nimm Number statt DecimalType :)
So als Tipp am Rande: Es gibt nicht nur getMinuteOfHour sondern auch getMinuteOfDay, was Die Berechnung einfacher macht:

Code: Alles auswählen

rule "Wecker Manuell"
    when
        Time cron "0 * * * * ?"
    then
	if (Wecker_Switch.state == ON) {
            var sollZeit = (Wecker_M.state as Number).intValue + (Wecker_H.state as Number).intValue * 60

            // 30 Minuten vor Weckzeit
            var Number dreissigmin = sollZeit - 30
            if(dreissigmin < 0) dreissigmin +=1440 // Weckzeit vor 00:30 :)
            if (dreissigmin == now.getMinuteOfDay) {...}
Natürlich musst Du im Verlauf des Codes dann sollZeit statt sollMinute und sollStunde vewenden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Diesisteinname

Re: Type mismatch: cannot convert from int to DecimalType

Beitrag von Diesisteinname »

Vielen Dank, so funktioniert es :D

Antworten