Timer Ablauf

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

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

Re: Timer Ablauf

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Timer Ablauf

Beitrag von shuo »

Besten Dank für die Erklärung.
Alles getestet und funktioniert nun wie es soll

Nochmals vielen Dank Udo!

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

Re: Timer Ablauf

Beitrag von udo1toni »

Gerne!
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Timer Ablauf

Beitrag 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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Timer Ablauf

Beitrag 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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Timer Ablauf

Beitrag 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?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
peter-pan
Beiträge: 2590
Registriert: 28. Nov 2018 12:03
Answers: 26
Wohnort: Schwäbisch Gmünd

Re: Timer Ablauf

Beitrag 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:

Code: Alles auswählen

var Long nSoll
  oder
var long nSoll
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".
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.3 openhabian

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Timer Ablauf

Beitrag von shuo »

warum will er bei Dir kein long? Jetzt stehe ich völlig auf dem Schlauch.

Hab jetzt alles "ausprobiert", aber ohne Erfolg.....

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

Re: Timer Ablauf

Beitrag 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:

Code: Alles auswählen

var Integer nSoll
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24
Answers: 0

Re: Timer Ablauf

Beitrag 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?

Antworten