Ankündigung

Einklappen
Keine Ankündigung bisher.

Präsenzsimulation

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

    #16
    Vielen Dank erstmal, es fängt an zu laufen.

    Hier der Auszug aus der Log:


    018-08-20 20:10:00.099 [INFO ] [pse.smarthome.model.script.dev.rules] - Neuer Wert Zufallstimer: 49 Sekunden.
    2018-08-20 20:10:49.131 [INFO ] [pse.smarthome.model.script.dev.rules] - Schalte Licht GA_Garage_rechts von NULL nach OFF
    2018-08-20 20:13:22.229 [ERROR] [lfe.hap.impl.http.impl.BinaryHandler] - Exception in binary handler
    java.io.IOException: Die Wartezeit für die Verbindung ist abgelaufen
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:?]
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher. java:39) [?:?]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java :223) [?:?]
    at sun.nio.ch.IOUtil.read(IOUtil.java:192) [?:?]
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImp l.java:380) [?:?]
    at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setByt es(UnpooledUnsafeDirectByteBuf.java:447) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.buffer.AbstractByteBuf.writeBytes(Abstrac tByteBuf.java:880) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.socket.nio.NioSocketChannel.doRea dBytes(NioSocketChannel.java:242) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByt eUnsafe.read(AbstractNioByteChannel.java:119) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.processSelectedK ey(NioEventLoop.java:511) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.processSelectedK eysOptimized(NioEventLoop.java:468) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.processSelectedK eys(NioEventLoop.java:382) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop .java:354) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.util.concurrent.SingleThreadEventExecutor $2.run(SingleThreadEventExecutor.java:112) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.util.concurrent.DefaultThreadFactory$Defa ultRunnableDecorator.run(DefaultThreadFactory.java :137) [234rg.openhab.io.homekit:2.3.0]
    at java.lang.Thread.run(Thread.java:748) [?:?]
    2018-08-20 20:13:22.239 [ERROR] [.hap.impl.http.impl.AccessoryHandler] - Exception caught in web handler
    java.io.IOException: Die Wartezeit für die Verbindung ist abgelaufen
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:?]
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher. java:39) [?:?]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java :223) [?:?]
    at sun.nio.ch.IOUtil.read(IOUtil.java:192) [?:?]
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImp l.java:380) [?:?]
    at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setByt es(UnpooledUnsafeDirectByteBuf.java:447) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.buffer.AbstractByteBuf.writeBytes(Abstrac tByteBuf.java:880) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.socket.nio.NioSocketChannel.doRea dBytes(NioSocketChannel.java:242) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByt eUnsafe.read(AbstractNioByteChannel.java:119) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.processSelectedK ey(NioEventLoop.java:511) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.processSelectedK eysOptimized(NioEventLoop.java:468) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.processSelectedK eys(NioEventLoop.java:382) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop .java:354) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.util.concurrent.SingleThreadEventExecutor $2.run(SingleThreadEventExecutor.java:112) [234rg.openhab.io.homekit:2.3.0]
    at io.netty.util.concurrent.DefaultThreadFactory$Defa ultRunnableDecorator.run(DefaultThreadFactory.java :137) [234rg.openhab.io.homekit:2.3.0]
    at java.lang.Thread.run(Thread.java:748) [?:?]
    2018-08-20 20:20:00.050 [INFO ] [pse.smarthome.model.script.dev.rules] - Urlaub ON
    2018-08-20 20:20:00.067 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunrise 1534737420000
    2018-08-20 20:20:00.082 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunset 1534787940000
    2018-08-20 20:20:00.112 [INFO ] [pse.smarthome.model.script.dev.rules] - Nach Sonnenuntergang und vor Sonnenaufgang
    2018-08-20 20:20:00.134 [INFO ] [pse.smarthome.model.script.dev.rules] - Neuer Wert Zufallstimer: 138 Sekunden.
    2018-08-20 20:22:18.164 [INFO ] [pse.smarthome.model.script.dev.rules] - Schalte Licht EG_Eingang von NULL nach OFF
    2018-08-20 20:30:00.046 [INFO ] [pse.smarthome.model.script.dev.rules] - Urlaub ON
    2018-08-20 20:30:00.059 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunrise 1534737420000
    2018-08-20 20:30:00.071 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunset 1534787940000
    2018-08-20 20:30:00.088 [INFO ] [pse.smarthome.model.script.dev.rules] - Nach Sonnenuntergang und vor Sonnenaufgang
    2018-08-20 20:30:00.099 [INFO ] [pse.smarthome.model.script.dev.rules] - Neuer Wert Zufallstimer: 225 Sekunden.
    2018-08-20 20:33:45.136 [INFO ] [pse.smarthome.model.script.dev.rules] - Schalte Licht EG_Eingang von OFF nach ON
    2018-08-20 20:40:00.021 [INFO ] [pse.smarthome.model.script.dev.rules] - Urlaub ON
    2018-08-20 20:40:00.035 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunrise 1534737420000
    2018-08-20 20:40:00.047 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunset 1534787940000
    2018-08-20 20:40:00.075 [INFO ] [pse.smarthome.model.script.dev.rules] - Nach Sonnenuntergang und vor Sonnenaufgang
    2018-08-20 20:40:00.085 [INFO ] [pse.smarthome.model.script.dev.rules] - Neuer Wert Zufallstimer: 166 Sekunden.
    2018-08-20 20:42:46.114 [INFO ] [pse.smarthome.model.script.dev.rules] - Schalte Licht EG_Vorraum von NULL nach OFF
    2018-08-20 20:42:46.134 [WARN ] [lipse.smarthome.core.items.GroupItem] - Command 'OFF' has been ignored for group 'EG_Vorraum' as it is not accepted.
    2018-08-20 20:50:00.030 [INFO ] [pse.smarthome.model.script.dev.rules] - Urlaub ON
    2018-08-20 20:50:00.043 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunrise 1534737420000
    2018-08-20 20:50:00.054 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunset 1534787940000
    2018-08-20 20:50:00.069 [INFO ] [pse.smarthome.model.script.dev.rules] - Nach Sonnenuntergang und vor Sonnenaufgang
    2018-08-20 20:50:00.080 [INFO ] [pse.smarthome.model.script.dev.rules] - Neuer Wert Zufallstimer: 174 Sekunden.
    2018-08-20 20:52:54.127 [INFO ] [pse.smarthome.model.script.dev.rules] - Schalte Licht EG_Stiegenhaus von NULL nach OFF
    2018-08-20 21:00:00.025 [INFO ] [pse.smarthome.model.script.dev.rules] - Urlaub ON
    2018-08-20 21:00:00.162 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunrise 1534737420000
    2018-08-20 21:00:00.175 [INFO ] [pse.smarthome.model.script.dev.rules] - Sunset 1534787940000
    2018-08-20 21:00:00.191 [INFO ] [pse.smarthome.model.script.dev.rules] - Nach Sonnenuntergang und vor Sonnenaufgang
    2018-08-20 21:00:00.202 [INFO ] [pse.smarthome.model.script.dev.rules] - Neuer Wert Zufallstimer: 117 Sekunden.
    2018-08-20 21:01:57.225 [INFO ] [pse.smarthome.model.script.dev.rules] - Schalte Licht EG_Stiegenhaus von OFF nach ON

    Das Problem ist allerdings, dass es sich zwar ein-, aber nicht mehr ausschaltet.

    Auch das von Null auf Off verstehe ich nicht ganz, ich bin davon ausgegangen, dass ohnehin eine Rückmeldung ob Off vom Bus da ist...


    Kommentar


      #17
      Die beiden Fehlermeldungen stammen vom http Binding, da muss irgendwo ein Fehler in Deiner Konfiguration sein (alternativ könnte auch ein Dienst oder Gerät nicht erreichbar sein, es heißt ja "Wartezeit für Verbindung abgelaufen").

      Die Rule startet alle zehn Minuten und bestimmt zwei Zufallswerte, zum einen wählt sie aus einer vorgegebenen Liste (gUr) ein Item aus, zum anderen bestimmt sie innerhalb eines 4-Minuten-Fensters, wann der Schaltvorgang ausgeführt werden soll.
      Wenn das ausgewählte Item zum Schaltzeitpunkt nicht ausgeschaltet ist, wird es ausgeschaltet. Wenn das ausgewählte Item zum Schaltzeitpunkt ausgeschaltet ist, wird es eingeschaltet.

      Wenn ein Item zum Schaltzeitpunkt keinen gültigen Status hat (Status ist NULL), ist es per Definition nicht ausgeschaltet (Status wäre OFF), also wird es ausgeschaltet.

      Normalerweise sollten alle Items einen gültigen Status haben.
      Zum Testen könntest Du alle Items, die in der Gruppe gUr sind einschalten, dann müsste nach spätestens 14 Minuten eines der Lichter aus gehen.

      Kommentar


        #18
        Ich hatte das http Binding gar nicht installiert, habe ich jetzt nachgeholt.

        Das Ganze läuft jetzt,schaltet ein und aus.
        Ich vermute, dass nach einem Reboot gestern die Werte ON/OFF noch nicht vorhanden waren, obwohl Openhab das eigentlich auslesen sollte.

        Es gibt zwar noch Fehler im Log, diese dürften aber von der Version 2.3 stammen, es gibt ja hier einiges in den Foren.

        Vielen Dank jedenfalls.

        Beim nächsten Regen werde ich mir dann mal knx2 anschauen, bin schon gespannt, wen ich darf mit Fragen nerven darf ;-)

        Kommentar


          #19
          Ich muss den Thread wieder nach vor holen, ich habe mir nach längerem ein paar Tage Urlaub gegönnt und musste feststellen, dass sich zwar die Lampen der Gruppe einschalten, aber dann nicht mehr ausschalten.

          Wo kann hier der Fehler liegen?

          Hier nochmal mein Code, wie ihn mir Udo angeraten hat:

          val String filename ="dev.rules"
          var Timer RandomLightsTimer=null
          val java.util.concurrent.ThreadLocalRandom random = (new java.util.concurrent.ThreadLocalRandom)

          rule"Präsenzsimulation"
          when
          Time cron "0 */15 5-23 * * ?"
          then
          if(Urlaub.state == ON) {
          logInfo(filename,"Urlaub ON")
          val sunrise =(Nautic_Dawn.state as DateTimeType).calendar.timeInMillis
          logInfo(filename,"Sunrise {}",sunrise)
          val sunset = (Nautic_Dusk.state as DateTimeType).calendar.timeInMillis
          logInfo(filename,"Sunset {}",sunset)
          if (now.isBefore(sunrise) || now.isAfter(sunset)) {
          logInfo(filename,"Nach Sonnenuntergang und vor Sonnenaufgang")
          var int randomTime = random.nextInt(240)
          logInfo(filename,"Neuer Wert Zufallstimer: {} Sekunden.",randomTime)
          RandomLightsTimer = createTimer(now.plusSeconds(randomTime)) [ |
          var randomItem = gUr.members.get(random.nextInt(gUr.members.size))
          var randomLightCurrentState = randomItem.state
          // ersetzen der Dimmer-Werte von "0" auf "OFF"
          if (randomLightCurrentState == 0) randomLightCurrentState = OFF
          // alle Dimmer-Werte von 1-100 werden als ON gewertet
          var randomLightNewState = if (randomLightCurrentState != OFF) OFF else ON
          logInfo(filename, "Schalte Licht {} von {} nach {}",randomItem.name,randomLightCurrentState,random LightNewState)
          randomItem.sendCommand(randomLightNewState)
          ]
          } else logInfo(filename,"Tagsüber")
          } else logInfo(filename,"Urlaub OFF")
          end

          Kommentar


            #20
            Hallo zusammen!

            Ich muss den Thread wieder mal vorholen, leider seit einem Jahr keine Antwort.

            Ich habe leider nach wie vor das gleiche Problem, das Licht geht nach Zufallsprinzip an, aber leider nicht nach der zufällig gewählten Zeit wieder aus.

            Vielmehr ist es so, dass zur Auslösezeit - jede Viertelstunde - ein Zufallswert für die Laufzeit festgelegt wird, der dann nach Ablauf dieser Zeit dann einen Item aus der Urlaubsgruppe ein- oder ausschaltet.

            Die Rule sollte aber eine willkürliche Laufzeit für einen zufällig gewählten Item festlegen, diesen einschalten und dann nach der zufällig festgelegten Zeit wieder ausschalten.

            Weiß hier wer, was falsch ist?

            Danke!

            Kommentar


              #21
              Hallo zusammen,
              bei dem vorliegenden Problem kann ich nicht helfen, aber wie wäre es mit einem ganz anderen Ansatz?
              ich schreibe die Schaltvorgönge aller interessanten (fast alle) Lampen in eine Datenbank.
              bei Abwesenheit schalte ich dann die entsprechend des Status von vor x Tagen/Wochen.
              somit ist die Anwesenheitssimulation immer nahe an der Helligkeit Außen.

              läuft seit einigen Jahren und bisher ohne Probleme

              Kommentar


                #22
                Tja, das ginge theoretisch, wenn ich die Lampen verwenden würde. Das tue ich aber eigentlich nie, die normal verwendeten sieht man von der Straße nicht, die für die Präsenzsimulation werden kaum verwendet.

                Kommentar


                  #23
                  Das ist quasi egal, Du steuerst diese, die Du verwenden möchtest doch über OpenHab, oder?

                  Kommentar


                    #24
                    Tu ich...

                    Kommentar


                      #25
                      Für alle Interessierten hier noch einmal die wichtigsten Posts aus Anwesenheitssimulation Logik
                      1. Installation SQLite
                      2. Konfiguration Persist Service
                      3. Group Item und Eintrag persist
                      4. Finale Rule
                      Danke nochmal an udo1toni für die Unterstützung dabei

                      Kommentar


                        #26
                        Zitat von fred07 Beitrag anzeigen
                        Tu ich...
                        Dann schau mal meinen vorherigen Post an. Du musst dann ja nur die Items in die Gruppe und Datenbank aufnehmen, welche in der Präsenz-Steuerung aktiv sein sollen.
                        Bei mir läuft dies - wie bereits geschrieben - super stabil

                        Kommentar


                          #27
                          Ich glaube, ich stehe grad auf der Leitung. Aber wenn ich einen Item normal nie schalte, kann er ja seinen Schaltzustand nicht in die Datenbank schreiben.

                          Damit kann ich aber auch nichts auslesen.

                          du hast ja items, die du regelmäßig verwendest. Oder sehe ich das falsch?

                          Aus diesem Grund ist ja die Rule so geworden, wie ich sie gepostet habe. udo1toni hat mir hier übrigens auch geholfen.

                          Kommentar


                            #28
                            Ja, Udo1Toni ist eine große Hilfe.

                            Alternativ könntest Du eine DB anlegen und Deine Start/Endtermine dort eintragen.
                            aber war ja auch nur als Denkanstoß für einen andere Lösung.
                            Ja, meine Lampen werden regelmäßig auch normal geschaltet.

                            Kommentar


                              #29
                              Also, um mal kurz zu erläutern, was die Rule macht (die Rule stammt sicher nicht ursprünglich von mir) :

                              Die Rule wird exakt alle 15 Minuten ausgeführt, von 5:00 Uhr bis 23:45 Uhr.
                              Falls Urlaub OFF ist, wird die Rule beendet.
                              Die Rule prüft, ob es vor Sonnenaufgang oder nach Sonnenuntergang ist. Ist das der Fall, wird eine zufällige Zahl x von 0 - 240 erzeugt.
                              Nun wird ein Timer angelegt, x Sekunden in der Zukunft.
                              Wenn der Timer abläuft, sucht die Rule eines der Items aus der Liste der Items aus und toggelt das Item.

                              Es toggelt exakt ein Licht. Exakt einmal. Beim nächsten Durchlauf, eine Viertelstunde später, passiert mehr oder weniger dasselbe. Je nachdem, wieviele Items zur Gruppe gehören, kann man davon ausgehen, dass Lampen ein- aber nicht ausgeschaltet werden. Da nach dem nautischen Sonnenaufgang geprüft wird, der bei -12° liegt, kann man weiterhin davon ausgehen, dass die Rule morgens nur ein- oder vielleicht zweimal ausgeführt wird, im Sommer eventuell gar nicht. Ähnliches gilt für den Abend, da sind es vielleicht 4 Durchläufe insgesamt. Die Lichter werden nicht ausgeschaltet, wenn es hell wird, das ist schlicht nicht im Code vorgesehen.

                              Ein Ansatz mit Zufallsschaltung wäre, für jedes zu schaltende Licht einen Timer vorzusehen. Wenn eine Lampe per Zufall eingeschaltet wird, wird gleichzeitig auch ein Timer für diese Lampe gestartet, der diese Lampe nach einer zufälligen Zeit ausschaltet.
                              Zuletzt geändert von udo1toni; 20.02.2020, 19:13.

                              Kommentar


                                #30
                                Danke dir die Erklärung. Wie kann man den Timer integrieren?

                                Kommentar

                                Lädt...
                                X