Seite 1 von 1
Rule Fehler
Verfasst: 16. Jun 2020 13:41
von THE-EYE
Hallo zusammen,
ich habe eine Rule und finde den Fehler nicht. Die Rule berechnet einen € Preis anhand einer kWh angabe.
Rule:
Code: Alles auswählen
rule "Stromzaehler preis"
when
Item Solaranlage_Gesamtverbrauch received update
then
Einsparung.postUpdate(String.format ("%.2f", (test_ertrag.state as QuantityType<Number>).doubleValue * 0.2875))
end
Der Fehelr im Log:
Code: Alles auswählen
2020-06-16 13:40:53.011 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Stromzaehler preis': Could not cast 7,58 to org.eclipse.smarthome.core.library.types.QuantityType; line 7, column 54, length 44
Re: Rule Fehler
Verfasst: 16. Jun 2020 13:49
von Tokamak
Das liegt an deinen Locales. Dort ist das , als Dezimaltrenner eingestellt.
So dürfte es auch gehen:
Code: Alles auswählen
rule "Stromzaehler preis"
when
Item Solaranlage_Gesamtverbrauch received update
then
Einsparung.postUpdate((test_ertrag.state as Number) * 0.2875)
end
da sowohl Einsparung als auch test_ertrag Number-Items sein dürften
Re: Rule Fehler
Verfasst: 16. Jun 2020 13:54
von THE-EYE
Vielen Dank für das erste Feedback.
Ich habe die Rule entsprechend geändert.
Allerdings erhalte ich nun diesen Fehler:
Code: Alles auswählen
2020-06-16 13:53:53.766 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Stromzaehler preis Szemkus': Could not cast 57,83 to java.lang.Number; line 7, column 31, length 30
Beide ITEMS sind als String angelegt.
Re: Rule Fehler
Verfasst: 16. Jun 2020 14:26
von Tokamak
Warum als Strings, wenn du mit ihnen rechnen willst?
Spontan fällt mir kein Vorteil ein, ein String-Item für Zahlen zu nutzen.
Re: Rule Fehler
Verfasst: 16. Jun 2020 15:15
von udo1toni
Also der Reihe nach:
Wie sind die beteiligten Items definiert? Wo kommen die Daten her? Falls die Daten als String vorliegen (z.B. weil sie über exec ins System kommen) musst Du die Daten in zwei Schritten in eine Zahl wandeln. Schritt eins: ersetze das Komma durch einen Punkt. Schritt zwei: Parse den String in eine (Float-)Zahl:
Code: Alles auswählen
val myNumber = Float::parseFloat(myString.replace(",","."))
Falls es Probleme mit der Genauigkeit gibt, steht meines Wissens auch Double::parseDouble zur Verfügung.
Re: Rule Fehler
Verfasst: 16. Jun 2020 17:45
von Tokamak
Selbst wenn sie als String über ein Exec oder in einem JSON reinkommen, würde ich sie sofort in eine Zahl umwandeln und als Number-Item verwalten, und nicht erst in der Rule den String jedes Mal umwandeln.
Re: Rule Fehler
Verfasst: 16. Jun 2020 21:52
von udo1toni
Das geht aber nicht. Das Exec Binding kann den Output nur als String ausgeben.