Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Einfaches Script aber "Probleme" mit Timeout

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Einfaches Script aber "Probleme" mit Timeout

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

      Mahlzeit zusammen,
      ich nutze ioBroker bei mir für die einfachsten Sachen, in Sachen Programmierung bin ich leider nicht so fit, ich wollte grad eine Denkbar einfaches "Alarmanlagen" Script erstellen.
      Falls Bewegung in meinem Lager erkannt wird, und sich mein Handy nicht im Wlan befindet eine Nachricht über Telegram.
      Die Nachricht soll aber erst 1 Minute versendet werden, da es manchmal einen kurzen Augenblick dauert bis sich das Handy verbunden hat, das löst man wohl mit Timeout?
      5bae7f98-4797-4ca9-893f-4445f7030391-image.png
      Habs jetzt so versucht, aber das klappt nicht, kann mir jemand helfen? 🙂

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @UncleB last edited by Codierknecht

        @uncleb
        1.000 ms sind 1 Sekunde. Ich empfehle daher den anderen Block - ist übersichtlicher:

        ed1f0400-7d64-4d8a-952d-81755a763065-image.png

        https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps/9

        U 1 Reply Last reply Reply Quote 0
        • U
          UncleB @Codierknecht last edited by

          Hallo @codierknecht, danke für die Hilfe,
          das funktioniert schon mal, Nachricht wird ne Minute später gesendet.
          Allerdings bekomme ich die Nachricht das Bewegung erkannt wurde trotzdem.
          Ich muss den Timeout zwischen den Bedingungen einbauen oder?
          Also: Bewegung Erkannt -> Minute warten -> Handy immer noch offline -> Nachricht.
          Kannst mir da nochmal kurz helfen?

          Asgothian 1 Reply Last reply Reply Quote 0
          • Asgothian
            Asgothian Developer @UncleB last edited by Asgothian

            @uncleb sagte in Einfaches Script aber "Probleme" mit Timeout:

            Kannst mir da nochmal kurz helfen?

            Screenshot 2024-07-29 at 12.32.36.png
            Bin zwar nicht @Codierknecht , aber helfen kann ich.

            • Trigger am besten auf "ist grösser als vorher" - dann kommt der Trigger nur in dem Moment wo das erste mal Bewegung erkannt wird.
            • Die Abfrage ob Handy nicht im WLan brauchst du doppelt - einmal vor dem Timeout, einmal im Timeout, damit du den Timeout nur startest wenn auch wirklich das Handy nicht im WLan ist.
            • Das Stop-Timeout kann raus, besser die Abfrage das der Timeout noch nicht läuft, ansonsten wird der Timeout bei jedem neuen Auslösen des BWM gelöscht und die Meldung kommt ggf. nie.

            A.
            Nachtrag: Trigger auf test_dp, Value of Objekt ID ist Is online von Deinem Beispiel oben.

            Codierknecht 1 Reply Last reply Reply Quote 3
            • Codierknecht
              Codierknecht Developer Most Active @Asgothian last edited by

              @asgothian
              Ich würd's ähnlich machen. Hier mal zur Vereinfachung auf Deutsch 😉

              5866a7b9-0139-4a27-97e3-8980b558033c-image.png

              @UncleB
              Es passiert folgendes:

              • wenn Bewegung erkannt wird (größer als letztes), wird geprüft, ob das Handy online ist und noch kein Timer läuft.
                In diesem Fall wird der timeout gestartet.
              • Feuert nach 1 Minute der timeout, wird nochmal geprüft, ob das Handy nicht möglicherweise inzwischen online ist.
                Nur in diesem Fall wird die Meldung gesendet.

              So funktioniert das auch, wenn ein "Besucher" einmal kurz den Melder auslöst und sich dann min. 1 Minute ruhig verhält.
              Falls Du selbst der Besucher bist, sollte sich ja innerhalb der Minute das Handy eingeloggt haben.

              U 1 Reply Last reply Reply Quote 0
              • U
                UncleB @Codierknecht last edited by

                @codierknecht
                Danke euch beiden, das funktioniert wunderbar, auch wenn ich den "nicht" Baustein nicht ganz verstehe.

                Und wenn jetzt noch paar Clienten auf die "Whitelist" sollen dann mach ich einfach n "oder" dazu
                76030a44-d505-4a64-a8cf-a280216c9e82-image.png

                Codierknecht Asgothian 2 Replies Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @UncleB last edited by

                  @uncleb sagte in Einfaches Script aber "Probleme" mit Timeout:

                  auch wenn ich den "nicht" Baustein nicht ganz verstehe

                  Ein "nicht" (not) negiert einen bool'schen Wert.
                  So wie Du das machst (Falls Wert von X = wahr) wäre das unnötig. Aber Programmierer sind faul, darum vereinfachen sie alle was geht.
                  Geprüft wird ja eine Gesamtaussage.
                  Ein "Wert von X = falsch" liefert true, wenn der Wert false ist.
                  Ein "Wert von X = wahr" liefert true, wenn der Wert true ist.
                  In diesem Fall kann ich auch gleich schreiben "Wenn Wert von X". Denn in X steht auch nur true oder false.
                  Wenn etwas passieren soll, wenn der Wert des Objektes X false ist, nimmt man das "nicht". Denn "nicht falsch" ergibt wieder? Richtig ... "wahr".

                  Auch komplexe Ausdrücke wie "Wert von X = 42 UND Wert von Y = 4711 ODER Wert von Z = Wahr ODER is_online" liefern nur eine einzige Aussage zurück ... true oder false.
                  Und auf diese eine Aussage reagiert das "Falls".

                  Vielleicht wird das noch klarer, wenn man sich den JS-Code ansieht:

                  // Laie
                  if (occupancy == true && is_online == false)
                  // Programmierer (schreibfaul)
                  if (occupance && !is_online)
                  
                  1 Reply Last reply Reply Quote 1
                  • Asgothian
                    Asgothian Developer @UncleB last edited by Asgothian

                    @uncleb sagte in Einfaches Script aber "Probleme" mit Timeout:

                    @codierknecht
                    Danke euch beiden, das funktioniert wunderbar, auch wenn ich den "nicht" Baustein nicht ganz verstehe.

                    Und wenn jetzt noch paar Clienten auf die "Whitelist" sollen dann mach ich einfach n "oder" dazu
                    76030a44-d505-4a64-a8cf-a280216c9e82-image.png

                    Ja, einfach mit oder (zumindest wenn es reicht das mindestens einer da ist).

                    Aber: Du hast die Falls-Abfrage vor dem Timeout falsch umgesetzt. Durch den Trigger auf "ist grösser als vorher" wir der Trigger nur aktiv wenn der Wert von occupancy von falsch auf wahr wechselt - die Abfrage ob er noch wahr ist kann also entfallen. Wichtiger wäre da die Liste der Handys' die im WLan sein sollen abzufragen, damit der Timeout gar nicht gestartet wird wenn die noch im WLan sind.

                    A.
                    Nachtrag: wenn die Anzahl der Klienten grösser wird (grösser als 3), dann macht es Sinn unter 0_userdata einen eigenen Datenpunkt dafür anzulegen das alle Mobiltelefone im WLan angemeldet sind. Diesen kannst du dann auf die folgende Art und Weise aktuell halten:

                    Screenshot 2024-07-29 at 14.00.52.png
                    Das Skript ist so aufgebaut das der Datenpunkt auf wahr steht wenn mindestens 1 Handy im WLan ist.

                    Das ist effektiver als jedes mal wenn der BWM Auslöst alle 5 Datenpunkte abzuklappern.

                    U 1 Reply Last reply Reply Quote 0
                    • U
                      UncleB @Asgothian last edited by

                      @asgothian danke für Eure Hilfe,
                      das muss ich mir ansehen, allein schon das mit der Liste is mir n bisschen zuuu komplex 🙂

                      Asgothian 1 Reply Last reply Reply Quote 0
                      • Asgothian
                        Asgothian Developer @UncleB last edited by

                        @uncleb sagte in Einfaches Script aber "Probleme" mit Timeout:

                        @asgothian danke für Eure Hilfe,
                        das muss ich mir ansehen, allein schon das mit der Liste is mir n bisschen zuuu komplex 🙂

                        Wie gesagt - das mit der Liste wird erst gebraucht wenn deine "whitelist" länger wird.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        534
                        Online

                        32.0k
                        Users

                        80.3k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        328
                        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