Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Markisen Steuerung

    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

    Markisen Steuerung

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

      @michihorn sagte: Zum Thema Endstand der Markise habe ich 52 Sekunden ermittelt

      Dann solltest Du Zeile 129 entsprechend ändern oder besser in Zeile 122 auf false prüfen, wobei dann die Verzögerung überflüssig ist.

      EDIT:

      const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf];
      on({id: triggermarkB, change: 'ne', val: false}, function() {
          if(logging) {
              let text = '\ud83c\udf1e *Markisse Status:*\n  Links: ' + getState(idRolloL).val + '\n' + "  Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val;
              sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' });
              createEventlog("Markisse Bewegung", text);
              log(text);
          }
      });
      
      M 1 Reply Last reply Reply Quote 0
      • M
        michihorn @paul53 last edited by

        Die Uhrzeit für das Einfahren kann während des laufenden Skripts nicht verändert werden.
        Ok das habe ich jetzt mal so gelöst:

        //Uhrzeit
        const OffTime = { hour: getState(idStd).val, minute: getState(idMin).val };
        schedule(OffTime, RunDailyEinf);
        function RunDailyEinf() {
            if (getState(idHand).val == false) {
                setState(id_Auslöser, "Uhrzeit");
                setState(idEinf, true);
                setState(idAusf, false);
            }
        };
        
        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @michihorn last edited by paul53

          @michihorn sagte: das habe ich jetzt mal so gelöst:

          Damit bleibt es dabei, dass die Uhrzeit konstant bleibt. So funktioniert es mit Änderung der Uhrzeit:

          function RunDailyEinf() {
              if (!getState(idHand).val) {
                  setState(id_Auslöser, "Uhrzeit");
                  setState(idEinf, true);
                  setState(idAusf, false);
              }
          }
          //Uhrzeit
          var OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf);
          on([idMin, idStd], function() {
              clearSchedule(OffTime);
              OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf);
          });
          
          M 1 Reply Last reply Reply Quote 0
          • M
            michihorn @paul53 last edited by

            @paul53 Wie kann ich das ändern?

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

              @michihorn sagte: Wie kann ich das ändern?

              Was ändern?

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

                @paul53 das die Uhrzeit auch im laufenden Programm geändert werden kann

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

                  @michihorn sagte: die Uhrzeit auch im laufenden Programm geändert werden kann

                  Das habe ich hier gezeigt.

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

                    @michihorn sagte: Würde mich über Verbesserungsvorschläge freuen.

                    /*****Steuerung Markisen Wintergarten *****************************************/
                    
                     
                    const logging = true;
                    const idAdapt = "tahoma.0.info.connection"
                    const idRolloL = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState'
                    const idRolloR = 'tahoma.0.devices.Markisse_Rechts.states.core:DeploymentState'
                    const idTemp = 'hm-rpc.0.OEQ0128317.1.TEMPERATURE' //Sensor Wintergarten
                    const idLichtsensor = 'hm-rpc.2.00185BE98B3FCA.1.ILLUMINATION' //Wetterstation
                    const idStd = "javascript.0.Garten.Markisse.R_stunde"
                    const idMin = "javascript.0.Garten.Markisse.R_minute"
                    const idSW_Temp = 'javascript.0.Garten.Markisse.SW_Temp'; // Auslösewert Temp
                    const idLux = 'javascript.0.Garten.Markisse.SW_Lux'; // Auslösewert Lux
                    const idLuxEinf = "javascript.0.Garten.Markisse.SW_LuxEinF"
                    const id_Auslöser = "0_userdata.0.Garten.Tahoma.Markise.Auslöser"
                     
                    const idRegen = 'hm-rpc.2.00185BE98B3FCA.1.RAINING'  //Wetterstation
                    const id_Anw = "0_userdata.0.Haus.AW.AW"
                    const idWind = 'hm-rpc.2.00185BE98B3FCA.1.WIND_SPEED';  //Wetterstation
                    const idHand = 'javascript.0.Garten.Markisse.Hand'
                     
                    const idMLStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusL";
                    const idMRStatus = "0_userdata.0.Garten.Tahoma.Markise.StatusR";
                     
                    const id_MarkisseEXEEinf = "tahoma.0.actionGroups.Markisse_Einfahren.commands.execute"
                    const id_MarkisseEXEAusf = "tahoma.0.actionGroups.Markisse_Ausfahren.commands.execute"
                    // const idEinf = "0_userdata.0.Garten.Tahoma.Markise.Einf"
                    const idAusf = "0_userdata.0.Garten.Tahoma.Markise.Ausf"
                     
                    // const js = 'system.adapter.javascript.3'
                    var SW_Lux = getState(idLux).val;
                    var SW_LuxEinf = getState(idLuxEinf).val;
                    // var grund;
                     
                    //******EINFAHREN***************************************************************************
                    
                    function RunDailyEinf() {
                        if (!getState(idHand).val) {
                            setState(id_Auslöser, "Uhrzeit", true);
                            setState(idAusf, false, true);
                        }
                    }
                    //Uhrzeit
                    var OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf);
                    on([idMin, idStd], function() {
                        clearSchedule(OffTime);
                        OffTime = schedule(getState(idMin).val + ' ' + getState(idStd).val + ' * * *', RunDailyEinf);
                    });
                    
                    //Regen
                    on({id: idRegen, val: true}, function() {
                        if (getState(id_Auslöser).val != "Regen") {
                            setState(id_Auslöser, "Regen", true);
                            setState(idAusf, false, true);
                        }
                    });
                    //LUX
                    on({ id: idLichtsensor, valLe: SW_LuxEinf, oldValGt: SW_LuxEinf }, function() {
                        log("1.Trigger gesetzt");
                        if (getState(id_Auslöser).val != "Bewölkung/Helligkeit") {
                            log("2.Kommando Einfahren gesendet");
                            setState(id_Auslöser, "Bewölkung/Helligkeit", true);
                            setState(idAusf, false, true); //-->Zeile 90
                        }
                    });
                     
                    //******AUSFAHREN**************************************************************************** 
                    on({id: idLichtsensor, valGt: SW_Lux, oldValLe: SW_Lux}, function() {
                        log("1.Trigger gesetzt");
                        if (getState(id_Anw).val && getState(idTemp).val >= getState(idSW_Temp).val) {
                            log("2.Bedingung Licht/Temp erfüllt");
                            //if (compareTime('08:45', '16:00', 'between') && (getState(idRegen).val == false) && (getState(idHand).val == false)) {
                            if (compareTime('08:45', '16:00', 'between') && !getState(idRegen).val) {
                                log("3.Ausfahrbedingungen OK");
                                if (getState(id_Auslöser).val != "Sonnenschutz") {
                                    log("4.Kommando Ausfahren gesendet");
                                    setState(id_Auslöser, "Sonnenschutz", true);
                                    setState(idAusf, true, true) //-->Zeile 90
                                }
                            }
                        }
                    });
                    
                    //Änderung feststellen
                    schedule("* * * * *", function () {
                        setState(idMLStatus, getState(idRolloL).val > 0 ? 'Ausgef.' : 'Eingef.', true);
                        setState(idMRStatus, getState(idRolloR).val > 0 ? 'Ausgef.' : 'Eingef.', true);
                    });
                     
                    on(idAusf, function (dp) {
                        if(dp.state.val) {
                            setState(id_MarkisseEXEAusf, true);
                            setStateDelayed(id_MarkisseEXEAusf, false, 52000);
                        } else {
                            setState(id_MarkisseEXEEinf, true);
                            setStateDelayed(id_MarkisseEXEEinf, false, 52000);
                        }
                    });
                    
                    const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf];
                    on({id: triggermarkB, change: 'ne', val: false}, function() {
                        setTimeout(function() {
                            let text = '\ud83c\udf1e *Markise Status:*\n  Links: ' + getState(idRolloL).val + '\n' + "  Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val;
                            if(logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' });
                            createEventlog("Markise Status", text);
                            log(text);
                        }, 20000); // 20 s Abfrageintervall
                    });
                     
                    schedule('0 0 * * *', function() {
                        setState(id_Auslöser, "", true);
                        setState(idHand, false, true);
                    });
                    

                    createEventlog() ist eine globale Funktion?

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

                      @michihorn sagte: die Zustände zu früh abgegriffen so das 46% angezeigt wird.

                      Der Adapter arbeitet mit Polling: Wenn als Abfrageintervall 20000 ms eingestellt sind, kann sich die Rückmeldung um bis zu 20 s verzögern.

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

                        @paul53 JA

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

                          @paul53 sagte in Markisen Steuerung:

                          @michihorn sagte: Zum Thema Endstand der Markise habe ich 52 Sekunden ermittelt

                          Dann solltest Du Zeile 129 entsprechend ändern oder besser in Zeile 122 auf false prüfen, wobei dann die Verzögerung überflüssig ist.

                          EDIT:

                          const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf];
                          on({id: triggermarkB, change: 'ne', val: false}, function() {
                              if(logging) {
                                  let text = '\ud83c\udf1e *Markisse Status:*\n  Links: ' + getState(idRolloL).val + '\n' + "  Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val;
                                  sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' });
                                  createEventlog("Markisse Bewegung", text);
                                  log(text);
                              }
                          });
                          

                          Bei dieser Änderung wird sofort ohne Wartezeit der Status aus Tahoma abgegriffen. Gerade ist die Markise eingefahren sollte dann 0% anzeigen, Anzeige war aber 100%

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

                            @michihorn sagte: Bei dieser Änderung wird sofort ohne Wartezeit der Status aus Tahoma abgegriffen.

                            Ich habe im Skript oben noch eine Verzögerung von 20 s ergänzt, um das Polling zu berücksichtigen. Außerdem wird jetzt auf false, also erst 52 s später als ursprünglich getriggert.

                            const triggermarkB = [id_MarkisseEXEEinf, id_MarkisseEXEAusf];
                            on({id: triggermarkB, change: 'ne', val: false}, function() {
                                setTimeout(function() {
                                    let text = '\ud83c\udf1e *Markise Status:*\n  Links: ' + getState(idRolloL).val + '\n' + "  Rechts: " + getState(idRolloR).val + '\n' + getState(id_Auslöser).val;
                                    if(logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915253938149' });
                                    createEventlog("Markise Status", text);
                                    log(text);
                                }, 20000); // 20 s Abfrageintervall
                            });
                            

                            Übrigens: Markise schreibt man mit einem "s".

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

                              Übrigens: Markise schreibt man mit einem "s".
                              Danke du hast natürlich Recht. 👍

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              547
                              Online

                              31.9k
                              Users

                              80.2k
                              Topics

                              1.3m
                              Posts

                              javascript
                              3
                              18
                              467
                              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