Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

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

      Hallo zusammen,

      bislang konnte ich meine kleinen Herausforderungen durch viel lesen und ausprobieren, auch dank diesem Forum, ohne weitere Mithilfe lösen. Ich sehe mich aber immer noch als Anfänger.

      Aktuell stoße ich jedoch an meine Grenzen und benötige Eure Hilfe bei meinem Blockly...

      Ziel:

      • Ein CO2-Sensor meldet fleißig seine Daten an ioBroker. -> umgesetzt
      • Je nach Wertebereich und Uhrzeit/Anwesenheit soll eine Meldung mit dem aktuellen Wert erzeugt werden. -> umgesetzt
      • Die Meldungen sollen je nach Wertebereich in unterschiedlichen Intervallen wiederholt werden. -> UNGELÖST

      Hier mein aktueller Stand und das gewünschte Ziel:

      Blockly CO2 Monitor.png


      var Sprachausgabe_OK, Wertgrenze;

      on({ id: 'esphome.0.xxx.Sensor.xxx.state' /* State of CO2 /, change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      // Sprachausgabe eingrenzen auf Uhrzeit (To-Do: auf Anwesenheit und Sleep-Staus umstellen.)
      if (compareTime('08:00', null, '>') && compareTime('22:00', null, '<')) {
      Sprachausgabe_OK = 1;
      } else {
      Sprachausgabe_OK = 0;
      }
      // Wertegrenzen
      if ((obj.state ? obj.state.val : '') < 800) {
      Wertgrenze = 0;
      } else if ((obj.state ? obj.state.val : '') >= 800 && (obj.state ? obj.state.val : '') < 1000) {
      Wertgrenze = 1;
      } else if ((obj.state ? obj.state.val : '') >= 1000 && (obj.state ? obj.state.val : '') < 1500) {
      Wertgrenze = 2;
      } else if ((obj.state ? obj.state.val : '') >= 1500 && (obj.state ? obj.state.val : '') < 2000) {
      Wertgrenze = 3;
      } else if ((obj.state ? obj.state.val : '') >= 2000 && (obj.state ? obj.state.val : '') <= 3000) {
      Wertgrenze = 4;
      }
      // Infoausgabe
      if (Sprachausgabe_OK == 1 && Wertgrenze == 0) {
      setState('alexa2.0.Echo-Devices.xxx.Commands.speak' /
      speak /, (['Die Raumluftqualität ist gut. Der CO2-Wert beträgt: ',(obj.state ? obj.state.val : ''),' ppm.'].join('')));
      } else if (Sprachausgabe_OK == 1 && Wertgrenze == 1) {
      setState('alexa2.0.Echo-Devices.xxx.Commands.speak' /
      speak /, (['Die Raumluftqualität ist nicht gut. Der CO2-Wert beträgt: ',(obj.state ? obj.state.val : ''),' ppm.'].join('')));
      } else if (Sprachausgabe_OK == 1 && Wertgrenze == 2) {
      setState('alexa2.0.Echo-Devices.xxx.Commands.speak' /
      speak /, (['Die Raumluftqualität ist nur mäßig. Der CO2-Wert ist schon bei: ',(obj.state ? obj.state.val : ''),' ppm.'].join('')));
      } else if (Sprachausgabe_OK == 1 && Wertgrenze == 3) {
      setState('alexa2.0.Echo-Devices.xxx.Commands.speak' /
      speak /, (['Die Raumluftqualität hat den Maximalwert überschritten. Der CO2-Wert liegt bei: ',(obj.state ? obj.state.val : ''),' ppm.'].join('')));
      } else if (Sprachausgabe_OK == 1 && Wertgrenze == 4) {
      setState('alexa2.0.Echo-Devices.xxx.Commands.speak' /
      speak */, (['Die Raumluftqualität ist bedenklich für Körper und Geist!! Der CO2-Wert beträgt: ',(obj.state ? obj.state.val : ''),' ppm.'].join('')));
      }
      });

      Mit „Timeouts/Intervall“ hatte ich bereits „experimentiert“, aber das war mehr „im Trüben fischen“, als das es zielführend war. ☹

      Ist mein bisheriger Ansatz überhaupt OK? Oder habe ich Logik-Knoten im Kopf?
      Das Ziel bleibt dasselbe... Bitte helft.

      Viele Grüße
      Alchemi

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

        @alchemi

        Das sieht doch schon einmal okay aus.
        Mich würde es wahrscheinlich nach einer Weile nerven, wenn die Sprachausgabe sich ständig meldet und mir den aktuellen Stand ausgibt.
        Interessanter wäre es wahrscheinlich, wenn innerhalb einer gewissen Zeitspanne, ein radikaler Anstieg oder Abfall der Luftqualität stattfindet.
        Das was du ermittelst ist ziemlich okay für eine Anzeige

        du hast leider vergessen zu schreiben, wo du jetzt deine Grenzen siehst und was willst du noch umsetzen?

        im Sinne von JavaSkript/Blocky sehe ich jetzt kein Intervall oder time out.
        Das Skript reagiert ja einfach nur, bei Wertänderung

        A 1 Reply Last reply Reply Quote 0
        • A
          Alchemi @OliverIO last edited by

          Danke für die Antwort, aber meine eigentliche Frage habe ich vermutlich nicht eindeutig formuliert:
          @alchemi sagte in Daten in unterschiedlichen Intervallen verarbeiten?:

          • Die Meldungen sollen je nach Wertebereich in unterschiedlichen Intervallen wiederholt werden. -> UNGELÖST

          Siehe Bild vom Blockly...

          Und genau: Bei meinen bisherigen Versuche nerven die Ansagen! Deshalb die Frage nach Intervallen...

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

            @alchemi sagte: je nach Wertebereich in unterschiedlichen Intervallen wiederholt werden.

            Versuche es mal so:

            Blockly_temp.JPG

            A 1 Reply Last reply Reply Quote 1
            • A
              Alchemi @paul53 last edited by

              @paul53 : Vielen Dank für Deinen Vorschlag!!!

              Funktioniert soweit „wie gewünscht“, nur das anscheinend innerhalb des Intervalls der „Trigger-Wert“ nicht aktualisierst wird solange das Intervall läuft.
              Dies konnte ich mit einer weiteren Variablen lösen:

              2024-10-01 15_51_32-2024-10-01 15_01_07-Services.jpg
              2024-10-01 15_45_56-Services.jpg

              Nur leider habe ich meine Idee wieder nicht genau genug formuliert. ☹
              Ich meinte eigentlich:
              […] Die Meldungen sollen je nach „Eintritt“ in einen Wertebereich direkt erfolgen und dann in unterschiedlichen Intervallen wiederholt werden bis eine anderer Wertebereich erreicht ist.[…]

              Hat dazu jemand ne Idee?

              Sorry für Eure Zeit bisher – ich gelobe Besserung bei meinen Formulierungen!

              Gruß
              Alchemi

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

                @alchemi sagte: „Eintritt“ in einen Wertebereich direkt erfolgen

                Du meinst: Ohne die Verzögerung durch das Intervall? Dann verwende eine Funktion:

                Blockly_temp.JPG

                A 1 Reply Last reply Reply Quote 1
                • A
                  Alchemi @paul53 last edited by

                  @paul53 Das wars! Vielen lieben Dank!!

                  Das Skript funktioniert perfekt!
                  Ergebnis.png

                  Und dabei habe ich auch einiges gelernt!

                  Gruß
                  Alchemi

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  680
                  Online

                  31.9k
                  Users

                  80.3k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  287
                  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