Ankündigung

Einklappen
Keine Ankündigung bisher.

Watchdog oder Filter für Befehlsausführungen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Watchdog oder Filter für Befehlsausführungen

    Hallo,
    ich habe manchmal das Problem das eine Rule Amok läuft und mir den gesamten KNX Bus mit immer der gleichen Gruppenadresse zu spamt.
    Dadurch lassen sich dummerweise die anderen KNX Geräte nicht mehr ansprechen.
    An sich funktioniert die Rule, aber manchmal scheint Openhab ins trudeln zu kommen und macht dann etwas Unsinn.
    Das würde ich gerne irgendwie verhindern, zb. durch einen Watchdog der dann automatisch Openhab neu startet, bzw. erst gar nicht so viele Updates zu lässt, vor allem nicht, wenn es immer der gleiche Befehl ist.

    So eine Begrenzung fände ich auch manchmal beim Ausprobieren von Rules äußerst sinnvoll.

    Gibt es da eine Möglichkeit?
    Mein Openhab läuft übrigens auf einem Olimex A20.

    Gruß
    Ben

    #2
    Zeig doch mal die Rule

    Kommentar


      #3
      Sehe ich auch so. Es ist sicher sinnvoller die Ursache des Problems (also das Spammen von KNX-Nachrichten) zu beheben als die Symptome zu lindern. Wenn die Bremsen am Auto sporadisch nicht funktionieren verbaut man ja auch nicht vorsorglich eine lautere Hupe ;-) .

      Eine Begrenzung von Nachrichten gleicher Art halte ich für gefährlich da es auch durchaus gewünscht sein kann solche zu versenden. Automatisiert herauszubekommen was gewünscht ist und ab wann die Flut abnormal wird wäre recht kompliziert.

      Hier gibt es genügend Experten die helfen können das Problem dieses "ins Trudeln kommen" von openHAB einzugrenzen.

      Kommentar


        #4
        Ich werde die Logdateien und Rule heute mal posten.
        An sich funktioniert die Rule aber sehr zuverlässig, schon seit Monaten.

        Es muss doch trotzdem eine Möglichkeit geben das ganze zu begrenzen.
        Die Parameter wären da nicht allzu schwer:
        Wenn länger als 30 Sekunden das gleiche Telegramm mit mehr als 9500Kb/s gesendet wird kann man dieses Telegramm ohne Problem auf 1x pro Sekunde reduzieren.

        Alternativ wäre ein externer Watchdog wünschenswert der die Logdateien von Openhab überwacht und im Fehlerfall dieses einfach mal neu startet.
        Ich weiß das da eine ganze Menge Fehlermeldungen drin waren, mehr dazu gibt es leider erst heute Abend.

        Gruß
        Ben

        Kommentar


          #5
          Hmm,

          ganz ehrlich, ich muss mich da den Kollegen anschließen. Ich glaube, du bist der Einzige der so ein Problem hat. Deshalb wäre es erst einmal wichtig zu verstehen, was deine Rule überhaupt machen soll und warum diese manchmal "Amok" läuft.


          Zitat von selbstmacher Beitrag anzeigen

          Es muss doch trotzdem eine Möglichkeit geben das ganze zu begrenzen.
          Die Parameter wären da nicht allzu schwer:
          Wenn länger als 30 Sekunden das gleiche Telegramm mit mehr als 9500Kb/s gesendet wird kann man dieses Telegramm ohne Problem auf 1x pro Sekunde reduzieren.
          Auch hier gibt es vielleicht ein Verständnisproblem. Die Datenrate in KNX beträgt immer 9600bit/s. Nicht mehr und nicht weniger. Das kannst du auch nicht begrenzen. Was du evtl begrenzen könntest, wären möglicherweise die gesendeten Telegramme pro Zeiteinheit, nicht aber die Datenrate.



          Zitat von selbstmacher Beitrag anzeigen
          Alternativ wäre ein externer Watchdog wünschenswert der die Logdateien von Openhab überwacht und im Fehlerfall dieses einfach mal neu startet.
          Ein Shellskript zu bauen, was die Logfiles "durchgreppt" und nach Erkennung bestimmter Strings einen REstart von OH durchführt, ist mit Sicherheit kein Problem. Ob es Sinn macht bleibt aber auch hier dahingestellt...

          Gruß,
          thoern

          Kommentar


            #6
            Zitat von selbstmacher Beitrag anzeigen
            9500Kb/s
            ganz so viel ist es nicht... Die Busgeschwindigkeit beträgt 9,6 kBit/s bzw. 9600 Bit/s.

            Kommentar


              #7
              okok die Datenrate hat nicht ganz gestimmt, mir ging es ja auch nur um das prinzip:
              also hier die Rule:
              Code:
              import org.openhab.core.library.types.*
              import org.openhab.core.persistence.*
              import org.openhab.model.script.actions.*
              //Hiermit können die Rolläden mit einem zweiten Tastendruck wieder gestoppt werden
              var Object lastState_EG_Kueche=STOP
              
              rule "Stop Rolladen_EG_Terasse"
              when
                Item Rolladen_EG_Kueche  received command
                then
              	if(receivedCommand==UP ||receivedCommand==DOWN ||receivedCommand==STOP ){
              		if(lastState_EG_Kueche==receivedCommand)//Wenn der gleiche Befehl noch mal kommt stoppen wir den Rolladen
              		{	sendCommand ( Rolladen_EG_Kueche, STOP )}
              		lastState_EG_Kueche= receivedCommand 
              	}
              end
              Hier die Logeinträge:
              Code:
              16:00:00.073 INFO  o.o.m.script.Internet.rules[:53]- Aktualisiere Internet Daten
              16:08:15.034 ERROR o.o.i.r.i.f.PollingDelayFilter[:75]- null
              16:31:13.004 ERROR o.o.i.r.i.f.PollingDelayFilter[:75]- null
              17:00:00.075 INFO  o.o.m.script.Internet.rules[:53]- Aktualisiere Internet Daten
              17:02:57.489 ERROR o.o.i.r.i.f.PollingDelayFilter[:75]- null
              17:02:57.697 WARN  org.eclipse.jetty.io.nio[:636]- handle failed
              java.lang.IllegalStateException: STATE!=START 2
              	at org.eclipse.jetty.http.AbstractGenerator.setVersion(AbstractGenerator.java:281)
              	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:828)
              	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:944)
              	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:630)
              	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
              	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
              17:03:14.344 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              17:03:20.665 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              17:03:20.994 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              
              [COLOR="Red"]...ca. 500000 Zeilen mit dem gleichem Fehler
              [/COLOR]19:13:44.987 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              19:13:45.317 ERROR o.o.i.r.i.f.PollingDelayFilter[:75]- Task java.util.concurrent.FutureTask@1875a8 rejected from java.util.concurrent.ThreadPoolExecutor@1d49cf5[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
              19:13:46.919 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              [COLOR="red"]....1003 Zeilen mit dem gleichem Fehler[/COLOR]
              19:37:59.592 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              19:37:59.595 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              19:37:59.597 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              19:37:59.601 ERROR o.o.i.r.i.f.DuplicateBroadcastProtectionFilter[:74]- null
              Ich kann nicht erkennen was jetzt ursächlich für den Fehler ist, aber die Logdatei ist 47MB große und besteht fast nur aus dieser Fehlermeldung.

              Kommentar


                #8
                Die Rule reagiert auch, wenn STOP an das Item gesendet wird - und dann landet sie in einer Endlosschleife.

                Gerade habe ich leider keine Zeit für eine genaue Korrektur, leider.

                Sascha

                Kommentar


                  #9
                  Danke.

                  Jetzt habe ich den Fehler auch gesehen.
                  Dann werde ich das mal ändern und schauen wie es sich dann auf lange Sicht verhält.

                  Kommentar


                    #10
                    Zitat von selbstmacher Beitrag anzeigen
                    Danke.

                    Jetzt habe ich den Fehler auch gesehen.
                    Es ist fast immer besser die Ursache eines Problems zu beseitigen, als an den Auswirkungen herumzufummeln....


                    Hmm,

                    ich verstehe zwar, was du machen willst, aber wozu brauchst du denn überhaupt diese Rule? Das geht doch normalerweise problemlos, wenn KNX richtig konfiguriert ist. Also ich kann sowohl meine Rollos als auch meine Jalousien jederzeit per Tastendruck auf den KNX-Sensor oder per Antippen des Stopp-Buttons in Habdroid anhalten. Auch ohne eine derartige Rule.

                    Gruß,
                    thoern

                    Kommentar


                      #11
                      Ich habe überall normale 2-Fach Wippen mit Tasterschnittstellen verbaut.
                      Und meine Frau wollte die Rollläden mit einem weiteren Tastendruck stoppen können.
                      Man kann zwar auch so lange drücken bis der Rolladen stoppen soll, aber das war so nicht gewünscht. Frau wollte bei Bedarf jederzeit den Rolladen wieder stoppen können.
                      Nur deswegen gibt es diese Rule.
                      Wenn es auch ohne Rule gehen sollte, würde ich es direkt im KNX machen, wenn mich jemand aufklären würde wie das konfiguriert werden muss.

                      Kommentar


                        #12
                        Zitat von selbstmacher Beitrag anzeigen
                        Ich habe überall normale 2-Fach Wippen mit Tasterschnittstellen verbaut.
                        Achso, verstehe. Ich habe echte KNX-Tastsensoren. Die können Auf/Ab/Stopp bereits per default. Im Prinzip so:

                        Langer Tastendruck rechts: Rollo schließt
                        Langer Tastendruck links: Rollo öffnet
                        Kurzer Tastendruck links oder rechts: Rollo stoppt

                        KNX-seitig müssen natürlich die ensprechenden Gruppenadressen für Auf, Ab und Stopp auch vorhanden sein

                        Gruß,
                        thoern

                        Kommentar


                          #13
                          Selbst damit wäre ich nicht durchgekommen.
                          Meine Frau will immer nur kurz drücken, für lange Tastendrücke sind keine Zeit und keine Lust sich das zu merken.

                          Kommentar


                            #14
                            Zitat von selbstmacher Beitrag anzeigen
                            Selbst damit wäre ich nicht durchgekommen.
                            Meine Frau will immer nur kurz drücken, für lange Tastendrücke sind keine Zeit und keine Lust sich das zu merken.
                            Also lange bedeutet in diesem Zusammenhang ca. 1s und Kurz <0,5s. Das haben sogar Frauen ratzfatz intus.

                            Gruß,
                            thoern

                            Kommentar


                              #15
                              Wenn die Tasterschnittstelle die Unterscheidung von sich aus unterstützt, kannst Du das parametrieren. Ich habe bei mir Rollladen rauf/runter/stop mit einem (!) Taster realisiert, kurz=Richtungsumkehr (=Fahrt rauf bzw. runter) lang=Stop. Wobei Lang bei mir auch nur 1 Sekunde ist...

                              Kommentar

                              Lädt...
                              X