ich bin grad fast am durchdrehen.
Ich habe festgestellt, dass manche JS-Rules doch noch nciht so recht laufen.
Also gut, rein und eben um "runtime" in den Aufrufen der OH-spezifischen Sachen ergänzt. Nun Gehen fast alle Rules, bis auf eine von anfang an nicht und eine mag jetzt nach Neustart auf einmal nicht mehr. Diese Rules sind alle identisch aufgebaut, bis auf eben die items die sie verarbeiten (4x die gleiche Verarbeitung von Temperatur und Feuchtigkeit).
Die Rule die von Anfang an den Fehler produziert hat habe ich auch schonmal komplett neu angelegt => ohne Erfolg.
Vielleicht bin ich Betriebsblind und übersehe etwas ganz einfaches, aber ich komme nicht drauf. Da die Fehlermeldung keine (für mich) nützlichen Infos, Zeile o.ä. auswirft, komme ich keinen Schritt weiter.
Hier die Fehlermeldung:
Code: Alles auswählen
2024-02-10 18:59:42.163 [ERROR] [b.automation.script.javascript.stack] - Failed to execute script:
org.graalvm.polyglot.PolyglotException: TypeError: undefined has no such function "getItem"
at <js>.:program(<eval>:21) ~[?:?]
at org.graalvm.polyglot.Context.eval(Context.java:399) ~[?:?]
at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:458) ~[?:?]
at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:426) ~[?:?]
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262) ~[java.scripting:?]
at org.openhab.automation.jsscripting.internal.scriptengine.DelegatingScriptEngineWithInvocableAndAutocloseable.eval(DelegatingScriptEngineWithInvocableAndAutocloseable.java:53) ~[?:?]
at org.openhab.automation.jsscripting.internal.scriptengine.InvocationInterceptingScriptEngineWithInvocableAndAutoCloseable.eval(InvocationInterceptingScriptEngineWithInvocableAndAutoCloseable.java:78) ~[?:?]
at org.openhab.automation.jsscripting.internal.scriptengine.DelegatingScriptEngineWithInvocableAndAutocloseable.eval(DelegatingScriptEngineWithInvocableAndAutocloseable.java:53) ~[?:?]
at org.openhab.automation.jsscripting.internal.scriptengine.InvocationInterceptingScriptEngineWithInvocableAndAutoCloseable.eval(InvocationInterceptingScriptEngineWithInvocableAndAutoCloseable.java:78) ~[?:?]
at org.openhab.core.automation.module.script.internal.handler.ScriptActionHandler.lambda$0(ScriptActionHandler.java:71) ~[?:?]
at java.util.Optional.ifPresent(Optional.java:178) ~[?:?]
at org.openhab.core.automation.module.script.internal.handler.ScriptActionHandler.execute(ScriptActionHandler.java:68) ~[?:?]
at org.openhab.core.automation.internal.RuleEngineImpl.executeActions(RuleEngineImpl.java:1188) ~[?:?]
at org.openhab.core.automation.internal.RuleEngineImpl.runNow(RuleEngineImpl.java:1039) ~[?:?]
at org.openhab.core.automation.rest.internal.RuleResource.runNow(RuleResource.java:381) ~[?:?]
at org.openhab.core.automation.rest.internal.RuleResource.runNow(RuleResource.java:398) ~[?:?]
at jdk.internal.reflect.GeneratedMethodAccessor51.invoke(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) ~[bundleFile:3.6.2]
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) ~[bundleFile:3.6.2]
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:201) ~[bundleFile:3.6.2]
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:104) ~[bundleFile:3.6.2]
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) ~[bundleFile:3.6.2]
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) ~[bundleFile:3.6.2]
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:265) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:225) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:304) ~[bundleFile:3.6.2]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:217) ~[bundleFile:3.6.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:517) ~[bundleFile:4.0.4]
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:279) ~[bundleFile:3.6.2]
at org.ops4j.pax.web.service.spi.servlet.OsgiInitializedServlet.service(OsgiInitializedServlet.java:102) ~[bundleFile:?]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) ~[bundleFile:9.4.52.v20230823]
at org.ops4j.pax.web.service.spi.servlet.OsgiFilterChain.doFilter(OsgiFilterChain.java:100) ~[bundleFile:?]
at org.ops4j.pax.web.service.jetty.internal.PaxWebServletHandler.doHandle(PaxWebServletHandler.java:320) ~[bundleFile:?]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234) ~[bundleFile:9.4.52.v20230823]
at org.ops4j.pax.web.service.jetty.internal.PrioritizedHandlerCollection.handle(PrioritizedHandlerCollection.java:96) ~[bundleFile:?]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:722) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) ~[bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.52.v20230823]
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.52.v20230823]
at java.lang.Thread.run(Thread.java:840) [?:?]
2024-02-10 18:59:42.179 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID '0faa3aea87' failed: org.graalvm.polyglot.PolyglotException: TypeError: undefined has no such function "getItem"
Der Code einer funktionierenden Rule:
Code: Alles auswählen
var runtime = require('@runtime');
var minTempKeller, minHumKeller, dew_Aussen;
var dew_Lagerraum, hum_Lagerraum, temp_Lagerraum;
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
var ZonedDateTime = Java.type("java.time.ZonedDateTime");
var Timer1;
var Timer2;
var Interval;
var Delta_DewPoint_Fans;
var DewDiff;
Interval = runtime.itemRegistry.getItem("Lueftung_Interval").getState();
//if (Interval = null){
// Interval = 30;
//}
// wenn unter dieser Temperatur oder unter dieser Feuchtigkeit Innen wird nicht gelüftet
//var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
minTempKeller = parseFloat(runtime.itemRegistry.getItem("MinTempKeller").getState());
minHumKeller = parseFloat(runtime.itemRegistry.getItem("MinHumKeller").getState());
Delta_DewPoint_Fans = parseFloat(runtime.itemRegistry.getItem("Delta_DewPoint_Fans").getState());
dew_Aussen = parseFloat(runtime.itemRegistry.getItem('Taupunkt_Aussen').getState());
if (dew_Aussen !=null){
// Lüftungssteuerung Lagerraum
dew_Lagerraum = parseFloat(runtime.itemRegistry.getItem('TaupunktLagerraum').getState());
hum_Lagerraum = parseFloat(runtime.itemRegistry.getItem('HTLagerraum_Humidity').getState());
temp_Lagerraum = parseFloat(runtime.itemRegistry.getItem('HTLagerraum_Temperature').getState());
//Randbedingungen
if (((dew_Lagerraum != null) && (hum_Lagerraum != null) && (hum_Lagerraum >= minHumKeller) && (temp_Lagerraum >= minTempKeller))){
DewDiff = dew_Lagerraum - (dew_Aussen + Delta_DewPoint_Fans);
logger.info("Dew Lagerraum: " + dew_Lagerraum + "; Dew Out: " + dew_Aussen +"; Delta Dew: " + Delta_DewPoint_Fans +"; Dew Diff= "+DewDiff);
//Taupunktdifferenz
if (((dew_Aussen + Delta_DewPoint_Fans) <= dew_Lagerraum) ){
logger.info("Starte Lüfter Anschlussraum/Lagerraum für Intervallzeit");
runtime.events.sendCommand('LufterAnschlussraum_Betrieb', "ON");
runtime.events.postUpdate("LuefterAnschlussraumImIntervall", "ON");
Timer1 = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(Interval), function(){
logger.info("Stoppe Lüfter Anschlussraum");
runtime.events.sendCommand("LufterAnschlussraum_Betrieb", "OFF");
//Timer2 = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(Interval), function(){
logger.info("Lüfter Anschlussraum Intervall Ende");
runtime.events.postUpdate("LuefterAnschlussraumImIntervall", "OFF");
// Timer2 = null;
});
Timer1 = null;
}
}
}
logger.info("Ausführung Rule Taupunktvergleich Lagerraum");
Code: Alles auswählen
var runtime = require('@runtime');
var minTempKeller, minHumKeller, dew_Aussen;
var dew_Anschlussraum, hum_Anschlussraum, temp_Anschlussraum;
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
var ZonedDateTime = Java.type("java.time.ZonedDateTime");
var Timer1;
var Timer2;
var Interval;
var Delta_DewPoint_Fans;
var DewDiff;
Interval = runtime.itemRegistry.getItem("Lueftung_Interval").getState();
//if (Interval = null){
// Interval = 30;
//}
// wenn unter dieser Temperatur oder unter dieser Feuchtigkeit Innen wird nicht gelüftet
//var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
minTempKeller = parseFloat(runtime.ItemRegistry.getItem("MinTempKeller").getState());
minHumKeller = parseFloat(runtime.ItemRegistry.getItem("MinHumKeller").getState());
Delta_DewPoint_Fans = parseFloat(runtime.ItemRegistry.getItem("Delta_DewPoint_Fans").getState());
dew_Aussen = parseFloat(runtime.ItemRegistry.getItem('Taupunkt_Aussen').getState());
if (dew_Aussen !=null){
// Lüftungssteuerung Anschlussraum
dew_Anschlussraum = parseFloat(runtime.itemRegistry.getItem('TaupunktAnschlussraum').getState());
hum_Anschlussraum = parseFloat(runtime.itemRegistry.getItem('HTAnschlussraum_Humidity').getState());
temp_Anschlussraum = parseFloat(runtime.itemRegistry.getItem('HTAnschlussraum_Temperature').getState());
//Randbedingungen
if (((dew_Anschlussraum != null) && (hum_Anschlussraum != null) && (hum_Anschlussraum >= minHumKeller) && (temp_Anschlussraum >= minTempKeller))){
DewDiff = dew_Anschlussraum - (dew_Aussen + Delta_DewPoint_Fans);
logger.info("Dew Anschlussraum: " + dew_Anschlussraum + "; Dew Out: " + dew_Aussen +"; Delta Dew: " + Delta_DewPoint_Fans +"; Dew Diff= "+DewDiff);
//Taupunktdifferenz
if (((dew_Aussen + Delta_DewPoint_Fans) <= dew_Anschlussraum) ){
logger.info("Starte Lüfter Anschlussraum/Lagerraum für Intervallzeit");
runtime.events.sendCommand('LufterAnschlussraum_Betrieb', "ON");
runtime.events.postUpdate("LuefterAnschlussraumImIntervall", "ON");
Timer1 = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(Interval), function(){
logger.info("Stoppe Lüfter Anschlussraum");
runtime.events.sendCommand("LufterAnschlussraum_Betrieb", "OFF");
//Timer2 = ScriptExecution.createTimer(ZonedDateTime.now().plusMinutes(Interval), function(){
logger.info("Lüfter Anschlussraum Intervall Ende");
runtime.events.postUpdate("LuefterAnschlussraumImIntervall", "OFF");
// Timer2 = null;
});
Timer1 = null;
}
}
}
logger.info("Ausführung Script Taupunktvergleich Anschlussraum");