Seite 1 von 1

Zeitpunkt anhand verbleibender Sekunden berechnen

Verfasst: 3. Nov 2021 08:25
von OliverCJ
Guten Morgen zusammen,

ich habe über Home Connect unsere Siemens Spülmaschine angebunden. Diese liefert über einen channel die "Remaining Program Time", also die verbleibende Programmzeit in Sekunden. Daraus würde ich gerne die Uhrzeit berechnen, zu der das laufende Programm voraussichtlich fertig ist.

Unter OH 2.5 hatte ich dazu auch mal ein rule, die aber natürlich aufgrund der Umstellung auf Java Time nicht mehr funktioniert. Habe zwar ein paar Links und Beiträge gefunden, es bisher aber trotzdem nicht geschafft, diese rule so umzuschreiben, dass sie funktioniert :-(.

Gibt es irgendwo eine Übersicht, die "alte" und "neue" Befehle gegenüberstellt?

Hier mal die rule:

Code: Alles auswählen

rule "Geschirrspueler Endzeit"
when
    Item Kueche_Geschirrspueler_RemainingProgramTimeState changed
then
    var remainSeconds = (Kueche_Geschirrspueler_RemainingProgramTimeState.state as Number).intValue 
    var vEndTime = now.plusSeconds(remainSeconds).toString("HH:mm:ss")
    var vRemainingTime = new DateTime(now.withTimeAtStartOfDay.plusSeconds(remainSeconds)).toString("HH:mm:ss") 
    logInfo ("vRemainingTime", "vRemainingTime in Std:Min:Sek ist {} *** vEndTime {}", vRemainingTime, vEndTime)
    Kueche_Geschirrspueler_EndTime.postUpdate(vEndTime)
end
Danke!
Oliver

Re: Zeitpunkt anhand verbleibender Sekunden berechnen

Verfasst: 3. Nov 2021 12:32
von peter-pan
...wie wär's damit ?

Code: Alles auswählen

rule "Spuelmaschine Laufzeit"
 when
  Item Kueche_FamilieSeptGeschirrspueler_einaus changed to ON  or
  Item Kueche_FamilieSeptGeschirrspuler_verbleibendeZeit changed or 
  Item Dummy_4 changed to ON 
 then
  var remainSeconds = 400 // als Ersatz für Kueche_FamilieSeptGeschirrspuler_verbleibendeZeit
//  var remainSeconds = (Kueche_FamilieSeptGeschirrspuler_verbleibendeZeit.state as Number).intValue
  var vEndTime = String::format("%1$tH.%1$tM.%1$tS",ZonedDateTime.now.plusSeconds(remainSeconds))  //Endzeit
  logInfo("test vEndTime", " Sülmaschine ist fertig um {}",  vEndTime)

  var vRemainingTime = String::format("%1$tH.%1$tM.%1$tS",ZonedDateTime.now.with(LocalTime.MIDNIGHT).plusSeconds(remainSeconds))     // verbleibende Zeit
  logInfo("test vRemainingTime", "Restlaufzeit in Std:Min:Sek ist {} ", vRemainingTime)

  EndTime.postUpdate(vEndTime)
  RemainingTime.postUpdate(vRemainingTime)
end
Die hab ich noch auf meinem Rechner gefunden ;) .
Du musst halt noch deine Items anpassen. Aber grundsätzlich sollte es so, oder so ähnlich, funktionieren. :lol:

Code: Alles auswählen

2021-11-03 12:23:10.961 [INFO ] [nhab.core.model.script.test vEndTime] -  Sülmaschine ist fertig um 12.29.50
2021-11-03 12:23:10.972 [INFO ] [ore.model.script.test vRemainingTime] - Restlaufzeit in Std:Min:Sek ist 00.06.40 

Re: Zeitpunkt anhand verbleibender Sekunden berechnen

Verfasst: 3. Nov 2021 16:14
von OliverCJ
Super, Danke!
Probiere ich nachher direkt mal aus.. im Grunde sieht die ja genauso aus wie meine, bis auf die Änderungen bezüglich JavaTime.
Da muss ich mich echt noch mal ein bisschen besser einlesen...
Hast Du da noch einen Tipp für mich?

VG, Oliver

Re: Zeitpunkt anhand verbleibender Sekunden berechnen

Verfasst: 3. Nov 2021 21:39
von peter-pan
Eigentlich hatte das Rule-Beispiel von mir schon alle nötigen Zeitparameter an Bord. Aber hier noch mal in deine Rule eingebaut:

Code: Alles auswählen

rule "Geschirrspueler Endzeit"
when
    Item Kueche_Geschirrspueler_RemainingProgramTimeState changed
then
    var remainSeconds = (Kueche_Geschirrspueler_RemainingProgramTimeState.state as Number).intValue 
    var vEndTime = String::format("%1$tH.%1$tM.%1$tS",ZonedDateTime.now.plusSeconds(remainSeconds))  //Endzeit
    var vRemainingTime = String::format("%1$tH.%1$tM.%1$tS",ZonedDateTime.now.with(LocalTime.MIDNIGHT).plusSeconds(remainSeconds))     // verbleibende Zeit
    logInfo ("vRemainingTime", "vRemainingTime in Std:Min:Sek ist {} *** vEndTime {}", vRemainingTime, vEndTime)
    Kueche_Geschirrspueler_EndTime.postUpdate(vEndTime)
end
So sollte es eigentlich klappen.

Re: Zeitpunkt anhand verbleibender Sekunden berechnen

Verfasst: 4. Nov 2021 10:55
von OliverCJ
Hi Peter, da hast Du mich wahrscheinlich missverstanden... das klappte schon ganz hervorragend. Danke!

Was ich sagen wollte: Deine rule sieht meiner ursprünglichen aus OH2.5 sehr ähnlich, sogar die Variablennamen waren exakt die gleichen... gleicher Urheber der rule? :-)
Einziger Unterschied war tatsächlich die "Umformatierung" bei dir bezüglich JavaTime. Und da suche ich halt Seiten, wo ich mich etwas besser einlesen kann... will ja nicht jedes Mal hier fragen...

Re: Zeitpunkt anhand verbleibender Sekunden berechnen

Verfasst: 4. Nov 2021 13:45
von peter-pan
OliverCJ hat geschrieben: 4. Nov 2021 10:55 gleicher Urheber der rule?
...aaah, das meintest du.

Ich sag's mal so. Ich hab zwar eine Spülmaschine (bzw. meine Frau hat eine :lol: ). Aber die ist nicht mit OH vernetzt.

Die Rule hab ich auch auf meinen OH2.5-Rechner(Produktion). Ich hab da extra eine "test.rules"-Datei, da gibt's die auch schon.

Die OH3-Version hab ich aber auch schon gehabt. Entweder weil ich beim Migrieren einen Fehler angezeigt bekommen habe, oder aber jemand "Hilfe" geschrien hat :o

Ich denke mal, dass ich da schon mal jemandem geholfen habe, das Ding (Rule und Spülmaschine) zum Laufen zu bringen. ;) ;)
OliverCJ hat geschrieben: 4. Nov 2021 10:55 will ja nicht jedes Mal hier fragen...
Wieso nicht ? Dafür ist das Forum ja da. Ich helf' immer gerne, wenn ich kann.

Edit: Schau mal hier (ab Seite 3) ;)