OH4 Upgrade Min-/Max Temperatur Rule verursacht 100% Kernauslastung
Verfasst: 22. Okt 2023 17:33
Hallo,
ich habe dieses WE von OH3.x auf OH4.0.3 upgedatet - bisher konnte ich ein paar Kleinigkeiten alleine beheben, allerdings beiße ich mir noch an einer Rule die Zähne aus.
Diese Rule liest ein Item aus meiner InfluxDB aus und schreibt die daraus generierten differenzierten Zeitwerte in Dummy Items welche ich dann in meiner Sitemap darstelle:
Dummy Items:
Temperatur Item:
Diese Rule hat unter OH3 problemlos funktioniert - unter OH bleibt die Rule jetzt scheinbar hängen und produziert dauerhaft 100% Last auf einem Core ohne irgendwelche Dummy Items zu füllen...
Ich kann dies nur durch deaktivieren der Rule beheben - nach Deaktivierung dauert es teilweise 1 Minute bis folgender Fehler ausgeworfen wird und die 100% Last wieder abgeworfen wird:
wahrscheinlich gab es mit dem Switch von Java11 zu Java17 wieder irgendwelche Java DateTime änderungen, ich komme aber nicht dahinter ^^
wenn jemand einen Tip hat in welche Richtung ich schauen muss, gerne her damit
ich habe dieses WE von OH3.x auf OH4.0.3 upgedatet - bisher konnte ich ein paar Kleinigkeiten alleine beheben, allerdings beiße ich mir noch an einer Rule die Zähne aus.
Diese Rule liest ein Item aus meiner InfluxDB aus und schreibt die daraus generierten differenzierten Zeitwerte in Dummy Items welche ich dann in meiner Sitemap darstelle:
Code: Alles auswählen
//#####################################
rule "Aussentemp min-/max"
when
Item Sensor_Aussen_Temperatur changed or
Time cron "0 0/5 * 1/1 * ? *"
then
if (!(Sensor_Aussen_Temperatur.state instanceof Number)) return;
val aussen_temp_heute_min = (Sensor_Aussen_Temperatur.minimumSince(now.with(LocalTime.of(0,0,0,0)), "influxdb").state as Number)
val aussen_temp_heute_max = (Sensor_Aussen_Temperatur.maximumSince(now.with(LocalTime.of(0,0,0,0)), "influxdb").state as Number)
val aussen_temp_1W_min = (Sensor_Aussen_Temperatur.minimumSince(now.minusWeeks(1), "influxdb").state as Number)
val aussen_temp_1W_max = (Sensor_Aussen_Temperatur.maximumSince(now.minusWeeks(1), "influxdb").state as Number)
val aussen_temp_1M_min = (Sensor_Aussen_Temperatur.minimumSince(now.minusMonths(1), "influxdb").state as Number)
val aussen_temp_1M_max = (Sensor_Aussen_Temperatur.maximumSince(now.minusMonths(1), "influxdb").state as Number)
val aussen_temp_6M_min = (Sensor_Aussen_Temperatur.minimumSince(now.minusMonths(6), "influxdb").state as Number)
val aussen_temp_6M_max = (Sensor_Aussen_Temperatur.maximumSince(now.minusMonths(6), "influxdb").state as Number)
val aussen_temp_1Y_min = (Sensor_Aussen_Temperatur.minimumSince(now.minusYears(1), "influxdb").state as Number)
val aussen_temp_1Y_max = (Sensor_Aussen_Temperatur.maximumSince(now.minusYears(1), "influxdb").state as Number)
if (aussen_temp_heute_min != NULL && aussen_temp_heute_max != NULL) {
Sensor_Aussen_Temp_heute_min.postUpdate(aussen_temp_heute_min)
Sensor_Aussen_Temp_heute_max.postUpdate(aussen_temp_heute_max)
}
if (aussen_temp_1W_min != NULL && aussen_temp_1W_max != NULL) {
Sensor_Aussen_Temp_1W_min.postUpdate(aussen_temp_1W_min)
Sensor_Aussen_Temp_1W_max.postUpdate(aussen_temp_1W_max)
}
if (aussen_temp_1M_min != NULL && aussen_temp_1M_max != NULL) {
Sensor_Aussen_Temp_1M_min.postUpdate(aussen_temp_1M_min)
Sensor_Aussen_Temp_1M_max.postUpdate(aussen_temp_1M_max)
}
if (aussen_temp_6M_min != NULL && aussen_temp_6M_max != NULL) {
Sensor_Aussen_Temp_6M_min.postUpdate(aussen_temp_6M_min)
Sensor_Aussen_Temp_6M_max.postUpdate(aussen_temp_6M_max)
}
if (aussen_temp_1Y_min != NULL && aussen_temp_1Y_max != NULL) {
Sensor_Aussen_Temp_1Y_min.postUpdate(aussen_temp_1Y_min)
Sensor_Aussen_Temp_1Y_max.postUpdate(aussen_temp_1Y_max)
}
end
Code: Alles auswählen
Number:Temperature Sensor_Aussen_Temp_heute_min <temperature_cold> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_heute_max <temperature_hot> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_1W_min <temperature_cold> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_1W_max <temperature_hot> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_1M_min <temperature_cold> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_1M_max <temperature_hot> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_6M_min <temperature_cold> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_6M_max <temperature_hot> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_1Y_min <temperature_cold> {unit="°C"}
Number:Temperature Sensor_Aussen_Temp_1Y_max <temperature_hot> {unit="°C"}
Code: Alles auswählen
Number:Temperature Sensor_Aussen_Temperatur "Sensor Aussen Temperatur" <temperature> (gAussen,gInfluxDB,gRRD4J,gChartTemperatur) {channel="mqtt:topic:sensor_temp_aussen:temperature", unit="°C"}
Ich kann dies nur durch deaktivieren der Rule beheben - nach Deaktivierung dauert es teilweise 1 Minute bis folgender Fehler ausgeworfen wird und die 100% Last wieder abgeworfen wird:
Code: Alles auswählen
2023-10-22 16:13:22.409 [WARN ] [rnal.influx1.InfluxDB1RepositoryImpl] - Failed to execute query 'FilterCriteria [itemName=Sensor_Aussen_Temperatur, beginDate=null, endDate=2023-04-22T16:12:23.250613897+02:00[Europe/Berlin], pageNumber=0, pageSize=1, operator=EQ, ordering=DESCENDING, state=null]': java.io.InterruptedIOException: interrupted
2023-10-22 16:13:23.001 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'min_max_temp-1' failed: An error occurred during the script execution: Cannot invoke "org.eclipse.emf.ecore.resource.Resource.getResourceSet()" because "context" is null in min_max_temp
wenn jemand einen Tip hat in welche Richtung ich schauen muss, gerne her damit
