Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Überwachung Katzenklappe mit Bewegungsmelder (gelöst)

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Überwachung Katzenklappe mit Bewegungsmelder (gelöst)

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      DocGame last edited by DocGame

      Ich habe zwischen meinem Hobbykeller und der Garage eine Brandschutztür für die ich vor einigen Tagen ein Blockly geschrieben habe.
      Ausgangslage war folgende: Ich habe auf beiden Seiten der Tür einen Aqara-BW und an der Tür einen Aqara Türsensor.
      Wenn ich vom Keller in die Garage gehe schaltet bei entsprechender Lux-Zahl die Garagenbeleuchtung ein. Im Umgekehrten Fall die Beleuchtung des Hobbykellers. Getickert wird über den Türsensor und die Richtung aus der man kommt wird über den Zeitstempel der BW's geregelt.
      Das ganze funtioniert super. Hier das Blockly:

      BWRichtung1.JPG

      <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="on_ext" id=";{K1HH4[hk,%GH|,.fmN" x="-887" y="-562">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
          <field name="CONDITION">gt</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="^E%*73m)eC7$r_%BuEy}">
              <field name="oid">linkeddevices.0.Keller.Hobbykeller.Garagentür.opened</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="WEerBsPDf}FV9:AIxt$d">
              <value name="IF0">
                <block type="logic_operation" id="W%b%Ynx5[Th]~{AJX_%g" inline="false">
                  <field name="OP">AND</field>
                  <value name="A">
                    <block type="logic_compare" id="m_xT}JoYhgw05AiTjw`@">
                      <field name="OP">LT</field>
                      <value name="A">
                        <block type="get_value" id="jd8NXR_0Wj]5bEVKviU#">
                          <field name="ATTR">val</field>
                          <field name="OID">linkeddevices.0.Keller.Hobbykeller.Bewegung.illuminance</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="@lxmI+fDES?punO5t^(b">
                          <field name="NUM">25</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_compare" id="AM~|sI*/xq~jPBJv~RTV">
                      <field name="OP">LT</field>
                      <value name="A">
                        <block type="get_value" id="7tTtQO9Wkhnh`6k:T5G{">
                          <field name="ATTR">ts</field>
                          <field name="OID">linkeddevices.0.Keller.Hobbykeller.Bewegung.occupancy</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="get_value" id="6AtWDKb7hXz8aGaO/weC">
                          <field name="ATTR">ts</field>
                          <field name="OID">linkeddevices.0.Garage.Bewegung.occupancy</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="control" id="bYAI,h59^Mn_i^uJGlIA">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                  <field name="OID">linkeddevices.0.Keller.Hobbykeller.Licht.Kellerdecke.state</field>
                  <field name="WITH_DELAY">FALSE</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="aU!4G+[3}#}e[!4{0:II">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                  <next>
                    <block type="control" id="]ZH}YHCD3vqQ8KV]C45V">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                      <field name="OID">linkeddevices.0.Keller.Hobbykeller.Licht.Kellerdecke.state</field>
                      <field name="WITH_DELAY">TRUE</field>
                      <field name="DELAY_MS">4</field>
                      <field name="UNIT">min</field>
                      <field name="CLEAR_RUNNING">TRUE</field>
                      <value name="VALUE">
                        <block type="logic_boolean" id="MeCB;qtl]!ySJmdLll)`">
                          <field name="BOOL">FALSE</field>
                        </block>
                      </value>
                    </block>
                  </next>
                </block>
              </statement>
              <next>
                <block type="controls_if" id="!_Ga7:ifyPERCJcOHq;=">
                  <value name="IF0">
                    <block type="logic_operation" id="S6t*Uf2*dv9niMZwHRE!" inline="false">
                      <field name="OP">AND</field>
                      <value name="A">
                        <block type="logic_compare" id="q-G~HOV.LGoZNF!/|E`x">
                          <field name="OP">LT</field>
                          <value name="A">
                            <block type="get_value" id="mJ`b9aYl{m:T0bI]UT]f">
                              <field name="ATTR">val</field>
                              <field name="OID">linkeddevices.0.Garage.Bewegung.illuminance</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="math_number" id="4WV!GdHlD?wy:LlzunA@">
                              <field name="NUM">25</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_compare" id="U,e;HU;xV]@/Ec?VkWX]">
                          <field name="OP">LT</field>
                          <value name="A">
                            <block type="get_value" id="vw]X}6(XXq{):@kWD{JM">
                              <field name="ATTR">ts</field>
                              <field name="OID">linkeddevices.0.Garage.Bewegung.occupancy</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="get_value" id="pgdoxDP])yAcUX;W{vI2">
                              <field name="ATTR">ts</field>
                              <field name="OID">linkeddevices.0.Keller.Hobbykeller.Bewegung.occupancy</field>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="control" id="o1v.k[U;S!)k[nEgz;..">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">linkeddevices.0.Garage.Licht.Garagendecke.POWER</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="logic_boolean" id=";}Mj^gYskVxkMK8=Fes{">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                      <next>
                        <block type="control" id=".?qUbrPheDA?IYH=`T]R">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">linkeddevices.0.Garage.Licht.Garagenfensterlicht.state</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="logic_boolean" id="dA,_p?)T5M1wd(PdLc?6">
                              <field name="BOOL">TRUE</field>
                            </block>
                          </value>
                          <next>
                            <block type="control" id="sG2UN]g@44*_p7R?+[h,">
                              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                              <field name="OID">linkeddevices.0.Garage.Licht.Garagendecke.POWER</field>
                              <field name="WITH_DELAY">TRUE</field>
                              <field name="DELAY_MS">4</field>
                              <field name="UNIT">min</field>
                              <field name="CLEAR_RUNNING">TRUE</field>
                              <value name="VALUE">
                                <block type="logic_boolean" id="~`VZy]I;aX+|M6,@ky+n">
                                  <field name="BOOL">FALSE</field>
                                </block>
                              </value>
                              <next>
                                <block type="control" id="U|LcL7n@1N25f.npt$`k">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                                  <field name="OID">linkeddevices.0.Garage.Licht.Garagenfensterlicht.state</field>
                                  <field name="WITH_DELAY">TRUE</field>
                                  <field name="DELAY_MS">4</field>
                                  <field name="UNIT">min</field>
                                  <field name="CLEAR_RUNNING">TRUE</field>
                                  <value name="VALUE">
                                    <block type="logic_boolean" id="%yYlT?Rk2O-MD`n9e).;">
                                      <field name="BOOL">FALSE</field>
                                    </block>
                                  </value>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </statement>
        </block>
      </xml>
      

      Jetzt will ich noch ein 2. Blockly für diese Hardwarekonstellation machen, da sich in dieser Tür auch unsere Katzenklappe befindet. Ich habe schon getestet und die Bewegung der Karze wird super erkannt. Nun will ich für meine VIS einen Status (Katze im Haus oder Katze drausen) erzeugen. Den entsprechenden Datenpunkt zu befüllen ist ja kein Problem. Mir bereitet das umrechnen der Timestamps Probleme. Das ganze sollte etwa so aussehen:
      Wenn Tiggerzeit des 2. BW's bis zu 15 Sek. nach tiggern des ersten kommt und der Türsensor wärend dieser Zeit auf false war habe ich die eine Richtung. Umgekehrt natürlich das gleiche. Irgendwie klappt es aber nicht so wie ich will. Hat jemand eine Idee?

      J K Grün paul53 3 Replies Last reply Reply Quote 0
      • J
        Jan1 @DocGame last edited by

        @DocGame
        ohne jetzt lange darüber nachgedacht zu haben, hatte ich eine Idee.
        Zieh doch einfach den einen Zeitstempel des BWM vom anderen ab. Das Ergebnis ist erst mal nicht relevant, sondern das Vorzeichen. Das wird einmal - und einmal + sein, somit weiß ja ob sie rein oder raus gegangen ist.

        Ich denke das sollte mit ner Abfrage größer oder kleiner 0 auszuwerten sein.

        D 1 Reply Last reply Reply Quote 0
        • D
          DocGame @Jan1 last edited by

          @Jan1 Das habe ich ja schon probiert(Ähnlich wie in dem Blockly mit dem Licht). Ich müsste das ganze aber zeitlich einschränken (daher die 10-15 Sek.) und auf jeden Fall muss ich das false der Tür für diesen Zeitraum überwachen, da mir sonst der Garagenbesuch meiner Frau(durch die Tür) als "Ausgehzeit der Katze" interpretiert wird 😻

          J 1 Reply Last reply Reply Quote 0
          • J
            Jan1 @DocGame last edited by

            @DocGame
            Na so ganz versteh ich das nicht, aber Deinem Blockly oben zu entnehmen bist auch erst am Anfang damit, sonst würdest bei der Falls nicht noch auf wahr prüfen 😉
            =wahr macht die FALLS immer und ist dann doppelt.

            Ich muss weiter arbeiten

            D 1 Reply Last reply Reply Quote 0
            • D
              DocGame @Jan1 last edited by DocGame

              @Jan1 Das oben hat ja gar nichts mit der Klappenüberwachung zu tun. Das ist nur für die Lichter und das ich auf Änderung tickere und Wahr abfrage ist nur, da ich wegen den Katzenprojekt hier rauskopiere. Stelle mal auf Wahr oder "größer als letzter" Tigger um und lasse die Fallsprüfung weg.... Das ist ja aber auch nicht meine Problemstellung, da diese Blockly (wenn auch mit 2 falls zu viel) perfekt läuft.
              Habe das Wahr aus dem Script und dem Bild oben rausgenommen um nicht vom eigentlichen Thema abzulenken....

              J 1 Reply Last reply Reply Quote 1
              • J
                Jan1 @DocGame last edited by

                @DocGame
                Klar, war auch nur ein Tipp für weiter Blocklys, wie es einfacher geht und kein Hinweis auf eine Lösung des aktuellen Problem.
                Da ich aber nicht so 100% verstanden habe, welche Variablen Du noch berücksichtigen willst, bin ich erst mal raus, da mir gerade die Zeit fehlt.

                1 Reply Last reply Reply Quote 0
                • ?
                  A Former User last edited by

                  Ich würde folgendes machen:

                  • Je ein Block für das speichern der Bewegungstimestamps. Sprich onChange Bewegungsmelder und dann via setVariable = timestamp. Damit hast du zwei Variablen timestamp1 und timestamp2.

                  • Das gleiche machst du mit der Tür. Sprich doorOpen ist deine dritte Variable. z.B doorOpen = true/false

                  • Jetzt kannst du in den beiden Bewegungstimestamps onChange blöcken deine Katzenklappe abfragen bauen. Das ganze mitteils einer Funktion die du aufrufst, damit du das nicht 2. mal bauen musst. Die Funktion hängst du dann jeweils ein.

                  Annahme: Timestamp sind in Sekunden. Wenn diese in UNIX since 1970 sind musst du diese entsprechend umrechnen.

                  func checkCat() {
                    set diff = timestamp 1 - timestamp2;
                    if (!doorOpen && diff² < 225) {  #Damit umgehst du den Vorzeichencheck und prüfst ob du in deinem 15 Sekunden bist. Bsp- (diff = -12 => diff² = 144)
                      if (diff < 0) {
                        setCatStatus = false;
                      } else {
                        setCatStatus = true;
                    } 
                  }
                  

                  Die Funktion lässt in Blockly genauso darstellen.

                  D 1 Reply Last reply Reply Quote 0
                  • D
                    DocGame @Guest last edited by

                    @Ar1lon Auf den ersten Blick verstehe ich nur Bahnhof.... Muss ich mir heute Abend mal genauer anschauen.

                    ? 1 Reply Last reply Reply Quote 0
                    • K Grün
                      K Grün @DocGame last edited by

                      @DocGame Hallo, auch wenn es nicht zum Thema gehört. Mit der Katzenklappe hast Du keine Brandschutztür mehr.
                      Hast Du Dir das gut überlegt ?

                      D 1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User @DocGame last edited by

                        @DocGame Wenn was unklar ist melde dich. Ich komme gerade nicht dazu es ein Blockly zu bauen und dann hier rein zu posten.

                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @DocGame last edited by

                          @DocGame sagte:

                          Wenn Tiggerzeit des 2. BW's bis zu 15 Sek. nach tiggern des ersten kommt und der Türsensor wärend dieser Zeit auf false war habe ich die eine Richtung.

                          Vorschlag:

                          Blockly_temp.JPG

                          D 1 Reply Last reply Reply Quote 0
                          • D
                            DocGame @K Grün last edited by

                            @K-Grün Die Klappe war schon drin, da hat noch niemand das Wort Smarthome gekannt. Denke eh, dass da nur nee Metalltür drinnen ist da keine in Holz greifbar war. 😁
                            @paul53 : muss ich gleich mal nachbauen..

                            1 Reply Last reply Reply Quote 0
                            • D
                              DocGame @paul53 last edited by DocGame

                              @paul53 Hab mal alles nachgebaut. beim letzten Teil blicke ich nicht mehr richtig durch....
                              Kommt bei dem Gemarkerten Teil ein Virtueller Datenpunkt rein? Will ja in einen Datenpunkt entweder Katze drinnen oder Katze draussen schreiben
                              katze1.JPG

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @DocGame last edited by

                                @DocGame sagte:

                                ein Virtueller Datenpunkt rein?

                                Ja.
                                Soll der Datenpunkt einen Text enthalten ? Dann so:

                                Blockly_temp.JPG

                                D 1 Reply Last reply Reply Quote 0
                                • D
                                  DocGame @paul53 last edited by

                                  @paul53 Super... Dann muss ich nur noch 3 Taster zum testen herrichten. Testen ist sonst relativ schwierig, da ich im 3 Stock sitze und das Ganze sich im keller abspielt. Mite einem Switch und 2 Tastern werde ich das später mal hier oben simulieren. Vielen Dank für die Tipps schon einmal 👍

                                  paul53 1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @DocGame last edited by paul53

                                    @DocGame sagte:

                                    Dann muss ich nur noch 3 Taster zum testen herrichten.

                                    Wozu 3 Taster ? Man kann die 3 Datenpunkte (opened / 2 * occupancy) manuell im Tab "Objekte" ändern. Unter / über 15 s Zeitabstand zwischen den beiden DP "occupancy" sollte man hinbekommen (sie triggern nur bei Änderung false --> true).

                                    D 1 Reply Last reply Reply Quote 0
                                    • D
                                      DocGame @paul53 last edited by DocGame

                                      @paul53 Klar...das geht auch aber ist doch aber in einer Minute zugewiesen(Hab den Schreibtisch mit Eingebundenen Tastern vollliegen). Den TS-State auf die Schreibtischlampe und dann wurde getestet. Habe keine Modelleisenbahn und spiele die Szenen lieber so durch(Spieltrieb).
                                      Funktioniert perfekt. Vielen Dank nochmals

                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @DocGame last edited by

                                        @DocGame sagte:

                                        Funktioniert perfekt.

                                        Dann markiere bitte das Thema in der Überschrift des ersten Beitrags als [gelöst].

                                        ? 1 Reply Last reply Reply Quote 0
                                        • ?
                                          A Former User @paul53 last edited by

                                          @paul53 jop so geht es natürlich auch. Spart zwei Rechenoperationen.

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          829
                                          Online

                                          32.0k
                                          Users

                                          80.4k
                                          Topics

                                          1.3m
                                          Posts

                                          5
                                          19
                                          921
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo