Seite 4 von 6
Re: Timer Ablauf
Verfasst: 25. Jan 2022 17:26
von udo1toni
Na ja, die Fehlermeldung besagt ja, dass Number nicht nach long konvertiert werden kann. Das liegt dann daran, dass Number potentiell auch Nachkommastellen aufweisen kann. .intValue gibt eben einen Integer Wert zurück, den openHAB dann automatisch nach long konvertiert.
Re: Timer Ablauf
Verfasst: 25. Jan 2022 17:38
von shuo
Besten Dank für die Erklärung.
Alles getestet und funktioniert nun wie es soll
Nochmals vielen Dank Udo!
Re: Timer Ablauf
Verfasst: 25. Jan 2022 20:03
von udo1toni
Gerne!
Re: Timer Ablauf
Verfasst: 31. Jan 2022 15:38
von shuo
Anfangs dachte ich alles ist gut. Aber jetzt, nachdem ich die Zoe endlich zum Laden anschließen konnte, scheint noch ein Fehler drin zu sein.
Der Ladevorgang wird sofort abgeschalten mit der Nachricht, dass das Ladeziel erreicht ist. Interessanterweise scheint nChargeTarget bei 0% zu sein.
Ladeziel.PNG
das heißt irgendwie finded der vergleich zwischen nChargeLevel und nChargeTarget nicht statt und nSoll bleibt bei dem initilisierten Wert 0.
Woran könnte das noch liegen?
Hier nochmal der Code:
Code: Alles auswählen
rule "update timespan and eventually stop charging"
when
Item RenaultZEServices_Zoe_ChargeLevel changed or
Item RenaultZEServices_Zoe_Charging_Target changed
then
if(KebaPower.state > 0 && KebaState.state == 3){
var Number nChargeLevel = 0 // Default Wert, falls kein gültiger Wert
if(RenaultZEServices_Zoe_ChargeLevel.state instanceof Number) // falls gültiger Wert
nChargeLevel = (RenaultZEServices_Zoe_ChargeLevel.state as Number).floatValue // übernimm diesen Wert
var Number nChargeTarget = 0 // Default Wert, falls kein gültiger Wert
if(RenaultZEServices_Zoe_Charging_Target.state instanceof Number) // falls gültiger Wert
nChargeLevel = (RenaultZEServices_Zoe_Charging_Target.state as Number).floatValue // übernimm diesen Wert
var Number nSoll
if(nChargeLevel >= nChargeTarget) // Ziel überschritten?
nSoll = 0
else if(nChargeLevel >= nChargeTarget - 4) // Ziel - 4 überschritten?
nSoll = 2
else if(nChargeLevel >= nChargeTarget - 10) // Ziel - 10 überschritten?
nSoll = 5
else if(nChargeLevel >= nChargeTarget - 20) // Ziel - 20 überschritten?
nSoll = 10
else // sonst
nSoll = 20
if(nSoll == 0 ) { // Ziel überschritten?
tMyTimer?.cancel // laufenden Timer abbrechen (falls vorhanden)
tMyTimer = null // Zeiger löschen
myTime.postUpdate(5)
KebaSwitch.sendCommand(OFF) // Default Zyklus setzen
logInfo("RemainingCharingTarget", "Zoe set charging target achieved. Switching off at : {} %", nChargeTarget)
sendBroadcastNotification("Ladeziel erreicht. Schalte Ladevorgang ab bei: " + nChargeTarget.toString + "%" )
} else if(myTime.state != nSoll) { // weniger als x % bis zum Ladeziel
myTime.postUpdate(nSoll) // Zyklus anpassen
tMyTimer.reschedule(now.plusMinutes(nSoll)) // und Timer neu planen (optional)
}
}
end
Re: Timer Ablauf
Verfasst: 31. Jan 2022 17:47
von udo1toni
Das bedeutet lediglich, dass die beiden Items (oder mindestens eines davon) nicht initialisiert sind. Schau mal, dass Du eine gültige Zahl im Item Status hast.
Re: Timer Ablauf
Verfasst: 1. Feb 2022 08:34
von shuo
Hi Udo. In den Items ist eine gültige Zahl. Ich habe eben einen Fehler entdeckt.
Bitte in Deinem ursprünglichen Code
nChargeTarget zuweisen. Du hast zweimal
nChargeLevel zugewiesen. Denke das passt nicht.
Aber jetzt - warum auch immer, bekomme ich einen Konvertierungsfehler:
Fehlermeldung.png
Eine Idee warum ich den bekomme?
Re: Timer Ablauf
Verfasst: 1. Feb 2022 14:51
von peter-pan
Ich muss das auch immer wieder ausprobieren. Es wird wahrscheinlich an den unterschiedlichen Datentypen liegen.
Du kannst mal eine der folgenden Deklarationen versuchen:
Ich hab deine Regel mal in bei mir in den VSC-Editor geladen und bekomme dann die Fehlermeldung:
Code: Alles auswählen
Type mismatch: cannot convert from Number to int(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
Also bei mir will er "Integer" oder "int".
Re: Timer Ablauf
Verfasst: 1. Feb 2022 15:56
von shuo
warum will er bei Dir kein long? Jetzt stehe ich völlig auf dem Schlauch.
Hab jetzt alles "ausprobiert", aber ohne Erfolg.....
Re: Timer Ablauf
Verfasst: 1. Feb 2022 17:30
von udo1toni
shuo hat geschrieben: ↑1. Feb 2022 08:34
Bitte in Deinem ursprünglichen Code nChargeTarget zuweisen. Du hast zweimal nChargeLevel zugewiesen. Denke das passt nicht.
Ja, guten Morgen...
Was nSoll betrifft, sollte es eigentlich ausreichen, dies als Integer zu definieren:
Grundsätzlich erwartet plusMinutes einen long Wert. Number kann auch Float enthalten. Offensichtlich ist die Rule Engine da in neueren Versionen etwas zickiger... Aus einem Integer kann openHAB aber leicht ein Long erstellen.
Re: Timer Ablauf
Verfasst: 3. Feb 2022 16:38
von shuo
Also der Fehler scheint behoben zu sein. Aber jetzt stürzt Openhab komplett ab. Sobald ich die Zoe anhänge, hängt sich die Applikation auf.
Es kommt jetzt die Meldung:
Code: Alles auswählen
Scheduled runnable ended with an exception:
java.lang.OutOfMemoryError: Java heap space
Kann jemand was damit anfangen?