Seite 2 von 2

Re: Differenz von Item-Werten

Verfasst: 8. Jan 2023 18:11
von Selter
Hallo Udo,

danke für den Hinweis :-)

Ich bekomme diesen Fehler:

Code: Alles auswählen

configuration model 'heizung.rules' has errors, therefore ignoring it: [17,9]: no viable alternative at input 'midnight'
[18,56]: no viable alternative at input 'midnight'
[18,65]: extraneous input ')' expecting 'end'

Code: Alles auswählen

rule "Gasverbrauch heute aktualisieren"
when
    Item gasZaehler changed or
    Time cron "1 0 0 * * ?" // täglich um 00:00:01 Uhr
then
    val midnight = LocalDateTime.of(LocalDate.now(),LocalTime.MIDNIGHT)
    gasverbrauchHeute.postUpdate((gasZaehler.deltaSince(midnight))
end

Re: Differenz von Item-Werten

Verfasst: 8. Jan 2023 23:27
von int5749
Selter hat geschrieben: 8. Jan 2023 18:11 Ich bekomme diesen Fehler:
midnight ist als Name für eine Variable unglücklich gewählt? Dies ist ja auch ein interner Operator.

Versuch mal

Code: Alles auswählen

rule "Gasverbrauch heute aktualisieren"
when
    Item gasZaehler changed or
    Time cron "1 0 0 * * ?" // täglich um 00:00:01 Uhr
then
    val vMidnight = LocalDateTime.of(LocalDate.now(),LocalTime.MIDNIGHT)
    gasverbrauchHeute.postUpdate((gasZaehler.deltaSince(vMidnight))
end
Viele Grüße

Re: Differenz von Item-Werten

Verfasst: 9. Jan 2023 03:03
von udo1toni
Jepp, das ist ein reserviertes Schlüsselwort. Passiert...

Re: Differenz von Item-Werten

Verfasst: 9. Jan 2023 09:37
von Selter
Da ist immer noch der Wurm drin :(

Code: Alles auswählen

rule "Gasverbrauch heute aktualisieren"
when
    Item gasZaehler1 changed or
    Time cron "1 0 0 * * ?"     // täglich um 00:00:01 Uhr
then
    val vMidnight = LocalDateTime.of(LocalDate.now(),LocalTime.MIDNIGHT)
    gasverbrauchHeute.postUpdate((gasZaehler1.deltaSince(vMidnight)))
end
Im Log:

Code: Alles auswählen

[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'heizung-2' failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.persistence.extensions.PersistenceExtensions.deltaSince(org.openhab.core.items.Item,java.time.ZonedDateTime) on instance: null in heizung
In vsCode:

Code: Alles auswählen

Ambiguous feature call.
The extension methods
	postUpdate(Item, Number) in BusEvent and
	postUpdate(Item, State) in BusEvent
both match.
und

Code: Alles auswählen

Type mismatch: cannot convert from LocalDateTime to ZonedDateTime
Liegt es vielleicht an den Items?

Code: Alles auswählen

 Number gasZaehler1          "Gaszähler (m³) seit 8.1.23 [%s]"              
    Number gasverbrauchHeute    "Gasverbrauch (m³) heute [%s]"

Re: Differenz von Item-Werten

Verfasst: 9. Jan 2023 12:58
von udo1toni
Gut, dann einfacher...

Code: Alles auswählen

rule "Gasverbrauch heute aktualisieren"
when
    Item gasZaehler1 changed or
    Time cron "1 0 0 * * ?"     // täglich um 00:00:01 Uhr
then
    gasverbrauchHeute.postUpdate(gasZaehler1.deltaSince(now.with(LocalTime.MIDNIGHT)))
end
Wichtig ist natürlich, dass gasZaehler1 persistiert ist, und zwar mit der default Persistence. Falls Du eine andere als die default Persistence verwenden willst, musst Du sie explizit angeben, also z.B.

Code: Alles auswählen

gasZaehler1.deltaSince(now.with(LocalTime.MIDNIGHT),"rrd4j")

Re: Differenz von Item-Werten

Verfasst: 26. Jan 2023 09:01
von Selter
Vielen Dank nochmal - das funktioniert.

vsCode gibt aber trotzdem eine Fehlermeldung:

Code: Alles auswählen

Ambiguous feature call.
The extension methods
	postUpdate(Item, Number) in BusEvent and
	postUpdate(Item, State) in BusEvent
both match.

Re: Differenz von Item-Werten

Verfasst: 26. Jan 2023 18:20
von udo1toni
Ambiguos feature call sollte lediglich eine Warnmeldung sein. Es bedeutet, dass openHAB vor lauter Möglichkeiten nicht weiß, welche es denn nun nehmen soll. Der Einfachheit halber hänge ein .toString an:

Code: Alles auswählen

gasverbrauchHeute.postUpdate(gasZaehler1.deltaSince(now.with(LocalTime.MIDNIGHT)).toString)