Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Automatisierung
    5. Steckdose über vis Steuerelemente automatisieren

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Steckdose über vis Steuerelemente automatisieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • Chenda
      Chenda @paul53 last edited by

      @paul53 Danke dir.
      Ich habe das etwas angepasst. Was hälst du davon?

      const idUeber = "alias.0.Erzeugung.Ueberschuss"; // Stromüberschuss
      const idPlug  = "hs100.0.192_168_178_29.state"; // Steckdose
      const idStatus = "javascript.0.Heubedampfer.Status"; // Heubedampfer-Zustand
      const idVerbrauch = "alias.0.Verbrauch.Bedampfer"; // Verbrauchswert
      var delayOn = null;
      
      // Überprüfung bei jeder Änderung des Stromüberschusses
      on({id: idUeber, change: "ne"}, function(dp) {
          let überschuss = dp.state.val;
          let status = getState(idStatus)?.val || "Leer";
      
          if (status === "Bereit" && überschuss >= 2000 && !delayOn) {
              log("Genug Überschuss vorhanden! Startet in 5 Minuten...");
              
              // Verzögerung von 5 Minuten, um sicherzustellen, dass der Überschuss stabil bleibt
              delayOn = setTimeout(function() {
                  log("Starte Heubedampfer für 60 Minuten!");
                  setState(idPlug, true);
                  setState(idStatus, "Arbeitet", true);
                  setState(idVerbrauch, 2000); // Verbrauch direkt setzen
      
                  // Nach exakt 60 Minuten abschalten
                  setTimeout(function() {
                      log("60 Minuten sind um. Heubedampfer stoppt.");
                      setState(idPlug, false);
                      setState(idStatus, "Fertig", true);
                      setState(idVerbrauch, 0); // Verbrauch wieder auf 0 setzen
                      delayOn = null;
                  }, 3600000); // 60 Minuten
              }, 300000); // 5 Minuten Verzögerung
          }
      });
      
      // Aktualisierung des Verbrauchswerts, wenn sich der Steckdosenstatus ändert
      on({id: idPlug, change: "ne"}, function (obj) {
          let status = obj.state.val; // Zustand der Steckdose
          let verbrauch = status ? 2000 : 0; // Wenn an -> 2000W, wenn aus -> 0W
          setState(idVerbrauch, verbrauch);
      });
      
      
      Chenda 1 Reply Last reply Reply Quote 0
      • Chenda
        Chenda @Chenda last edited by

        Das Script funktioniert erstmal und tat, was es soll.
        Nun wollte ich mir noch die Restzeiten anzeigen lassen. Dafür habe ich mir in VIS-2 ein html widget eingebunden,
        84a314a7-0b0a-477e-8a57-538edffe31bd-image.png

        im Feld Allgemein "html" habe ich folgenden Code eingebaut:

        <div id="countdown" style="font-size: 28px; font-weight: bold; text-align: center;"></div>
        
        <script>
            const countdownElement = document.getElementById("countdown");
            const wartezeitDP = "javascript.0.Logik.Heubedampfer.Wartezeit";
            const arbeitszeitDP = "javascript.0.Logik.Heubedampfer.Restzeit";
        
            function updateCountdown() {
                let wartezeit = getState(wartezeitDP)?.val || 0;
                let arbeitszeit = getState(arbeitszeitDP)?.val || 0;
        
                if (wartezeit > 0) {
                    let minutes = Math.floor(wartezeit / 60);
                    let seconds = wartezeit % 60;
                    countdownElement.innerHTML = `Wartezeit: ${minutes}:${seconds.toString().padStart(2, '0')} min`;
                    countdownElement.style.color = "#FFA500"; // Orange für Wartezeit
                } else if (arbeitszeit > 0) {
                    let minutes = Math.floor(arbeitszeit / 60);
                    let seconds = arbeitszeit % 60;
                    countdownElement.innerHTML = `Heubedampfer läuft: ${minutes}:${seconds.toString().padStart(2, '0')} min`;
                    countdownElement.style.color = "#00FF00"; // Grün für aktive Betriebszeit
                } else {
                    countdownElement.innerHTML = "Kein aktiver Timer";
                    countdownElement.style.color = "#FF0000"; // Rot für keine Aktivität
                }
            }
        
            // Aktualisierung alle 1 Sekunde
            setInterval(updateCountdown, 1000);
            updateCountdown();
        </script>
        

        In den Variablen javascript.0.Logik.Heubedampfer.Wartezeit und javascript.0.Logik.Heubedampfer.Restzeit wird durch mein JS skript regelmäßig die Restzeit (in s) aktualisiert. Dennoch wird in der VIS-2 nichts angezeigt.
        Was habe ich falsch gemacht?

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

          @chenda warum um alles in der Welt lässt du das in der vis laufen?
          Das läuft dann im (wahrscheinlich deutlich leistungsschwächeren) Frontend ab und nich auf dem Server.

          Lass es ganz normal im js-Adapter laufen und lass dir nur denn Wert der Datenpunkte in der Vis anzeigen.
          Das Tablet oder was auch immer hat schon genug mit der grafischen Aufarbeitung zu tun.

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

            @homoran okay, ich kann das javascript natürlich verschieben. Aber ich bekomme dennoch keinerlei Werte in der VIS angezeigt.

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

              @chenda sagte in Steckdose über vis Steuerelemente automatisieren:

              Aber ich bekomme dennoch keinerlei Werte in der VIS angezeigt.

              dann reicht ja ein Number-Widget das die Werte des Countdown Datenpunkts anzeigt.
              mache ich schon lange so (mit vis! nicht mit vis-2! aber das sollte nicht der Grund sein)

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

                @homoran ja da hast du eigentlich recht, aber mir wird dennoch nix angezeigt:
                6e8cbe53-4d50-42ef-ba1f-18224f5028fb-image.png
                7be3902e-68e5-4435-931a-302a73d8ed91-image.png
                6d4b94cf-2b91-4c4c-8952-1ebd76b00239-image.png
                19080b75-8a12-4d17-ac4a-215ef6d23171-image.png

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

                  @chenda wie gesagt kenne ich vis-2 nicht

                  aber NaN heisst Not a Number.
                  du hast da Text in dem Feld

                  der müsste nach meinem Verständnis darunter in "voranstellen..."

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

                    @homoran ja stimmt, aber das ändert nix, wenn ich das weglasse:
                    fa6b0503-dd28-496e-9a3b-dcc474d6aa70-image.png
                    oder ein String Widget benutze:
                    7498c130-e108-44a6-8ad9-091e23f23a1f-image.png
                    ich verstehe einfach nicht was da nicht stimmt 😕

                    In "voranstellen" braucht das glaub nicht, denn im Objekt Auswahldialog steht und es heißt ja auch voranstellen html
                    04ee6d13-6359-4db9-b0c7-74bf7388ca8d-image.png

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

                      @chenda zeig mal die Objektdaten des Datenpunkts
                      was ist w00008 ?

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

                        @homoran du hattest doch recht. Und zusätzlich musste ich noch die geschweiften Klammern entfernen, die bei der Objektauswahl automatisch um die Variable herumgelegt wurden.
                        5abfec5f-c44a-4666-a416-7ed5bc1b3bf0-image.png
                        Mein JS stellt auch noch eine Farbvariable und einen Text ein:
                        0a868ebf-115a-4c40-9b7b-a9e67cb1a3d3-image.png
                        Kann ich die Farbe irgendwie dem Text zuordnen?

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

                          @chenda sagte in Steckdose über vis Steuerelemente automatisieren:

                          Kann ich die Farbe irgendwie dem Text zuordnen?

                          in den Eigenschaften von Schrift als Binding nehme ich an

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

                            @homoran Danke - gefunden.
                            Da wiederum braucht es die geschweiften Klammern:
                            35d7aec7-b8b8-4e52-9933-6c187ff5f96e-image.png

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

                              @chenda sagte in Steckdose über vis Steuerelemente automatisieren:

                              Da wiederum braucht es die geschweiften Klammern:

                              sonst wäre es kein Binding

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              1.0k
                              Online

                              31.7k
                              Users

                              79.7k
                              Topics

                              1.3m
                              Posts

                              3
                              25
                              754
                              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