Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script schaltet aber shelly nicht

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Script schaltet aber shelly nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Peguschwein last edited by Homoran

      Hallo zusammen habe da ein script das grundsätzlich läuft. Unter Objekten kann man den Wert des Schalters sehen wie er von true auf false geht. Der Shelly selbst schaltet aber nicht. Wenn ich den Schalter mit der Maus rüberlege
      dann schaltet der Shelly auch. An was kann das liegen ?

       // Konfiguration
      const channel1 = 'shelly.1.shellypro2#***********#1.Relay0.Switch'; // Ersetze mit dem richtigen Kanal für den ersten Schalter
      const channel2 = 'shelly.1.shellypro2#***********#1.Relay1.Switch'; // Ersetze mit dem richtigen Kanal für den zweiten Schalter
      const manualSwitch = '0_userdata.0.Datenpunkte.Licht-Abwesenheit-on-off'; // Ersetze mit dem richtigen manuellen Schalter (Ein/Aus)
      
      // Dunkelheitsprüfungs-Adapter (sun Adapter)
      //const sunState = 'sun.0.sunset'; // sunset State liefert 'true' für Dunkelheit
      const sunState = '0_userdata.0.Datenpunkte.jemand_zuhause'; // sunset State liefert 'true' für Dunkelheit
      
      // Konfigurierbare Zeiten
      const maxOnDuration = 10 * 60 * 1000;  // Maximale Einschaltzeit in Millisekunden (z.B. bis 10 Minuten)
      const minOnDuration = 2 * 60 * 1000;   // Minimale Einschaltzeit in Millisekunden (z.B. 2 Minuten)
      const offDuration = 5 * 60 * 1000;     // Ausschaltzeit in Millisekunden (z.B. 5 Minuten)
      
      // Funktion zur Erzeugung einer zufälligen Einschaltzeit zwischen minOnDuration und maxOnDuration
      function getRandomOnDuration() {
          return Math.floor(Math.random() * (maxOnDuration - minOnDuration + 1)) + minOnDuration;
      }
      
      // Funktion zum Schalten eines Kanals
      function switchChannel(channel, state) {
          setState(channel, state, true); // Schaltet den Kanal auf den angegebenen Zustand (true = ein, false = aus)
      }
      
      // Prüfen, ob es dunkel ist und das Skript aktiviert wurde
      function isDarkAndActive() {
          // Abrufen des Sonnenstatus (true = Dunkelheit, false = Tag)
          const isDark = getState(sunState).val;
          // Abrufen des manuellen Schalters (true = Aktiv, false = Inaktiv)
          const isActive = getState(manualSwitch).val;
      
          return isDark && isActive;
      }
      
      // Zyklus für Kanal 1
      function cycleChannel1() {
          if (isDarkAndActive()) {
              const onTime = getRandomOnDuration(); // Zufällige Einschaltzeit für Kanal 1
      
              // Einschalten von Kanal 1
              switchChannel(channel1, true);
              console.log(`Kanal 1 eingeschaltet für ${onTime / 1000} Sekunden.`);
      
              // Nach der zufälligen Einschaltzeit ausschalten
              setTimeout(() => {
                  switchChannel(channel1, false);
                  console.log(`Kanal 1 ausgeschaltet.`);
      
                  // Nach der Ausschaltzeit erneut einschalten
                  setTimeout(() => {
                      cycleChannel1();
                  }, offDuration);
              }, onTime);
          } else {
              console.log("Es ist nicht dunkel oder der manuelle Schalter ist aus. Skript nicht aktiv.");
              // Warte 5 Minuten und prüfe erneut
              setTimeout(cycleChannel1, 5 * 60 * 1000);
          }
      }
      
      // Zyklus für Kanal 2
      function cycleChannel2() {
          if (isDarkAndActive()) {
              const onTime = getRandomOnDuration(); // Zufällige Einschaltzeit für Kanal 2
      
              // Einschalten von Kanal 2
              switchChannel(channel2, true);
              console.log(`Kanal 2 eingeschaltet für ${onTime / 1000} Sekunden.`);
      
              // Nach der zufälligen Einschaltzeit ausschalten
              setTimeout(() => {
                  switchChannel(channel2, false);
                  console.log(`Kanal 2 ausgeschaltet.`);
      
                  // Nach der Ausschaltzeit erneut einschalten
                  setTimeout(() => {
                      cycleChannel2();
                  }, offDuration);
              }, onTime);
          } else {
              console.log("Es ist nicht dunkel oder der manuelle Schalter ist aus. Skript nicht aktiv.");
              // Warte 5 Minuten und prüfe erneut
              setTimeout(cycleChannel2, 5 * 60 * 1000);
          }
      }
      
      // Starten der Zyklen
      cycleChannel1();
      cycleChannel2();
      

      MOD-EDIT: Code in code-tags gesetzt!

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @Peguschwein last edited by

        @peguschwein sagte in Script schaltet aber shelly nicht:

        An was kann das liegen ?

        du musst unbestätigt senden

        P 1 Reply Last reply Reply Quote 0
        • P
          Peguschwein @Homoran last edited by

          @homoran Das sagst du jetzt s einfach. Ich bin totales greenhorn mit Scripten. Kannst du mir auf die Sprünge helfen ?

          mcm1957 1 Reply Last reply Reply Quote 0
          • mcm1957
            mcm1957 @Peguschwein last edited by

            @peguschwein said in Script schaltet aber shelly nicht:

            @homoran Das sagst du jetzt s einfach. Ich bin totales greenhorn mit Scripten. Kannst du mir auf die Sprünge helfen ?

            ack flag auf FALSE setzen

            setState(channel, state, false)
            
            P 1 Reply Last reply Reply Quote 0
            • P
              Peguschwein @mcm1957 last edited by

              @mcm1957 aber in Zeile 22 schalte ich doch genau so, einfach true

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Peguschwein last edited by paul53

                @peguschwein sagte: in Zeile 22 schalte ich doch genau so, einfach true

                true (als 3. Parameter) steht für "bestätigt". Siehe Doku

                P 1 Reply Last reply Reply Quote 0
                • P
                  Peguschwein @paul53 last edited by

                  @paul53 verstehe nur Bahnhof. Ich glaube ist einfacher für mich eine Astro Uhr zu kaufen, als zu scripten

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Peguschwein last edited by

                    @peguschwein sagte: verstehe nur Bahnhof.

                    Ändere Zeile 22 in

                        setState(channel, state); // Schaltet den Kanal auf den angegebenen Zustand (true = ein, false = aus)
                    
                    P 1 Reply Last reply Reply Quote 0
                    • P
                      Peguschwein @paul53 last edited by

                      @paul53 hat funktioniert danke dir vielmals

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      881
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      281
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo