Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
-
- Beiträge: 2
- Registriert: 24. Aug 2020 11:48
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
So wie die aktuelle Version verstehe, ist das Ziel die Verschattung im Frühling und Sommer. Im Herbst und Winter greifen die Regeln nicht, korrekt?
Im Herbst/Winter sollte es darum gehen den Wärmeverlust zu minimieren. Daher würde ich meine Dachfensterrolläden nachts runterfahren bzw. wenn niemand zu Hause ist. So der Plan.
Bin leider noch nicht einmal dazu gekommen die aktuelle Verschattungsautomatik auf mein System zu übertragen, aber der Winter ist ja noch etwas hin.
Im Herbst/Winter sollte es darum gehen den Wärmeverlust zu minimieren. Daher würde ich meine Dachfensterrolläden nachts runterfahren bzw. wenn niemand zu Hause ist. So der Plan.
Bin leider noch nicht einmal dazu gekommen die aktuelle Verschattungsautomatik auf mein System zu übertragen, aber der Winter ist ja noch etwas hin.
-
- Beiträge: 34
- Registriert: 23. Jul 2020 15:01
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
hat schon jemand auf OH3 umgestellt und bekommt den selben Fehler?
Vermutlich zielt es auf folgenden Code:
Code: Alles auswählen
2021-03-29 16:01:34.927 [WARN ] [b.core.model.script.actions.BusEvent] - Cannot convert '2021-03-28T16:01:34.922715+02:00[Europe/Berlin]' to a state type which item 'AutoShading_Start_last' accepts: [DateTimeType, UnDefType].
2021-03-29 16:01:34.938 [INFO ] [org.openhab.core.model.script.rules ] - Verschattung aktivieren - Verschattung für Rollläden WEST
2021-03-29 16:01:34.946 [INFO ] [org.openhab.core.model.script.rules ] - Verschattung aktivieren - Grenzwert wurden erreicht, Rollladen werden geschlossen
2021-03-29 16:01:34.948 [INFO ] [org.openhab.core.model.script.rules ] - Verschattung aktivieren - Fahre Rollladen (EG_Jalousie_Essen_Tuere_West) auf (100) %
2021-03-29 16:01:34.951 [INFO ] [org.openhab.core.model.script.rules ] - Verschattung aktivieren - Rollladen ist bereits weiter geschlossen (75%) als er geschlossen werden sollte und wird daher ignoriert
2021-03-29 16:01:34.952 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'shutter-1' failed: cannot invoke method public abstract int java.lang.Number.intValue() on null in shutter
Code: Alles auswählen
AutoShading_Start_last.postUpdate(now.toString()
oder
AutoShading_Start_last.postUpdate(now.minusDays(1).toString()
-
- Beiträge: 1161
- Registriert: 4. Nov 2019 22:08
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Bei den Zeilen ist eine ( zu viel am Ende?HansDampf hat geschrieben: ↑30. Mär 2021 15:48
Vermutlich zielt es auf folgenden Code:
Code: Alles auswählen
AutoShading_Start_last.postUpdate(now.toString() oder AutoShading_Start_last.postUpdate(now.minusDays(1).toString()
Ist dies ein Copy/Paste Fehler??
Code: Alles auswählen
AutoShading_Start_last.postUpdate(now.toString)
oder
AutoShading_Start_last.postUpdate(now.minusDays(1).toString)
Ansonsten behandelt OH3 die Zeit anders (dazu gibt es hier einige threats), da müssten ggfs einige Rules umgestellt werden.
Viele Grüße
Zuletzt geändert von int5749 am 30. Mär 2021 16:06, insgesamt 1-mal geändert.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
-
- Beiträge: 34
- Registriert: 23. Jul 2020 15:01
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Ja, ist ein c&p Fehler. Ok, dann werde ich da mal schauen. Es wäre dann sinnvoll ein Update der Rule einzustellen.int5749 hat geschrieben: ↑30. Mär 2021 16:03Bei den Zeilen fehlt ein ) am Ende?HansDampf hat geschrieben: ↑30. Mär 2021 15:48
Vermutlich zielt es auf folgenden Code:
Code: Alles auswählen
AutoShading_Start_last.postUpdate(now.toString() oder AutoShading_Start_last.postUpdate(now.minusDays(1).toString()
Ist dies ein Copy/Paste Fehler??
Ansonsten behandelt OH3 die Zeit anders (dazu gibt es hier einige threats), da müssten ggfs einige Rules umgestellt werden.
Viele Grüße
-
- Beiträge: 1161
- Registriert: 4. Nov 2019 22:08
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Klingt gut. Evtl. postest Du dann Dein Ergebnis?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
-
- Beiträge: 34
- Registriert: 23. Jul 2020 15:01
-
- Beiträge: 2
- Registriert: 20. Feb 2021 14:00
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Ich hab auch schon geupdated und hatte das selbe Problem.HansDampf hat geschrieben: ↑30. Mär 2021 15:48 hat schon jemand auf OH3 umgestellt und bekommt den selben Fehler?
Vermutlich zielt es auf folgenden Code:
Code: Alles auswählen
AutoShading_Start_last.postUpdate(now.toString() oder AutoShading_Start_last.postUpdate(now.minusDays(1).toString()
Ich hab es auf folgende Variante umgestellt und es funktioniert:
Code: Alles auswählen
AutoShading_End_last.postUpdate(new DateTimeType())
Code: Alles auswählen
AutoShading_Start_last.postUpdate(new DateTimeType(now.minusDays(1)))
-
- Beiträge: 62
- Registriert: 30. Mär 2019 00:24
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Kannst DU evtl. mal deine ganze Rule zur Verfügung stellen?
Trotz der Änderungen habe ich das Problem, dass die Rule nach 5 min wieder startet, ich eine Pushnachricht bekomme und wieder ein Kommand an meine Rolladen geschickt wird obwohl die Rule schon einmal gelaufen ist. Ich vermute, dass es immer noch an meinem Datetime item liegt. In OH 2 hat lief die Rule ohne Probleme.
Hier mal meine Komplette Rule:
Trotz der Änderungen habe ich das Problem, dass die Rule nach 5 min wieder startet, ich eine Pushnachricht bekomme und wieder ein Kommand an meine Rolladen geschickt wird obwohl die Rule schon einmal gelaufen ist. Ich vermute, dass es immer noch an meinem Datetime item liegt. In OH 2 hat lief die Rule ohne Probleme.
Hier mal meine Komplette Rule:
Code: Alles auswählen
var boolean log = true
rule "Rollos Süd abfahren"
when Item LokaleSonnendaten_Azimut changed
then
val String logPrefix = 'Rolloautomatik (Rollo Süd ab) - '
if (log) logInfo('rules', logPrefix + 'Regel wurde gestartet')
var String timeLast = 'xxxx-xx-xx'
if (RolloAutomatikSuedStartLast.state == NULL) {
if (log) logInfo('rules', logPrefix + 'Erstmalige Ausführung am System, Belegung mit Initialwert')
} else {
timeLast = RolloAutomatikSuedStartLast.state.toString().substring(0,10)
}
var String timeNow = now.toString().substring(0,10)
if (RolloautomatikSued.state == ON) {
if (timeNow != timeLast) {
//if (LokaleSonnendaten_Azimut.state > Integer::parseInt(RolloAutomatikSuedAzimuthStart.state.toString()))
if ((LokaleSonnendaten_Azimut.state as Number).floatValue > (RolloAutomatikSuedAzimuthStart.state as Number))
{
//if (XiaomiHumidityPressureGarten_Temperature.state > Integer::parseInt(RolloAutomatikSuedTempMin.state.toString()))
if ((XiaomiHumidityPressureGarten_Temperature.state as Number).floatValue > (RolloAutomatikSuedTempMin.state as Number))
{
//if (Localweatherandforecast_Bewolkung.state <= Integer::parseInt(RolloAutomatikSuedWolkenMax.state.toString()))
if ((Localweatherandforecast_Bewolkung.state as Number).floatValue <= (RolloAutomatikSuedWolkenMax.state as Number))
{
//if (LokaleSonnendaten_Position_Elevation.state > Integer::parseInt(RolloAutomatikSuedElevationEnde.state.toString()))
if ((LokaleSonnendaten_Position_Elevation.state as Number).floatValue > (RolloAutomatikSuedElevationEnde.state as Number))
{
// Rollos runterfahren
if (log) logInfo('rules', logPrefix + 'Rollos werden abgefahren')
RollosSued.members.forEach[i|
if (i.state <= Integer::parseInt(RolloAutomatikZielwert.state.toString())) {
if (log) logInfo('rules', logPrefix + 'Fahre Rolladen auf ' + RolloAutomatikZielwert.state.toString() + '%: ' + i.name)
i.sendCommand(Integer::parseInt(RolloAutomatikZielwert.state.toString()))
} else {
if (log) logInfo('rules', logPrefix + 'Rolladen ist bereits weiter geschlossen (' + i.state.toString() + '%) als er geschlossen werden sollte und wird daher ignoriert')
}
]
// Letzte Ausführung mit entsprechendem Zeitstempel belegen
sendBroadcastNotification("Verschattung Südseite aktiv") //Pushnachricht
RolloAutomatikSuedStartLast.postUpdate(new DateTimeType(now.minusDays(1)))
} else {
if (log) logInfo('rules', logPrefix + 'Elevation für wieder abfahren (' + RolloAutomatikSuedElevationEnde.state.toString() + ') ist groesser als aktuelle (' + LokaleSonnendaten_Position_Elevation.state.toString() + ')')
}
} else {
if (log) logInfo('rules', logPrefix + 'Mindestbewoelkung (' + RolloAutomatikSuedWolkenMax.state.toString() + ') wurde unterschritten (' + Localweatherandforecast_Bewolkung.state.toString() + ')')
}
} else {
if (log) logInfo('rules', logPrefix + 'Mindest-Temperatur (' + RolloAutomatikSuedTempMin.state.toString() + ') wurde nicht erreicht durch aktuelle Temperatur (' + XiaomiHumidityPressureGarten_Temperature.state.toString() + ')')
}
} else {
if (log) logInfo('rules', logPrefix + 'Azimuth (' + LokaleSonnendaten_Azimut.state.toString() + ') hat noch nicht Schwellwert (rolloautomatik_azimuth_start.state.toString()) erreicht')
}
} else {
if (log) logInfo('rules', logPrefix + 'Automatik heute bereits einmal gelaufen, wird daher ignoriert')
}
} else {
if (log) logInfo('rules', logPrefix + 'Beende, da Automatik generell nicht aktiv')
}
end
rule "Rollo Süd wieder öffnen"
when Item LokaleSonnendaten_Position_Elevation changed
then
val String logPrefix = 'Rolloautomatik (Rollo Süd hoch) - '
if (log) logInfo('rules', logPrefix + 'Regel wurde gestartet')
var String timeLastEnde = 'xxxx-xx-xx'
if (RolloAutomatikSuedEndeLast.state == NULL) {
if (log) logInfo('rules', logPrefix + 'Erstmalige Ausführung am System, Belegung mit Initialwert')
} else {
timeLastEnde = RolloAutomatikSuedEndeLast.state.toString().substring(0,10)
}
var String timeLastStart = 'yyyy-yy-yy'
if (RolloAutomatikSuedStartLast.state == NULL) {
if (log) logInfo('rules', logPrefix + 'Erstmalige Ausführung am System, Belegung mit Initialwert')
} else {
timeLastStart = RolloAutomatikSuedStartLast.state.toString().substring(0,10)
}
var String timeNow = now.toString().substring(0,10)
if (RolloAutomatikSuedOeffnen.state == ON) {
//if (LokaleSonnendaten_Position_Elevation.state <= Integer::parseInt(RolloAutomatikSuedElevationEnde.state.toString()))
if ((LokaleSonnendaten_Position_Elevation.state as Number).floatValue <= (RolloAutomatikSuedElevationEnde.state as Number))
{
if (timeLastStart == timeNow) {
if (timeLastEnde != timeNow) {
// Rollos wieder hoch
if (log) logInfo('rules', logPrefix + 'Rollos werden hinaufgefahren')
RollosSued.members.forEach[i|
if((RolloAutomatikZielwert.state as Number).intValue <= (i.state as Number).intValue +5 && (RolloAutomatikZielwert.state as Number).intValue >= (i.state as Number).intValue -5) {
if (log) logInfo('rules', logPrefix + 'Fahre Rolladen auf 0%: ' + i.name)
i.sendCommand(0)
} else {
if (log) logInfo('rules', logPrefix + 'Fahre Rolladen nicht auf 0%, da dieser zwischenzeitlich manuell verändert wurde: ' + i.name)
}
]
// Letzte Ausführung mit entsprechendem Zeitstempel belegen
sendBroadcastNotification("Verschattung Südseite beendet") //Pushnachricht
RolloAutomatikSuedEndeLast.postUpdate(new DateTimeType())
} else {
if (log) logInfo('rules', logPrefix + 'Beende, da heute bereits ein automatisches Wiederhochfahren stattfand')
}
} else {
if (log) logInfo('rules', logPrefix + 'Beende, da heute noch keine Ausführung stattfand. Demzufolge kann auch kein automatisches Öffnen gewollt sein')
}
} else {
if (log) logInfo('rules', logPrefix + 'Beende, da Elevation (' + LokaleSonnendaten_Position_Elevation.state.toString() + ') nicht kleiner der eingestellten Elevation (' + RolloAutomatikSuedElevationEnde.state.toString()+ ') war')
}
} else {
if (log) logInfo('rules', logPrefix + 'Beende, da Automatik generell nicht aktiv')
}
end
- udo1toni
- Beiträge: 13864
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Den letzten Satz kann ich so nicht glauben.winni hat geschrieben: ↑10. Apr 2021 23:14 Kannst DU evtl. mal deine ganze Rule zur Verfügung stellen?
Trotz der Änderungen habe ich das Problem, dass die Rule nach 5 min wieder startet, ich eine Pushnachricht bekomme und wieder ein Kommand an meine Rolladen geschickt wird obwohl die Rule schon einmal gelaufen ist. Ich vermute, dass es immer noch an meinem Datetime item liegt. In OH 2 hat lief die Rule ohne Probleme.
Dein Problem ist, dass Du in der letzten Zeile den Datumsstempel auf den Vortag setzt (minusDays(1)) womit dann die Abbruchbedingung nicht mehr wirken kann.
Insgesamt schreit diese Rule nach Codeumstellungen. Statt
Code: Alles auswählen
if(bla) {
// do something
} else {
// do nothing but a log
}
Code: Alles auswählen
if(!bla) {
// do nothing but a log
return;
}
// do something
Code: Alles auswählen
if (RolloautomatikSued.state == ON) {
[...]
} else {
if (log) logInfo('rules', logPrefix + 'Beende, da Automatik generell nicht aktiv')
}
Code: Alles auswählen
if (RolloautomatikSued.state != ON) {
if (log) logInfo('rules', logPrefix + 'Beende, da Automatik generell nicht aktiv')
return;
}
[...]
Weiterhin weise ich immer wieder gerne darauf hin, dass das Konstrukt if(log) logInfo() kompletter Bullshit ist.
Der in openHAB integrierte Logger ist extrem mächtig. Man kann mit Leichtigkeit die Ausgabe der Logmeldungen im laufenden Betrieb(!) ein- und ausschalten - im Gegensatz zum Konstrukt mit der globalen boolean Variable, die nur mit Umwegen im laufenden Betrieb verändert werden kann
(indem man sie per Rule umschaltet)
Im Gegensatz zur globalen Variable ist es auch kein Problem, gezielt nur bestimmte Logmeldungen zu (de-)aktivieren.
Es gibt zum einen verschiedene Log Level (Debug, Info, Warn, Error, gelistet in ansteigender Reihenfolge der Wichtigkeit), zum anderen gibt es beliebig viele Logger. Dabei hat jeder Logger einen Namen, der in den Logbefehlen (z.B. logInfo()) als erster String angegeben werden muss. Statt dort also ein nichtssagendes rules hin zu schreiben, wäre es sinnvoller, einen kurzen Namen zu setzen und diesen innerhalb der Rule (oder der Gruppe von Rules) beizubehalten, im vorliegenden Fall z.B. autoShutter. Alle Logbefehle in der Rules DSL sind hierarchisch unterhalb des Loggers org.openhab.core.automation.module.script. angesiedelt, der vollständige Loggername wäre in diesem Fall also org.openhab.core.automation.module.script.autoShutter. Mit diesem Namen lässt sich das Logging dann gezielt ein- und ausschalten.
Die Logbefehle beherrschen Substitution, das heißt, sie können einen entsprechend vorbereiteten String mit Variablen ergänzen. Statt
Code: Alles auswählen
logInfo('rules', logPrefix + 'Azimuth (' + LokaleSonnendaten_Azimut.state.toString() + ') hat noch nicht Schwellwert (' + rolloautomatik_azimuth_start.state.toString() + ') erreicht')
Code: Alles auswählen
logInfo('rules', logPrefix + 'Azimuth ({}) hat noch nicht Schwellwert ({}) erreicht', LokaleSonnendaten_Azimut.state,rolloautomatik_azimuth_start.state)
Du hast an verschiedenen Stellen absurde Konstrukte in Deiner Rule, Integer::parseInt(RolloAutomatikZielwert.state.toString()) Ernsthaft? Du wandelst einen Status eines Number Items in einen String, um ihn anschließend nach Integer parsen zu lassen?
Weiterhin werden immer beide Rules zeitgleich ausgeführt, obwohl sie unterschiedliche Trigger verwenden. Da gäbe es sicher noch Verbesserungspotential. Die Idee, einen Datumsstempel zu verwenden, um zu entscheiden, ob die Rule bereits gelaufen ist, ist ok, ich vermute mal, Du stellst diese Information in der UI dar? Ansonsten wäre ein einfacherer Ansatz, eine globale Boolean Variable dafür zu nutzen. Diese wird dann um Mitternacht auf false gesetzt und bei Verschattung bzw. bei Aufhebung der Verschattung auf true . Damit sparst Du Dir eine Menge Codebalast. Einen Datumsstempel kannst Du dennoch verwenden, dann halt nur für die Anzeige.
Hier mal Deine Rules mit eingearbeiteten Änderungen (nicht getestet)
Code: Alles auswählen
var Boolean bShadeStart = false
var Boolean bShadeEnd = false
rule "reset some vars"
when
Time is midnight
then
bShadeStart = false
bShadeEnd = false
end
rule "Rollos Süd abfahren"
when
Item LokaleSonnendaten_Azimut changed
then
logDebug('autoShutter', 'Regel (Rollo Süd runter) wurde gestartet')
if(RolloautomatikSued.state != ON) {
logDebug('autoShutter', 'Beende, da Automatik generell nicht aktiv')
return;
}
if(bShadeStart) {
logDebug('autoShutter', 'Automatik heute bereits einmal gelaufen, wird daher ignoriert')
return;
}
if((LokaleSonnendaten_Azimut.state as Number).floatValue < (RolloAutomatikSuedAzimuthStart.state as Number)) {
logDebug('autoShutter', 'Azimuth ({}) hat noch nicht Schwellwert ({}) erreicht',LokaleSonnendaten_Azimut.state,RolloAutomatikSuedAzimuthStart.state)
return;
}
if((XiaomiHumidityPressureGarten_Temperature.state as Number).floatValue < (RolloAutomatikSuedTempMin.state as Number)) {
logDebug('autoShutter', 'Mindest-Temperatur ({}) wurde nicht erreicht durch aktuelle Temperatur ({})',RolloAutomatikSuedTempMin.state,XiaomiHumidityPressureGarten_Temperature.state)
return;
}
if((Localweatherandforecast_Bewolkung.state as Number).floatValue > (RolloAutomatikSuedWolkenMax.state as Number)) {
logDebug('autoShutter', 'Maximalbewölkung ({}) wurde überschritten ({})',RolloAutomatikSuedWolkenMax.state,Localweatherandforecast_Bewolkung.state)
return;
}
if((LokaleSonnendaten_Position_Elevation.state as Number).floatValue < (RolloAutomatikSuedElevationEnde.state as Number)) {
logDebug('autoShutter', 'Elevation für wieder abfahren ({}) ist groesser als aktuelle ({})',RolloAutomatikSuedElevationEnde.state,LokaleSonnendaten_Position_Elevation.state)
return;
}
// Rollos runterfahren
logDebug('autoShutter', 'Rollos werden abgefahren')
val nZiel = RolloAutomatikZielwert.state as Number
RollosSued.members.forEach[i|
if(i.state <= nZiel) {
logDebug('autoShutter', 'Fahre Rolladen {} auf {}%'i.name,nZiel)
i.sendCommand(nZiel)
} else {
logDebug('autoShutter', 'Rolladen ist bereits weiter geschlossen ({}%) als er geschlossen werden sollte und wird daher ignoriert',i.state)
}
]
// Letzte Ausführung mit entsprechendem Zeitstempel belegen
sendBroadcastNotification("Verschattung Südseite aktiv") //Pushnachricht
bShadeStart = true
RolloAutomatikSuedStartLast.postUpdate(new DateTimeType(now))
end
rule "Rollo Süd wieder öffnen"
when
Item LokaleSonnendaten_Position_Elevation changed
then
val String logPrefix = 'Rolloautomatik - '
logDebug('autoShutter', 'Regel (Rollo Süd hoch) wurde gestartet')
if(RolloAutomatikSuedOeffnen.state != ON) {
logDebug('autoShutter', 'Beende, da Automatik generell nicht aktiv')
return;
}
if((LokaleSonnendaten_Position_Elevation.state as Number).floatValue > (RolloAutomatikSuedElevationEnde.state as Number)) {
logDebug('autoShutter', 'Beende, da Elevation ({}) nicht kleiner der eingestellten Elevation ({}) war',LokaleSonnendaten_Position_Elevation.state,RolloAutomatikSuedElevationEnde.state)
return;
}
if(!bShadeStart) {
logDebug('autoShutter', 'Beende, da heute noch keine Ausführung stattfand. Demzufolge kann auch kein automatisches Öffnen gewollt sein')
return;
}
if(bShadeEnd) {
logDebug('autoShutter', 'Beende, da heute bereits ein automatisches Wiederhochfahren stattfand')
return;
}
// Rollos wieder hoch
logDebug('autoShutter', 'Rollos werden hinaufgefahren')
val nZiel = RolloAutomatikZielwert.state as Number
RollosSued.members.forEach[i|
if(nZiel <= (i.state as Number) +5 && nZiel >= (i.state as Number) -5) {
logDebug('autoShutter', 'Fahre Rolladen {} auf 0%',i.name)
i.sendCommand(0)
} else {
logDebug('autoShutter', 'Fahre Rolladen {} nicht auf 0%, da dieser zwischenzeitlich manuell verändert wurde.',i.name)
}
]
// Letzte Ausführung mit entsprechendem Zeitstempel belegen
sendBroadcastNotification("Verschattung Südseite beendet") //Pushnachricht
RolloAutomatikSuedEndeLast.postUpdate(new DateTimeType())
bShadeEnd = true
end
Code: Alles auswählen
openhab-cli console
Anschließend kannst Du mit
Code: Alles auswählen
log:set DEBUG org.openhab.core.automation.mudule.script.autoShutter
Code: Alles auswählen
log:set INFO org.openhab.core.automation.mudule.script.autoShutter
EDIT: Fehlende Klammern im Code ergänzt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 62
- Registriert: 30. Mär 2019 00:24
Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Hallo Udo,
vielen Dank für Deine umfangreiche Antwort. Mit dem (minusDays(1)) war natürlich völliger Blödsinn. Ich habe Deine Rule ausprobiert und vlc gibt mir die folgenden Fehler:
Leider bekomme ich diese Fehler nicht selber korrigiert.
"IsMidnight" konnte ich selber korrigieren in "Time is midnight".
Es wäre super, wenn Du mir hierbei nochmal helfen kannst.
vielen Dank für Deine umfangreiche Antwort. Mit dem (minusDays(1)) war natürlich völliger Blödsinn. Ich habe Deine Rule ausprobiert und vlc gibt mir die folgenden Fehler:
Code: Alles auswählen
"mismatched input '}' expecting 'end'",[29,5]
"mismatched input '}' expecting 'end'",[73,5]
The value of the local variable logPrefix is not used",[63,16]
"IsMidnight" konnte ich selber korrigieren in "Time is midnight".
Es wäre super, wenn Du mir hierbei nochmal helfen kannst.