Startzeit für Wallbox als Rule Trigger

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

Hallo zusammen,

ich versuche gerade eine Startzeit zu errechnen, welche dann als Trigger für eine Rule genutzt werden soll.
Ziel ist es, dass der Ladevorgang beendet wird kurz bevor das Auto genutzt wird. Somit ist der Akku noch vorgewärmt ;-)
Die Endzeit soll variabel sein.
Dazu habe ich bereits eine Rule begonnen um die wichtigsten Parameter zu berechnen.

Items (ohne Channeldefinition, da hier nicht relevant)

Code: Alles auswählen

Number evcc_targetSoC	"Target SoC: "
Number evcc_vehicleSoC	"Vehicle SoC: "
Switch SetWarpAmpere    "Ladestrom"   {autoupdate="false"}  //Name muss noch angepasst werden, dient nur als Trigger => heute Nacht laden

Number EVChargeEndHour		"Start Hour [%d]"	<time>
Number EVChargeEndMinutes	"Start Minutes [%d]"	<time>
Rule zur Berechnung der benötigten Minuten, dieser Teil funktioniert

Code: Alles auswählen

rule "Get Warp Duration"
when
    Item SetWarpAmpere received command ON
then
    var vWarp = ((evcc_targetSoC.state as Number).intValue - (evcc_vehicleSoC.state as Number).intValue)    //Anzahl kW bis targetSoC
    var vPower = ((vWarp * 0.373) - 2.415).floatValue   // Wieviel muss mit 10A geladen werden
    var vDuration = ((vPower / 0.115) + 30).intValue    // Benötigte Zeit inkl. vorwärmen
end
0.373 = Leistung in kW/pro % des Akkus => Was fehlt bis SoC
2.415 = Leistung in kW, welche beim vorwärmen (15 Min mit 6A + 15 Min mit 8A) geladen wird (daher auch die + 30 für Duration)
0.115 = kW der Wallbox bei 10A/Minute

Nun habe ich gerade einen Knoten im Hirn
Wie kann nun
- aus (EVChargeEndHour & EVChargeEndMinutes) - vDuration eine Startzeit errechnet werden
- wie kann diese Startzeit dann als Trigger für eine Rule genutzt werden (timecron)? (hier würde dann die Rule zum aufwärmen und anschließendem laden starten, diese ist schon fertig)

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

Nachtrag: Ich habe nun noch eine Möglichkeit gefunden, die Endzeit basierend auf den Eingaben Stunde/Minute aus der Sitemap zu erstellen

Items

Code: Alles auswählen

Number EVChargeEndHour		"Start Hour [%d]"
Number EVChargeEndMinutes	"Start Minutes [%d]"

Code: Alles auswählen

val vChargeEnd = now.withHour((EVChargeEndHour.state as Number).intValue).withMinute((EVChargeEndMinutes.state as Number).intValue).withSecond(0)
Nächster Schritt wäre dann, dort die Minuten abzuziehen um die Startzeit zu erhalten an welcher die Rule starten soll :geek:
Bisher muss die Rule auch nach 0:00 Uhr starten, da sonst ja der falsche Tag enthalten ist.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

Update: scheint wohl nicht möglich zu sein :(

Noch mehr suchen mit weiteren keywords haben mit zu diesem Link geführt: Variable uhrzeitbasierte Zeitschaltung

Schade, dann muß ich mal sehen wie ich dies starte.


Update x: Eine Überlegung wäre in CalDev Server im eigenen Netz (ich möchte meine Daten in keiner Cloud haben). Aber irgendwie scheitere ich gerade an der Installation von radicale :(
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

Aktueller Stand: Scheinbar ist es nicht möglich eine Zeit variabel über Sitemap zu definieren und diese dann als Trigger für eine Rule zu nutzen. Daher habe ich dies nun über eine zyklische Rule gelöst, die nur beim eintreffen aller notwendigen Parameter abgearbeitet wird.

Für Kommentare und Verbesserungsvorschläge bin ich wie immer offen :)

Code: Alles auswählen

var Timer tChargeCurrent = null

rule "Charge E-Car"
when
    Time cron  "0 0/5 3-7 * * ?"			//alle 5 Minuten zwischen 3-7 Uhr
then
	if((ChargeCar.state != ON) || (evcc_charging.state == "true"))	// wenn soll nicht, oder wird bereits geladen => exit
    	return;

    // Anzahl kW bis targetSoC
    var vWarp = ((evcc_targetSoC.state as Number).intValue - (evcc_vehicleSoC.state as Number).intValue)
    // benötigte kW mit 12A
    var vPower = ((vWarp * 0.373) - 4.140).floatValue
    // Gesamtdauer der Ladung
    var vDuration = ((vPower / 0.115) + 45).intValue

    // Berechnung der Startzeit, basierend auf Endzeitpunkt aus der Sitemap
    val vChargeEnd = LocalTime.MIDNIGHT.withHour((EVChargeEndHour.state as Number).intValue).withMinute((EVChargeEndMinutes.state as Number).intValue).withSecond(0)
    val vChargeStart = vChargeEnd.with(vChargeEnd).minusMinutes((vDuration as Number).intValue)

    if ((evcc_connected.state == "true") && (evcc_charging.state == "false") &&
        (now.toLocalTime.getHour == vChargeStart.getHour) && (now.toLocalTime.getMinute >= vChargeStart.getMinute)){
        tChargeCurrent?.cancel
        // setzte initiale Stromstärke
        evcc_maxCurrent.sendCommand(6)
        // starte Ladung
        evcc_mode.sendCommand("now")
        tChargeCurrent = createTimer(now.plusMinutes(15),[|
            if(evcc_maxCurrent.state < 12) {
                evcc_maxCurrent.sendCommand((evcc_maxCurrent.state as Number).intValue + 2)
                tChargeCurrent.reschedule(now.plusMinutes(15))
            }
        ])
    }
end
Viele Grüße und einen schönen 1. Advent
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von udo1toni »

Ja, auf direktem Weg geht das nicht. Du kannst aber durchaus beim Ändern der Eingabewerte eine Rule triggern lassen, welche dann errechnet, wann die eigentliche Rule los laufen muss und dementsprechend einen Timer startet, der die eigentliche Arbeit erledigt.

Timer kannst Du nur in *.rules Dateien verwenden ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

udo1toni hat geschrieben: 28. Nov 2021 16:03 Du kannst aber durchaus beim Ändern der Eingabewerte eine Rule triggern lassen, welche dann errechnet, wann die eigentliche Rule los laufen muss und dementsprechend einen Timer startet, der die eigentliche Arbeit erledigt.
Was wäre denn "systemschonender"? Ein Rule, welche 4 Std. lang alle 5 Min triggert und dennoch nur 1x komplett durchlaufen wird, oder 1 Timer welcher ca. 3-4 Std abläuft um dann eine Aktion zu starten?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von udo1toni »

Letzteres :)
Der Timer wird im Scheduler eingetragen, der sich anschließend darum kümmert, dass der Code zum korrekten Zeitpunkt ausgeführt wird.

Der Code kann halt nur über eine echte Rule erstellt werden, weil man, um die Kontrolle über den Timer zu behalten, einen Handle für den Timer erstellen muss, der ruleübergreifend (also global) definiert werden muss.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

udo1toni hat geschrieben: 30. Nov 2021 11:40 Letzteres :)
OK, brauchte ein paar Minuten darüber zu grübeln. Wäre diese Rule smarter für das System?

Code: Alles auswählen

var Timer tChargeNow = null
var Timer tChargeCurrent = null

rule "Charge E-Car Test"
when
    Time cron "0 05 00 ? * * *"
then
	if((ChargeCar.state != ON) || (evcc_charging.state == "true"))	// wenn soll nicht, oder wird bereits geladen => exit
    	return;
    // Anzahl kW bis targetSoC
    var vWarp = ((evcc_targetSoC.state as Number).intValue - (evcc_vehicleSoC.state as Number).intValue)
    // benötigten kW mit 10A
    // var vPower = ((vWarp * 0.373) - 2.415).floatValue
    var vPower = ((vWarp * 0.373) - 4.140).floatValue
    // Gesamtdauer der Ladung
    var vDuration = ((vPower / 0.115) + 45).intValue

    // Berechnung der Startzeit, basierend auf Endzeitpunkt aus der Sitemap
    val vChargeEnd = LocalTime.MIDNIGHT.withHour((EVChargeEndHour.state as Number).intValue).withMinute((EVChargeEndMinutes.state as Number).intValue).withSecond(0)
    val vChargeStart = vChargeEnd.with(vChargeEnd).minusMinutes((vDuration as Number).intValue)

    tChargeNow?.cancel
    tChargeNow = createTimer(now.plusMinutes(Duration.between(LocalTime.now, vChargeStart).toMinutes()),[|
        tChargeCurrent?.cancel
        // setzte initiale Stromstärke
        evcc_maxCurrent.sendCommand(6)
        // starte Ladung
        evcc_mode.sendCommand("now")
        tChargeCurrent = createTimer(now.plusMinutes(15),[|
            if(evcc_maxCurrent.state < 12) {
                evcc_maxCurrent.sendCommand((evcc_maxCurrent.state as Number).intValue + 2)
                tChargeCurrent.reschedule(now.plusMinutes(15))
            }
        ])

    ])
end
Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von int5749 »

Kurzes Update: Diese Rule scheint wie gewünscht zu laufen :) Wir laden meist nur 1x pro Woche und somit von So. auf Mo. 8-)

Zielzeit für 12% auf 85% SoC war 6:45. Gestartet wurde der Ladevorgang um 2:39 und um 6:27 hat EVCC (Electro Vehicle Charge Controller) den Vollzug gemeldet. Ich denke ein paar Minuten Differenz sind OK, auch wenn ich schon etwas weniger erwartet hätte.


Viele Grüße,
INT5749
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Startzeit für Wallbox als Rule Trigger

Beitrag von udo1toni »

Ja, da müsste man die Formeln im Detail noch mal anschauen. Und die Frage ist, wie genau die Regelung überhaupt funktioniert.

Ein paar Dinge sind mir da in Deiner Rule unklar...

Punkt 1: Du berechnest den Startzeitpunkt vChargeStart. Das sollte eigentlich der Zeitpunkt sein, zu dem der erste Timer tChargeNow auslöst. Statt aber einfach

Code: Alles auswählen

tChargeNow = createTimer(vChargeStart,[| ...])
rechnest Du die Differenz zu now aus, das sollte unnötig sein.

Punkt 2: Du benutzt da verschiedene Konstanten (0.373, 4.140, 0.115) Woraus ergeben die sich?

Bei den 45 Minuten habe ich folgende Idee: Wenn ich es richtig verstehe, nutzt Du den Timer tChargeCurrent, um während des Ladevorgangs den maximalen Ladestrom viertelstündlich anzuheben, bis der maximale Strom 12 (Ampere) beträgt. Das ist dann nach 45 Minuten der Fall. Der tatsächliche Ladestrom dürfte aber immer etwas von der Vorgabe abweichen, ob nun nach unten oder nach oben.
Hast Du eine Möglichkeit, den tatsächlichen Ladestrom an der Steckdose zu messen? das könnte evtl. helfen, die angenommenen Werte etwas zu korrigieren.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten