Ankündigung

Einklappen
Keine Ankündigung bisher.

Raumpräsenz aus mehreren BWM berechnen

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

    Raumpräsenz aus mehreren BWM berechnen

    Aufgabe: Ich möchte eine Variable "Raumpraesenz" (b01) berechnen. Ist jemand im Raum, so soll Raumpraesenz=1 sein. Wenn eine Zeitlang keine Bewegung erkannt wurde, soll Raumpraesenz =0 sein. Es gibt mehrere BWM im Raum, die bei Bewegung 1 melden, ohne Bewegung 0. Es gibt Sitzsensoren, die bei Belegung 1 melden, sonst 0. Insgesamt gibt es in diesem Raum 7 solcher BWM/Sitzsensoren.

    Ansatz:
    [highlight=epc]
    :begin BerechneRaumpraesenz7(S1,S2,S3,S4,S5,S6,S7,Praesen z, Sekunden)
    :info $Wenn Schalter EIN sendet, ist Praesenz vorhanden. Wenn Schalter AUS sendet, bleibt die Praesenz noch Sekunden vorhanden, danach geht sie AUS.$ \\
    $Gruppenadresse, auf der der Bewegungsmelder bei Bewegung EIN sendet, nach Ende der Nachlaufzeit AUS sendet.$ \\
    $Gruppenadresse, unter der die Raumpraesenz hinterlegt wird. Das kann auch der Schaltaktor des Lichts sein.$ \\
    $Zeit in Sekunden$
    :shortinfo $Berechnet die Raumpraesenz anhand der EIN/AUS-Signale von BWM oder ähnlichem$
    initga(S1)
    initga(S2)
    initga(S3)
    initga(S4)
    initga(S5)
    initga(S6)
    initga(S7)
    if S1 or S2 or S3 or S4 or S5 or S6 or S7 then write(Praesenz, EIN) endif
    if !S1 and after(!S1,Sekunden^000u64) and \\
    !S2 and after(!S2,Sekunden^000u64) and \\
    !S3 and after(!S3,Sekunden^000u64) and \\
    !S4 and after(!S4,Sekunden^000u64) and \\
    !S5 and after(!S5,Sekunden^000u64) and \\
    !S6 and after(!S6,Sekunden^000u64) and \\
    !S7 and after(!S7,Sekunden^000u64) then write(Praesenz, AUS) endif
    :end
    [/highlight]

    Idee:
    Praesenz darf nur aus gehen, wenn alle BWM aus sind. Daher
    if !S1 and !S2 and !S3 ...
    Praesenz soll erst ausgehen, wenn die Treppenhauszeit auch für den letzten BWM aus ist. Daher
    if after(!S1,Sekunden^000u64) and ...

    Aufruf des Macros:
    BerechneRaumpraesenz7("EG WZ PM Theben co Präsenz-2/1/24","EG WZ Sessel-2/1/47","EG WZ Sofa S links-2/1/48","EG WZ Sofa S mitte-2/1/49","EG WZ Sofa SW-2/1/50","EG WZ Sofa W mitte-2/1/51","EG WZ Sofa W rechts-2/1/52","EG WZ Raumpraesenz-2/1/40",120)

    Phänomen: Raumpaesenz für diesen Raum geht nicht mehr aus.

    Verhalten: Gestern abend waren sicher einige Sensoren=1. Die Nacht war länger als 120s. Heute früh ist Raumpraesenz immer noch 1.

    Was Nachts geschah:
    user@wiregate415:/var/log$ cat eib.log.1.gz | gunzip | egrep "2/1/24|2/1/47|2/1/48|2/1/49|2/1/50|2/1/51|2/1/52|2/1/40" | tail -5 | eibdecode 2> /dev/null
    2012-05-26 00:40:42.704,A_GroupValue_Write,1.1.112,EG WZ Raumpraesenz,01,1,DPT_Switch,1.001,0,low,6,T_DATA_ XXX_REQ,0
    2012-05-26 00:41:18.492,A_GroupValue_Write,1.1.62,EG WZ PM Theben co Pr?senz,00,0,DPT_Switch,1.001,0,low,6,T_DATA_XXX_R EQ,0
    2012-05-26 00:45:17.915,A_GroupValue_Write,1.1.62,EG WZ PM Theben co Pr?senz,01,1,DPT_Switch,1.001,0,low,6,T_DATA_XXX_R EQ,0
    2012-05-26 00:45:18.009,A_GroupValue_Write,1.1.112,EG WZ Raumpraesenz,01,1,DPT_Switch,1.001,0,low,6,T_DATA_ XXX_REQ,0
    2012-05-26 00:45:58.447,A_GroupValue_Write,1.1.62,EG WZ PM Theben co Pr?senz,00,0,DPT_Switch,1.001,0,low,6,T_DATA_XXX_R EQ,0

    Aktueller Status:
    Alle Sitzsensoren liefern 0 (nicht besetzt), der BWM liefert 0 (keine Bewegung)

    Analyse:
    Um 00:45:17.915 meldet der BWM Präsenz.
    Um 00:45:18.009 wird Raumpraesenz zu 1 berechnet -> ok
    Um 00:45:58.447 meldet der BWM keine Präsenz mehr.
    Ich hätte nun gegen 00:47:58 erwartet, dass Raumpraesenz zu 0 berechnet wird.

    Was mache ich falsch?

    - EibStudio v2.300
    - Firmwareversion EibPC: v2.300
    - Patches: 2.300.ptc

    Gruss, Joachim
    EibPC - Wiregate

    #2
    Zitat von joda123 Beitrag anzeigen
    Aufgabe: Ich möchte eine Variable "Raumpraesenz" (b01) berechnen. Ist jemand im Raum, so soll Raumpraesenz=1 sein. Wenn eine Zeitlang keine Bewegung erkannt wurde, soll Raumpraesenz =0 sein. Es gibt
    Die zweite if-Abfrage wird nie "true", weil after nur einen Impuls ausgibt und damit and immer auf false (0b01) steht.
    Du müsstest coden:
    [highlight=epc]
    if !S1 and after(!S1,Sekunden^000u64) write(Praesenz, AUS) endif
    if !S2 and after(!S2,Sekunden^000u64) write(Praesenz, AUS) endif
    usw.
    [/highlight]
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      [highlight=epc]
      :begin BerechneRaumpraesenz7(S1,S2,S3,S4,S5,S6,S7,Praesen z, Sekunden)
      :info $Wenn Schalter EIN sendet, ist Praesenz vorhanden. Wenn Schalter AUS sendet, bleibt die Praesenz noch Sekunden vorhanden, danach geht sie AUS.$ \\
      $Gruppenadresse, auf der der Bewegungsmelder bei Bewegung EIN sendet, nach Ende der Nachlaufzeit AUS sendet.$ \\
      $Gruppenadresse, unter der die Raumpraesenz hinterlegt wird. Das kann auch der Schaltaktor des Lichts sein.$ \\
      $Zeit in Sekunden$
      :shortinfo $Berechnet die Raumpraesenz anhand der EIN/AUS-Signale von BWM oder ähnlichem$
      initga(S1)
      initga(S2)
      initga(S3)
      initga(S4)
      initga(S5)
      initga(S6)
      initga(S7)
      if S1 or S2 or S3 or S4 or S5 or S6 or S7 then write(Praesenz, EIN) endif
      if delay(!S1 and !S2 and !S3 and !S4 and !S5 and !S6 and !S7,Sekunden^000u64) and \\
      ( !S1 and !S2 and !S3 and !S4 and !S5 and !S6 and !S7 ) then write(Praesenz, AUS) endif
      :end
      [/highlight]

      Ich würde es mit delay() probieren.
      Da man die Timer leider nicht stoppen kann, muss man die Bedingung zusätzlich als Freigabebedingung anfügen.

      1. Wenn alle GAs auf AUS gehen, wird das delay() gestartet (bzw. erneut gestartet).
      2. Sollte zwischenzeitlich eine GA auf EIN gehen, wird die Freigabe zurückgenommen. -> weiter bei 1.
      BR
      Marc

      Kommentar


        #4
        @enertegus,
        Mit Deinem Vorschlag würde Raumpraesenz bereits ausgehen, wenn nur eine Bedingung für Sekunden ausgegangen ist. (Das denke ich mir zumindest so - getestet habe ich es nicht.)

        @saft6luck,
        Ich habe Deinen Vorschlag einmal wie folgt umgesetzt und werde entsprechend testen:
        [highlight=epc]
        :begin BerechneRaumpraesenz7(S1,S2,S3,S4,S5,S6,S7,Praesen z, Sekunden)
        :info $Wenn Schalter EIN sendet, ist Praesenz vorhanden. Wenn Schalter AUS sendet, bleibt die Praesenz noch Sekunden vorhanden, danach geht sie AUS.$ \\
        $Gruppenadresse, auf der der Bewegungsmelder bei Bewegung EIN sendet, nach Ende der Nachlaufzeit AUS sendet.$ \\
        $Gruppenadresse, unter der die Raumpraesenz hinterlegt wird. Das kann auch der Schaltaktor des Lichts sein.$ \\
        $Zeit in Sekunden$
        :shortinfo $Berechnet die Raumpraesenz anhand der EIN/AUS-Signale von BWM oder ähnlichem$
        initga(S1)
        initga(S2)
        initga(S3)
        initga(S4)
        initga(S5)
        initga(S6)
        initga(S7)
        Alles_ausgegangen=AUS
        if S1 or S2 or S3 or S4 or S5 or S6 or S7 then { Alles_ausgegangen=AUS; write(Praesenz, EIN); } endif
        if !S1 and !S2 and !S3 and !S4 and !S5 and !S6 and !S7 then { Alles_ausgegangen=EIN } endif
        if !S1 and !S2 and !S3 and !S4 and !S5 and !S6 and !S7 and delay(Alles_ausgegangen,Sekunden^000u64) then write (Praesenz, AUS) endif
        :end
        [/highlight]

        Herzlichen Dank Euch beiden für die neuen Ideen.

        Gruß, Joachim
        EibPC - Wiregate

        Kommentar


          #5
          Zitat von joda123 Beitrag anzeigen
          Ich habe Deinen Vorschlag einmal wie folgt umgesetzt und werde entsprechend testen:
          Schaut gut aus.

          Ps. Sorry, ich hatte vorher schon die Umsetzung ohne Hilfsvariable angegeben, jedoch das Zitat nicht entfernt.
          BR
          Marc

          Kommentar


            #6
            Hallo saft6luck,
            Meine letzte Version hatte zwar funktioniert - Dein Vorschlag ohne Hilfsvariable sieht jedoch eleganter aus. Ich teste ihn nun.
            Herzlichen Dank und Frohe Pfingsten!
            Gruß, Joachim
            EibPC - Wiregate

            Kommentar


              #7
              Hallo,
              ich würde den Code ebenfalls gerne verwenden. Allerding ist nicht ganz klar, wie die Gruppenadressen eingesetzt werden.
              Ersetze ich die Variable 'S1' einfach durch eine Gruppenadresse oder wie erfolgt die Zuweisung?
              Meine Installation: HS4, EiBPC, Wiregate, DALI, Sonos Multiroom, Fritzbox, Iphone, PV

              Kommentar


                #8
                ja genau...
                also BerechneRaumpraesenz7(S1,S2,S3,S4,S5,S6,S7,Praesen z, Sekunden)
                S1,...Praesenz sind GAs
                und bei Sekunden die Verzögerungszeit
                EPIX
                ...und möge der Saft mit euch sein...
                Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                Kommentar


                  #9
                  Code:
                  Bwm = S1 or S2 or S3 or ... or Sx
                  if !Bwm and after(Bwm==AUS, Zeitspanne) then {
                      write(Praesenz, AUS) ;
                  } endif;
                  if change(Bwm) and Bwm then
                      write(Praesenz, EIN);
                  } endif;
                  Sollte es eigentlich so bringen, wie oben beschrieben...

                  Kommentar

                  Lädt...
                  X