Rule for: Sum since now, back to 0:00

I need help with a rule:

I want:
The sum of an item - from now (time and date from now) back to (date from now and time 00:00:00) / 60000

Can anyone help me for the code after: zdt.now().???

events.postUpdate('Minute_Tageseinspeisung', ((persistence.sumSince(itemRegistry.getItem('Minute_Einspeisung'), zdt.now().??????????))))/ 60000);}

Here is the whole rule:

var dtf = Java.type("java.time.format.DateTimeFormatter");


        var zdt = Java.type("java.time.ZonedDateTime");


        function getZonedDateTime (datetime) {
          return zdt.parse(datetime + ' 00:00:00 +00:00', dtf.ofPattern('yyyy-MM-dd HH:mm:ss z'))
        }


        var persistence = Java.type('org.openhab.core.persistence.extensions.PersistenceExtensions');

if ((persistence.averageSince(itemRegistry.getItem('Shelly3EMSHEM3_KumulierterVerbrauch'), zdt.now().minusMinutes(1))) < '0') {
    events.postUpdate('Minute_Tageseinspeisung', ((persistence.sumSince(itemRegistry.getItem('Minute_Einspeisung'), zdt.now().?????????))))/ 60000);}
else if ((persistence.averageSince(itemRegistry.getItem('Shelly3EMSHEM3_KumulierterVerbrauch'), zdt.now().minusMinutes(1))) > '0') {
  events.postUpdate('Minute_Tagesverbrauch1', ((persistence.sumSince(itemRegistry.getItem('Minute_Verbrauch'), zdt.now().????????))))/ 60000);}
end

Help yourself a bit. Break the process down into smaller steps, so that you can examine interim values etc. while you get it working.

Useful method -
yourZonedDateTime.withHour(0).withMinute(0).withSecond(0)

Hi, thanks :slight_smile: !
The thing is that I am not “in love” with Java.
The code is from blockly, I can read and understand, but write…
I google a long time, and found a lot of examples, but every script gives me an error :frowning:

@htttito I don’t quite understand the maths / what you’re trying to calculate, but here’s your code translated to jruby

java_import java.time.ZonedDateTime # not needed in openhab 3.3
java_import java.time.temporal.ChronoUnit # not needed in openhab 3.3

midnight = ZonedDateTime.now.truncated_to(ChronoUnit::DAYS)
verbrauch_1minute = Shelly3EMSHEM3_KumulierterVerbrauch.average_since(1.minute)

if verbrauch_1minute.negative?
  Minute_Tageseinspeisung.update(Minute_Einspeisung.sum_since(midnight) / 60_000)
elsif verbrauch_1minute.positive?
  Minute_Tagesverbrauch1.update(Minute_Verbrauch.sum_since(midnight) / 60_000)
end

To get ZonedDateTime for the midnight of that day you can use what @rossko57 suggested, or ZonedDateTime.now.truncateTo(ChronoUnit::DAYS), it’s just a matter of preference.

1 Like

Please post a screen shot of your Blockly code. Anything we could suggest here will invalidate your Blockly.

Hi Rich!

My code is finished, and there are no errors.
I don’t find a possibility to write it with Blockly.
I want to answere yesterday but I have Problems with the mysql time…

So here it is:

var dtf = Java.type("java.time.format.DateTimeFormatter");
var LocalTime = Java.type("java.time.LocalTime");
var zdt = Java.type("java.time.ZonedDateTime");
var persistence = Java.type('org.openhab.core.persistence.extensions.PersistenceExtensions');

        function getZonedDateTime (datetime) {
          return zdt.parse(datetime + ' 00:00:00 +00:00', dtf.ofPattern('yyyy-MM-dd HH:mm:ss z'))
        }

if ((persistence.averageSince(itemRegistry.getItem('Shelly3EMSHEM3_KumulierterVerbrauch'), zdt.now().minusMinutes(1))) < '0') {
    events.postUpdate('Minute_Tageseinspeisung', ((persistence.sumSince(itemRegistry.getItem('Minute_Einspeisung'), zdt.now().with(LocalTime.MIDNIGHT))) / 60000));}
else if ((persistence.averageSince(itemRegistry.getItem('Shelly3EMSHEM3_KumulierterVerbrauch'), zdt.now().minusMinutes(1))) > '0') {
    events.postUpdate('Minute_Tagesverbrauch1', ((persistence.sumSince(itemRegistry.getItem('Minute_Verbrauch'), zdt.now().with(LocalTime.MIDNIGHT))) / 60000));}