Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Toggle/Increment/Decrement

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Toggle/Increment/Decrement

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
2 Beiträge 2 Kommentatoren 244 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    TyrionWarMage
    Developer
    schrieb am zuletzt editiert von TyrionWarMage
    #1

    Hallo Zusammen,

    ich versuche gerade ein script zu schreiben welches generell toggle/increment/decrement einbaut, also:

    command = toggle => switch state true/false bzw
    command = +10 => increment mit 10

    Ich habe bisher (für scene.0 virtual groups):

    $("scene.0.*").on(function (obj) {
        if (obj.state.val == 'toggle') {
            setStateDelayed(obj.id,!(obj.oldState.val), 10, true)        
        } else if (obj.state.val.startsWith("+")) {
            setStateDelayed(obj.id,obj.oldState.val + parseFloat(obj.state.val.substring(1)), 100, true)
        } else if (obj.state.val.startsWith("-")) {
            setStateDelayed(obj.id,obj.oldState.val - parseFloat(obj.state.val.substring(1)), 100, true)
        }
    });
    

    Das Problem ist, dass setState ohne Delayed nicht funktioniert, da anscheinend der orginal "on" setState command erst nach dem eingenem setState ausgeführt wird. Also der Effekt ohne delayed ist, dass der toggle zwar ausgeführt wird, aber direkt wieder überschrieben. Mit Delayed geht es zwar, ist aber nicht zuverlässig da es auch timing Probleme gibt (gerade mit virtual groups).

    Daher meine Frage: Kann ich das verhindern dass das "orginal" on/setState ausgeführt wird oder den zu setzen den Wert manipulieren? Also so dass nurnoch mein "überschriebener" state geschrieben wird?

    paul53P 1 Antwort Letzte Antwort
    0
    • T TyrionWarMage

      Hallo Zusammen,

      ich versuche gerade ein script zu schreiben welches generell toggle/increment/decrement einbaut, also:

      command = toggle => switch state true/false bzw
      command = +10 => increment mit 10

      Ich habe bisher (für scene.0 virtual groups):

      $("scene.0.*").on(function (obj) {
          if (obj.state.val == 'toggle') {
              setStateDelayed(obj.id,!(obj.oldState.val), 10, true)        
          } else if (obj.state.val.startsWith("+")) {
              setStateDelayed(obj.id,obj.oldState.val + parseFloat(obj.state.val.substring(1)), 100, true)
          } else if (obj.state.val.startsWith("-")) {
              setStateDelayed(obj.id,obj.oldState.val - parseFloat(obj.state.val.substring(1)), 100, true)
          }
      });
      

      Das Problem ist, dass setState ohne Delayed nicht funktioniert, da anscheinend der orginal "on" setState command erst nach dem eingenem setState ausgeführt wird. Also der Effekt ohne delayed ist, dass der toggle zwar ausgeführt wird, aber direkt wieder überschrieben. Mit Delayed geht es zwar, ist aber nicht zuverlässig da es auch timing Probleme gibt (gerade mit virtual groups).

      Daher meine Frage: Kann ich das verhindern dass das "orginal" on/setState ausgeführt wird oder den zu setzen den Wert manipulieren? Also so dass nurnoch mein "überschriebener" state geschrieben wird?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @tyrionwarmage
      Du kannst nicht einen Datenpunkt, der ein Kommando als String enthält mit einem booleschen Wert oder einer Zahl überschreiben. Das müssen 3 verschiedene Datenpunkte sein.

      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 Antwort Letzte Antwort
      0
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      692

      Online

      32.7k

      Benutzer

      82.4k

      Themen

      1.3m

      Beiträge
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
      ioBroker Community 2014-2025
      logo
      • Anmelden

      • Du hast noch kein Konto? Registrieren

      • Anmelden oder registrieren, um zu suchen
      • Erster Beitrag
        Letzter Beitrag
      0
      • Home
      • Aktuell
      • Tags
      • Ungelesen 0
      • Kategorien
      • Unreplied
      • Beliebt
      • GitHub
      • Docu
      • Hilfe