Fehlermeldung JAVA mit meinem Timer

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Morph.
Beiträge: 20
Registriert: 4. Mär 2019 12:48
Answers: 0

Fehlermeldung JAVA mit meinem Timer

Beitrag von Morph. »

Hallo,
ich habe ein Problem mit meinem Timer in einer "Rule";
folgende Fehlermeldung bekomme ich und kann diese nicht Interpretieren:

Code: Alles auswählen

tail -n40 /var/log/openhab2/openhab.log 
	at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:218) ~[bundleFile:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:294) ~[bundleFile:?]
	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) ~[bundleFile:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[bundleFile:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[bundleFile:?]
	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[bundleFile:?]
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[?:?]
	... 53 more
Caused by: java.io.IOException: Datenübergabe unterbrochen (broken pipe)
	at sun.nio.ch.FileDispatcherImpl.writev0(Native Method) ~[?:1.8.0_212]
	at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51) ~[?:1.8.0_212]
	at sun.nio.ch.IOUtil.write(IOUtil.java:148) ~[?:1.8.0_212]
	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) ~[?:1.8.0_212]
	at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:263) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpConnection$SendCallback.process(HttpConnection.java:812) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:241) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpConnection.send(HttpConnection.java:549) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:852) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpChannel.write(HttpChannel.java:929) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:250) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:226) ~[bundleFile:9.4.20.v20190813]
	at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:551) ~[bundleFile:9.4.20.v20190813]
	at java.io.OutputStream.write(OutputStream.java:75) ~[?:1.8.0_212]
	at org.glassfish.jersey.servlet.internal.ResponseWriter$NonCloseableOutputStreamWrapper.write(ResponseWriter.java:320) ~[?:?]
	at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:218) ~[bundleFile:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:294) ~[bundleFile:?]
	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) ~[bundleFile:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[bundleFile:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[bundleFile:?]
	at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[?:?]
	at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[bundleFile:?]
	at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[?:?]
	... 53 more
Meine Rule-Datei lautet:

Code: Alles auswählen

var told = 0

rule "Waschmaschine fertig"
when
      Item Current received update

then

        if ( Current.state > 0.030) {
                createTimer(now.plusMinutes(1), [|
                        logInfo("Waschmaschine ist aus")
                                if ((Current.state < 0.0020) && (told == 0)) {
                               logInfo("Notifications","Sending notifi via App.")
                                sendTelegram("bot1", "Die Waschmaschine ist fertig.", Ntp_Date.state.toString)
                               told = 1
                        }
                ])
        }
end
rule "Zähler zurücksetzen"
when
       Item  Current received update
then
        if ((Current.state as Number) == 0.00) {
                told = 0
        }
end
Wenn ich den Timer rausnehme, würde die "Rule" laufen, damit würde ich aber "False-Positive" bekommen, die ich mit dem Timer entgegen gehen möchte.

Kennt jemand die Fehlermeldung und weiss jemand, was man dagegen tun kann?

Mit freundlichen Grüßen

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

Re: Fehlermeldung JAVA mit meinem Timer

Beitrag von udo1toni »

Du hast das ein logInfo mit nur einem Parameter. logInfo hat aber exakt zwei Strings als Paramaeter, der erste String ist der Loggername, der zweite String ist die auszugebende Meldung.
Abgesehen davon ist die Rule etwas seltsam. der Timer wird bei jeder Messung gestartet, falls mehr als 0.03 als Messwert kommt (also auch, wenn die Maschine auf Hochtouren läuft). Es werden also im Laufe des Waschgangs vermutlich hunderte Timer angelegt und es werden auch alle Timer ausgeführt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Morph.
Beiträge: 20
Registriert: 4. Mär 2019 12:48
Answers: 0

Re: Fehlermeldung JAVA mit meinem Timer

Beitrag von Morph. »

Hallo Udo,

danke für den Hinweis; ich werde mal schauen, das nach der Änderung keine Fehlermeldung mehr kommt.

Ja das mit der "Rule" ist nicht ganz sauber; oft aus Unwissenheit wie die "Rule" und der Trigger abgearbeitet wird.
Eigentlich will ich ja nur schauen, wenn die Waschmaschine angemacht wurde, das dann beim beenden mir eine Mitteilung geschickt wird, und das dann halt nur einmal und nicht die ganze Zeit.

Werden Variablen Global für alle "Rules" gesetzt? .. Dann könnte ich ja eine Abfrage machen, wenn Strom durch die Steckdose fliesst, dann Variable A=1 und Told=0 und dann nur noch Prüfen, wenn A=1 und Strom auf 0 ist, dann eine Meldung und Told=1 setzen, oder?

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

Re: Fehlermeldung JAVA mit meinem Timer

Beitrag von udo1toni »

Es gibt sowohl hier als auch im englischen Forum verschiedene Rules, die eine Statemachine verwenden, um über den beendeten Waschgang zu informieren. Im groben geht es darum, anhand des Stromflusses zu erkennen, in welcher Phase sich der Wadchgang befindet. Eine Rule dafür triggert grundsätzlich nur auf changed, nicht auf received update. Erst wenn die Maschine sich in der letzten Phase befindet, wird die Meldung generiert. Also simpelste Variante: Der Strom steigt über 0.1 -> Maschine ist an. -> Strom sinkt unter 0.02 -> Timer starten. Strom steigt über 0.025 -> Timer abbrechen.
Wenn der Timer abläuft, wird die Meldung ausgegeben. Wie lang der Timer gesetzt ist, kommt dann auf die Maschine an (genau wie die exakten Grenzwerte). Innerhalb des Timers muss aber nichts mehr geprüft werden, denn der Timer wird abgebrochen, falls der Grenzwert vor Ablauf überschritten wird.

Gesendet von meinem SM-G973F mit Tapatalk

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten