Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Trigger mit mehr

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Trigger mit mehr

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Gatam last edited by

      @gatam sagte: mache es so...

      Ja, wobei der Vergleich mit "wahr" überflüssig ist.

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

        @paul53

        Weil ich statt dem ODER dort das = einsetze.

        Ok.
        Danke dir

        paul53 Homoran 2 Replies Last reply Reply Quote 0
        • paul53
          paul53 @Gatam last edited by

          @gatam sagte: Weil ich statt dem ODER dort das = einsetze.

          Weil ein Vergleich true oder false liefert, was schon das Ergebnis der Oder-Verknüpfung ist.

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @Gatam last edited by

            @gatam sagte in Trigger mit mehr:

            @paul53

            Weil ich statt dem ODER dort das = einsetze.

            Ok.
            Danke dir

            und wenn du auf das wahr aus optischen Gründen besehst, gehört es bei beiden hin.

            G 1 Reply Last reply Reply Quote 0
            • G
              Gatam @Homoran last edited by Gatam

              @paul53

              a6edb580-0f7d-4cb7-9bbc-54e541498bb8-Screenshot_1.png

              Ist diese Version dann kurz genug und Logisch?
              2 Familienhaus - DG Wohnung = DG.Presence

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

                @gatam sagte: Ist diese Version dann kurz genug und Logisch?

                Nein, kein Vergleich, sondern ODER!
                Kürzeste Version:

                Bild_2022-05-20_115958812.png

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

                  @paul53

                  Person1 Zuhause [TRUE].
                  Person 2 verlässt das aus [FALSE], Trigger wird ausgelöst

                  UND dann steuere ObjektID DG.Presence mit TRUE oder FALSE?

                  paul53 Zarello 2 Replies Last reply Reply Quote 0
                  • paul53
                    paul53 @Gatam last edited by

                    @gatam sagte: Person1 Zuhause [TRUE].
                    Person 2 verlässt das aus [FALSE], Trigger wird ausgelöst

                    Ja, Person1(true) ODER Person2(false) = true.

                    1 Reply Last reply Reply Quote 1
                    • Zarello
                      Zarello @Gatam last edited by Zarello

                      @gatam Über die Sache mit den Vergleichen stolpern eigentlich fast alle am Anfang.
                      Ich versuche nochmal eine andere Erklärung:
                      Ein = ist für den Computer genauso eine Operation wie ein +, es werden zwei Werte miteinander verknüpft und ein Ergebnis erzeugt.
                      5 + 3 ergibt 8, soweit kennt man das. 5 = 3 ergibt falsch und 4 = 4 ergibt wahr.
                      Jetzt ist ein Wahrheitswert (boolean oder kurz bool) aber genauso ein Wert wie eine Zahl, der irgendwo stehen kann.
                      Ein falls möchte nun einen Wahrheitswert bekommen und entscheidet anhand dieses Wertes, ob mache oder sonst ausgeführt wird.
                      In Deinem Fall steht in dem Objekt mit dem Namen "Gerhard.presence" ein Wahrheitswert.
                      Dieser Wahrheitswert reicht dem falls aus.
                      Ein Vergleich aus (hole Wert von Objekt Gerhard.presence) = wahr liefert Dir ein Ergebnis dieser Vergleichsoperation.
                      Falls der Wert des Objekts wahr ist, dann ist er gleich dem Vergleichswert und das Ergebnis des Vergleichs ist wahr.
                      Falls der Wert des Objekts falsch ist, dann ist er ungleich dem Vergleichswert und das Ergebnis des Vergleichs ist falsch.
                      Du kannst also auf den Vergleich verzichten.

                      Ein und bzw. ein oder ist übrigens auch nur eine weitere solche Operation. Sie verknüpft zwei Wahrheitswerte miteinander.
                      Dummerweise lassen die meisten Programmiersprachen es zu, dass und und oder auch Zahlen oder andere Werte verarbeiten, sie verhalten sich dann aber nicht mehr so wie erwartet.
                      Das ist ein ganz wichtiger Unterschied zur natürlichen Sprache und liefert manchmal seltsame Ergebnisse.
                      Bei Wahrheitswerten und einem anschließenden Vergleich mit wahr verhält es sich wie erwartet.
                      Hinter dem Spoiler eine kleine Auflistung mit entsprechenden Operationen und deren schrittweisen Berechnungen:


                      Der natürlichen Sprache entsprechend:
                      (wahr oder falsch) = wahr ➡ wahr = wahr ➡ wahr
                      (falsch oder falsch) = wahr ➡ falsch = wahr ➡ falsch
                      (wahr und wahr) = wahr ➡ wahr = wahr ➡ wahr
                      (wahr und falsch) = wahr ➡ falsch = wahr ➡ falsch

                      Aber entgegen der natürlichen Sprache:
                      (wahr oder falsch) = falsch ➡ wahr = falsch ➡ falsch
                      (wahr und falsch) = falsch ➡ falsch = falsch ➡ wahr
                      (5 oder 3) = 3 ➡ 5 = 3 ➡ falsch
                      (5 oder 3) = 5 ➡ 5 = 5 ➡ wahr
                      (5 oder 3) < 4 ➡ 5 < 4 ➡ falsch
                      (5 und 3) = 3 ➡ 3 = 3 ➡ wahr
                      (5 und 3) = 5 ➡ 3 = 5 ➡ falsch
                      (5 und 3) < 4 ➡ 3 < 4 ➡ wahr

                      Wird in Blockly und mit Zahlen verwendet, liefert es den zweiten der beiden Werte, oder liefert den ersten Wert.
                      Deshalb möchte man solche Vergleiche eigentlich so machen:
                      (5 = 3) oder (3 = 3) ➡ falsch oder wahr ➡ wahr

                      Entschuldigt diese Wall of Text, aber ich hoffe, es hat dem ein oder anderen die Sache etwas verdeutlichen können und hilft ein wenig zu verstehen, wie Computer euch verstehen (oder missverstehen 😉 ).

                      paul53 G 2 Replies Last reply Reply Quote 1
                      • paul53
                        paul53 @Zarello last edited by paul53

                        @zarello sagte: und mit Zahlen verwendet, scheint es das Minimum der Zahlen zu liefern

                        Es erfolgt eine implizite Typwandlung: 0 --> false, alle anderen Werte liefern true. Siehe auch

                        Bei Zahlen: oder liefert den ersten Wert, und liefert den letzten Wert.

                        Zarello 2 Replies Last reply Reply Quote 0
                        • Zarello
                          Zarello @paul53 last edited by

                          @paul53 sagte in Trigger mit mehr:

                          Nein, es erfolgt eine implizite Typwandlung: 0 --> false, alle anderen Werte liefern true.

                          Das oder eine Bitweise Verknüpfung war, was ich erwartet hatte. Aber um sicher zu gehen, hatte ich folgendes kleines Blockly ausgeführt mit verschiedenen Werten und Operation und war doch sehr überrascht:
                          267d1610-d6d4-41e3-9c77-b570dbf40053-image.png

                          1 Reply Last reply Reply Quote 1
                          • Zarello
                            Zarello @paul53 last edited by

                            @paul53 sagte in Trigger mit mehr:

                            Bei Zahlen: oder liefert den ersten Wert, und liefert den letzten Wert.

                            Tatsächlich! Wieder was gelernt. Wer denkt sich denn so etwas aus, das ist doch verrückt!
                            Dann korrigiere ich mal schnell meinen Text oben.

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

                              @zarello sagte: Wer denkt sich denn so etwas aus, das ist doch verrückt!

                              Finde ich auch. Ein Konstrukt, dem man öfter begegnet, ist

                              Prüfung || 0;
                              

                              Ergibt Prüfung eine Zahl != 0, wird diese verwendet. Ergibt Prüfung undefined, null, Leerstring, false oder NaN, so wird die rechte Zahl verwendet.

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

                                @paul53 In dem Zusammenhang ergibt das ja schon wieder Sinn: Verwende die Zahl oder, falls es keine Zahl ist, verwende 0.
                                Wirklich schön finde ich das nicht, aber ich bin sowieso kein Freund von impliziten Typumwandlungen, das hat mir im Zweifelsfall bisher nur Ärger bereitet und nur relativ wenig Nutzen gebracht, ein paar eingesparte Zeichen halt auf Kosten der Sicherheit bei Änderungen.

                                1 Reply Last reply Reply Quote 0
                                • G
                                  Gatam @Zarello last edited by

                                  @zarello

                                  Vielen Dank für deinen ausführlichen Text. Man kann im Internet ja viel finden, aber kann sich nicht immer sicher sein ob es richtig ist, oder schon lange überholt.

                                  @paul53

                                  Nochmal Danke für deine Tipps.
                                  Daraufhin habe ich meine Skripte mit EG, DG und Haus Presence entsprechend angepasst. Auch meine Bewegung während Abwesendheit.

                                  Nun funktionieren sie besser und sind deutlich kürzer.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  954
                                  Online

                                  31.9k
                                  Users

                                  80.1k
                                  Topics

                                  1.3m
                                  Posts

                                  4
                                  18
                                  719
                                  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