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 goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Steckdose über vis Steuerelemente automatisieren

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

      @chenda Du vermischt da gerade zwei Aufgaben!

      • Aufbau einer Visualisierung
      • Triggern/Beeinflussen einer Automatik.

      übrigens

      @chenda sagte in Steckdose über vis Steuerelemente automatisieren:

      Den aktuellen Überschuss berechne ich in einem javascript und lege ihn im alias alias.0.Erzeugung.Ueberschuss ab.

      wieso da?
      und nicht unter 0_userdata.0?

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

        @chenda sagte: Logik gerne in js

        Versuche es mal so:

        const idUeber = 'alias.0.Erzeugung.Ueberschuss';
        const idPlug  = 'hs100.0.192_168_178_29.state';
        const idVis   = '0_userdata.0.Heubedampfer.Bereit'; // boolean
        var delayOn = null;
        
        on(idUeber, function(dp) {
            if(dp.state.val < 2000) { // Grenzwert anpassen!
                clearTimeout(delayOn);
                delayOn = null;
            } else if(!delayOn && getState(idVis).val) {
                delayOn = setTimeout(function() {
                    setState(idPlug, true);
                    setState(idVis, false, true);
                    setTimeout(function() {
                        setState(idPlug, false);
                        delayOn = null;
                    }, 3600000); // 60 Minuten
                }, 300000); // 5 Minuten
            }
        });
        
        Chenda 1 Reply Last reply Reply Quote 0
        • Chenda
          Chenda @Homoran last edited by

          @homoran sagte in Steckdose über vis Steuerelemente automatisieren:

          @chenda Du vermischt da gerade zwei Aufgaben!

          • Aufbau einer Visualisierung
          • Triggern/Beeinflussen einer Automatik.

          Kann schon sein, dass ich da was vermische, aber ich brauche es ja auch gemischt. Ich brauche ja die vis zur Steuerung. Die Logik lediglich zur Automatisierung.

          @homoran sagte in Steckdose über vis Steuerelemente automatisieren:

          @chenda sagte in Steckdose über vis Steuerelemente automatisieren:

          Den aktuellen Überschuss berechne ich in einem javascript und lege ihn im alias alias.0.Erzeugung.Ueberschuss ab.

          wieso da?
          und nicht unter 0_userdata.0?

          der alias verweist auf javascript.0.Erzeugung.Ueberschuss -- das könnte ich auch unter 0_userdata anlegen; da hast du recht und habe ich nicht drüber nachgedacht.

          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:

            der alias verweist auf javascript.0.Erzeugung.Ueberschuss

            ok, das ist der Sinn eines alias. Passt daher.

            ich habe weder vis-2 noch kann ich javascript. aber du hast ja einen Trigger DP.
            dann nimm doch in der vis einen Button der diesen DP ändert.

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

              @chenda sagte: Status bereit ist soll er automatisch arbeiten (Steckdose ein), sobald genug Stromüberschuss vorhanden ist.

              Dann muss auf den Überschuss getriggert werden und im Trigger die Bereitschaft geprüft werden.

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

                @paul53 ich dachte von der Logik her ist es wahrscheinlich, dass der Stromüberschuss reicht, wenn der Bedampfer gefüllt wird. Daher trigger so rum. Macht das denn einen Unterschied? geht doch beides, oder irre ich mich?

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

                  @chenda sagte: Macht das denn einen Unterschied?

                  Wenn zum Zeitpunkt des Wechsels in Bereitschaft der Überschuss nicht ausreicht, bleibt die Steckdose aus, wenn nicht auf den Überschuss getriggert wird.

                  1 Reply Last reply Reply Quote 1
                  • 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

                                            707
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

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