Seite 2 von 3

Re: Stromverbrauch über Nacht

Verfasst: 12. Jun 2023 19:22
von BOP
Du legst eine Rule an, die z.B. jeden Tag um 9:15 Uhr einmal läuft und das Ergebnis dann in ein Item (vom Typ Number) schreibt.

Code: Alles auswählen

rule "Nachtverbrauch"
when 
    	Time cron "0 15 9 ? * * *" // Jeden Tag um 9:15 Uhr
then
	var Startzeit = now.with(LocalTime.MIDNIGHT).minusHours(6) // 18 Uhr Vortag
	var Endzeit = now.with(LocalTime.MIDNIGHT).plusHours(9) // 9 Uhr heute
	var kWhNacht =  StromzaehlerHaus_Gesamtstrom.deltaBetween(Startzeit,Endzeit)
	
	MeinNachtverbrauchItem.sendCommand(kWhNacht)
end

Re: Stromverbrauch über Nacht

Verfasst: 12. Jun 2023 20:46
von Lactobacillus
BOP hat geschrieben: 12. Jun 2023 19:22 Du legst eine Rule an, die z.B. jeden Tag um 9:15 Uhr einmal läuft und das Ergebnis dann in ein Item (vom Typ Number) schreibt.

Habe nun das ganze in VS Code angelegt und in OpenHab ein NumberItem erstellt. VS Code zeigt bei dem sendCommand einen Fehler!

Code: Alles auswählen

rule "Nachtverbrauch"
when 
    	Time cron "0 15 9 ? * * *" // Jeden Tag um 9:15 Uhr
then
	var Startzeit = now.with(LocalTime.MIDNIGHT).minusHours(6) // 18 Uhr Vortag
	var Endzeit = now.with(LocalTime.MIDNIGHT).plusHours(9) // 9 Uhr heute
	var kWhNacht =  StromzaehlerHaus_Gesamtstrom.deltaBetween(Startzeit,Endzeit)
	
	Photovoltaik_Nachtverbrauch.sendCommand(kWhNacht)
end

Re: Stromverbrauch über Nacht

Verfasst: 12. Jun 2023 21:25
von udo1toni
Punkt 1: Bitte kein sendCommand (es sei denn, Du möchtest mit dem Item etwas an die Außenwelt senden)
Punkt 2a: Wenn VS Code einen Fehler anzeigt, warum verrätst Du nicht, wie die Meldung lautet?
Punkt 2b: Funktioniert es vielleicht trotzdem?
Punkt 2c: Welcher Itemtyp ist Photovoltaik_Nachtverbrauch?

Re: Stromverbrauch über Nacht

Verfasst: 12. Jun 2023 21:48
von Lactobacillus
Ok, versuche es mal kurz alles zu beantworten.

Senden will ich nichts vielleicht irgendwann eine Telegram Message aber denke das Item ist eh nur vorrübergehend.

Der Fehler in VSVode:

Code: Alles auswählen

Ambiguous feature call.
The extension methods
	sendCommand(Item, Number) in BusEvent and
	sendCommand(Item, Command) in BusEvent
both match.
Leider erscheint es so nicht, es erscheint nicht in der Ruleliste in Openhab

Das Item wurde als Number angelegt!

Re: Stromverbrauch über Nacht

Verfasst: 12. Jun 2023 22:17
von udo1toni
Ach so, hab vergessen Punkt 1 noch etwas auszuführen...

.sendCommand()
-> Sende einen Befehl (wird in events.log als "received command" gespeichert. Wird an verlinkte Channel weitergeleitet, die den Befehl dann ihrerseits an die verbundene Hardware weiterleiten)
.postUpdate() -> Ändere den Status (bzw. führe ein Update des Status aus) (wird in events.log als "changed" geloggt - oder nicht, falls es nur ein Update ohne Change gab. received update wird gewöhnlich nicht geloggt. Wird nicht an verlinkte Channel weitergeleitet - es sei denn, es handelt sich um knx-control Channel... spezielle Spezial-Spezialität...)

Du solltest also den errechneten Wert mit Photovoltaik_Nachtverbrauch.postUpdate(kWhNacht) in das Item schreiben (und damit wird vermutlich auch der Ambiguos feature call verschwinden)

Re: Stromverbrauch über Nacht

Verfasst: 13. Jun 2023 04:02
von Lactobacillus
Leider erscheint auch da eine Fehlermeldung!

Code: Alles auswählen

Ambiguous feature call.
The extension methods
	postUpdate(Item, State) in BusEvent and
	postUpdate(Item, Number) in BusEvent
both match.
oder hätte ich das Item auch im VS Code anlegen müssen? Habe es über die OpenHab Oberfläche angelegt

Re: Stromverbrauch über Nacht

Verfasst: 13. Jun 2023 05:06
von udo1toni
Nein, das sollte keine Rolle spielen. Die "schmutzige" Methode, das Problem zu umgehen, wäre, kWhNacht.toString hinzuschreiben. Da kWhNacht nicht weiter spezifiziert ist, wird es automatisch als Objekt generiert, womit .toString zur Verfügung steht.

Weiterhin könnte den Wert casten, allerdings sollte das gewöhnlich nicht nötig sein:

Code: Alles auswählen

rule "Nachtverbrauch"
when 
    	Time cron "5 0 9 ? * *" // Jeden Tag um 9:00:05 Uhr
then
	var Startzeit = now.with(LocalTime.MIDNIGHT).minusHours(6) // 18 Uhr Vortag
	var Endzeit = now.with(LocalTime.MIDNIGHT).plusHours(9) // 9 Uhr heute
	var kWhNacht =  StromzaehlerHaus_Gesamtstrom.deltaBetween(Startzeit,Endzeit)
	
	Photovoltaik_Nachtverbrauch.postUpdate(kWhNacht as Number)
end
Fünf Sekunden sollten mehr also ausreichend sein, um absolut sicherzustellen, dass Daten für den zweiten Zeitpunkt zur Verfügung stehen, entsprechend kann man die Rule auch wesentlich früher ausführen lassen :)

Re: Stromverbrauch über Nacht

Verfasst: 13. Jun 2023 05:46
von EmptySoft
Ja, es ist ein Auszug aus einer Rule. Ich bin leider nicht gut in "offline" Rules schreiben.

Re: Stromverbrauch über Nacht

Verfasst: 13. Jun 2023 20:33
von Lactobacillus
EmptySoft hat geschrieben: 13. Jun 2023 05:46 Ja, es ist ein Auszug aus einer Rule. Ich bin leider nicht gut in "offline" Rules schreiben.
Kein Problem, immerhin hat ja das Grundgerüst gestimmt. Ich kanns gar nicht.

@Udo Es funktioniert jetzt hat mir auch sofort Rückwirkend einen Wert geliefert allerdings erscheint mir 5,2 kwh etwas viel für Nachts aber werde das mal beobachten die kommenden Tage der Tagesverbrauch liegt bei 10-12kwh.

Re: Stromverbrauch über Nacht

Verfasst: 13. Jun 2023 22:27
von udo1toni
Lactobacillus hat geschrieben: 13. Jun 2023 20:33 allerdings erscheint mir 5,2 kwh etwas viel für Nachts
Nein, warum? Es ist ja kein "Nacht"-Wert, sondern der Gesamtverbrauch zwischen 18 Uhr und 9 Uhr (das sind 15 Stunden).
Du kannst das Zeitfenster beliebig anpassen, also meinetwegen auch von 22 Uhr bis 5 Uhr, das wären dann nur sieben Stunden, und außerdem in einer Zeit, in der man gerne mal schläft.
Es sei denn, man ist Schichtdienstler :) Ich gehe um 01:30 Uhr ins Bett und stehe um 02:10 Uhr auf (natürlich nicht an aufeinander folgenden Tagen...)