Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    624

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

[gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

Scheduled Pinned Locked Moved Blockly
7 Posts 3 Posters 418 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Alchemi
    wrote on last edited by Alchemi
    #1

    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

    OliverIOO paul53P 2 Replies Last reply
    0
    • A 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

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      wrote on last edited by OliverIO
      #2

      @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

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      A 1 Reply Last reply
      0
      • OliverIOO 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 Offline
        A Offline
        Alchemi
        wrote on last edited by
        #3

        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
        0
        • A 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

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

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

          Versuche es mal so:

          Blockly_temp.JPG

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          A 1 Reply Last reply
          1
          • paul53P paul53

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

            Versuche es mal so:

            Blockly_temp.JPG

            A Offline
            A Offline
            Alchemi
            wrote on last edited by
            #5

            @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

            paul53P 1 Reply Last reply
            0
            • A Alchemi

              @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

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by paul53
              #6

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

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

              Blockly_temp.JPG

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              A 1 Reply Last reply
              1
              • paul53P 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 Offline
                A Offline
                Alchemi
                wrote on last edited by
                #7

                @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
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                418

                Online

                32.7k

                Users

                82.6k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Home
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe