[phpBB Debug] PHP Warning: in file [ROOT]/ext/kinerity/bestanswer/event/main_listener.php on line 514: Undefined array key "poster_answers"
[phpBB Debug] PHP Warning: in file [ROOT]/ext/kinerity/bestanswer/event/main_listener.php on line 514: Undefined array key "poster_answers"
openhabforum.de • Type mismatch: cannot convert from int to DecimalType
Seite 1 von 1

Type mismatch: cannot convert from int to DecimalType

Verfasst: 6. Jan 2019 12:29
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.

Re: Type mismatch: cannot convert from int to DecimalType

Verfasst: 6. Jan 2019 23:06
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.

Re: Type mismatch: cannot convert from int to DecimalType

Verfasst: 7. Jan 2019 15:27
von Diesisteinname
Vielen Dank, so funktioniert es :D