Could not cast - Multiplizieren mit float

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
torfkop
Beiträge: 38
Registriert: 3. Jun 2020 07:51
Answers: 1

Could not cast - Multiplizieren mit float

Beitrag von torfkop »

Moin zusammen,

ich bin mal wieder zu dämlich und frickel hier rum.
Versuche meine eingesparte Leistung mit meinem Strompreis zu multiplizieren. Dachte dafür an eine simple Regel.

Code: Alles auswählen

rule "EinsparungEigennutzung"

when
    Item Sungrow_WR_PV_Stromerzeugung_heute_Value_as_Number received update
then
    EinsparungEigennutzung.postUpdate(Sungrow_WR_PV_Stromerzeugung_heute_Value_as_Number.state as number * 0,3845)
end
Bekomme leider immer diese Fehler und bin einfach zu blöde den Wert richtig anzugeben. Hab schon x-verschiedene Varianten getestet.

Code: Alles auswählen

2023-10-09 16:22:17.450 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Stromkosten-1' failed: Could not cast 3.1 to void; line 6, column 39, length 66 in Stromkosten
Kann mir einer von euch auf die Sprünge helfen?

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

Re: Could not cast - Multiplizieren mit float

Beitrag von udo1toni »

Es gibt keinen Datentyp number :)
Außerdem solltest Du das Casting in Klammern schreiben.
openHAB arbeitet intern immer mit der englischen Notation von Zahlen, also ein Punkt statt eines Kommas als Trennungder Einer von den Zehnteln.
Und zu guter Letzt wäre es besser, auf Typenkonsistenz zu achten, so:

Code: Alles auswählen

rule "Einsparung Eigennutzung"
when
    Item Sungrow_WR_PV_Stromerzeugung_heute_Value_as_Number changed
then
    if(!(newState instanceof Number)) { // newState = Sungrow_WR_PV_Stromerzeugung_heute_Value_as_Number.state
        logWarn("calcSavings","Da ist was schiefgelaufen. Item liefert ungültigen Wert! ({})",newState)
        return;
    }
    EinsparungEigennutzung.postUpdate((newState as Number) * 0.3845) // Achtung, Dezimaltrenner ist der Punkt!
end
Die Abfrage beendet die Rule, falls das Item einen ungültigen Wert liefert.
received update wird in 99 % der Fälle nicht gebraucht, stattdessen sollte man lieber changed als Trigger nutzen (reduziert im Zweifel die Systemlast).
Wenn eine Rule mit changed getriggert wird, steht außerdem die implizite Variable newState zur Verfügung - genau wie previousState (bitte nicht verwechseln mit der Persistence Funktion .previousState - der Punkt davor...), wobei wir den Vorwert hier nicht brauchen, aber ich kann es nicht lassen, abzuschweifen...
Wie erwähnt gibt es kein number, wohl aber Number. openHAB ist hochgradig case sensitive :) immer sklavisch drauf achten, dass jedes einzelne Zeichen korrekt ist...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Could not cast - Multiplizieren mit float

Beitrag von nw378 »

Number großschreiben?
In Klammer setzen? (… .state as Number) *0.31….
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

torfkop
Beiträge: 38
Registriert: 3. Jun 2020 07:51
Answers: 1

Re: Could not cast - Multiplizieren mit float

Beitrag von torfkop »

Perfekt! Läuft nun genau so! DANKE!

Antworten