Seite 4 von 8
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 26. Okt 2022 20:16
von zinnik
Dann probier ich es mal so:
Code: Alles auswählen
rule "Solarpanel Ertrag Tag"
when
Item Solarpanel_PowerConsumption received update // momentane Leistung in Watt
then
// Verbrauch Tag
// SolarThermie_Waermemenge_KW.postUpdate((SolarThermie_Waermemenge_W.state as Number) / 1000)
//Solarpanel_Ertrag_Tag.postUpdate((Solarpanel_PowerConsumption.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number))
val Leistung = Solarpanel_PowerConsumption.avarageSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number
val Sekunden = (now.toInstant.toEpochMilli - now.with(LocalTime.MIDNIGHT)).toInstant.toEpochMilli)/1000
logInfo("bedarfwm","Tagesverbrauch: {}",Leistung)
Solarpanel_Ertrag_Tag.postUpdate(Leistung)
end
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 26. Okt 2022 23:02
von udo1toni
Na, multipliziert hast Du aber nicht...
Code: Alles auswählen
rule "Solarpanel Ertrag Tag"
when
Item Solarpanel_PowerConsumption received update // momentane Leistung in Watt
then
val Leistung = Solarpanel_PowerConsumption.averageSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number
val Sekunden = ((now.toInstant.toEpochMilli - now.with(LocalTime.MIDNIGHT)).toInstant.toEpochMilli)/1000).intValue
val Ertrag = Leistung * Sekunden
logInfo("bedarfwm","Tagesertrag: {} Ws",Ertrag)
logInfo("bedarfwm","Tagesertrag: {} kWh",Ertrag/3600000)
Solarpanel_Ertrag_Tag.postUpdate(Ertrag)
end
EDIT: Typo im Code
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 00:16
von zinnik
upps ganz vergessen
Gibt es noch was anderes wie "avarageSince" den damit erhalt ich eine Fehlermeldung
Code: Alles auswählen
2022-10-27 00:06:41.243 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'solarpanel_ertrag_tag-1' failed: 'avarageSince' is not a member of 'org.openhab.core.library.items.NumberItem'; line 6, column 16, length 86 in solarpanel_ertrag_tag
muss ich noch die persistence angeben?
einen klein Schreibfehler hab ich gefunden, Muss "av
erageSince" heissen.
Aber trotzdem gibt es noch einen weiteren Logfehler
Code: Alles auswählen
2022-10-27 00:59:23.843 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'solarpanel_ertrag_tag-1' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.LongExtensions.operator_minus(long,byte) on instance: null in solarpanel_ertrag_tag
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 02:07
von udo1toni
Ja, Tippfehler sind meine Lieblinge

Bezüglich des zweiten Fehlers habe ich gerade keine Idee, die Ausdrücke sehen für mich gut aus.
Eventuell geht ja die andere Methode auf Anhieb (ist auch kürzer...)
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 03:00
von zinnik
nein der geht auch nicht....
Code: Alles auswählen
2022-10-27 02:59:19.325 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'solarpanel_ertrag_tag-1' failed: The name 'Chronofield' cannot be resolved to an item or type; line 8, column 25, length 11 in solarpanel_ertrag_tag
aber wenn du kein Rat weisst danni ch erst recht nicht

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 10:55
von udo1toni
Eventuell muss es ein instant sein... ich geb nicht auf...
Probiere bitte mal
Code: Alles auswählen
val Sekunden = now.toInstant.get(Chronofield.SECOND_OF_DAY)
Eventuell muss es auch LocalDateTime sein:
Code: Alles auswählen
val Sekunden = now.toLocalDateTime.get(Chronofield.SECOND_OF_DAY)
.get() gibt es an so vielen Stellen in JavaTime... das Datenmodel ansich ist sehr mächtig, aber es es ist mir auch immer noch nicht ganz klar, wann welche Formulierung gebraucht wird...
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 12:03
von peter-pan
... 2 Pfennig2(Cents) von mir:
Code: Alles auswählen
var Sekunde = LocalDateTime.now().toLocalTime().toSecondOfDay()
logInfo("Sekunde", "Sekunde: {} ", Sekunde)
Könnte das weiter helfen ?
Edit:
Code: Alles auswählen
2022-10-27 12:00:28.883 [INFO ] [rg.openhab.core.model.script.Sekunde] - Sekunde: 43228
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 14:57
von udo1toni
Ja, auch das.

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 15:06
von zinnik

Prima Männers das sieht doch garnicht mal schlecht aus
Jetzt mal ein tag abwarten und dann vergleiche ich mal mit der App (mystrom)
PS.: Warum wird immer Sekunde:54 geschrieben? Das steht in jedem Logeintrag
Code: Alles auswählen
2022-10-27 15:01:18.584 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Solarpanel_Ertrag_Tag' changed from 0.00110316 to 0.00110306
2022-10-27 15:01:28.568 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Solarpanel_PowerConsumption' changed from 45.290000915527344 W to 44.11000061035156 W
2022-10-27 15:01:28.569 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Solarpanel_Temperature' changed from 17.139999389648438 °C to 17.149999618530273 °C
2022-10-27 15:01:28.618 [INFO ] [openhab.core.model.script.Solarpanel] - Sekunde: 54
2022-10-27 15:01:28.619 [INFO ] [openhab.core.model.script.Solarpanel] - Tagesertrag: 0.00110296 Ws
2022-10-27 15:01:28.620 [INFO ] [openhab.core.model.script.Solarpanel] - Tagesertrag: 0E-8 kWh
2022-10-27 15:01:28.621 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Solarpanel_Ertrag_Tag' changed from 0.00110306 to 0.00110296
Und die Rule dazu
Code: Alles auswählen
rule "Solarpanel Ertrag Tag"
when
Item Solarpanel_PowerConsumption received update // momentane Leistung in Watt
then
val Leistung = Solarpanel_PowerConsumption.averageSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number
//val Sekunden = (((now.toInstant.toEpochMilli - now.with(LocalTime.MIDNIGHT)).toInstant.toEpochMilli)/1000).intValue
var Sekunde = (LocalDateTime.now().toLocalTime().toSecondOfDay()/1000)
logInfo("Solarpanel", "Sekunde: {} ",Sekunde)
val Ertrag = ((Leistung * Sekunde)/3600000)
logInfo("Solarpanel","Tagesertrag: {} Ws",Ertrag)
logInfo("Solarpanel","Tagesertrag: {} kWh",Ertrag/3600000)
Solarpanel_Ertrag_Tag.postUpdate(Ertrag)
end
Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen
Verfasst: 27. Okt 2022 16:17
von udo1toni
zinnik hat geschrieben: ↑27. Okt 2022 15:06
PS.: Warum wird immer Sekunde:54 geschrieben? Das steht in jedem Logeintrag
Die Zeile kommt aus dem Code, das ist diese Zeile:
Allerdings kann das nicht stimmen

um 15:01:28 muss die Ausgabe 54088 lauten. Also die ersten beiden Stellen wären momentan 54, aber da müssten noch drei weitere Stellen mit ausgegeben werden.
EDIT: Du darfst da nicht durch 1000 teilen, die Division durch 1000 kommt von der vorherigen Berechnung, da handelte es sich aber um Millisekunden.
Auch der Ertrag kann so nicht stimmen, da wäre ja bisher insgesamt nur 60 Ws zusammengekommen, also 0,01657... Wh. Vielleicht wird die Leistung in kW angezeigt?, dann wären es immerhin 0,0166 kWh...