Seite 1 von 1

Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 7. Jan 2025 16:47
von oschwabe
ich kämpfe gerade mit einer Regel welche mir meinen Huawei Stromspeicher Nachts zu einem gewissen Grad lädt wenn es am günstigsten ist.
Aus dem Tibber Binding erhalte ich ein Array mit den Zeit/Preis Daten und ich finde mit einer ersten Regeln um 0:30am den Zeitpunkt wann der Strom am günstigsten ist. Der Zeitpunkt wird in ein Item geschrieben und der Inhalt hat heute so ausgesehen :
ITEM: Tibber_Cheapest_Time
VALUE: 2025-01-07T03:00:00.000+0100

Meine Regeln sieht so aus:

Code: Alles auswählen

rule "Load Battery at cheapest time to level"
when
    Time is Tibber_Cheapest_Time
then 
   logInfo("MyRule", "Die Zielzeit wurde erreicht und Laden wird begonnen!")
   if (Luna_night_load.state == "ON")  //prüfen ob die Funktion für Nachtladen aktiv ist 
   {
   luna_forcible_charge_discharge_setting_mode.sendCommand(1)
   luna_force_charge_target_soc.sendCommand((Luna_night_load_target.state as DecimalType) * 10)
   luna_force_charge_discharge.sendCommand(1)
   }
end
Jemand einen Tipp warum die Rule heute morgen um 3 Uhr wieder nicht angesprungen ist?

OPENHAB 4.3.1
Raspberry 5 mit SSD

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 7. Jan 2025 21:59
von peter-pan
Hast du schon versucht nur über die Zeit zu triggern ?

Code: Alles auswählen

Time is Tibber_Cheapest_Time timeOnly
In etwa so wie im Tutorial beschrieben ?

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 8. Jan 2025 04:38
von udo1toni
Wobei das Datum ja eigentlich passen sollte...

Andere Frage/Idee: Handelt es sich bei Tibber_Cheapest_Time auch um ein DateTime Item?

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 8. Jan 2025 07:42
von oschwabe
habe heute Nacht das timeOnly ergänzt und auch die Definition des Items geprüft:
ITEM Value war heute Nacht: 2025-01-08T03:00:00.000+0100 bei 26,5 CENTS/kWh

Code: Alles auswählen

DateTime    Tibber_Cheapest_Time                                     "Tibber low price hour"                  {stateDescription=""[pattern="%1$td.%1$tm.%1$tY %1$tH:%1$tM"]}

Code: Alles auswählen

rule "load battery to predefined value when cheap"
when 
    Time is Tibber_Cheapest_Time timeOnly
then 
   logInfo("MyRule", "Die Zielzeit wurde erreicht und Laden wird begonnen!")
   if (Luna_night_load.state == "ON")  //prüfen ob die Funktion für Nachtladen aktiv ist 
   {
   luna_forcible_charge_discharge_setting_mode.sendCommand(1)
   luna_force_charge_target_soc.sendCommand((Luna_night_load_target.state as DecimalType) * 10)
   luna_force_charge_discharge.sendCommand(1)
   }
end
Darf vielleicht das stateDescription da nicht stehen und muss weg?

Auf jeden Fall wurde um 3 Uhr nicht geladen :-(

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 8. Jan 2025 17:00
von udo1toni
Nein, stateDescription betrifft nur .displayState, aber nicht .state.
Time is wertet .state aus.
Abgesehen davon steht .displayState in der DSL (leider bisher) nicht zur Verfügung.

Andere Frage: bist Du sicher, dass die Rule nicht getriggert hat?
Steht das Logging für org.openhab.core.model.script.MyRule auf INFO oder DEBUG (falls nicht gesetzt, wie sind die Eltern-Logger gesetzt, also org.openhab.core.model.script, org.openhab.core.model usw.)?
Taucht die Zeile, die von logInfo ausgegeben werden soll tatsächlich nicht zur passenden Uhrzeit in openhab.log auf?
Weil, die Anweisung if(Luna_night_load.state == "ON") wird eventuell immer false liefern, der Code wird also nicht ausgeführt.
Hintergrund: Ein .state ist ein Status. Du vergleichst hier aber mit einem String. also korrekt entweder

Code: Alles auswählen

if(Luna_night_load.state.toString == "ON")
oder

Code: Alles auswählen

if(Luna_night_load.state == ON)
Wobei ich davon ausgehe, dass es sich um ein Switch Item handelt.

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 8. Jan 2025 17:09
von peter-pan
Ich hatte zwar auch, wie Udo, an einen anderen Item-Type gedacht,diese Theorie aber wieder verworfen.

Jetzt muss ich aber doch noch mal fragen; war der Wert in dem DateTime-Item wirklich

Code: Alles auswählen

2025-01-08T03:00:00.000+0100 bei 26,5 CENTS/kWh
Wenn ja, dann kann das m.E. nicht funktionieren.

Edit: Vergiss das. Dadurch wird nur eineFehlermeldung erzeugt:

Code: Alles auswählen

2025-01-08 17:15:06.500 [WARN ] [b.core.model.script.actions.BusEvent] - Cannot convert '2025-01-08T03:00:00.000+0100 bei 26,5 CENTS/kWh' to a state type which item 'testTime' accepts: [DateTimeType, UnDefType].


Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 8. Jan 2025 17:40
von peter-pan
Ich hab das Ganze nochmal getestet. Dazu hab ich mir schnell zwei Regeln (eigentlich nur eine) angelegt:

Code: Alles auswählen

rule "ItemTrigger-Rule"

  when
    Time is testTime1 timeOnly
  then
    // dein Code - z. B. Alexa benutzen
    //   Show_TextToSpeechVolume.sendCommand(40)
    //   Show_TextToSpeech.sendCommand("Hallo Langschläfer, aber jetzt aufstehen")  
    //   Show_TextToSpeechVolume.sendCommand(0)
    logInfo("testTime1","testTime1 Zeit-Trigger ist {}",testTime1)

end

rule "test Datum"
 when 
   Item Dummy_3 changed to ON
  then 
    testTime1.postUpdate("2025-01-08T17:19:00.000+0100")
end    
.items

Code: Alles auswählen

DateTime  testTime1   "Zeit-Item für Tests, mit pattern"      { stateDescription="pattern"  [pattern="%1$tH:%1$tM"] } // Text-Rule 
Mit der zweiten Regel hab ich das Datum gesetzt und das Ergebnis der ersten Regel (log) war:

Code: Alles auswählen

2025-01-08 17:19:00.458 [INFO ] [.openhab.core.model.script.testTime1] - testTime1 Zeit-Trigger ist testTime1 (Type=DateTimeItem, State=2025-01-08T17:19:00.000+0100, Label=Zeit-Item für Tests, mit pattern, Category=null)
Sicherheitshalber hab ich es auch noch mit - ohne timOnly - probiert ;) (also mit komplettem Datum) und auch das hat funktioniert, wie Udo es bereits vorhergesagt hat.

Code: Alles auswählen

2025-01-08 17:24:00.129 [INFO ] [.openhab.core.model.script.testTime1] - testTime1 Zeit-Trigger ist testTime1 (Type=DateTimeItem, State=2025-01-08T17:24:00.000+0100, Label=Zeit-Item für Tests, mit pattern, Category=null)
Der Grund muss also woanders liegen.
1) Ist die Regel auch wirklich im Ordner "openhab/rules" und ist der Name auch wirklich "xxxx.rules" ?
2) Hast du schon mal versucht die Regel mit einem "Dummy-Item" anzustossen ?
3) Hat die Datei auch das richtige Textformat ?
Mit welchem Editor arbeitest du denn ?

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 8. Jan 2025 21:26
von oschwabe
Hallo zusammen,
der Wert des ITEMS war natürlich : '2025-01-08T03:00:00.000+0100' (ohne '). Die Cents habe ich nur zur Info hinzugefügt.
Udo hatte Recht, dass das Problem an der IF Abfrage liegt.
Ich habe wie von Peter-Pan beschrieben einmal nachgestellt - vielen Dank für den Denkanstoß - und sobald ich die " bei ON in der IF Anfrage entfernt habe ist die Rule durch gelaufen.
Da ich über 250 Things in meinem System habe, ist das Logging etwas schwierig und vor allem dann Nachts.

Ich lasse meine Scripts heute Nacht jetzt nochmals laufen und kann morgen früh dann berichten.

Re: Tibber - Rule zum Laden der Batterie wenn Strom am günstigsten

Verfasst: 9. Jan 2025 11:49
von peter-pan
Super.
Allerdings bin ich davon ausgegangen, dass die Regel überhaupt nicht triggert. Weil du geschrieben hast:
oschwabe hat geschrieben: 7. Jan 2025 16:47 Jemand einen Tipp warum die Rule heute morgen um 3 Uhr wieder nicht angesprungen ist?
Da müsste dann aber mindestens die "logInfo" erschienen sein, oder ? ;)