NEWS


  • Hallo zusammen,

    ioBroker ist ein erstklassiges Projekt mit fast unbegrenzten Möglichkeiten - vielen Dank mal an alle, die das möglich machen.

    Mir fällt aber auf, dass das Thema "Fehlerbehandlung" und hier insbesondere Rückmeldung bzw. der Ack-State quasi nicht behandelt wird, obwohl ioBroker ja die Funktionen beinhaltet.

    Wir gehen ja in der Regel immer davon aus, dass der ausgelöste Befehl auch ankommt. Es gibt aber unzählige Möglichkeiten, warum das eben nicht passiert, z.B. weil die Verbindung zum Aktor gestört ist oder er garnicht aktiv ist (Shelly: keine WLAN-Verbindung oder Aktor stromlos, Homematic: duty cycle überschritten etc.).

    Extrembeispiel ist sicher die Gartenbewässerung, bei der der Aus-Befehl nicht ankommt (und in ioBroker / VIS und Co. aber als "aus" signalisiert wird).

    Ein Topic dazu habe ich z.B. hier gefunden (Ack-State-Überwachung mit Blockly):
    https://forum.iobroker.net/topic/32275/ack-state-abfragen-lesen/5

    Welche Möglichkeit gibt es denn, das etwas zu professionalisieren, am besten mit einer Liste, in die Datenpunkte aufgenommen werden, die überwacht werden sollen? Sehr gerne mit oben verlinktem Blockly-Skript. Die Signalisierung in VIS erst bei erfolgreicher Rückmeldung ist dann wieder ein anderes Thema.

    Danke Euch 🙂


  • IOBaer sagte:

    mit einer Liste, in die Datenpunkte aufgenommen werden, die überwacht werden sollen? Sehr gerne mit oben verlinktem Blockly-Skript.

    Mit Blockly wird das leider nichts, da man in Blockly kein Array of timers verwenden kann. In Javascript geht es etwa so:

    const ids = ['id1', 'id2', 'id3'];
    const timers = [];
    const vals = [];
    
    on({id: ids}, function (dp) {
      let idx = ids.indexOf(dp.id);
      if (dp.state.ack) {
        if (dp.state.val == vals[idx]) clearTimeout(timers[idx]); // Ist = Soll
      } else if (dp.state.val != dp.oldState.val) {
        vals[idx] = dp.state.val;
        timers[idx] = setTimeout(function () {
          // sendTo('...');
        }, 2000);
      }
    });
    

  • Ganz lieben Dank.

    Gibt es eine Möglichkeit, nur die Auslöselogik in JS zu hinterlegen und den Rest in Blockly abzubilden?

    Was müsste ich in Deinem JS anpassen?


  • IOBaer sagte:

    den Rest in Blockly abzubilden?

    Welchen Rest ?
    Das Problem in Blockly ist "Ausführen timeout".


  • Warum funktioniert dann das verlinkte Blockly? Allerdings natürlich nur mit einem Datenpunkt.

    Mit Rest meine ich das, was dann passieren soll, z.B. eine Telegram-Nachricht o.ä.

    Danke Dir.


  • IOBaer sagte:

    Warum funktioniert dann das verlinkte Blockly?

    Weil ein Datenpunkt nur eine Timer-Variable (timeout) und kein Array of timers benötigt.


  • Verstehe. Ich muss aber nun in diesem JS auch eintragen, was danach passieren soll und kann kein Blockly antriggern? Wobeis ich dann ja auch die Frage stellen würde, wie man die Informationen wie betroffener Datenpunkt o.ä. übergibt.

    Edit: sieht ähnlich aus wie https://forum.iobroker.net/topic/32275/ack-state-abfragen-lesen/23


  • IOBaer sagte:

    Ich muss aber nun in diesem JS auch eintragen, was danach passieren soll und kann kein Blockly antriggern?

    Nein. Wie willst Du dem separaten Blockly-Skript z.B. den Datenpunktnamen übergeben ?
    Das Senden wirst Du auch in Javascript hinbekommen, z.B.

    sendTo('telegram', {user: 'UserName', text:  dp.common.name + ' wurde nicht bestätigt !'});
    

  • paul53 Funktioniert in einem ersten Test einwandfrei. Vielen Dank. Da wird dann auch wieder klar, dass an (direktem) JS kein Weg vorbeiführt.

Suggested Topics

  • 1324
  • 6
  • 6
  • 13
  • 11
  • 5
  • 5
  • 2

687
Online

34.7k
Users

40.8k
Topics

559.0k
Posts