Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Abfrage ob heute schon einmal true?

    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

    UNSOLVED Abfrage ob heute schon einmal true?

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

      Hi,
      ich möchte um 12 Uhr abfragen ob mein Sauger entweder manuell oder automatisch schon einmal gestartet wurde.
      Ich frage im Bestandsscript zyklisch verschiedene Vorraussetzungen für den automatischen Start ab (bspw. Autostart nur wenn keiner zu Hause)

      Nun möchte ich aber durch eine weiter Abfrage eine Telegram-Frage (ja/nein) senden die versendet wird wenn um 12 der Sauger noch nicht gefahren ist weil jemand als anwesend erkannt wird (Homeoffice / Handy vergessen).

      Das wollte ich wie folgt machen:

      if(new Date().getHours() >= 12 && getState('mihome-vacuum.0.control.start').lc < Date.now()){
                  sendQuestion('vacuumCleanerOn')
              }
      

      Hier fehlt mir aber die Abfrage ob der state heute schon mal true war und mir fällt gerade nicht wirklich eine effektive Lösung ein das abzufragen.

      Vielleicht hat ja einer von euch eine Idee 🙂
      Danke schonmal

      Samson71 paul53 OliverIO 3 Replies Last reply Reply Quote 0
      • Samson71
        Samson71 Global Moderator @Peoples last edited by

        @peoples sagte in Abfrage ob heute schon einmal true?:

        Hier fehlt mir aber die Abfrage ob der state heute schon mal true war und mir fällt gerade nicht wirklich eine effektive Lösung ein das abzufragen.

        Spontan und ohne Garantie:
        Eine Variable beim Start des Saugers automatisch auf true setzen und um kurz nach Mitternacht automatisch (Zeitplan) wieder auf false setzen lassen. Diese Variable dann abfragen. Bei true wurde der Sauger heute schonmal gestartet und bei false eben noch nicht.

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

          @peoples sagte: state heute schon mal true war

          const start = getState('mihome-vacuum.0.control.start');
          if(new Date().getHours() >= 12 && !start.val && start.lc < new Date().setHours(0, 0, 0, 0)) {
          
          Peoples 1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @Peoples last edited by

            @peoples
            noch eine alternative wäre es die historisierung für den datenpunkt zu aktivieren und dann die daten seit 0 Uhr abrufen und prüfen ob da true enthalten ist.

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

              @paul53
              genial!

              Danke an euch alle

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

                @peoples Bei der Lösung von @paul53 (und deinem Lösungsvorschlag) fehlt mir etwas.

                Wie / wann wird dieser Skriptschnipsel ausgeführt ?

                ich würde das insgesamt so lösen:

                schedule("0 12 * * *", async () => { 
                const start =  getState('mihome-vacuum.0.control.start');
                if (!start.val && start.lc > new Date().setHours(0, 0, 0, 0)) { 
                     console.log("letzte Änderung war nach heute morgen 0 Uhr") 
                  }
                });
                

                Dann wird täglich um 12 geschaut ob der Datenpunkt am gleichen Tag schon einmal wahr war.

                Den code von @paul53 zyklisch abzuarbeiten macht IMHO keinen Sinn.

                A.

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

                  @asgothian
                  Das ist ein Teil einer Funktion, die wie oben geschrieben sowieso zyklisch ausgeführt wird, da halbstündlich verschiedene Gegebenheiten abgefragt werden und je nach dem wird einer der Sauger gestartet und reinigt nur spezielle Bereiche.

                  Abhängig davon wer, wann zu Hause ist.
                  Eine Prüfung zu einer festen Zeit erfüllt hier nicht den Zweck.

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

                    @peoples sagte in Abfrage ob heute schon einmal true?:

                    Eine Prüfung zu einer festen Zeit erfüllt hier nicht den Zweck.

                    das widerspricht dem was du tun willst - um 12 schauen ob der Staubsauger schon gelaufen ist. Das muss genau 1 mal um 12 gemacht werden. Wenn du es im regelmässigen Ablauf lassen willst, sollte die IF abfrage so aussehen:

                    if(new Date().getHours() >= 12) {
                      const start = getState('mihome-vacuum.0.control.start');
                      if (!start.val && start.lc < new Date().setHours(0, 0, 0, 0)) 
                      {
                      }
                    }
                    

                    damm holst du das Objekt mihome-vacuum.0.control.start nicht jedesmal obwohl der Test gar nicht gewünscht ist.

                    A.

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

                      @asgothian
                      Die Sauger fahren in Abwesenheit der Bewohner automatisch zwischen 8 und 16 Uhr wenn keiner zu Hause ist.
                      Wenn ich Homeoffice habe fährt der Keller Sauger nicht, wenn jemand im EG zu Hause ist, startet der nicht, gleiches gilt fürs OG.
                      Um 12 / 16 / 18 Uhr bekomme ich, meine Frau oder die Kinder eine Telegramm Nachricht ob der Sauger im KG / EG / DG gestartet werden soll da er heute noch nicht automatisch gestartet wurde (weil jemand Anwesend ) dies kann dann mit Ja oder Nein beantworten und je nach dem startet der jeweilige Sauger oder nicht.

                      Mit deiner Änderung hast du recht, das baue ich so noch um, danke.

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      524
                      Online

                      31.9k
                      Users

                      80.2k
                      Topics

                      1.3m
                      Posts

                      javascript
                      5
                      9
                      365
                      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