Seite 3 von 6

Re: Timer Ablauf

Verfasst: 19. Jan 2022 10:19
von shuo
Super Udo. Vielen Dank für die Erklärungen. Jetzt ist es aboslut verständlich.

Re: Timer Ablauf

Verfasst: 24. Jan 2022 15:32
von shuo
Hi Udo, ich versuche die Konvertierungsfehler zu lösen - leider ohne Erfolg.

Z.B.

Code: Alles auswählen

nChargeLevel  = (RenaultZEServices_Zoe_ChargeLevel.state as Number).floatValue 
oder

Code: Alles auswählen

nChargeLevel  = (RenaultZEServices_Zoe_Charging_Target.state as Number).floatValue 
werden immer ausgegeben als:

Code: Alles auswählen

Type mismatch: cannot convert from float to int(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
Aber der Ausdruck passt doch. Was läuft hier falsch?

Re: Timer Ablauf

Verfasst: 24. Jan 2022 17:55
von peter-pan
... versuche mal die Variablen so zu initialisieren:

Code: Alles auswählen

var float nChargeLevel = 0.0 
Ich vermute mal, das

Code: Alles auswählen

var nChargeLevel = 0
als Integer definiert wird.

Re: Timer Ablauf

Verfasst: 25. Jan 2022 02:14
von udo1toni
Eigentlich sollte die Variable so definiert werden:

Code: Alles auswählen

var Number nChargeLevel = 0
Und das sollte dann ausreichen, um auch Float speichern zu können.

Bitte Primitives, so weit möglich, vermeiden.
float, int, boolean usw. -> Primitive
Number, Integer, Boolean -> Objekt

Primitives haben keine Methoden und brauchen ungleich länger zur Initialisierung (Ich meine etwa Faktor 30...), das sind echte Zeitfresser.

Re: Timer Ablauf

Verfasst: 25. Jan 2022 09:07
von shuo
udo1toni hat geschrieben: 25. Jan 2022 02:14 var Number nChargeLevel = 0
Das hat das Problem gelöst.

Ich habe jetzt aber auch noch folgede Fehlermeldungen, mit der ich nichts Anfangen kann, bzw finde einfach keinen Fehler. Ich habe mal ein Screenshot gemacht um das einfacher zu halten:
failures.PNG

Re: Timer Ablauf

Verfasst: 25. Jan 2022 15:37
von udo1toni
Type mismatched weist in diesem Kontext auf einen Klammerfehler hin. Kopiere bitte einmal die komplette Rule und füge sie hier (mit Code-Tags) als Text ein. Die Zeilen sind im Screenshot nicht vollständig sichtbar.

Re: Timer Ablauf

Verfasst: 25. Jan 2022 15:41
von shuo
Vielleicht findest Du den Fehler:

Code: Alles auswählen

rule "schedule charging timer"
when
    Item KebaState changed or
    Item KebaPower changed
then
    if(KebaPower.state > 0 && KebaState.state == 3 && tMyTimer === null){                                              // falls Timer nicht existiert und Zoe lädt
        tMyTimer = createTimer(now.plusSeconds(1), [|                                                                 // Timer anlegen und gleich starten
            val tSched = if(myTime.state instanceof Number) (myTime.state as Number) else 0                           // Zykluszeit in Minuten
            val results_status = executeCommandLine(Duration.ofSeconds(30), "sudo", "-u", "openhabian", "/usr/local/bin/pyze", "status", "--km")
            logInfo("charge", "results_Status Plugged {}", results_status)
            val results_vehicle = executeCommandLine(Duration.ofSeconds(30),"sudo", "-u", "openhabian", "/usr/local/bin/pyze", "vehicles")
            logInfo("charge", "results_Vehicle Plugged {}", results_vehicle)
            if(tSched > 0)
                logInfo("charge","Timer wird in {} Minuten erneut ausgeführt!",tSched)
                tMyTimer.reschedule(now.plusMinutes(tSched))
            else {
                logInfo("charge","Timer wird nicht mehr ausgeführt!")
                tMyTimer = null
            }
        ])
    }
end

Re: Timer Ablauf

Verfasst: 25. Jan 2022 15:52
von udo1toni
Falls der Code identisch mit dem aus viewtopic.php?p=41605#p41605 ist, da habe ich auf jeden Fall auch ein Klammerpaar vergessen. (Im Originalposting jetzt korrigiert, es geht um die Zeile

Code: Alles auswählen

if(tSched > 0)
und das nachfolgende

Code: Alles auswählen

else {
Leider sehe ich aber momentan keinen anderen Klammerfehler.

Re: Timer Ablauf

Verfasst: 25. Jan 2022 15:55
von udo1toni
Ah, noch ein zweiter Fehler... Cannot convert from Number to long...

Ändere bitte diese Zeile ab:

Code: Alles auswählen

val tSched = if(myTime.state instanceof Number) (myTime.state as Number).intValue else 0
                                                                        ^^^^^^^^ 

Re: Timer Ablauf

Verfasst: 25. Jan 2022 16:22
von shuo
Auf die fehlenden Klammern hätte ich auch selber drauf kommen können. Da bin ich wohl mit der if - Abfrage weiter oben (wo keine explizit benötigt wird) durcheinander gekommen. Vielen Dank!

Könntest Du mir vielleicht noch das
*.intValue
erklären?