Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Suche helfende Hand Lüftungssteuerung

    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

    Suche helfende Hand Lüftungssteuerung

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

      @paul53 Ist ein Shelly HT keine Ahnung

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

        @TinoNikol sagte:

        Ist ein Shelly HT

        Habe ich nicht.

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

          @paul53 said in Suche helfende Hand Lüftungssteuerung:

          @TinoNikol sagte:

          Ist ein Shelly HT

          Habe ich nicht.

          Denk hab eingestell ab 0,5 % Luftfeuchte meldet er

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

            @TinoNikol sagte:

            ab 0,5 % Luftfeuchte meldet er

            Dann kann man den Anstieg auswerten. Vorschlag:

            const idRH = 'alias.0.Bad.Klima.rel_Feuchte';
            const idDusche = '0_userdata.0.Bad.Abluft.Duschen';
            
            var duschen = getState(idDusche).val;
            
            on(idRH, function(dp) {
                let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute
                if(anstieg > 2 && dp.state.val > 66) duschen = true;
                else if(dp.state.val < 65) duschen = false;
                setState(idDusche, duschen, true);
            });
            
            T 2 Replies Last reply Reply Quote 0
            • T
              TinoNikol @paul53 last edited by

              @paul53 said in Suche helfende Hand Lüftungssteuerung:

              @TinoNikol sagte:

              ab 0,5 % Luftfeuchte meldet er

              Dann kann man den Anstieg auswerten. Vorschlag:

              const idRH = 'alias.0.Bad.Klima.rel_Feuchte';
              const idDusche = '0_userdata.0.Bad.Abluft.Duschen';
              
              var duschen = getState(idDusche).val;
              
              on(idRH, function(dp) {
                  let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute
                  if(anstieg > 2 && dp.state.val > 66) duschen = true;
                  else if(dp.state.val < 65) duschen = false;
                  setState(idDusche, duschen, true);
              });
              

              Cool

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

                @paul53 said in Suche helfende Hand Lüftungssteuerung:

                @TinoNikol sagte:

                ab 0,5 % Luftfeuchte meldet er

                Dann kann man den Anstieg auswerten. Vorschlag:

                const idRH = 'alias.0.Bad.Klima.rel_Feuchte';
                const idDusche = '0_userdata.0.Bad.Abluft.Duschen';
                
                var duschen = getState(idDusche).val;
                
                on(idRH, function(dp) {
                    let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute
                    if(anstieg > 2 && dp.state.val > 66) duschen = true;
                    else if(dp.state.val < 65) duschen = false;
                    setState(idDusche, duschen, true);
                });
                

                Irgendwie geht das nicht

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

                  @TinoNikol sagte:

                  Irgendwie geht das nicht

                  Was geht nicht ? Um zu sehen, woran es hakt, füge Log-Ausgaben ein:

                  const idRH = 'alias.0.Bad.Klima.rel_Feuchte';
                  const idDusche = '0_userdata.0.Bad.Abluft.Duschen';
                   
                  var duschen = getState(idDusche).val;
                   
                  on(idRH, function(dp) {
                      let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute
                      if(anstieg > 2 && dp.state.val > 66) duschen = true;
                      else if(dp.state.val < 65) duschen = false;
                      setState(idDusche, duschen, true);
                      log('Anstieg: ' + anstieg + ' %/min, rel. Feuchte: ' + dp.state.val + ' %, Duschen: ' + duschen);
                  });
                  
                  T 2 Replies Last reply Reply Quote 0
                  • T
                    TinoNikol @paul53 last edited by

                    @paul53 Ok geht musste mal restarten aber braucht lang bis reagiert!

                    00:22:37.325	info	javascript.0 (28636) Start javascript script.js.Lüftung.Dusch_Erkennung
                    00:22:37.331	info	javascript.0 (28636) script.js.Lüftung.Dusch_Erkennung: registered 1 subscription and 0 schedules
                    00:23:09.453	info	javascript.0 (28636) script.js.Lüftung.Dusch_Erkennung: Anstieg: 3.7327770763572485, rel. Feuchte: 89.5, Duschen: true
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • T
                      TinoNikol @paul53 last edited by

                      @paul53 Hi irgendwas stimmt nicht muss Javascript neustarten sonst Startet Lüftung nicht!

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

                        @TinoNikol sagte:

                        muss Javascript neustarten sonst Startet Lüftung nicht!

                        Das kann wohl kaum an diesem Skript liegen.

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

                          @paul53 An was könnte es liegen?

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

                            @TinoNikol sagte:

                            An was könnte es liegen?

                            ?? Hast Du irgendwo eine Endlosschleife programmiert ? Meine Skriptvorschläge enthalten keine Endlosschleife, wenn die richtige Datenpunkt-ID zugeordnet ist. Deaktiviere mal die Skripte, die Du nicht gerade testen willst.

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

                              @paul53 Was heißt endlosschleife?

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

                                @TinoNikol sagte:

                                Was heißt endlosschleife?

                                Eine Endlosschleife ist eine Schleife, die nicht per Programm abgebrochen wird. Sie entsteht z.B., wenn der Trigger-Datenpunkt und der Datenpunkt der geschrieben wird, identisch sind und im Skript der Wert verändert wird. Beispiel:

                                const idTrigger = 'irgendeine_ID';
                                
                                on(idTrigger, function(dp) {
                                   setState(idTrigger, dp.state.val + 1); // Wert im Datenpunkt wird um 1 erhöht, was wiederum einen Trigger auslöst
                                });
                                

                                Eine solche Endlosschleife kann das OS lahmlegen.

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

                                  @paul53 Bin jetzt alles durch find nichts!

                                  Hier mal die einzelnen Scripte:

                                  const idRH = 'shelly.0.SHHT-1#F058A0#1.hum.value';
                                  const idDusche = '0_userdata.0.Bad.Abluft.Duschen';
                                   
                                  var duschen = getState(idDusche).val;
                                   
                                  on(idRH, function(dp) {
                                      let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute
                                      if(anstieg > 2 && dp.state.val > 65) duschen = true;
                                      else if(dp.state.val < 64) duschen = false;
                                      setState(idDusche, duschen, true);
                                      log('Anstieg: ' + anstieg + ', rel. Feuchte: ' + dp.state.val + ', Duschen: ' + duschen);
                                  });
                                  
                                  // Feuchtegehalt und Taupunkt berechnen
                                   
                                  // IDs anpassen !
                                  const idT  = 'shelly.0.SHHT-1#E0119C#1.tmp.temperatureC';
                                  const idRH = 'shelly.0.SHHT-1#E0119C#1.hum.value';
                                  const idX  = '0_userdata.0.Untergeschoss.Klima.Feuchtegehalt';
                                  const idDp = '0_userdata.0.Untergeschoss.Klima.Taupunkt';
                                   
                                  var t = getState(idT).val; // Temperatur in °C
                                  var rh = getState(idRH).val; // rel. Feuchte in %
                                   
                                  const  DP = require('dewpoint');
                                   
                                  // 70 m über NN
                                  const xdp = new DP(510); 
                                   
                                  function klima() {
                                      const y = xdp.Calc(t, rh);
                                      setState(idX, Math.round(y.x * 10) / 10, true); // Feuchtegehalt in g/kg
                                      setState(idDp, Math.round(y.dp * 10) / 10, true); // Taupunkt in °C
                                  }
                                   
                                  klima(); // Script start
                                   
                                  on(idT, function (dp) {
                                      t = dp.state.val; 
                                      klima();
                                  });
                                   
                                  on(idRH, function (dp) {
                                      rh = dp.state.val; 
                                      klima();
                                  });
                                  
                                  
                                  // Raumlüftung zum Entfeuchten / Kühlen
                                  const idTi = 'shelly.0.SHHT-1#E0119C#1.tmp.temperatureC'; // Raum-Temperatur
                                  const idTa = 'shelly.0.SHSW-1#E0980696872B#1.ext.temperatureC1'; // Aussen-Temperatur
                                  const idXi = '0_userdata.0.Untergeschoss.Klima.Feuchtegehalt';
                                  const idXa = '0_userdata.0.Aussen.Klima.Feuchtegehalt';
                                  const idLueft = '0_userdata.0.Haus.Klima.Lueften';
                                   
                                  var ti = getState(idTi).val;  // Raumtemperatur in °C
                                  var ta = getState(idTa).val;  // Aussentemperatur in °C
                                  var xi = getState(idXi).val;  // Raumfeuchtegehalt in g/kg
                                  var xa = getState(idXa).val;  // Aussenfeuchtegehalt in g/kg
                                  var lueft = getState(idLueft).val;
                                   
                                  // Lüftung steuern mit 0,2 g/kg und 0,3 K Hysterese
                                  function lueften() {
                                      if (xa <= (xi - 0.3) && ta <= (ti - 0.4) && ti >= 22.0 && xi >= 6) lueft = true;
                                      else if (xa >= (xi - 0.1) || ta >= (ti - 0.1) || ti <= 21.7 || xi <= 5.8) lueft = false;
                                      if (lueft != getState(idLueft).val) setState(idLueft, lueft);
                                  }
                                   
                                  lueften();  // Script start
                                   
                                  on(idXi, function (dp) {
                                      xi = dp.state.val;
                                      lueften();
                                  });
                                   
                                  on(idXa, function (dp) {
                                      xa = dp.state.val;
                                      lueften();
                                  });
                                   
                                  on(idTi, function (dp) {
                                      ti = dp.state.val;
                                      lueften();
                                  });
                                   
                                  on(idTa, function (dp) {
                                      ta = dp.state.val;
                                      lueften();
                                  });
                                  
                                  // Zu- und Ablüfter steuern
                                   
                                  // IDs anpassen !
                                  const idZuluft = 'shelly.0.SHSW-25#10D1CC#1.Relay1.Switch';
                                  const idAbluft = 'shelly.0.SHSW-25#10D1CC#1.Relay0.Switch';
                                  const idZuMode = '0_userdata.0.Haus.Zuluft.Modus';
                                  const idAbMode = '0_userdata.0.Haus.Abluft.Modus';
                                  const idLueft  = '0_userdata.0.Haus.Klima.Lueften';
                                  const idDusche = '0_userdata.0.Bad.Abluft.Duschen';
                                  
                                  var modeZu = getState(idZuMode).val; // 0=Aus,1=Auto,2=Ein
                                  var modeAb = getState(idAbMode).val;
                                  var lueft  = getState(idLueft).val && compareTime('07:00', '22:00', 'between'); 
                                  var duschen = getState(idDusche).val;
                                   
                                  function zuluft() {
                                      let ein = modeZu == 2 || modeZu == 1 && lueft;
                                      if(ein != getState(idZuluft).val) setState(idZuluft, ein);
                                  }
                                   
                                  function abluft() {
                                      let ein = modeAb == 2 || modeAb == 1 && (lueft || duschen);
                                      if(ein != getState(idAbluft).val) setState(idAbluft, ein);
                                  }
                                   
                                  zuluft();
                                  abluft();
                                   
                                  schedule('0 7,22 * * *', function() { // täglich am Morgen und am Abend
                                      zuluft();
                                      abluft();
                                  });
                                   
                                  on(idLueft, function(dp) {
                                      lueft = dp.state.val && compareTime('07:00', '22:00', 'between');
                                      zuluft();
                                      abluft();
                                  });
                                   
                                  on(idZuMode, function(dp) {
                                      modeZu = dp.state.val;
                                      zuluft();
                                  });
                                   
                                  on(idAbMode, function(dp) {
                                      modeAb = dp.state.val;
                                      abluft();
                                  });
                                   
                                  on(idDusche, function(dp) {
                                      duschen = dp.state.val;
                                      abluft();
                                  });
                                  
                                  // Feuchtegehalt und Taupunkt berechnen
                                   
                                  // IDs anpassen !
                                  const idT  = 'shelly.0.SHSW-1#E0980696872B#1.ext.temperatureC1';
                                  const idRH = 'shelly.0.SHSW-1#E0980696872B#1.ext.humidity1';
                                  const idX  = '0_userdata.0.Aussen.Klima.Feuchtegehalt';
                                  const idDp = '0_userdata.0.Aussen.Klima.Taupunkt';
                                   
                                  var t = getState(idT).val; // Temperatur in °C
                                  var rh = getState(idRH).val; // rel. Feuchte in %
                                   
                                  const  DP = require('dewpoint');
                                   
                                  // 70 m über NN
                                  const xdp = new DP(510); 
                                   
                                  function klima() {
                                      const y = xdp.Calc(t, rh);
                                      setState(idX, Math.round(y.x * 10) / 10, true); // Feuchtegehalt in g/kg
                                      setState(idDp, Math.round(y.dp * 10) / 10, true); // Taupunkt in °C
                                  }
                                   
                                  klima(); // Script start
                                   
                                  on(idT, function (dp) {
                                      t = dp.state.val; 
                                      klima();
                                  });
                                   
                                  on(idRH, function (dp) {
                                      rh = dp.state.val; 
                                      klima();
                                  });
                                  
                                  
                                  paul53 1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @TinoNikol last edited by

                                    @TinoNikol sagt:

                                    Bin jetzt alles durch find nichts!

                                    Ich finde auch nichts.

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

                                      @paul53 said in Suche helfende Hand Lüftungssteuerung:

                                      @TinoNikol sagt:

                                      Bin jetzt alles durch find nichts!

                                      Ich finde auch nichts.

                                      Und das mit der Dusche reagiert zu langsam kann ich da irgendwas ändern?

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

                                        @TinoNikol sagte:

                                        das mit der Dusche reagiert zu langsam kann ich da irgendwas ändern?

                                        Das wird an der Trägheit des Feuchtesensors liegen. Vergleiche den Zeitpunkt des Logs mit dem Lüfterstart.

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

                                          @paul53 Das sind 5 Min

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

                                            @TinoNikol sagte:

                                            Das sind 5 Min

                                            Was sind 5 Minuten ? Die Differenz zwischen der ersten Log-Ausgabe mit "Duschen: true" und Lüfterstart ? Oder die Differenz von Duschbeginn bis zum Lüfterstart ?

                                            EDIT: Hast Du den History-Adapter installiert ? Dann zeichne mal die Werte vom DP 'shelly.0.SHHT-1#F058A0#1.hum.value' auf.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            602
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly javascript ventilation
                                            4
                                            76
                                            4878
                                            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