cron Ausdruck und Visual Studio Code

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: cron Ausdruck und Visual Studio Code

Beitrag von udo1toni »

ja, genau. Du kannst auch eine Rule anlegen, die mit System started getriggert wird. In der Rule kannst Du dann der Variablen einen Wert zuweisen (den müsstest Du natürlich berechnen). Evtl. kannst Du auch die vorhandene Rule zusätzlich mit System started triggern lassen, da muss man natürlich schauen, ob es irgendwelche Seiteneffekte geben könnte (z.B. könnte es dann passieren, dass die Items noch nicht restored sind...)

Alternativ kannst Du auch einfach einen von null abweichenden Wert als Default zuweisen. Sobald die Timer Rule aktiv wird, wird der Wert neu berechnet, bis dahin hast Du dann den Default.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hardl
Beiträge: 347
Registriert: 10. Mai 2018 09:46
Answers: 1

Re: cron Ausdruck und Visual Studio Code

Beitrag von hardl »

Ich bekomme immer wieder diesen Fehler, bei Erreichen der Schaltzeit:

Code: Alles auswählen

2019-06-24 23:30:01.307 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.2019-06-24T23:30:00.000+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ {
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@de8d84
  <null>.WZ_soll = <XIfExpressionImpl>
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@172d363
  <XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
} ] threw an exception.
Die Variable ist zu Beginn der rules global deklariert:

Code: Alles auswählen

var Number WZ_soll = 11
Tangiert werden diese Regeln:

Code: Alles auswählen

  /* ------------------------------------------------------------------------ */
 /*   Wohnzimmer manuell */
/* ---------------------*/
 
rule "Heizung WZ manu"
when
	Item WZ_Wahl_manu changed or
	Item WZ_Auto changed
then
    var Number WZ_manuwahl
	if(WZ_Auto.state == OFF) {
        WZ_Sonne.sendCommand(OFF)
        WZ_manuwahl = WZ_Wahl_manu.state as Number
        WZ_soll=WZ_manuwahl
        logInfo("timer","Wahl WZ = {}, Manu",WZ_manuwahl)
		WZ_Thermostat.sendCommand(WZ_manuwahl)
    }else {
       logInfo("timer","Wahl WZ = {}, Auto",WZ_soll)
     	WZ_Thermostat.sendCommand(WZ_soll)
    }
end

Code: Alles auswählen

  /* ------------------------------------------------------------------------ */
 /*   Alle Thermostate */
/* ------------------ */

rule "Zeiten berechnen"
when
    Member of SchaltUhr changed                                                                                 // Schaltzeit geändert
then
    logInfo("timer","Zeiten berechnen")
    SchaltMinute.allMembers.forEach[n|                                                                          // Alle Schaltzeiten aller Heizkreise
        var Number hour
        var Number minute
        var Number minutes 
        hour = SchaltUhr.members.filter[u|u.name.contains(n.name + "_H")].head.state as Number                  // Stunde des korrespondierenden StellItems
        minute = SchaltUhr.members.filter[u|u.name.contains(n.name + "_M")].head.state as Number                // Stunde des korrespondierenden StellItems
        minutes = hour * 60 + minute                                                                            // Sollzeit in Minuten
        logInfo("timer","Schaltzeit {} auf {}:{} Uhr ({}) gesetzt.",n.name,hour,minute,hour * 60 + minute)
        postUpdate(n.name.toString, minutes.toString)                                                           // im passenden Item speichern
    ]
    logInfo("timer","Zeiten berechnen fertig")
end

rule "Alle Timer anlegen"
when
    Time cron " 0 0 0 * * ?"  or                                                                                 // Mitternacht
    System started or                                                                                           // Neustart oder Rules neu geladen
    Member of WZ_SchaltMinute changed or                                                                        // Schaltzeit geändert
    Member of EZ_SchaltMinute changed or                                                                        // Schaltzeit geändert
    Member of BZ_SchaltMinute changed or                                                                        // Schaltzeit geändert
    Member of WC_SchaltMinute changed or
    Item WZ_Auto changed or                                                                       // Schaltzeit geändert
    Item EZ_Auto changed or                                                                       // Schaltzeit geändert
    Item BZ_Auto changed or                                                                       // Schaltzeit geändert
    Item WC_Auto changed or                                                                       // Schaltzeit geändert
    Item planTimer received command                                                                             // Timertrigger (nächsten Timer anlegen)
then
    if (WZ_Set_comf.state != WZ_comf) {           //prüfen ob am WZ-Thermostat geändert wurde
        WZ_Set_comf.sendCommand(WZ_comf)
        logInfo("timer","WZ-Comfort geändert")
        if((WZ_Thermostat.state as Number) != 11) {      //Wenn nicht Eco                                              // Aktueller Status abweichend
            WZ_Thermostat.sendCommand(11)
        }
    }
    if (EZ_Set_comf.state != EZ_comf) {       //prüfen ob am EZ-Thermostat geändert wurde
        EZ_Set_comf.sendCommand(EZ_comf)
        logInfo("timer","EZ-Comfort geändert")
        if((EZ_Thermostat.state as Number) != 11) {      //Wenn nicht Eco                                              // Aktueller Status abweichend
            EZ_Thermostat.sendCommand(11)
        }
    }
    if (BZ_Set_comf.state != BZ_comf) {       //prüfen ob am BZ Thermostat geändert wurde
        BZ_Set_comf.sendCommand(BZ_comf)
        logInfo("timer","BZ-Comfort geändert")
        if((BZ_Thermostat.state as Number) != 11) {      //Wenn nicht Eco                                              // Aktueller Status abweichend
            BZ_Thermostat.sendCommand(11)
        }
    }
        if (WC_Set_comf.state != WC_comf) {       //prüfen ob am WC Thermostat geändert wurde
        WC_Set_comf.sendCommand(WC_comf)
        logInfo("timer","WC-Comfort geändert")
        if((WC_Thermostat.state as Number) != 11) {      //Wenn nicht Eco                                              // Aktueller Status abweichend
            WC_Thermostat.sendCommand(11)
        }
    }
    if(lock) return;                                                                                            // Rule bereits aktiv?
    lock = true                                                                                                  // Rule sperren
                                            // ab hier WZ_Timer
    if (WZ_Auto.state == ON)  {                                                 // alten WZ_Timer löschen, falls aktiv
        if(WZ_Timer !== null) WZ_Timer.cancel
        WZ_Item = WZ_SchaltMinute.members.filter[m|(m.state as Number) > now.getMinuteOfDay].sortBy[
        (state as Number).intValue].head as NumberItem                                                          // Nächsten WZ_Timer ermitteln
        if(WZ_Item !== null) {                                                                                      // noch mindestens ein Timer heute
            logInfo("timer","Timer WZ anlegen für {} ({})",WZ_Item.name,WZ_Item.state)
            WZ_Timer = createTimer(now.withTimeAtStartOfDay.plusMinutes((WZ_Item.state as Number).intValue),[       // Timer anlegen
            logInfo("timer","Timer WZ ausgelöst: {}",WZ_Item.name)
            if(WZ_Auto.state != ON) {                                                                           // falls manueller Betrieb
                logInfo("timer","Aber WZ manueller Betrieb, Abbruch!")
                planTimer.sendCommand(OFF)                                                                      // nächsten WZ_Timer planen
                return;                                                                                         // und Schluss
            }
            WZ_soll = if(WZ_Item.name.contains("Ein")) 1 else 11                                       // Sollzustand nach WZ_Timer
            logInfo("timer","geforderter Schaltvorgang WZ : {}",WZ_soll)    
            if  (WZ_Item.name.contains("1") ||                                                                 // Soll der Timer berücksichtigt werden?
                (WZ_Item.name.contains("2") && WZ_SW_2.state == ON)) {
                logInfo("timer","Schaltvorgang WZ aktiv")
                if((WZ_Thermostat.state as Number) != WZ_soll)                                                     // Aktueller Status abweichend?
                    WZ_Thermostat.sendCommand(WZ_soll) 
                else
                    logInfo("timer","aber Zustand WZ bereits erreicht")
                } else {
                    logInfo("timer","Schaltvorgang WZ inaktiv")
                }
                planTimer.sendCommand(OFF)                                                                          // nächsten Timer planen
            ])
        }
    }

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

Re: cron Ausdruck und Visual Studio Code

Beitrag von udo1toni »

Dass im Fehlertext WZ_soll vorkommt, bedeutet nicht, dass diese Variable das Problem darstellt ;)

Hilfreich wäre das Logging unmittelbar vor der Fehlermeldung (soweit dort Logzeilen aus der Rule heraus stehen). Falls solche nicht auftauchen, müsste man ein wenig zusätzliche Logzeilen einbauen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hardl
Beiträge: 347
Registriert: 10. Mai 2018 09:46
Answers: 1

Re: cron Ausdruck und Visual Studio Code

Beitrag von hardl »

Hier noch das erste Auftreten des Errors, davor ist 45 Minuten nichts im openhab.log.

Code: Alles auswählen

2019-06-24 23:30:00.003 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2019-06-24T23:30:00.000+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ {
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@11f42bd
  <null>.WZ_soll = <XIfExpressionImpl>
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@171ec26
  <XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)
} ] threw an unhandled Exception: 
java.lang.NullPointerException: null
	at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:66) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:140) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:902) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:865) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:224) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:768) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1132) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:902) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:865) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:224) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
	at com.sun.proxy.$Proxy153.apply(Unknown Source) ~[?:?]
	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [107:org.eclipse.smarthome.core.scheduler:0.11.0.oh250M1]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [107:org.eclipse.smarthome.core.scheduler:0.11.0.oh250M1]
Der Block kommt 28 x innerhalb von 2 Sekunden, dann wieder 30 Minuten nichts

In event.log ist in diesem Zeitraum nur:

Code: Alles auswählen

2019-06-24 23:30:01.477 [ome.event.ItemCommandEvent] - Item 'planTimer' received command OFF
2019-06-24 23:30:43.469 [me.event.ThingUpdatedEvent] - Thing 'zwave:device:127:node46' has been updated.

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

Re: cron Ausdruck und Visual Studio Code

Beitrag von udo1toni »

Das ist schade.

Gehe ich recht in der Annahme, dass dies nur ein Teil der Rule ist? Versuche besser, einzelne Rules nicht so zu überladen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hardl
Beiträge: 347
Registriert: 10. Mai 2018 09:46
Answers: 1

Re: cron Ausdruck und Visual Studio Code

Beitrag von hardl »

Nein, das ist die ganze Rule "Zeiten berechnen", diese stammt weitgehend von Dir, allerdings auf 4 Thermostate erweitert.

Heute Nacht kam allerdings "nur" dieser Error um 23:00 Uhr und 53 more....:

Code: Alles auswählen

2019-06-26 23:00:17.622 [ERROR] [ersey.server.ServerRuntime$Responder] - An I/O error has occurred while writing a response message entity to the container output stream.
org.glassfish.jersey.server.internal.process.MappableException: org.eclipse.jetty.io.EofException
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:92) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130) ~[171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711) [172:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444) [172:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434) [172:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329) [172:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) [171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) [171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) [171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) [171:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) [172:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) [172:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) [169:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) [169:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) [169:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) [169:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) [169:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) [20:com.eclipsesource.jaxrs.publisher:5.3.1.201602281253]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865) [85:org.eclipse.jetty.servlet:9.4.12.v20180830]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535) [85:org.eclipse.jetty.servlet:9.4.12.v20180830]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) [186:org.ops4j.pax.web.pax-web-jetty:7.2.5]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [82:org.eclipse.jetty.security:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293) [186:org.ops4j.pax.web.pax-web-jetty:7.2.5]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) [85:org.eclipse.jetty.servlet:9.4.12.v20180830]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) [186:org.ops4j.pax.web.pax-web-jetty:7.2.5]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.Server.handle(Server.java:503) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260) [84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) [75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118) [75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) [87:org.eclipse.jetty.util:9.4.12.v20180830]
	at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.eclipse.jetty.io.EofException
	at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:286) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:393) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:380) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:802) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) ~[87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:224) ~[87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:538) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:831) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:887) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:239) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:215) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:540) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at java.io.OutputStream.write(OutputStream.java:75) ~[?:?]
	at org.glassfish.jersey.servlet.internal.ResponseWriter$NonCloseableOutputStreamWrapper.write(ResponseWriter.java:320) ~[?:?]
	at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:218) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:294) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.GsonProvider.writeTo(GsonProvider.java:71) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[?:?]
	... 53 more
Caused by: java.io.IOException: Broken pipe
	at sun.nio.ch.FileDispatcherImpl.writev0(Native Method) ~[?:?]
	at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51) ~[?:?]
	at sun.nio.ch.IOUtil.write(IOUtil.java:148) ~[?:?]
	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) ~[?:?]
	at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:266) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:393) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:380) ~[75:org.eclipse.jetty.io:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:802) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) ~[87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:224) ~[87:org.eclipse.jetty.util:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:538) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:831) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:887) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:239) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:215) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:540) ~[84:org.eclipse.jetty.server:9.4.12.v20180830]
	at java.io.OutputStream.write(OutputStream.java:75) ~[?:?]
	at org.glassfish.jersey.servlet.internal.ResponseWriter$NonCloseableOutputStreamWrapper.write(ResponseWriter.java:320) ~[?:?]
	at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:218) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:294) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.GsonProvider.writeTo(GsonProvider.java:71) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[?:?]
	... 53 more

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

Re: cron Ausdruck und Visual Studio Code

Beitrag von udo1toni »

Mindestens fehlt hinten das Wort end

Was das Erweitern solcher Rules betrifft, geht das normalerweise wesentlich eleganter mittels Gruppen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hardl
Beiträge: 347
Registriert: 10. Mai 2018 09:46
Answers: 1

Re: cron Ausdruck und Visual Studio Code

Beitrag von hardl »

Entschuldige, Du hast natürlich Recht. Es fehlt der Code für die anderen 3 Thermostate:

Code: Alles auswählen

                                  // ab hier EZ_Timer
    if (EZ_Auto.state == ON)  {                                                 // alten EZ_Timer löschen, falls aktiv
        if(EZ_Timer !== null) EZ_Timer.cancel                                                                       // alten EZ_Timer löschen, falls aktiv
        EZ_Item = EZ_SchaltMinute.members.filter[m|(m.state as Number) > now.getMinuteOfDay].sortBy[
        (state as Number).intValue].head as NumberItem                                                          // Nächsten EZ_Timer ermitteln
        if(EZ_Item !== null) {                                                                                      // noch mindestens ein Timer heute
            logInfo("timer","Timer EZ anlegen für {} ({})",EZ_Item.name,EZ_Item.state)
            EZ_Timer = createTimer(now.withTimeAtStartOfDay.plusMinutes((EZ_Item.state as Number).intValue),[       // Timer anlegen
            logInfo("timer","Timer EZ ausgelöst: {}",EZ_Item.name)
            if(EZ_Auto.state != ON) {                                                                           // falls manueller Betrieb
                logInfo("timer","Aber EZ manueller Betrieb, Abbruch!")
                planTimer.sendCommand(OFF)                                                                      // nächsten EZ_Timer planen
                return;                                                                                         // und Schluss
            }
            EZ_soll = if(EZ_Item.name.contains("Ein")) 1 else 11                                       // Sollzustand nach EZ_Timer
            logInfo("timer","geforderter Schaltvorgang EZ : {}",EZ_soll)    
            if ((EZ_Item.name.contains("1")) ||                                                                 // Soll der Timer berücksichtigt werden?
                (EZ_Item.name.contains("2") && EZ_SW_2.state == ON)) {
                logInfo("timer","Schaltvorgang EZ aktiv")
                if((EZ_Thermostat.state as Number) != EZ_soll)                                                     // Aktueller Status abweichend?
                    EZ_Thermostat.sendCommand(EZ_soll) 
                else
                    logInfo("timer","aber Zustand EZ bereits erreicht")
                } else {
                    logInfo("timer","Schaltvorgang EZ inaktiv")
                }
                planTimer.sendCommand(OFF)                                                                          // nächsten Timer planen
            ])
        }
    } 
                                      // ab hier BZ_Timer
    if (BZ_Auto.state == ON)  {                                                 // alten BZ_Timer löschen, falls aktiv
        if(BZ_Timer !== null)  BZ_Timer.cancel                                                                       // alten BZ_Timer löschen, falls aktiv
        BZ_Item = BZ_SchaltMinute.members.filter[m|(m.state as Number) > now.getMinuteOfDay].sortBy[
        (state as Number).intValue].head as NumberItem                                                          // Nächsten BZ_Timer ermitteln
        if(BZ_Item !== null)   {                                                                                      // noch mindestens ein Timer heute
            logInfo("timer","Timer BZ anlegen für {} ({})",BZ_Item.name,BZ_Item.state)
            BZ_Timer = createTimer(now.withTimeAtStartOfDay.plusMinutes((BZ_Item.state as Number).intValue),[       // Timer anlegen
            logInfo("timer","Timer BZ ausgelöst: {}",BZ_Item.name)
            if(BZ_Auto.state != ON) {                                                                           // falls manueller Betrieb
                logInfo("timer","Aber BZ manueller Betrieb, Abbruch!")
                planTimer.sendCommand(OFF)                                                                      // nächsten BZ_Timer planen
                return;                                                                                         // und Schluss
            }
            BZ_soll = if(BZ_Item.name.contains("Ein")) 1 else 11                                       // Sollzustand nach BZ_Timer
            logInfo("timer","geforderter Schaltvorgang BZ : {}",BZ_soll)    
            if ((BZ_Item.name.contains("1")) ||                                                                 // Soll der Timer berücksichtigt werden?
                (BZ_Item.name.contains("2") && BZ_SW_2.state == ON)) {
                logInfo("timer","Schaltvorgang BZ aktiv")
                if((BZ_Thermostat.state as Number) != BZ_soll)                                                     // Aktueller Status abweichend?
                    BZ_Thermostat.sendCommand(BZ_soll) 
                else
                    logInfo("timer","aber Zustand BZ {} bereits erreicht",(BZ_Thermostat.state as Number) )
                } else {
                    logInfo("timer","Schaltvorgang BZ inaktiv")
                }
                planTimer.sendCommand(OFF)                                                                          // nächsten Timer planen
            ])
        }
    }    
                                             // ab hier WC_Timer
    if (WC_Auto.state == ON)  {                                                 // alten WC_Timer löschen, falls aktiv
        if(WC_Timer !== null)  WC_Timer.cancel                                                                       // alten WC_Timer löschen, falls aktiv
        WC_Item = WC_SchaltMinute.members.filter[m|(m.state as Number) > now.getMinuteOfDay].sortBy[
        (state as Number).intValue].head as NumberItem                                                          // Nächsten WC_Timer ermitteln
        if(WC_Item !== null){                                                                                      // noch mindestens ein Timer heute
            logInfo("timer","Timer WC anlegen für {} ({})",WC_Item.name,WC_Item.state)
            WC_Timer = createTimer(now.withTimeAtStartOfDay.plusMinutes((WC_Item.state as Number).intValue),[       // Timer anlegen
            logInfo("timer","Timer WC ausgelöst: {}",WC_Item.name)
            if(WC_Auto.state != ON) {                                                                           // falls manueller Betrieb
                logInfo("timer","Aber WC manueller Betrieb, Abbruch!")
                planTimer.sendCommand(OFF)                                                                      // nächsten WC_Timer planen
                return;                                                                                         // und Schluss
            }
            WC_soll = if(WC_Item.name.contains("Ein")) 1 else 11                                       // Sollzustand nach WC_Timer
            logInfo("timer","geforderter Schaltvorgang WC : {}",WC_soll)    
            if ((WC_Item.name.contains("1")) ||                                                                 // Soll der Timer berücksichtigt werden?
                (WC_Item.name.contains("2") && WC_SW_2.state == ON)) {
                logInfo("timer","Schaltvorgang WC aktiv")
                if((WC_Thermostat.state as Number) != WC_soll)                                                     // Aktueller Status abweichend?
                    WC_Thermostat.sendCommand(WC_soll) 
                else
                    logInfo("timer","aber Zustand WC {} bereits erreicht",(WC_Thermostat.state as Number) )
                } else {
                    logInfo("timer","Schaltvorgang WC inaktiv")
                }
                planTimer.sendCommand(OFF)                                                                          // nächsten Timer planen
            ])
        } 
    }                             
    lock = false
end 

 

hardl
Beiträge: 347
Registriert: 10. Mai 2018 09:46
Answers: 1

Re: cron Ausdruck und Visual Studio Code

Beitrag von hardl »

Ich bräuchte nochmals Hilfe.
Die Steuerung läuft sehr gut.
Mein Problem:

Die Spirit Thermostate übernehmen jede manuelle Änderung am Thermostat verändert den Wert z.bB. im WZ_Set_comf.item
Wenn ich manuell zurückdrehe wird beim nächsten timer-Befehl die WZ_Set_comf-Temperatur mit der niedrigen Temperatur überschrieben.

Wie kann ich eine gewollte Änderung über OH von einer manuellen Änderung am Thermostat unterscheiden?

hardl
Beiträge: 347
Registriert: 10. Mai 2018 09:46
Answers: 1

Re: cron Ausdruck und Visual Studio Code

Beitrag von hardl »

Die im Wesentlichen von udo1toni vorgeschlagenen Rules funktionieren sehr gut. Ich habe ein paar Ergänzungen hinzugefügt und es gab keine größeren Fehlermeldungen.
Jetzt häufen sich die Fehlermeldungen, wobei ich annehme, dass das nach dem Update auf openHAB 2.5.0~M4-1 aufgetaucht ist.

Es gibt folgende Fehlermeldungen, die erste tritt nur auf, wenn ich eine Änderung der Schaltzeit vornehme, ansonsten läuft es tagelang ohne Fehler. Er kommt immer beim Auslösen eines Timers vor.

Code: Alles auswählen

2019-11-21 15:30:00.006 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.Timer 122 2019-11-21T15:30:00.000+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ {
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@4ed23
  val wzsoll
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>)
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@2f1e0b
} ] threw an unhandled Exception: 
java.lang.NullPointerException: null
	at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:65) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:140) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:902) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:865) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:224) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:768) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1132) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1046) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:902) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:865) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:224) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
	at com.sun.proxy.$Proxy248.apply(Unknown Source) ~[?:?]
	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [182:org.openhab.core.scheduler:2.5.0.M4]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [182:org.openhab.core.scheduler:2.5.0.M4]
2019-11-21 15:30:00.011 [INFO ] [eclipse.smarthome.model.script.timer] - Timer WZ ausgelöst: WZ_Uhr2_Ein
Die Folge ist, daß die nächste Schaltzeit ausgelassen wird. Ab Mitternacht ist wieder alles ok.


Der zweite Fehler tritt unabhängig von Schaltzeiten auf:

Code: Alles auswählen

2019-11-22 18:27:13.071 [ERROR] [ersey.server.ServerRuntime$Responder] - An I/O error has occurred while writing a response message entity to the container output stream.
org.glassfish.jersey.server.internal.process.MappableException: org.eclipse.jetty.io.EofException
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:92) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130) ~[124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711) [125:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444) [125:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434) [125:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329) [125:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) [124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) [124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.internal.Errors.process(Errors.java:267) [124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) [124:org.glassfish.jersey.core.jersey-common:2.22.2]
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) [125:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) [125:org.glassfish.jersey.core.jersey-server:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) [122:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) [122:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) [122:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) [122:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) [122:org.glassfish.jersey.containers.jersey-container-servlet-core:2.22.2]
	at com.eclipsesource.jaxrs.publisher.internal.ServletContainerBridge.service(ServletContainerBridge.java:76) [20:com.eclipsesource.jaxrs.publisher:5.3.1.201602281253]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873) [90:org.eclipse.jetty.servlet:9.4.18.v20190429]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542) [90:org.eclipse.jetty.servlet:9.4.18.v20190429]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) [194:org.ops4j.pax.web.pax-web-jetty:7.2.10]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) [87:org.eclipse.jetty.security:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1700) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293) [194:org.ops4j.pax.web.pax-web-jetty:7.2.10]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480) [90:org.eclipse.jetty.servlet:9.4.18.v20190429]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1667) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) [194:org.ops4j.pax.web.pax-web-jetty:7.2.10]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.Server.handle(Server.java:505) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267) [89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) [80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) [80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:698) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:804) [92:org.eclipse.jetty.util:9.4.18.v20190429]
	at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.eclipse.jetty.io.EofException
	at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:284) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:393) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:380) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:814) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) ~[92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:224) ~[92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:550) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:845) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:921) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:249) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:225) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:550) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at java.io.OutputStream.write(OutputStream.java:75) ~[?:?]
	at org.glassfish.jersey.servlet.internal.ResponseWriter$NonCloseableOutputStreamWrapper.write(ResponseWriter.java:320) ~[?:?]
	at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:218) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:294) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.GsonProvider.writeTo(GsonProvider.java:71) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[?:?]
	... 53 more
Caused by: java.io.IOException: Broken pipe
	at sun.nio.ch.FileDispatcherImpl.writev0(Native Method) ~[?:?]
	at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51) ~[?:?]
	at sun.nio.ch.IOUtil.write(IOUtil.java:148) ~[?:?]
	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) ~[?:?]
	at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:264) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:393) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:380) ~[80:org.eclipse.jetty.io:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:814) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) ~[92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:224) ~[92:org.eclipse.jetty.util:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:550) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:845) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:921) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:249) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:225) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:550) ~[89:org.eclipse.jetty.server:9.4.18.v20190429]
	at java.io.OutputStream.write(OutputStream.java:75) ~[?:?]
	at org.glassfish.jersey.servlet.internal.ResponseWriter$NonCloseableOutputStreamWrapper.write(ResponseWriter.java:320) ~[?:?]
	at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:218) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:294) ~[?:?]
	at org.eclipse.smarthome.io.rest.core.internal.GsonProvider.writeTo(GsonProvider.java:71) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[?:?]
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[?:?]
	... 53 more
Negative Einflüsse kann ich nicht feststellen.

Wo könnte ich noch suchen?

Antworten