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. [erledigt] Blockly-Script - alle Lichter ausschalten nach "Doppelklick"

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    12
    1
    275

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

[erledigt] Blockly-Script - alle Lichter ausschalten nach "Doppelklick"

Scheduled Pinned Locked Moved Skripten / Logik
4 Posts 2 Posters 2.4k Views 1 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.
  • L Offline
    L Offline
    Leseratte10
    wrote on last edited by
    #1

    Hallo zusammen,

    ich habe einen Sonoff Touch und mehrere Sonoff TH in einem Zimmer. Ich möchte jetzt, wenn der Sonoff Touch eingeschaltet ist, durch einen "Doppelklick" auf den Knopf (also schnelles aus- und wieder einschalten) alle Geräte im Zimmer ausschalten.

    Habe dazu folgendes mit Blockly gebastelt:

    var doubletap_off, timeout2, timeout3;
    
    doubletap_off = false;
    on({id: "sonoff.0.DVES_0447.POWER"/*DVES_0447 POWER*/, change: "ne"}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if (doubletap_off == true) {
        setState("sonoff.0.DVES_0447.POWER"/*DVES_0447 POWER*/, false, true);
        setState("sonoff.0.DVES_5080.POWER"/*DVES_5080 POWER*/, false, true);
        setState("sonoff.0.DVES_5174.POWER"/*DVES_5174 POWER*/, false, true);
        timeout3 = setTimeout(function () {
          doubletap_off = false;
        }, 200);
      }
      if (doubletap_off == false) {
        if (getState("sonoff.0.DVES_0447.POWER").val == false) {
          doubletap_off = true;
          timeout2 = setTimeout(function () {
            doubletap_off = false;
          }, 300);
        }
      }
    });
    

    (Grafik siehe Anhang).

    DVES_0447 ist der Touch-Schalter, die anderen beiden sind die normalen Sonoff-Teile, die geschaltet werden sollen.

    Wenn ich jetzt aber den Schalter zweimal drücke, macht er erst merkwürdige Geräusche, als wenn er ziemlich schnell hintereinander immer wieder schalten würde, schmiert dann ab, und auch der ioBroker reagiert nicht mehr vernünftig. Aber warum? Ich setze doch extra erst nach einem Timeout von 200ms den Wert auf "false" zurück, damit nicht die automatisierte Schaltung wieder was auslöst …

    Gibt es in Blockly eine Möglichkeit a la "Schalte X, aber ohne irgendwelche Blockly-Trigger auszulösen"?

    Leseratte10
    5800_blockly.png

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      Für Auswertung eines Double click ist es nicht sinnvoll, den Wert auszuwerten und zu(rück) zu setzen. Die Auswertung der Timervariablen sollte ausreichen, wenn man sie nach Zeitablauf zurück setzt (timeout = null).
      493_blockly_double_click.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

      1 Reply Last reply
      0
      • L Offline
        L Offline
        Leseratte10
        wrote on last edited by
        #3

        Ist das schon der ganze Code? Da wird ja nirgendwo "timeout" mal auf irgendwas gesetzt.

        Wenn ich vor das "Execute timeout in 300 ms" noch ein "set timeout to true" mache, habe ich wieder Dauerschalten (rappeln des Relais) im Touch und danach hängt alles.

        EDIT: Anscheinend löst das automatische Setzen der drei Schalter (einschließlich meines "Trigger-Schalters) wieder irgendwas aus. Ich habe jetzt an den drei "control <schalter>with false" ein Delay von 350ms (also etwas länger als das Timeout unten) gesetzt und jetzt klappt alles. Danke für den Tipp.</schalter>
        5800_bildschirmfoto_von__2018-02-10_10-37-10_.png

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @Leseratte10:

          Ist das schon der ganze Code? Da wird ja nirgendwo "timeout" mal auf irgendwas `
          Ja, das ist der ganze Code. Die Timerobjektvariable timeout wird mit setTimeout() gesetzt. Klicke mal auf "Zeige Javascript", dann siehst Du es.

          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

          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

          766

          Online

          32.5k

          Users

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