Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Alchemi

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    A
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 6
    • Best 0
    • Groups 1

    Alchemi

    @Alchemi

    Starter

    0
    Reputation
    6
    Profile views
    6
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Alchemi Follow
    Starter

    Latest posts made by Alchemi

    • RE: [gelöst] Summe über Liste mit enum.functions

      Ein großes Danke an @paul53. Du bist (mal wieder) mein Blockly-Held!
      Funktioniert einwandfrei!
      Auf diese Lösung wäre ich nie gekommen!

      Vielen Dank!
      Gruß
      Alchemi

      posted in Blockly
      A
      Alchemi
    • [gelöst] Summe über Liste mit enum.functions

      Hallo zusammen,

      für ein zu planendes "Balkonkraftwerk" wollte ich jetzt mal meine einzelnen Verbraucher analysieren.
      Hierfür wollte ich auch meine "Grundlast" berechnen.

      Bei bislang über 20 Geräten (Tendenz steigend) kam mir der Gedanke es über "enum.functions" zu versuchen.
      Also alle benötigten "states" in eine "functions" gepackt, aber mit meinem Blockly komme ich gerade nicht weiter:
      Test 1 - Blockly.png

      Die Liste wird so wie ich das sehe erstellt, aber die "Grundlast" komisch/falsch addiert:
      Test 1 - Log.png

      Zum Test habe ich mal vier Geräte "manuell" eingebunden:
      Test 2 - Blockly.png

      Hier wird für mich korrekt addiert:
      Test 2 - Log.png

      Hat jemand einen Tip für mich, oder gibt es gar schon etwas "fertiges", dass ich nur nicht gefunden habe?

      Vielen Dank im Voraus.
      Gruß
      Alchemi

      Hier noch die Blocklys in JS:


      var verbraucher, verbraucher_2, i, grundlast_2, grundlast;

      // Test 1: mit enum.functions
      on({ id: [].concat(Array.prototype.slice.apply($('stateid=*'))), change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      verbraucher = [];
      var i_list = Array.prototype.slice.apply($('stateid=*'));
      for (var i_index in i_list) {
      i = i_list[i_index];
      verbraucher.push([getState(i).val]);
      }
      grundlast = verbraucher.reduce(function(x, y) {return x + y;}, 0);
      console.info(('Verbraucher: ' + String(verbraucher)));
      console.info(('Grundlast: ' + String(grundlast)));
      });

      // Test 2: "manuell" mit 4 Objekten
      on({ id: [].concat(['sonoff.0.SD02_wz_Multimedia.ENERGY_Power']).concat(['sonoff.0.SD03_wz_Server.ENERGY_Power']).concat(['sonoff.0.SD09_ku_Spuelmaschine.ENERGY_Power']).concat(['sonoff.0.SD06_ku_Kuehlschrank.ENERGY_Power']), change: 'ne' }, async (obj) => {
      verbraucher_2 = [getState('sonoff.0.SD02_wz_Multimedia.ENERGY_Power').val, getState('sonoff.0.SD03_wz_Server.ENERGY_Power').val, getState('sonoff.0.SD09_ku_Spuelmaschine.ENERGY_Power').val, getState('sonoff.0.SD06_ku_Kuehlschrank.ENERGY_Power').val];
      grundlast_2 = verbraucher_2.reduce(function(x, y) {return x + y;}, 0);
      console.info(('Verbraucher 2: ' + String(verbraucher_2)));
      console.info(('Grundlast 2: ' + String(grundlast_2)));
      });

      //JTNDeG1sJxxxxxxxxxxxxxxx

      posted in Blockly
      A
      Alchemi
    • RE: [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

      @paul53 Das wars! Vielen lieben Dank!!

      Das Skript funktioniert perfekt!
      Ergebnis.png

      Und dabei habe ich auch einiges gelernt!

      Gruß
      Alchemi

      posted in Blockly
      A
      Alchemi
    • RE: [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

      @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

      posted in Blockly
      A
      Alchemi
    • RE: [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

      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...

      posted in Blockly
      A
      Alchemi
    • [gelöst] Daten in unterschiedlichen Intervallen verarbeiten?

      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

      posted in Blockly
      A
      Alchemi
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo