Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Suche helfende Hand Lüftungssteuerung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    911

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Suche helfende Hand Lüftungssteuerung

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptblocklyventilation
76 Beiträge 4 Kommentatoren 6.9k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • paul53P paul53

    @TinoNikol sagte:

    wenn ich jetzt Dusche sollte ja die Abluft starten! ... Und ganz wichtig Zeitsteuerung

    Habe compareTime() (2 Stellen), einen Datenpunkt für Duschen im Automodus und ein schedule() ergänzt.

    // Zu- und Ablüfter steuern
    
    // IDs anpassen !
    const idZuluft = 'alias.0.Haus.Zuluft.Luefter';
    const idAbluft = 'alias.0.Haus.Abluft.Luefter';
    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();
    });
    

    @TinoNikol sagte in Suche helfende Hand Lüftungssteuerung:

    Automatisch eine bestimmte Luftfeuchte hält???

    Das halte ich nicht für sinnvoll. Das Lüftungsskript dient zur Entfeuchtung durch die Außenluft und enthält einen Schutz vor zu trockener Luft.

    T Offline
    T Offline
    TinoNikol
    schrieb am zuletzt editiert von
    #30

    @paul53 Ok aber wie funktioniert das mit dem Dusch Modus???

    T paul53P 2 Antworten Letzte Antwort
    0
    • T TinoNikol

      @paul53 Ok aber wie funktioniert das mit dem Dusch Modus???

      T Offline
      T Offline
      TinoNikol
      schrieb am zuletzt editiert von
      #31

      Luftfeuchte wäre klasse...

      1 Antwort Letzte Antwort
      0
      • T TinoNikol

        @paul53 Ok aber wie funktioniert das mit dem Dusch Modus???

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #32

        @TinoNikol sagte :

        wie funktioniert das mit dem Dusch Modus???

        Das musst Du wissen, wie erkannt wird, dass geduscht wird. Gibt es einen Taster ? Oder über Anstieg Luftfeuchte ?

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        T 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @TinoNikol sagte :

          wie funktioniert das mit dem Dusch Modus???

          Das musst Du wissen, wie erkannt wird, dass geduscht wird. Gibt es einen Taster ? Oder über Anstieg Luftfeuchte ?

          T Offline
          T Offline
          TinoNikol
          schrieb am zuletzt editiert von
          #33

          @paul53 Sensor Luftfeuchte

          paul53P 1 Antwort Letzte Antwort
          0
          • T TinoNikol

            @paul53 Sensor Luftfeuchte

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #34

            @TinoNikol sagte:

            Sensor Luftfeuchte

            Welche Daten hat der Sensor (Auflösung, Zeitverhalten) ?

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            T 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @TinoNikol sagte:

              Sensor Luftfeuchte

              Welche Daten hat der Sensor (Auflösung, Zeitverhalten) ?

              T Offline
              T Offline
              TinoNikol
              schrieb am zuletzt editiert von
              #35

              @paul53 Ist ein Shelly HT keine Ahnung

              paul53P 1 Antwort Letzte Antwort
              0
              • T TinoNikol

                @paul53 Ist ein Shelly HT keine Ahnung

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #36

                @TinoNikol sagte:

                Ist ein Shelly HT

                Habe ich nicht.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                T 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @TinoNikol sagte:

                  Ist ein Shelly HT

                  Habe ich nicht.

                  T Offline
                  T Offline
                  TinoNikol
                  schrieb am zuletzt editiert von
                  #37

                  @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

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • T TinoNikol

                    @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

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #38

                    @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);
                    });
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    T 2 Antworten Letzte Antwort
                    0
                    • paul53P 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 Offline
                      T Offline
                      TinoNikol
                      schrieb am zuletzt editiert von
                      #39

                      @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 Antwort Letzte Antwort
                      0
                      • paul53P 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 Offline
                        T Offline
                        TinoNikol
                        schrieb am zuletzt editiert von
                        #40

                        @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

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • T TinoNikol

                          @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

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #41

                          @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);
                          });
                          

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          T 2 Antworten Letzte Antwort
                          0
                          • paul53P 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 Offline
                            T Offline
                            TinoNikol
                            schrieb am zuletzt editiert von
                            #42

                            @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 Antwort Letzte Antwort
                            0
                            • paul53P 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 Offline
                              T Offline
                              TinoNikol
                              schrieb am zuletzt editiert von
                              #43

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

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • T TinoNikol

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

                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #44

                                @TinoNikol sagte:

                                muss Javascript neustarten sonst Startet Lüftung nicht!

                                Das kann wohl kaum an diesem Skript liegen.

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                T 1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @TinoNikol sagte:

                                  muss Javascript neustarten sonst Startet Lüftung nicht!

                                  Das kann wohl kaum an diesem Skript liegen.

                                  T Offline
                                  T Offline
                                  TinoNikol
                                  schrieb am zuletzt editiert von
                                  #45

                                  @paul53 An was könnte es liegen?

                                  paul53P 1 Antwort Letzte Antwort
                                  0
                                  • T TinoNikol

                                    @paul53 An was könnte es liegen?

                                    paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von paul53
                                    #46

                                    @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.

                                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                    T 1 Antwort Letzte Antwort
                                    0
                                    • paul53P 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 Offline
                                      T Offline
                                      TinoNikol
                                      schrieb am zuletzt editiert von
                                      #47

                                      @paul53 Was heißt endlosschleife?

                                      paul53P 1 Antwort Letzte Antwort
                                      0
                                      • T TinoNikol

                                        @paul53 Was heißt endlosschleife?

                                        paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von paul53
                                        #48

                                        @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.

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • paul53P 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 Offline
                                          T Offline
                                          TinoNikol
                                          schrieb am zuletzt editiert von TinoNikol
                                          #49

                                          @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();
                                          });
                                          
                                          
                                          paul53P 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          782

                                          Online

                                          32.6k

                                          Benutzer

                                          82.2k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe