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]Fensterkontakt steuert Heizung

    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]Fensterkontakt steuert Heizung

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

      Hallo zusammen,

      ich habe versucht ein Skript zu schreiben, dass wenn einer der beiden Fensterkontakte auf true geht und für mindestens 5 Minuten so bleibt, das Thermostat der Heizung auf Manuell geht und auf 17 Grad. Sind beide Fensterkontakte auf false, soll die Heizung auf Auto gestellt werden.
      Nur leider macht das Skript gar nix -.-
      Kann mir jemand helfen?

      var id_EG_Kamin_Links = 'zigbee.0.00158d0003e72ce7.opened'/*EG Kaminzimmer Fenster Links Is open*/
      var id_EG_Kamin_Rechts = 'zigbee.0.00158d00034d695f.opened'/*EG Kaminzimmer Fenster Rechts Is open*/
      var id_EG_W_Thermostat_Manu = 'hm-rpc.0.MEQ0236893.2.MANU_MODE'/*Wandthermostat Wohnzimmer MANU MODE*/
      var id_EG_W_Thermostat_Auto = 'hm-rpc.0.MEQ0236893.2.AUTO_MODE'/*Wandthermostat Wohnzimmer AUTO MODE*/
      
      var timer = null;
       
      on({id: 'id_EG_Kamin_Links' || 'id_EG_Kamin_Rechts', change: "ne"}, function(obj){
          if (obj.state.val == true) {
              if(timer) clearTimeout(timer); 
              else {   
                  timer = setTimeout(function() {
                  // Hier nach 5 Minuten "Nicht Erreichbarkeit" Aktion ausführen
                  setState('id_EG_W_Thermostat_Manu', 17);
                  log('Fenster auf - Heizung aus');
                  },3000000);  // 5 Minuten
              }
          }        
          else {
              setState('id_EG_W_Thermostat_Auto', true);
              log('Fenster zu - Heizung an');
          }   
      });
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Dominik F. last edited by paul53

        @Dominik-F
        Eine Oder-Verknüpfung der IDs zum Triggern ist so nicht möglich. Man kann stattdessen ein Array verwenden.

        on({id: [id_EG_Kamin_Links,id_EG_Kamin_Rechts], change: "ne"}, function(obj) {
        

        Außerdem setzt man Variablenbezeichner nicht in Hochkommata. 3000000 ms sind 50 Minuten.
        Ohne eine Oder-Verknüpfung der Werte wird verzögert auf AUTO_MODE geschaltet, wenn ein Fenster geschlossen wird, das andere Fenster aber offen bleibt.

        Dominik F. 1 Reply Last reply Reply Quote 0
        • Dominik F.
          Dominik F. @paul53 last edited by

          @paul53

          ich bin mir nicht sicher ob ich deine Tips zu 100% richtig umgesetzt oder verstanden habe. Hier das veränderte Skript:

          var id_EG_Kamin_Links = 'zigbee.0.00158d0003e72ce7.opened'/*EG Kaminzimmer Fenster Links Is open*/
          var id_EG_Kamin_Rechts = 'zigbee.0.00158d00034d695f.opened'/*EG Kaminzimmer Fenster Rechts Is open*/
          var id_EG_W_Thermostat_Manu = 'hm-rpc.0.MEQ0236893.2.MANU_MODE'/*Wandthermostat Wohnzimmer MANU MODE*/
          var id_EG_W_Thermostat_Auto = 'hm-rpc.0.MEQ0236893.2.AUTO_MODE'/*Wandthermostat Wohnzimmer AUTO MODE*/
          
          var EG_Kamin_Links        = getState(id_EG_Kamin_Links).val;
          var EG_Kamin_Rechts       = getState(id_EG_Kamin_Rechts).val;
          
          var timer = null;
           
          on({id: [id_EG_Kamin_Links,id_EG_Kamin_Rechts], change: "ne"}, function(obj) {
              if (EG_Kamin_Links||EG_Kamin_Rechts == true) {
                  if(timer) clearTimeout(timer); 
                  else {   
                      timer = setTimeout(function() {
                      // Hier nach 5 Minuten "Nicht Erreichbarkeit" Aktion ausführen
                      setState(id_EG_W_Thermostat_Manu, 17);
                      log('Fenster auf - Heizung aus');
                      },300000);  // 5 Minuten
                  }
              }        
              else {
                  setState(id_EG_W_Thermostat_Auto, true);
                  log('Fenster zu - Heizung an');
              }   
          });
          
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Dominik F. last edited by

            @Dominik-F sagte:

            Hier das veränderte Skript:

            Die Variablen EG_Kamin_Links und EG_Kamin_rechts werden nur bei Scriptstart gesetzt und nicht aktualisiert. Verwende besser eine Funktion

            var id_EG_Kamin_Links = 'zigbee.0.00158d0003e72ce7.opened'/*EG Kaminzimmer Fenster Links Is open*/
            var id_EG_Kamin_Rechts = 'zigbee.0.00158d00034d695f.opened'/*EG Kaminzimmer Fenster Rechts Is open*/
            var id_EG_W_Thermostat_Manu = 'hm-rpc.0.MEQ0236893.2.MANU_MODE'/*Wandthermostat Wohnzimmer MANU MODE*/
            var id_EG_W_Thermostat_Auto = 'hm-rpc.0.MEQ0236893.2.AUTO_MODE'/*Wandthermostat Wohnzimmer AUTO MODE*/
            
            var EG_Kamin_Links        = getState(id_EG_Kamin_Links).val;
            var EG_Kamin_Rechts       = getState(id_EG_Kamin_Rechts).val;
            var timer = null;
             
            function mode() {
                if (EG_Kamin_Links || EG_Kamin_Rechts) {
                    timer = setTimeout(function() {
                    // Hier nach 5 Minuten "Nicht Erreichbarkeit" Aktion ausführen
                        setState(id_EG_W_Thermostat_Manu, 17);
                        log('Fenster auf - Heizung aus');
                    },300000);  // 5 Minuten
                } else {
                    if(timer) clearTimeout(timer); 
                    setState(id_EG_W_Thermostat_Auto, true);
                    log('Fenster zu - Heizung an');
                }   
            }
            
            mode(); // Skripstart
            
            on({id: id_EG_Kamin_Links, change: "ne"}, function(obj) {
                EG_Kamin_Links = obj.state.val;
                mode();
            });
            on({id: id_EG_Kamin_Rechts, change: "ne"}, function(obj) {
                EG_Kamin_Rechts = obj.state.val;
                mode();
            });
            
            Dominik F. 1 Reply Last reply Reply Quote 0
            • Dominik F.
              Dominik F. @paul53 last edited by Dominik F.

              @paul53

              Vielen Dank für deine Hilfe und deine Erklärung. Hab jetzt wieder ein Stück mehr verstanden und komme dem näher so ein Skript komplett richtig selber schreiben zu können.

              Eine Frage habe ich noch.....ist das so richtig wie ich die Variablen gesetzt habe oder habe ich vielleicht sogar viel zu viele gesetzt oder welche unnötig?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Dominik F. last edited by

                @Dominik-F sagte:

                habe ich vielleicht sogar viel zu viele gesetzt oder welche unnötig?

                Es gibt keine unnötige Variable. Die 4 IDs am Anfang sind Konstanten, man kann sie also auch mit const deklarieren.

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

                Support us

                ioBroker
                Community Adapters
                Donate

                401
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                javascript
                2
                6
                369
                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