Stunde des Jahres für weitere Berechnungen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Stunde des Jahres für weitere Berechnungen

Beitrag von KellerK1nd »

Hallihallo und frohe Oster euch,

Momentan hat man ja wieder ein wenig Zeit zum basteln. Ich würde gerne aus der aktuellen Zeit die laufenden Stunden des Jahres errechnen um den Stromverbrauch pro Stunde fortlaufend weiter berechnen zu können. Nur leider stecke ich da gerade fest. Aktuelle berechne ich das über einen Tag-Zähler der jeden Tag um 0:00 +1 gesetzt wird. Das würde ich gern auf das NTP Binding anwenden, weiß nur nicht wie ich aus der aktuellen Zeit beim Binding auf die Stunde umrechnen kann.

ITEMS:

Code: Alles auswählen

//Items aus dem NTP-Binding
DateTime    Datum           "Datum [%1$tA, %1$td.%1$tm.%1$tY]"  <calendar>  {channel="ntp:ntp:local:dateTime"}
DateTime    Zeit            "Zeit [%1$tH:%1$tM]"                <time>      {channel="ntp:ntp:local:dateTime"}
String      Datum_String    "Datum [%1$tA, %1$td.%1$tm.%1$tY]"  <calendar>  {channel="ntp:ntp:local:string"}
String      Zeit_String     "Zeit [%1$tH:%1$tM]"                <time>      {channel="ntp:ntp:local:string"}
//Jahrestag
Number  Tag_Zaehler                             "Tag des Jahres [%s]"           <calendar>          

Code: Alles auswählen

rule "Tag des Jahres hochzählen"
when
    Time cron "0 1 0 1/1 * ? *"
then
    Tag_Zaehler.sendCommand((Tag_Zaehler.state as Number) +1)
end

rule "Tag des Jahres am 1.1. zurücksetzen"
when
    Time cron "0 2 0 1 1 ? *"
then
    Tag_Zaehler.sendCommand(1)
end
Das klappt soweit auch. Jetzt würde ich aber gern den durschnittlichen Stromverbrauch pro Stunde unseren Haushalts berechnen, was wesentlich genauer als pro Tag ist, leider weiß ich nicht wie ich mir jetzt die Stunden des Jahres als Item speichern kann. Mein erster Ansatz:

Items:

Code: Alles auswählen

Number      Millisekunden   "Millisekunden %s"                              
Number      Sekunden        "Sekunden %s"                                   
Number      Minuten         "Minuten %s"                                    
Number      Stunden         "Stunden %s"                                    
Number      Tag_Zeit        "Tag %s"                                        
und Rule im Versuch:

Code: Alles auswählen

rule "aktuelle Zeit in verschiedene Werte"
when
    Item Zeit changed
then
    val calendar = java.util.Calendar::getInstance
    calendar.timeInMillis = now.millis
    Millisekunden.postUpdate(now.millis)
    Sekunden.postUpdate((Millisekunden.state as Number) /1000)
    Minuten.postUpdate((Sekunden.state as Number) /60)
    Stunden.postUpdate((Minuten.state as Number) /60)
    Tag_Zeit.postUpdate((Stunden.state as Number) /24)
end

Aber etwas stimmt an der Berechnung nicht, bzw. ist mein Ausgangspunkt falsch, jetzt muss es doch eine Möglichkeit geben. Vielleicht könnt ihr mir helfen.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Stunde des Jahres für weitere Berechnungen

Beitrag von violine21 »

Hallo,

so auf die Schnelle würde ich das in etwa so berechnen:

Code: Alles auswählen

fortlaufende Stunde = (now.toString("D") * 24) + now.toString("H")
fortlaufende Stunde des Jahres = (fortlaufender Tag des Jahres * 24 Std.) + aktuelle Stunde des Tages

So, habs mal getestet:

Code: Alles auswählen

logInfo("Zeitformat", "Stunde des Jahres: " + ((now.getDayOfYear() * 24) + now.getHourOfDay()))

Code: Alles auswählen

2020-04-10 21:59:15.006 [INFO ] [se.smarthome.model.script.Zeitformat] - Stunde des Jahres: 2445
leider weiß ich nicht wie ich mir jetzt die Stunden des Jahres als Item speichern kann.

Code: Alles auswählen

Number   Stunde_Jahr

Stunde_Jahr.postUpdate((now.getDayOfYear() * 24) + now.getHourOfDay())

Benutzeravatar
KellerK1nd
Beiträge: 432
Registriert: 17. Jun 2019 16:45
Answers: 1
Wohnort: Griesheim

Re: Stunde des Jahres für weitere Berechnungen

Beitrag von KellerK1nd »

Das sieht so schon mal nicht schlecht aus, melde mich.
Betriebssystem: Proxmox 7.3-4
openHAB Container: debian11 LXC
openHAB Version: 3.4
Hardware: HomeServer Eigenbau mit einem Intel i5 9600K
Smarthome-Equipment:
- Rasperrymatic
- deConz
- HUE
- Shellys
- Mosquitto
- AVM Fritz!Box

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

Re: Stunde des Jahres für weitere Berechnungen

Beitrag von udo1toni »

Allerdings stimmt die Formel nicht ganz, getDayOfYear liefert ein Integer aus dem Wertebereich 1 - 366. Die Formel müsste also

Code: Alles auswählen

Stunde_Jahr.postUpdate(((now.getDayOfYear() - 1) * 24) + now.getHourOfDay())
lauten.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Stunde des Jahres für weitere Berechnungen

Beitrag von violine21 »

udo1toni hat geschrieben: 14. Apr 2020 19:00 Allerdings stimmt die Formel nicht ganz, getDayOfYear liefert ein Integer aus dem Wertebereich 1 - 366. Die Formel müsste also

Code: Alles auswählen

Stunde_Jahr.postUpdate(((now.getDayOfYear() - 1) * 24) + now.getHourOfDay())
lauten.
Hat das mit dem Schaltjahr zu tun?
So, habs mal getestet:
logInfo("Zeitformat", "Stunde des Jahres: " + ((now.getDayOfYear() * 24) + now.getHourOfDay()))
2020-04-10 21:59:15.006 [INFO ] [se.smarthome.model.script.Zeitformat] - Stunde des Jahres: 2445
Ich hatte das natürlich interessenhalber nachgerechnet und das Ergebnis stimmte auch ohne "-1".
2020-04-10 21:59
Januar 31Tage + Februar 29Tage + März 31Tage + 10Tage = 101Tage * 24h = 2424h + 21h = 2445h :?:

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

Re: Stunde des Jahres für weitere Berechnungen

Beitrag von udo1toni »

Tja, aber Du rechnest ja auch falsch. Am 10 April sind erst 9 Tage des April vollständig vergangen, der 10. Tag ist erst angebrochen.

31 Tage Januar + 29 Tage Februar + 31 Tage März = 91 Tage
+ am 10. April 9 vollständige Tage -> 100 Tage = 2400 Stunden.
plus 21 Sunden = 2421 Stunden...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Stunde des Jahres für weitere Berechnungen

Beitrag von violine21 »

Udo, ich hab mir gerade ordentlich vor den Kopf geklatscht :oops:
Ich wäre nicht im Traum darauf gekommen, das der 10. ja noch nicht vorbei ist.
Manchmal ist das Brett vorm Kopf ganz schön dick.

Antworten