Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]Einschalten mit Nachlauf

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    [gelöst]Einschalten mit Nachlauf

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      thomasSC last edited by

      Hallo,

      Ich möchte gerne einen Homematic Schaltaktor einschalten und dann Verzögert ausschalten.

      ich komme aus der fhem Welt. Da war das keine Thema. einfach einen Wert in on-for-timer und schon hats funktioniert.

      In ioBroker geht das bestimmt ähnlich einfach. Nur sehe ich den Wald vor lauter Bäumen glaub ich nicht.

      Ich möchte : einen Schaltaktor für 6 / 12 / 24 Stunden einschalten können. Die Zeit würde ich gerne über vis Verstellen können.

      Kann mir jemand bitte einen Tipp geben? Ich muss ja erst den Timer setzten und danach den state, oder?

      Vielen Dank schon mal.

      Gruß Thomas

      1 Reply Last reply Reply Quote 0
      • T
        tempestas last edited by

        Hallo,

        versuche es so. Ist nur im Forum zusammengetippt, was nicht gerade meine Stärke ist. Aber ich hoffe, ich habe alles richtig gemacht

        
        // Danke an paul53 für die Korrektur zum Timer
        
        // Generelle Einstellungen
        
        var debug = true;				// log Ausgaben ein-/ ausschalten
        
        var instanz = "javascript.0.";		// kann angepasst werden
        var pfad = "homematic.nachlauf.";	// kann angepasst werden
        
        var idAktor = XXXXXXXXXXXXXXXXXX ; // hier den Pfad zu deinem zu schaltenden Aktor eintragen (z.B. "hm-rpc.1.000000000ABC.4.STATE")
        
        // States anlegen
        
        createState(instanz + pfad + "schalter", false , {
          read: true, 
          write: true, 
          name: "Schalter für zu schaltenden Aktor", 
          type: "boolean", 
          def: false
        });
        
        createState(instanz + pfad + "dauer", 6 , {                 
            name: 'Einschaltdauer',
            type: 'number',
            min:  '1',
            max:  '24',
            desc: 'Dauer des Einschaltens zwischen 1 und 24 Std'
        });
        
        var idSchalter = instanz + pfad + "schalter";
        var idDauer = instanz + pfad + "dauer";
        
        var timer = null;
        
        // TRIGGER
        
        on(idSchalter, function(dp) {
        
        	if (dp.state.val) {
        		setState(idAktor, true);
        		var ontime = getState(idDauer).val * 3600000;  // Dauer in Stunden mal 3600 Sekunden mal 1000 Milisekunden
        		timer = setTimeout( fAusschalten, ontime);
        		}
        	else {
        	 clearTimeout(timer);
        	 fAusschalten();
        	 }	
        });
        
        // Ausschalt-Funktion
        
        function fAusschalten(){
        		setState(idAktor, false);
        		timer = null;
        		}
        
        

        In Vis baust du dann einen Schalter ein zum ein bzw ausschalten und daneben etwas, mit dem du die Dauer an den erzeugten Datenpunkt übergibst. Das kann quasi alles sein, ein Schieberegler oder radio buttons mit vordefinierten Werten…

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

          @tempestas:

          		timer = getState(idDauer).val * 60 * 1000;  // Dauer in Stunden mal 60 Minuten mal 1000 Milisekunden
          		setTimeout( fAusschalten, timer);
          		}
          	else {
          	 clearTimeout(timer);
          	 timer = null;
          	 }	
          ```` `  
          

          Das funktioniert so nicht, denn die Variable timer ist ein Timer-Objekt und keine Zeit. Korrektur:

             var ontime = getState(idDauer).val * 3600000;  // Dauer in Stunden mal 3600 Sekunden mal 1000 Milisekunden
             timer = setTimeout(fAusschalten, ontime);
             } else {
                clearTimeout(timer);
                timer = null;
             }
          
          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            grml 🙂

            irgendwann lerne ich das noch. danke für die Korrektur; ich übernehme sie gleich mal oben ins Skript

            1 Reply Last reply Reply Quote 0
            • T
              thomasSC last edited by

              Vielen Dank hat funktioniert!!

              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Dann setze bitte im ersten Posting das Topic auf [gelöst].

                Danke

                1 Reply Last reply Reply Quote 0
                • T
                  thomasSC last edited by

                  muss jetzt doch nochmal nachhaken. habe das script jetzt nochmal getestet. ich kann einschalten mit "nachlaufe" zwischen 1 und 24 h . nur ich kann nicht vorzeitig abbrechen wenn ich den Schalter wieder auf aus stelle. Ich hätte war eine Idee mit "und-oder" Geschichten aber ich kann kein javascript 🙂 maximal blocky.

                  1 Reply Last reply Reply Quote 0
                  • D
                    DeepCore last edited by

                    Da es sich bei der Frage um Homematic handelt, gibt es noch einen anderen Weg:

                    setState('hm-rpc.0.xEQxxxxxxx.1.ON_TIME', 300, function() {
                        setStateDelayed("hm-rpc.0.xEQxxxxxxx.1.STATE", true, 100);
                    });
                    

                    Als erstes wird die Einschaltdauer in Sekunden übermittelt, und im Callback dann der Aktor eingeschaltet.

                    Hat den Vorteil, dass sich der Aktor auch abschaltet wenn nach dem Einschalten kein Funkkontakt mehr bestehen würde.

                    1 Reply Last reply Reply Quote 0
                    • T
                      tempestas last edited by

                      Setze bitte bei der else Anweisung statt des "timer = null" ein fAusschalten (); ein

                      Habs oben angepasst

                      1 Reply Last reply Reply Quote 0
                      • T
                        thomasSC last edited by

                        Jetzt ists perfekt, danke.

                        1 Reply Last reply Reply Quote 0
                        • K
                          karstent last edited by

                          Hallo,

                          jetzt habe auch mal eine Frage zum obigen Script. ich möchte gerne 2 Aktoren schalten.

                          Reicht es wenn ich die Zeile

                          "var idAktor = XXXXXXXXXXXXXXXXXX ;"

                          kopiere und darunter in einer neuen Zeile einfüge.

                          also z.B.:

                          var idAktor = "hm-rpc.0.OEQ0098506.2.STATE"/Poolpumpe.STATE/ ;

                          var idAktor = "hm-rpc.0.OEQ0098506.3.STATE"/Clorinator.STATE/ ;

                          Oder wie muss ich da vorgehen. Ich hatte es in der Kombination versucht doch nur die untere Zeile wird "geschaltet".

                          Über ein wenig Hilfe wäre ich dankbar.

                          1 Reply Last reply Reply Quote 0
                          • R
                            ReverZ last edited by

                            Ist zwar schon länger her aber falls jemand hier mal drüber stolpert:

                            Klar wird nur der zweite Aktor geschaltet - du überschriebst ja auch die Variable mit dem zweiten Statement:

                            var idAktor = "hm-rpc.0.OEQ0098506.2.STATE"/Poolpumpe.STATE/ ;

                            var idAktor = "hm-rpc.0.OEQ0098506.3.STATE"/Clorinator.STATE/ ;

                            Du musst dem zweiten Aktor dann schon eine eigene Variable spendieren:

                            var idAktor1 = "hm-rpc.0.OEQ0098506.2.STATE"/Poolpumpe.STATE/ ;

                            var idAktor2 = "hm-rpc.0.OEQ0098506.3.STATE"/Clorinator.STATE/ ;

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            452
                            Online

                            32.1k
                            Users

                            80.7k
                            Topics

                            1.3m
                            Posts

                            6
                            12
                            1948
                            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