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. Blockly
  5. Scripte stossen sich gegenseitig an (loop)

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

Scripte stossen sich gegenseitig an (loop)

Geplant Angeheftet Gesperrt Verschoben Blockly
blockly
4 Beiträge 3 Kommentatoren 327 Aufrufe 3 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.
  • W Offline
    W Offline
    wizzardking
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen

    Dies ist ein generelles Problem, welches ich nun schon mehrmals hatte, ich nun aber einfach versuche mit diesem simplen Beispiel zu erklären.

    Ich habe für eine LED vier verschiedene Objekte:

    • Level (0-100)
    • Rot (0-255)
    • Grün (0-255)
    • Blau (0-255)

    Ich habe 2 Scripte erstellt:

    1. Wenn eines der Farben-Datenpunkte geändert wird, so wird der "Level" neu berechnet
    2. Wenn der Level-Wert verändert wird, so werden die Farben-Datenpunkte neu berechnet.

    In beiden Blockly-Scripten wird die Ausgabe auf eine ganze Zahl gerundet, bevor diese in das Objekt geschrieben wird.
    Durch das Runden auf die Ganz-Zahl kann es nun aber vorkommen, dass sich die beiden Scripte gegenseitig anstossen und dies in einem unendlichen Loop endet.

    Ich habe dies lösen können, indem ich noch einen weiteren Datenpunkt erstellt habe, welcher vor den Änderungen für 100ms auf true und anschliessend wieder auf false gesetzt wird. Die Scripte haben dann beide die Logik, dass nur etwas getan werden soll, wenn der neue Datenpunkt auf "false" steht.
    Funktioniert zwar, ist aber nicht sehr elegant. Hat hierfür jemand eine Lösung, welche ohne zusätzlichen Datenpunkt auskommt?

    Ich könnte z.B. die beiden Scripte in ein einzelnes Script verwandeln und auswählen, dass das Script nur gestartet werden darf, wenn dieses nicht bereits läuft.
    Nur wie lässt sich dies einstellen?

    paul53P AlCalzoneA 2 Antworten Letzte Antwort
    0
    • W wizzardking

      Hallo zusammen

      Dies ist ein generelles Problem, welches ich nun schon mehrmals hatte, ich nun aber einfach versuche mit diesem simplen Beispiel zu erklären.

      Ich habe für eine LED vier verschiedene Objekte:

      • Level (0-100)
      • Rot (0-255)
      • Grün (0-255)
      • Blau (0-255)

      Ich habe 2 Scripte erstellt:

      1. Wenn eines der Farben-Datenpunkte geändert wird, so wird der "Level" neu berechnet
      2. Wenn der Level-Wert verändert wird, so werden die Farben-Datenpunkte neu berechnet.

      In beiden Blockly-Scripten wird die Ausgabe auf eine ganze Zahl gerundet, bevor diese in das Objekt geschrieben wird.
      Durch das Runden auf die Ganz-Zahl kann es nun aber vorkommen, dass sich die beiden Scripte gegenseitig anstossen und dies in einem unendlichen Loop endet.

      Ich habe dies lösen können, indem ich noch einen weiteren Datenpunkt erstellt habe, welcher vor den Änderungen für 100ms auf true und anschliessend wieder auf false gesetzt wird. Die Scripte haben dann beide die Logik, dass nur etwas getan werden soll, wenn der neue Datenpunkt auf "false" steht.
      Funktioniert zwar, ist aber nicht sehr elegant. Hat hierfür jemand eine Lösung, welche ohne zusätzlichen Datenpunkt auskommt?

      Ich könnte z.B. die beiden Scripte in ein einzelnes Script verwandeln und auswählen, dass das Script nur gestartet werden darf, wenn dieses nicht bereits läuft.
      Nur wie lässt sich dies einstellen?

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

      @wizzardking sagte:

      Hat hierfür jemand eine Lösung, welche ohne zusätzlichen Datenpunkt auskommt?

      Zusätzliche Abfrage (für Instanz: Javascript.0)

      falls Ursprung != "system.adapter.javascript.0" und vorheriger Ursprung != "system.adapter.javascript.0"
      

      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
      • W Offline
        W Offline
        wizzardking
        schrieb am zuletzt editiert von
        #3

        Danke Vielmals.
        Nur, wie lässt sich der Ursprung auf ein spezifisches Script zurückführen?
        In IOBroker wird als Ursprung einfach immer nur der Javascript Adapter (system.adapter.javascript.0) angezeigt.

        Wenn ich nun aber mittels eines anderen Scripts die RGB Werte verändere, dann sollte der Level Wert aber dennoch verändert werden, was in dem Fall aber nicht passieren würde.

        1 Antwort Letzte Antwort
        0
        • W wizzardking

          Hallo zusammen

          Dies ist ein generelles Problem, welches ich nun schon mehrmals hatte, ich nun aber einfach versuche mit diesem simplen Beispiel zu erklären.

          Ich habe für eine LED vier verschiedene Objekte:

          • Level (0-100)
          • Rot (0-255)
          • Grün (0-255)
          • Blau (0-255)

          Ich habe 2 Scripte erstellt:

          1. Wenn eines der Farben-Datenpunkte geändert wird, so wird der "Level" neu berechnet
          2. Wenn der Level-Wert verändert wird, so werden die Farben-Datenpunkte neu berechnet.

          In beiden Blockly-Scripten wird die Ausgabe auf eine ganze Zahl gerundet, bevor diese in das Objekt geschrieben wird.
          Durch das Runden auf die Ganz-Zahl kann es nun aber vorkommen, dass sich die beiden Scripte gegenseitig anstossen und dies in einem unendlichen Loop endet.

          Ich habe dies lösen können, indem ich noch einen weiteren Datenpunkt erstellt habe, welcher vor den Änderungen für 100ms auf true und anschliessend wieder auf false gesetzt wird. Die Scripte haben dann beide die Logik, dass nur etwas getan werden soll, wenn der neue Datenpunkt auf "false" steht.
          Funktioniert zwar, ist aber nicht sehr elegant. Hat hierfür jemand eine Lösung, welche ohne zusätzlichen Datenpunkt auskommt?

          Ich könnte z.B. die beiden Scripte in ein einzelnes Script verwandeln und auswählen, dass das Script nur gestartet werden darf, wenn dieses nicht bereits läuft.
          Nur wie lässt sich dies einstellen?

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von AlCalzone
          #4

          @wizzardking Wo kommt die ursprüngliche Änderung her? Eigentlich gibt es für sowas das ACK (bestätigt) Flag.
          Bei Änderungen aus anderen Adaptern oder dem Admin ist dieses false, dann musst du drauf reagieren. Wenn du selbst die Datenpunkte setzt, ohne dass darauf reagiert werden soll (also eine Bestätigung), solltest du das Flag setzen.

          Das gleiche dürfte auch für Skripte gelten. Also nur auf ACK=false triggern, "fremde" Datenpunkte mit ACK=false setzen und "eigene" Datenpunkte mit ACK=true setzen.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          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

          280

          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