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. Einsteigerfragen
  4. Szenen Adapter: einzele mit DP de-/aktivieren

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Szenen Adapter: einzele mit DP de-/aktivieren

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
16 Beiträge 3 Kommentatoren 661 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.
  • A Offline
    A Offline
    australien
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    im Adapter bzw in den Szenen ist es manuel möglich einzelne DP aus der Szenen zu deaktiveren.
    Ist dies auch mittels script bzw DP möglich?
    7beb0f61-5036-4da5-bbfb-efdffb5ff588-grafik.png

    danke Euch

    HomoranH 1 Antwort Letzte Antwort
    0
    • A australien

      Hallo zusammen,

      im Adapter bzw in den Szenen ist es manuel möglich einzelne DP aus der Szenen zu deaktiveren.
      Ist dies auch mittels script bzw DP möglich?
      7beb0f61-5036-4da5-bbfb-efdffb5ff588-grafik.png

      danke Euch

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #2

      @australien ist das hier nichts?
      Screenshot_20250728-172138_Firefox.jpg

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      A 1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @australien ist das hier nichts?
        Screenshot_20250728-172138_Firefox.jpg

        A Offline
        A Offline
        australien
        schrieb am zuletzt editiert von
        #3

        @homoran stimmt, hier in scenes ist nichts drinnen, leer.

        HomoranH 1 Antwort Letzte Antwort
        0
        • A australien

          @homoran stimmt, hier in scenes ist nichts drinnen, leer.

          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #4

          @australien sagte in Szenen Adapter: einzele mit DP de-/aktivieren:

          in scenes ist nichts drinnen, leer.

          richtig, bei mir auch!

          deswegen darüber nachsehen

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          A 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @australien sagte in Szenen Adapter: einzele mit DP de-/aktivieren:

            in scenes ist nichts drinnen, leer.

            richtig, bei mir auch!

            deswegen darüber nachsehen

            A Offline
            A Offline
            australien
            schrieb am zuletzt editiert von
            #5

            @homoran das ist mir klar, da stehen auch die Werte der einzelnen Szenen richtig drinnen und es wird auch alles richtig ausgeführt.

            Nur möchte ich nun situativ einzelne DP aus der Szene per Javascript tempurär deaktiveren bzw aktivieren.
            Im Adapter ist das ja mit den Schiebern möglich, darum die Frage.

            016ee866-fab7-45c9-969d-2bae067021ad-grafik.png

            paul53P HomoranH 2 Antworten Letzte Antwort
            0
            • A australien

              @homoran das ist mir klar, da stehen auch die Werte der einzelnen Szenen richtig drinnen und es wird auch alles richtig ausgeführt.

              Nur möchte ich nun situativ einzelne DP aus der Szene per Javascript tempurär deaktiveren bzw aktivieren.
              Im Adapter ist das ja mit den Schiebern möglich, darum die Frage.

              016ee866-fab7-45c9-969d-2bae067021ad-grafik.png

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

              @australien sagte: einzelne DP aus der Szene per Javascript tempurär deaktiveren bzw aktivieren.

              Zeige bitte die OBJEKTDATEN deiner Szene in Code tags.

              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
              • A australien

                @homoran das ist mir klar, da stehen auch die Werte der einzelnen Szenen richtig drinnen und es wird auch alles richtig ausgeführt.

                Nur möchte ich nun situativ einzelne DP aus der Szene per Javascript tempurär deaktiveren bzw aktivieren.
                Im Adapter ist das ja mit den Schiebern möglich, darum die Frage.

                016ee866-fab7-45c9-969d-2bae067021ad-grafik.png

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #7

                @australien sagte in Szenen Adapter: einzele mit DP de-/aktivieren:

                da stehen auch die Werte der einzelnen Szenen richtig drinne

                ich habe zum Test eine Szene mit Namen szene0 angelegt.
                Ich habe unter scene.0 einen Datenpunkt scene0 der von true auf false und zurück wechselt, wenn ich fie Szene im Adaptr (de-) aktiviere

                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                A 1 Antwort Letzte Antwort
                0
                • HomoranH Homoran

                  @australien sagte in Szenen Adapter: einzele mit DP de-/aktivieren:

                  da stehen auch die Werte der einzelnen Szenen richtig drinne

                  ich habe zum Test eine Szene mit Namen szene0 angelegt.
                  Ich habe unter scene.0 einen Datenpunkt scene0 der von true auf false und zurück wechselt, wenn ich fie Szene im Adaptr (de-) aktiviere

                  A Offline
                  A Offline
                  australien
                  schrieb am zuletzt editiert von
                  #8

                  @homoran
                  ich kann leider diese nicht in Code tags anzeigen lassen, darum die Bilder.

                  0de7f600-8b08-4da4-b8f3-fc8e09cb3096-grafik.png
                  8e0209eb-563d-46ac-b3bc-ff434cbafc4a-grafik.png

                  HomoranH 1 Antwort Letzte Antwort
                  0
                  • A australien

                    @homoran
                    ich kann leider diese nicht in Code tags anzeigen lassen, darum die Bilder.

                    0de7f600-8b08-4da4-b8f3-fc8e09cb3096-grafik.png
                    8e0209eb-563d-46ac-b3bc-ff434cbafc4a-grafik.png

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #9

                    @australien sagte in Szenen Adapter: einzele mit DP de-/aktivieren:

                    ich kann leider diese nicht in Code tags anzeigen lassen

                    • Expertenmodus
                    • Bleistift
                    • Objektdaten
                    • -> json kopieren und in code-tags posten

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    A 1 Antwort Letzte Antwort
                    0
                    • HomoranH Homoran

                      @australien sagte in Szenen Adapter: einzele mit DP de-/aktivieren:

                      ich kann leider diese nicht in Code tags anzeigen lassen

                      • Expertenmodus
                      • Bleistift
                      • Objektdaten
                      • -> json kopieren und in code-tags posten
                      A Offline
                      A Offline
                      australien
                      schrieb am zuletzt editiert von australien
                      #10

                      @homoran
                      jetzt hab ich es.

                      {
                        "common": {
                          "name": "Rollo EG SW",
                          "type": "mixed",
                          "role": "scene.state",
                          "desc": "Rollo EG südwesten",
                          "enabled": true,
                          "read": true,
                          "write": true,
                          "def": false,
                          "engine": "system.adapter.scenes.0"
                        },
                        "native": {
                          "onTrue": {
                            "trigger": {},
                            "cron": null,
                            "astro": null
                          },
                          "onFalse": {
                            "enabled": false,
                            "trigger": {},
                            "cron": null,
                            "astro": null
                          },
                          "easy": true,
                          "burstInterval": 1000,
                          "virtualGroup": true,
                          "members": [
                            {
                              "id": "alias.0.Rollo.EG.WZ.Fenster SW.Position",
                              "setIfTrue": null,
                              "setIfFalse": null,
                              "stopAllDelays": true,
                              "desc": null,
                              "disabled": false,
                              "delay": 0
                            },
                            {
                              "id": "alias.0.Rollo.EG.Kueche.SW.Position",
                              "setIfTrue": null,
                              "setIfFalse": null,
                              "stopAllDelays": true,
                              "desc": null,
                              "disabled": false,
                              "delay": 0
                            }
                          ]
                        },
                        "type": "state",
                        "_id": "scene.0.Rollo_EG_SW",
                        "from": "system.adapter.admin.0",
                        "user": "system.user.admin",
                        "ts": 1753719859965,
                        "acl": {
                          "object": 1636,
                          "state": 1636,
                          "owner": "system.user.admin",
                          "ownerGroup": "system.group.administrator"
                        }
                      }
                      

                      und schon auch gefunden. Nur wie kann ich aus dem DP die Objectdaten mit JS umschreiben? wenn ich nur ein bestimmtes dissabel auf true oder false stellen will.

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • A australien

                        @homoran
                        jetzt hab ich es.

                        {
                          "common": {
                            "name": "Rollo EG SW",
                            "type": "mixed",
                            "role": "scene.state",
                            "desc": "Rollo EG südwesten",
                            "enabled": true,
                            "read": true,
                            "write": true,
                            "def": false,
                            "engine": "system.adapter.scenes.0"
                          },
                          "native": {
                            "onTrue": {
                              "trigger": {},
                              "cron": null,
                              "astro": null
                            },
                            "onFalse": {
                              "enabled": false,
                              "trigger": {},
                              "cron": null,
                              "astro": null
                            },
                            "easy": true,
                            "burstInterval": 1000,
                            "virtualGroup": true,
                            "members": [
                              {
                                "id": "alias.0.Rollo.EG.WZ.Fenster SW.Position",
                                "setIfTrue": null,
                                "setIfFalse": null,
                                "stopAllDelays": true,
                                "desc": null,
                                "disabled": false,
                                "delay": 0
                              },
                              {
                                "id": "alias.0.Rollo.EG.Kueche.SW.Position",
                                "setIfTrue": null,
                                "setIfFalse": null,
                                "stopAllDelays": true,
                                "desc": null,
                                "disabled": false,
                                "delay": 0
                              }
                            ]
                          },
                          "type": "state",
                          "_id": "scene.0.Rollo_EG_SW",
                          "from": "system.adapter.admin.0",
                          "user": "system.user.admin",
                          "ts": 1753719859965,
                          "acl": {
                            "object": 1636,
                            "state": 1636,
                            "owner": "system.user.admin",
                            "ownerGroup": "system.group.administrator"
                          }
                        }
                        

                        und schon auch gefunden. Nur wie kann ich aus dem DP die Objectdaten mit JS umschreiben? wenn ich nur ein bestimmtes dissabel auf true oder false stellen will.

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

                        @australien sagte: wie kann ich aus dem DP die Objectdaten mit JS umschreiben?

                        Versuche es mal so:

                        const idScene = 'scene.0.Rollo_EG_SW';
                        const obj = getObject(idScene);
                        
                        function controlDp(id, enable) {
                            for(let member of obj.native.members) {
                                if(member.id == id) {
                                    member.disabled = !enable;
                                    break;
                                }    
                            }
                            setObject(idScene, obj);
                        }
                        
                        const idDp = 'alias.0.Rollo.EG.Kueche.SW.Position';
                        controlDp(idDp, true); // Aktivierung
                        

                        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

                        A 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @australien sagte: wie kann ich aus dem DP die Objectdaten mit JS umschreiben?

                          Versuche es mal so:

                          const idScene = 'scene.0.Rollo_EG_SW';
                          const obj = getObject(idScene);
                          
                          function controlDp(id, enable) {
                              for(let member of obj.native.members) {
                                  if(member.id == id) {
                                      member.disabled = !enable;
                                      break;
                                  }    
                              }
                              setObject(idScene, obj);
                          }
                          
                          const idDp = 'alias.0.Rollo.EG.Kueche.SW.Position';
                          controlDp(idDp, true); // Aktivierung
                          
                          A Offline
                          A Offline
                          australien
                          schrieb am zuletzt editiert von australien
                          #12

                          @paul53 das hatte funktioniert.
                          nun hab ich das ganze eingebaut und mit log versehen. Seitdem reagiert mein on nicht mehr?! obwohl die Timestamps bei den DP sich ändern wenn geschaltet wird.

                          // Datenpunkt zum Speichern des Automatik-Sperrstatus
                          const blockDP = "0_userdata.0.RolloStatus.Automatik.EG.Kueche.SW";
                          
                          // MQTT-Schaltflächen zur manuellen Bedienung (manuell = Sperre setzen)
                          const blockMQTT = [
                              "alias.0.Rollo.EG.Kueche.SuedWest.CLOSE",
                              "alias.0.Rollo.EG.Kueche.SuedWest.STOP",
                              "alias.0.Rollo.EG.Kueche.SuedWest.OPEN"
                          ];
                          
                          // Initial: Automatik ist erlaubt
                          setState(blockDP, true); 
                          log(`[Init] Automatikstatus gesetzt: ${blockDP} = true`, 'info');
                          
                          // Funktion: Automatik blockieren, wenn manuell gefahren wird
                          function setBlock() {
                              log(`[Sperre] Manuelle Bedienung erkannt – Automatik wird gesperrt.`, 'warn');
                              setState(blockDP, false);
                              log(`[Sperre] ${blockDP} = false (gesperrt)`, 'info');
                              log("Automatik für Rollo EG Küche gesperrt bis morgen.", 'info');
                          }
                          
                          // Szene-Datenpunkt
                          const idScene = 'scene.0.Rollo_EG_SW';
                          
                          // Funktion: Szene-Mitglied aktivieren oder deaktivieren
                          async function controlDp(id, enable) {
                              log(`[Szene] Lese Szene: ${idScene}`, 'debug');
                              const jsonScene = await getObjectAsync(idScene);
                          
                              if (!jsonScene || !jsonScene.native || !Array.isArray(jsonScene.native.members)) {
                                  log(`[Fehler] Szene ${idScene} ist ungültig oder hat keine Mitglieder.`, 'error');
                                  return;
                              }
                          
                              let found = false;
                              for (let member of jsonScene.native.members) {
                                  log(`[Szene] Prüfe Mitglied: ${member.id}`, 'debug');
                                  if (member.id === id) {
                                      member.disabled = !enable;
                                      found = true;
                                      log(`[Szene] → ${id} wurde ${enable ? 'aktiviert' : 'deaktiviert'}.`, 'info');
                                      break;
                                  }
                              }
                          
                              if (!found) {
                                  log(`[Warnung] Mitglied ${id} nicht in Szene ${idScene} gefunden.`, 'warn');
                              }
                          
                              await setObjectAsync(idScene, jsonScene);
                              log(`[Szene] Szene ${idScene} wurde aktualisiert.`, 'debug');
                          }
                          
                          // Trigger: Wenn einer der MQTT-Schalter betätigt wird
                          on({id: blockMQTT, change: "any"}, obj => {
                          //on({ id: blockMQTT, change: "any" }, async (obj) => {
                              log(`[Trigger] MQTT-Befehl empfangen: ${obj.id} = ${obj.state.val}`, 'debug');
                          
                              // Nur bei manuellem Drücken (false) reagieren
                              if (obj.state.val === false) {
                                  log(`[Trigger] Manuelle Aktion erkannt – Sperre wird gesetzt.`, 'info');
                                  setBlock();
                          
                                  const idDp = 'alias.0.Rollo.EG.Kueche.SW.Position';
                          
                                  // Szenenmitglied deaktivieren
                                  controlDp(idDp, false);
                                  //await controlDp(idDp, false);
                              } else {
                                  log(`[Trigger] Ignoriert: Wert ist true oder irrelevant.`, 'debug');
                              }
                          });
                          
                          // Beispiel-Funktion: Automatik ausführen, nur wenn nicht blockiert
                          function automatikFunktion() {
                              const status = getState(blockDP).val;
                              log(`[Automatik] Statusprüfung: ${blockDP} = ${status}`, 'debug');
                          
                              if (status === false) {
                                  log("Automatik für Rollo EG Küche ist gesperrt, kein automatisches Fahren.", 'warn');
                                  return;
                              }
                          
                              // Hier würde der Automatik-Code stehen
                              log("Automatik aktiv: Rollo fährt automatisch.", 'info');
                          }
                          
                          // Zeitgesteuerte Rücksetzung der Sperre täglich um 03:00 Uhr
                          schedule("0 3 * * *", async () => {
                              log("[Reset] Starte tägliche Rücksetzung der Automatik-Sperre um 03:00 Uhr", 'info');
                              
                              // Sperre aufheben
                              setState(blockDP, true);
                              log(`[Reset] Sperrstatus zurückgesetzt: ${blockDP} = true`, 'info');
                          
                              // Szenenmitglied wieder aktivieren
                              const idDp = 'alias.0.Rollo.EG.Kueche.SW.Position';
                              await controlDp(idDp, true);
                          });
                          
                          

                          das ganze soll später ja für jedes Rollo bzw Szene anwendbar werden.

                          edit: habe den JS neu gestartet und es passt alles. Werde mich an die verallgemeinerung für alle Rollos machen. Danke erstmal!

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • A australien

                            @paul53 das hatte funktioniert.
                            nun hab ich das ganze eingebaut und mit log versehen. Seitdem reagiert mein on nicht mehr?! obwohl die Timestamps bei den DP sich ändern wenn geschaltet wird.

                            // Datenpunkt zum Speichern des Automatik-Sperrstatus
                            const blockDP = "0_userdata.0.RolloStatus.Automatik.EG.Kueche.SW";
                            
                            // MQTT-Schaltflächen zur manuellen Bedienung (manuell = Sperre setzen)
                            const blockMQTT = [
                                "alias.0.Rollo.EG.Kueche.SuedWest.CLOSE",
                                "alias.0.Rollo.EG.Kueche.SuedWest.STOP",
                                "alias.0.Rollo.EG.Kueche.SuedWest.OPEN"
                            ];
                            
                            // Initial: Automatik ist erlaubt
                            setState(blockDP, true); 
                            log(`[Init] Automatikstatus gesetzt: ${blockDP} = true`, 'info');
                            
                            // Funktion: Automatik blockieren, wenn manuell gefahren wird
                            function setBlock() {
                                log(`[Sperre] Manuelle Bedienung erkannt – Automatik wird gesperrt.`, 'warn');
                                setState(blockDP, false);
                                log(`[Sperre] ${blockDP} = false (gesperrt)`, 'info');
                                log("Automatik für Rollo EG Küche gesperrt bis morgen.", 'info');
                            }
                            
                            // Szene-Datenpunkt
                            const idScene = 'scene.0.Rollo_EG_SW';
                            
                            // Funktion: Szene-Mitglied aktivieren oder deaktivieren
                            async function controlDp(id, enable) {
                                log(`[Szene] Lese Szene: ${idScene}`, 'debug');
                                const jsonScene = await getObjectAsync(idScene);
                            
                                if (!jsonScene || !jsonScene.native || !Array.isArray(jsonScene.native.members)) {
                                    log(`[Fehler] Szene ${idScene} ist ungültig oder hat keine Mitglieder.`, 'error');
                                    return;
                                }
                            
                                let found = false;
                                for (let member of jsonScene.native.members) {
                                    log(`[Szene] Prüfe Mitglied: ${member.id}`, 'debug');
                                    if (member.id === id) {
                                        member.disabled = !enable;
                                        found = true;
                                        log(`[Szene] → ${id} wurde ${enable ? 'aktiviert' : 'deaktiviert'}.`, 'info');
                                        break;
                                    }
                                }
                            
                                if (!found) {
                                    log(`[Warnung] Mitglied ${id} nicht in Szene ${idScene} gefunden.`, 'warn');
                                }
                            
                                await setObjectAsync(idScene, jsonScene);
                                log(`[Szene] Szene ${idScene} wurde aktualisiert.`, 'debug');
                            }
                            
                            // Trigger: Wenn einer der MQTT-Schalter betätigt wird
                            on({id: blockMQTT, change: "any"}, obj => {
                            //on({ id: blockMQTT, change: "any" }, async (obj) => {
                                log(`[Trigger] MQTT-Befehl empfangen: ${obj.id} = ${obj.state.val}`, 'debug');
                            
                                // Nur bei manuellem Drücken (false) reagieren
                                if (obj.state.val === false) {
                                    log(`[Trigger] Manuelle Aktion erkannt – Sperre wird gesetzt.`, 'info');
                                    setBlock();
                            
                                    const idDp = 'alias.0.Rollo.EG.Kueche.SW.Position';
                            
                                    // Szenenmitglied deaktivieren
                                    controlDp(idDp, false);
                                    //await controlDp(idDp, false);
                                } else {
                                    log(`[Trigger] Ignoriert: Wert ist true oder irrelevant.`, 'debug');
                                }
                            });
                            
                            // Beispiel-Funktion: Automatik ausführen, nur wenn nicht blockiert
                            function automatikFunktion() {
                                const status = getState(blockDP).val;
                                log(`[Automatik] Statusprüfung: ${blockDP} = ${status}`, 'debug');
                            
                                if (status === false) {
                                    log("Automatik für Rollo EG Küche ist gesperrt, kein automatisches Fahren.", 'warn');
                                    return;
                                }
                            
                                // Hier würde der Automatik-Code stehen
                                log("Automatik aktiv: Rollo fährt automatisch.", 'info');
                            }
                            
                            // Zeitgesteuerte Rücksetzung der Sperre täglich um 03:00 Uhr
                            schedule("0 3 * * *", async () => {
                                log("[Reset] Starte tägliche Rücksetzung der Automatik-Sperre um 03:00 Uhr", 'info');
                                
                                // Sperre aufheben
                                setState(blockDP, true);
                                log(`[Reset] Sperrstatus zurückgesetzt: ${blockDP} = true`, 'info');
                            
                                // Szenenmitglied wieder aktivieren
                                const idDp = 'alias.0.Rollo.EG.Kueche.SW.Position';
                                await controlDp(idDp, true);
                            });
                            
                            

                            das ganze soll später ja für jedes Rollo bzw Szene anwendbar werden.

                            edit: habe den JS neu gestartet und es passt alles. Werde mich an die verallgemeinerung für alle Rollos machen. Danke erstmal!

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

                            @australien
                            Anmerkung zu Zeile 29: Es ist kein JSON, sondern ein Objekt.

                            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

                            A 1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @australien
                              Anmerkung zu Zeile 29: Es ist kein JSON, sondern ein Objekt.

                              A Offline
                              A Offline
                              australien
                              schrieb am zuletzt editiert von australien
                              #14

                              @paul53 ok, wie soll ich das ändern? das ist doch nur der Name der Variablen.

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • A australien

                                @paul53 ok, wie soll ich das ändern? das ist doch nur der Name der Variablen.

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

                                @australien sagte: das ist doch nur der Name der Variablen.

                                Ja, aber man sollte sich nicht selbst durch schlecht gewählte Variablenbezeichner verwirren.

                                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
                                2
                                • A Offline
                                  A Offline
                                  australien
                                  schrieb am zuletzt editiert von
                                  #16

                                  hier ist meine aktuelle Version für mehrere Rollos und verschiedenen Scenen.
                                  Gerne mal drüberschauen ;)

                                  Danke für Eure Hilfe, wie immer großartig!!!

                                  // Konfiguration für mehrere Rollos
                                  const rollos = [
                                      {
                                          name: "EG Küche SW",
                                          blockDP: "0_userdata.0.RolloStatus.Automatik.EG.Kueche.SW",
                                          blockMQTT: [
                                              "alias.0.Rollo.EG.Kueche.SuedWest.CLOSE",
                                              "alias.0.Rollo.EG.Kueche.SuedWest.STOP",
                                              "alias.0.Rollo.EG.Kueche.SuedWest.OPEN"
                                          ],
                                          idScene: 'scene.0.Rollo_EG_SW',
                                          idSceneMember: 'alias.0.Rollo.EG.Kueche.SW.Position'
                                      },
                                      {
                                          name: "EG Wohnzimmer Ost",
                                          blockDP: "0_userdata.0.RolloStatus.Automatik.EG.WZ.Fenster_SE",
                                          blockMQTT: [
                                              "alias.0.Rollo.EG.WZ.Fenster SE.CLOSE",
                                              "alias.0.Rollo.EG.WZ.Fenster SE.STOP",
                                              "alias.0.Rollo.EG.WZ.Fenster SE.OPEN"
                                          ],
                                          idScene: 'scene.0.Rollo_EG_E',
                                          idSceneMember: 'alias.0.Rollo.EG.WZ.Fenster SE.Position'
                                      },
                                      // ...weitere Rollos hier hinzufügen
                                  ];
                                  
                                  // Initialisierung für alle Rollos bei Skriptstart
                                  (async function initAll() {
                                      for (const rollo of rollos) {
                                          // Automatikstatus auf aktiv setzen
                                          setState(rollo.blockDP, true);
                                          log(`[Init] Automatikstatus zurückgesetzt: ${rollo.blockDP} für ${rollo.name}`, 'info');
                                  
                                          // Szenenmitglied aktivieren
                                          await controlDp(rollo.idSceneMember, true, rollo.idScene);
                                          log(`[Init] Szenenmitglied ${rollo.idSceneMember} für ${rollo.name} aktiviert`, 'info');
                                      }
                                  })();
                                  
                                  // Funktion: Automatik blockieren, wenn manuell gefahren wird
                                  function setBlock(rollo) {
                                      const currentStatus = getState(rollo.blockDP).val;
                                  
                                      // Wenn bereits gesperrt, keine weitere Aktion
                                      if (currentStatus === false) {
                                          log(`[Sperre] Automatik für ${rollo.name} ist bereits gesperrt, keine weiteren Aktionen.`, 'info');
                                          return;
                                      }
                                  
                                      // Automatik sperren
                                      log(`[Sperre] Manuelle Bedienung für ${rollo.name} erkannt – Automatik wird gesperrt.`, 'warn');
                                      setState(rollo.blockDP, false);
                                      log(`[Sperre] ${rollo.blockDP} = false (gesperrt)`, 'info');
                                      log(`Automatik für ${rollo.name} gesperrt bis morgen.`, 'info');
                                  }
                                  
                                  // Funktion: Szene-Mitglied aktivieren oder deaktivieren
                                  async function controlDp(id, enable, sceneId) {
                                      log(`[Szene] Lese Szene: ${sceneId}`, 'debug');
                                      const sceneObj = await getObjectAsync(sceneId);
                                  
                                      if (!sceneObj || !sceneObj.native || !Array.isArray(sceneObj.native.members)) {
                                          log(`[Fehler] Szene ${sceneId} ist ungültig oder hat keine Mitglieder.`, 'error');
                                          return;
                                      }
                                  
                                      let found = false;
                                      for (let member of sceneObj.native.members) {
                                          log(`[Szene] Prüfe Mitglied: ${member.id}`, 'debug');
                                          if (member.id === id) {
                                              member.disabled = !enable;
                                              found = true;
                                              log(`[Szene] → ${id} wurde ${enable ? 'aktiviert' : 'deaktiviert'}.`, 'info');
                                              break;
                                          }
                                      }
                                  
                                      if (!found) {
                                          log(`[Warnung] Mitglied ${id} nicht in Szene ${sceneId} gefunden.`, 'warn');
                                      }
                                  
                                      await setObjectAsync(sceneId, sceneObj);
                                      log(`[Szene] Szene ${sceneId} wurde aktualisiert.`, 'debug');
                                  }
                                  
                                  // MQTT-Trigger für alle Rollos einrichten (ack: false beachten!)
                                  for (const rollo of rollos) {
                                      on({ id: rollo.blockMQTT, ack: false }, async (obj) => {
                                          log(`[Trigger] MQTT-Befehl empfangen: ${obj.id} = ${obj.state.val} für ${rollo.name}`, 'debug');
                                  
                                          // Manuelle Bedienung erkannt → Automatik sperren
                                          setBlock(rollo);
                                          await controlDp(rollo.idSceneMember, false, rollo.idScene);
                                      });
                                  }
                                  
                                  // Beispiel-Funktion: Automatik pro Rollo (kann erweitert werden)
                                  function automatikFunktion(rollo) {
                                      const status = getState(rollo.blockDP).val;
                                      log(`[Automatik] Statusprüfung für ${rollo.name}: ${rollo.blockDP} = ${status}`, 'debug');
                                  
                                      if (status === false) {
                                          log(`Automatik für ${rollo.name} ist gesperrt, kein automatisches Fahren.`, 'warn');
                                          return;
                                      }
                                  
                                      // Hier steht die Automatik-Logik pro Rollo
                                      log(`Automatik aktiv: ${rollo.name} fährt automatisch.`, 'info');
                                  }
                                  
                                  // Zeitgesteuerte Rücksetzung der Sperre täglich um 03:00 Uhr
                                  schedule("0 3 * * *", async () => {
                                      log("[Reset] Starte tägliche Rücksetzung der Automatik-Sperre um 03:00 Uhr", 'info');
                                  
                                      for (const rollo of rollos) {
                                          setState(rollo.blockDP, true);
                                          log(`[Reset] Sperrstatus zurückgesetzt: ${rollo.blockDP} für ${rollo.name}`, 'info');
                                          await controlDp(rollo.idSceneMember, true, rollo.idScene);
                                      }
                                  });
                                  
                                  
                                  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

                                  754

                                  Online

                                  32.6k

                                  Benutzer

                                  82.2k

                                  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