Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Zeitlich verzögertes Einschalten eines "Slave"

    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

    [gelöst] Zeitlich verzögertes Einschalten eines "Slave"

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

      Hallo,
      bräuchte einen Tipp von euch:
      Ich möchte gerne mit einem Schalter mein Büro stromlos machen. Ist ein relativ leichtes Unterfangen (dachte ich!) und baute einen Sonoff (Tasmota) R2 ein um ihn über den iobroker bzw. natürlich der VIS ein und aus zu schalten.
      Funktioniert prinzipiell - nur ab und zu fällt mir die Sicherung, weil anscheinend so viel draufhängt, dass der Startstrom oder die Startleistung zu viel wird.

      Daher hatte ich folgende Idee:
      Alle Verbraucher aufteilen auf 2 Verteiler wobei der Sonoff Power R2 den ersten Verteiler einschaltet und dann eine Sonoff WLAN Steckdose am 1. Verteiler den 2. Verteiler zeitlich verzögert einschaltet.
      Script dazu weiter unten.
      Nur : Wenn der erste Verteiler stromlos ist, ist auch die WLAN Steckdose stromlos. Daher muss ich beim einschalten warten bis diese im Netz ist um einen State zu setzen.
      Habt ihr vielleicht hier eine bessere, oder einfachere Idee?

      Script:
      Ich habe einen State den ich true oder false setze. Aufgrund der Änderung dieses States wird der 1 Verteiler eingeschalten und 60 sek. später der 2. Verteiler über die WLAN Steckdose. Ich gehe von der Annahme aus, dass eine WLAN Steckdose innerhalb 60 sek. am Netz ist.
      Beim Ausschalten gehe ich den anderen Weg, damit die WLAN Steckdose auch beim starten auch wirklich den State false hat - also nicht eingeschaltet ist.

      /* -----------------------------------
      zeitlich verzögertes einschalten des Büros
      Veröffentlichungsdatum: 26.10.2021
      
      Änderungen:
      
      ------------------------------------*/
      
      //Setzen des State im VIS, falls noch nicht vorhanden
      var Beschreibung = new Array();
      var Name = new Array();
      var Art = new Array();
      var Def = new Array();
      Beschreibung[0] = "0_userdata.0.VIS.Buero1OG.Power";
      Name[0] = "Buero 1OG Power";
      Art[0] = "boolean";
      Def[0] = "false";
      
      	
      for (var x = 0; x < Beschreibung.length; x++) {
      		if (!existsState(Beschreibung[x])) {
      			createState(Beschreibung[x], {
      				type: Art[x],
      				name: Name[x],
      				read: true,
      				write: true,
      				def: Def[x]
      			});
      		}
      	}
      	
      var objBuero_Master = 'sonoff.0.SonOffBuero1OG.POWER';
      var objBuero_Slave = 'sonoff.0.SonOffS20_2.POWER';	
      
      	
      on({id: Beschreibung[0], val: true}, function(dp) {
      	setState(objBuero_Master, true);
      	setTimeout(function() {
      		setState(objBuero_Slave, true);
      		}, 60000);
      });
      
      on({id: Beschreibung[0], val: false}, function(dp) {
      	setState(objBuero_Slave, false);
      	setTimeout(function() {
      		setState(objBuero_Master, false);
      		}, 5000);
      });
      

      Danke für eure Hilfe.
      Klaus

      Asgothian 1 Reply Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @klaus88 last edited by

        @klaus88 sagte in Zeitlich verzögertes Einschalten einer "Slave" - Steckdose:

        Daher hatte ich folgende Idee:
        Alle Verbraucher aufteilen auf 2 Verteiler wobei der Sonoff Power R2 den ersten Verteiler einschaltet und dann eine Sonoff WLAN Steckdose am 1. Verteiler den 2. Verteiler zeitlich verzögert einschaltet.
        Script dazu weiter unten.
        Nur : Wenn der erste Verteiler stromlos ist, ist auch die WLAN Steckdose stromlos. Daher muss ich beim einschalten warten bis diese im Netz ist um einen State zu setzen.
        Habt ihr vielleicht hier eine bessere, oder einfachere Idee?
        Script:
        Ich habe einen State den ich true oder false setze. Aufgrund der Änderung dieses States wird der 1 Verteiler eingeschalten und 60 sek. später der 2. Verteiler über die WLAN Steckdose. Ich gehe von der Annahme aus, dass eine WLAN Steckdose innerhalb 60 sek. am Netz ist.
        Beim Ausschalten gehe ich den anderen Weg, damit die WLAN Steckdose auch beim starten auch wirklich den State false hat - also nicht eingeschaltet ist.

        Bitte bedenken:

        • Wie ist das Einschaltverhalten der WLan Steckdose. Behält sie den letzten Status bei oder ist sie beim einschalten immer "an" ?
        • im Adapter für die WLan Steckdose sollte es einen State für die Verbindung geben. Ich würde beim einschalten auf diesen State triggern um sicher zu gehen das der Schaltbefehl durch geht. Das sollte besser sein als eine Zeitsteuerung.

        Ich würde im Zweifelsfall nicht das ganze Büro stromlos schalten sondern (wenn elektrisch möglich) über mehrere Schaltsteckdosen arbeiten. Der Strombedarf der Schaltsteckdosen ist gering, so das das energetisch unkritisch sein sollte.

        A.

        K 1 Reply Last reply Reply Quote 1
        • K
          klaus88 @Asgothian last edited by

          @asgothian : Erstmal ganz herzlichen Dank für deine Rückmeldung! Kurz zu deinen Themen : WLAN Steckdose ist genau so - also sie "merkt" sich den letzten Status.

          Frage zu deiner 2. Bemerkung: Das ist mir auch eingefallen, aber ich bin dann bei folgenden Problem hängen geblieben, da ich kein Profi in Java bin:
          Geht es, dass ich verschachtelt 2 onChange funktionen betreibe bzw. abfrage?
          Also erste wäre wie im Script oben : on({id: Beschreibung[0], val: true}, function(dp) {
          Zweite, wäre dann darunter (also in der ersten onchange Funktion) wenn die WLAN Steckdose alive ist
          Weißt du das - geht das?

          Danke
          Klaus

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

            @klaus88 sagte: Geht es, dass ich verschachtelt 2 onChange funktionen betreibe bzw. abfrage?

            Nicht verschachtelt, sondern untereinander. Und nur einen Trigger pro Datenpunkt verwenden, da sonst Ressourcenverschwendung.

            on(Beschreibung[0], function(dp) { // triggert bei Wertänderung
               if(dp.state.val) setState(objBuero_Master, true);
               else {
            	setState(objBuero_Slave, false);
            	setTimeout(function() {
            	    setState(objBuero_Master, false);
            	}, 1000);
               }
            });
            
            on({id: idConnected, change: 'gt'}, function() {
               if(getState(objBuero_Master).val) setState(objBuero_Slave, true);
            });
            
            K 2 Replies Last reply Reply Quote 1
            • K
              klaus88 @paul53 last edited by

              @paul53 : OK Alles klar - Danke!! - werde ich heute abend mal versuchen!
              Danke vielmals für die Hilfe!

              lg
              Klaus

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

                @paul53 :

                Hab's natürlich nicht bis am Abend ausgehalten 🙂

                FUNKTIONIERT PERFEKT!! DANKE vielmals für eure Hilfe.

                Falls jemand ein ähnliches Problem hat hier das endgültige Script:

                /* -----------------------------------
                zeitlich verzögertes einschalten des Büros
                Veröffentlichungsdatum: 26.10.2021
                
                Änderungen:
                
                ------------------------------------*/
                
                /*Setzen des State im VIS, falls noch nicht vorhanden*/
                var Beschreibung = new Array();
                var Name = new Array();
                var Art = new Array();
                var Def = new Array();
                Beschreibung[0] = "0_userdata.0.VIS.Buero1OG.Power";
                Name[0] = "Buero 1OG Power";
                Art[0] = "boolean";
                Def[0] = "false";
                
                	
                for (var x = 0; x < Beschreibung.length; x++) {
                		if (!existsState(Beschreibung[x])) {
                			createState(Beschreibung[x], {
                				type: Art[x],
                				name: Name[x],
                				read: true,
                				write: true,
                				def: Def[x]
                			});
                		}
                	}
                	
                var objBuero_Master = 'sonoff.0.SonOffBuero1OG.POWER';
                var objBuero_Slave = 'sonoff.0.SonOffS20_2.POWER';
                var objBuero_Slaveconnected = 'sonoff.0.SonOffS20_2.alive';	
                
                	
                on({id:Beschreibung[0], change: 'any'}, function(dp) {
                	if(dp.state.val) setState(objBuero_Master, true);
                		else {
                				setState(objBuero_Slave, false);
                				setTimeout(function() {
                					setState(objBuero_Master, false);
                				}, 10000);
                		}	
                });
                
                /* Change bei Änderung die größer ist als der alte Wert --> also bei true */
                on({id: objBuero_Slaveconnected, change: 'gt'}, function() {
                   if(getState(objBuero_Master).val) setState(objBuero_Slave, true);
                });
                

                lg
                Klaus

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

                Support us

                ioBroker
                Community Adapters
                Donate

                707
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                javascript
                3
                6
                299
                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