Ankündigung

Einklappen
Keine Ankündigung bisher.

Befehl wird zweifach ausgeführt

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

    Befehl wird zweifach ausgeführt

    Moin,
    ich habe hier meinen Haustürkontakt der mir per TCP Binding LCN.sensor.0.20.4=0 sendet, wenn die Tür geöffnet ist, wenn sie geschlossen ist, wird LCN.sensor.0.20.4=1 gesendet. Hier nun mal ein Auszug aus meinem Logfile:

    Code:
    2015-02-24 16:39:02.315 [INFO ] [runtime.busevents             ] - domiq state updated to LCN.sensor.0.20.4=0
    2015-02-24 16:39:02.607 [INFO ] [runtime.busevents             ] - uhr state updated to lcn.sensor.0.20.4=0 Anzahl: 1
    2015-02-24 16:39:02.612 [INFO ] [runtime.busevents             ] - uhr state updated to lcn.sensor.0.20.4=0 Anzahl: 1
    2015-02-24 16:39:08.708 [INFO ] [runtime.busevents             ] - domiq state updated to LCN.sensor.0.20.4=1
    2015-02-24 16:39:08.877 [INFO ] [runtime.busevents             ] - uhr state updated to lcn.sensor.0.20.4=1 Anzahl: 1
    2015-02-24 16:39:11.028 [INFO ] [runtime.busevents             ] - s_haustuer state updated to CLOSED
    2015-02-24 16:39:12.634 [INFO ] [runtime.busevents             ] - s_haustuer state updated to OPEN
    2015-02-24 16:39:12.653 [INFO ] [runtime.busevents             ] - s_haustuer state updated to OPEN
    Wie man sieht wird hier die Tür um
    Code:
    16:39:02.315 [INFO ] [runtime.busevents             ] - domiq state updated to LCN.sensor.0.20.4=0
    geöffnet, dieses wird dann nur noch mal zu Debug zwecken an das Item uhr gesendet und dort lasse ich es mir anzeigen...
    Um
    Code:
    16:39:08.708 [INFO ] [runtime.busevents             ] - domiq state updated to LCN.sensor.0.20.4=1
    wird die Tür wieder geschlossen.

    Allerdings wird das umsetzen des Switches "erst" um
    Code:
    2015-02-24 16:39:11.028 [INFO ] [runtime.busevents             ] - s_haustuer state updated to CLOSED
    2015-02-24 16:39:12.634 [INFO ] [runtime.busevents             ] - s_haustuer state updated to OPEN
    2015-02-24 16:39:12.653 [INFO ] [runtime.busevents             ] - s_haustuer state updated to OPEN
    vorgenommen.
    Hier tauchen dann bei mir drei Fragezeichen auf:
    - Warum kommt es zu dieser Verzögerung (9 sek. bis die Haustür auf CLOSED gesetzt wurde)
    -Warum wurde das Item uhr zweimal mit dem mit dem Status LCN.sensor.0.20.4=0 befüllt, obwohl das Item domiq diesen nur einmal erhalten hat ?
    - Warum werden die Befehle dann in der falschen Reihenfolge abgearbeitet ?
    Gruß
    Jörg
    OpenHAB 1.6.2 auf AsRock Q1900 NAS mit Openmediavault, Java8 Version 1.8.0_33-0031

    #2
    Wie sehen denn Deine Items aus?

    Wie wird das Item s_haustuer gesetzt, per Rule? Wie sieht die zugehörige Rule dann aus?

    Was ist an Bindings eingerichtet? Welcher Rechner (welche Ausstattung)? Welches Betriebssystem? Welche Java-Version?

    Kommentar


      #3
      Meine Items (zumindest die,die es betrifft):

      Code:
      String	domiq	{ tcp=">[192.168.178.49:4224:'REGEX((.*))']" }	
      Contact	s_haustuer	"Haustür [%S]"	<frontdoor>	(g_fenster,g_mysql)	
      String	uhr	"test [%s]"
      Meine entsprechender Teil der Rule:

      Code:
      import org.openhab.core.library.types.*
      import org.openhab.model.script.actions.*
      import java.lang.*
      
      
      
      	rule "domiqs"
      		when 
      			Item domiq received update
      		then
      			var txt = domiq.state.toString.toLowerCase
      			val String[] txtleer
      			var Integer anzahl = txt.split("\\s+").size
      			txtleer = txt.split("\\s+")
      			var i = 0
      			var Double zahl 
      			var Integer zahlint
      			var String[] txts_haustuer
      
      			
      			uhr.postUpdate(txtleer.get(0) + " Anzahl: " + anzahl)
      
      		for (i: 0 .. (anzahl - 1))
      		{
      		 	if (txtleer.get(i).contains("lcn.sensor.0.20.4")){
      				txts_haustuer = txtleer.get(i).split("=")
      				if (txts_haustuer.get(1) == "1") {
      					s_haustuer.postUpdate(CLOSED)
      				}else if (txts_haustuer.get(1) == "0") {
      					s_haustuer.postUpdate(OPEN)
      				}
      			}	
      		 				
      		}
      end
      Bindings siehe Bild


      Meine Specs habe ich in der Signatur ergänzt.
      In der For Schleife befinden sich noch viele weitere If-Schleifen...
      Gruß und schon mal Danke fürs drüberschauen...
      Jörg
      Angehängte Dateien
      OpenHAB 1.6.2 auf AsRock Q1900 NAS mit Openmediavault, Java8 Version 1.8.0_33-0031

      Kommentar


        #4
        Also soll die Rule wohl auch andere items befüllen.

        Ich gehe mal davon aus, dass diese Art Auswertung auf der Synology langsam ist.
        Wie wäre es so:
        Code:
        Contact s_haustuer "Haustür [%S]" <frontdoor> (g_fenster,g_mysql) { tcp=">[192.168.178.49:4224:'REGEX(LCN\.sensor\.0\.20\.4=(.))']" }
        und dann gar keine Rule.

        Kommentar


          #5
          Moin,
          wenn ich das so mache, bekomme ich eine Fehlermeldung:

          Code:
          tcp bindingConfig is NULL (item=s_haustuer (Type=ContactItem, State=Uninitialized)) -> processing bindingConfig aborted!
          Hier gibt es Probleme mit den ganzen Punkten

          Code:
          Contact s_haustuer "Haustür [%S]" <frontdoor> (g_fenster,g_mysql) { tcp=">[192.168.178.49:4224:'REGEX(LCN\.sensor\.0\.20\.4=(.))']" }
          Wenn ich diese wegnehme, gibt es keine Fehlermeldung...

          Wie soll es dann überhaupt weitergehen ? Wenn dein Code funktionieren würde, muss ich dem Contact doch noch irgendwie sagen was auf und was zu bedeutet...

          Edit: Selbst wenn die Synology mit dem 1,6Hz zu langsam sein sollte, sollte OH aber doch trotzdem die Befehle in der Reihenfolge abarbeiten oder nicht ?
          OpenHAB 1.6.2 auf AsRock Q1900 NAS mit Openmediavault, Java8 Version 1.8.0_33-0031

          Kommentar


            #6
            eventuell hab ich beim escapen der Punkte einen Fehler gemacht. Wenn sicher ist, dass es keine Zeichenfolgen mit den selben Zahlen und etwas anderem als Punkte dazwischen gibt, sollte das escapen unnötig sein, Du könntest also die Backslashes vor den Punkten weglassen. Eventuell geht es also so:
            Code:
            Contact s_haustuer "Haustür [%S]" <frontdoor> (g_fenster,g_mysql) { tcp=">[192.168.178.49:4224:REGEX(LCN.sensor.0.20.4=(.))]" }
            0 sollte automatisch ein OFF ergeben, 1 ein ON.

            Kommentar

            Lädt...
            X