Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Erstes Scipt reagiert nicht wie geplant

    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

    Erstes Scipt reagiert nicht wie geplant

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

      Das Script soll eigentlich bei Änderung der Temperatur prüfen, ob die Temperatur und Helligkeit gewisse Werte überschreitet bzw. unterschreit. Ich weiß nicht ob ich da irgendwie ein Logikfehler drin ist oder wo ich den Bock geschossen habe.

      Da die Temperatur mir nicht den gefallen tut, auf Wunsch sich zu ändern, habe ich Testweise ein anderen Datenpunkt genommen und diesen manuell verändert. Zum eigentlichen Sript sollte aber die Temperatur dienen, also sobald die sich ändert. Oder gibt es dafür eine elegantere Lösung?

      /*
      Urlaubssteuerung für die Rollos, bei über 25 Grad fahren die Rollos runter, bei unter 25 Grad und wenn es Hell ist hoch
      
      */
      
      
      on({id: 'hm-rpc.1.0010D8A990A07B.1.ACTUAL_TEMPERATURE', change: 'le'}, function (obj) {
          var temp=getState("hm-rpc.1.0010D8A990A07B.1.ACTUAL_TEMPERATURE").val;
          var licht=getState("hm-rpc.1.000D58A9915FBC.1.AVERAGE_ILLUMINATION").val;
              if (temp>25) {
                  setState("hm-rpc.0.PEQ0181456.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181557.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181507.1.LEVEL", 25);
                  setState("hm-rpc.0.OEQ2341971.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181297.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181518.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181504.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181520.1.LEVEL", 25);
                  setState("hm-rpc.0.PEQ0181559.1.LEVEL", 25);
              } else if (temp<25 && licht>2500) {
                  setState("hm-rpc.0.PEQ0181456.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181557.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181507.1.LEVEL", 100);
                  setState("hm-rpc.0.OEQ2341971.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181297.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181518.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181504.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181520.1.LEVEL", 100);
                  setState("hm-rpc.0.PEQ0181559.1.LEVEL", 100);
              }
      });
      

      Ich hoffe man kann mir dabei helfen. Den so passiert im Moment nichts, also die Rollos fahren nicht alle auf 25% Level.

      Michael

      Dr. Bakterius Glasfaser 2 Replies Last reply Reply Quote 0
      • Dr. Bakterius
        Dr. Bakterius Most Active @raspido last edited by

        @raspido Was mir aufgefallen ist: Bei genau 25°C passiert nichts. Ebenso wenn die Temperatur unter 25°C und das Licht kleiner 2500 ist. Ist das so gewollt?

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Dr. Bakterius last edited by paul53

          @dr-bakterius sagte: Bei genau 25°C passiert nichts. . Ist das so gewollt?

          So prüfst Du es. Ändere Zeile 20 in

                  } else if (licht>2500) {
          

          wenn licht die Außenhelligkeit enthält und die Rollos nur über 2500 auf 100 % fahren sollen.
          Allerdings solltest Du eine größere Hysterese einbauen, damit die Rollos nicht im Bereich von 25°C ständig rauf und runter fahren.

          R 2 Replies Last reply Reply Quote 0
          • R
            raspido @paul53 last edited by raspido

            @paul53 Eigentlich war das so geplant, dass die Rollos nur Tagsüber runter fahren, wenn es über 25 Grad wird. Sobald es kälter wird und es Tagsüber ist, sollen die Rollos hoch fahren.

            Ich dachte über den Weg bekomme ich das hin. Den ich möchte ja nicht, dass die Rollos Nachts plötzlich hoch fahren. Deshalb habe ich den Helligkeitssensor genommen mit über 2500 Lux als Wert.

            Und zur Info, falls es nicht bekannt ist 0 ist Unten und 100 ist oben. Also bei den Rollos.

            Ich hoffe man versteht was ich versuche aus zu drücken.

            Die reguläre Rollosteuerung läuft aktuell noch über die CCU selber. Also bei Sonnenuntergang Rollos runter, bei Sonnenaufgang Rollos Hoch. Diese Erweiterung war dafür gedacht, dass vor allem im Sommer es nicht so heiß in der Bude wird.

            Ich hab nochmal verschiedene Tutorials mal rein geguckt und oben bei dem abfragen der Temperatur habe ich den Parameter bei Chance von "le" auf "ne" geändert und gerade tat sich plötzlich was. Also alle Rollos sind nun auf 25% muss nur beobachten ob das nun so klappt wie gewünscht oder was passiert.

            Michael

            Glasfaser 1 Reply Last reply Reply Quote 0
            • Glasfaser
              Glasfaser @raspido last edited by

              @raspido sagte in Erstes Scipt reagiert nicht wie geplant:

              . Also alle Rollos sind nun auf 25%

              ... und dein Duty Cycle explodiert in der CCU !

              ... fahre die Rollladen einzeln mit Verzögerung .

              R paul53 2 Replies Last reply Reply Quote 0
              • R
                raspido @Glasfaser last edited by

                @glasfaser Okay, muss ich gucken, wie ich in JavaScript eine Pause von 5 Sekunden oder so rein fummel. Aber erst später. Gerade ist für so anstrengende Arbeit etwas zu warm.

                1 Reply Last reply Reply Quote 0
                • Glasfaser
                  Glasfaser @raspido last edited by

                  @raspido sagte in Erstes Scipt reagiert nicht wie geplant:

                  setState("hm-rpc.0.PEQ0181559.1.LEVEL", 25);

                  setStateDelayed("hm-rpc.0.PEQ0181559.1.LEVEL", 25, 5000, false);
                  setStateDelayed("hm-rpc.0.PEQ0181557.1.LEVEL", 25, 10000, false);
                  setStateDelayed("hm-rpc.0.PEQ0181507.1.LEVEL", 25, 15000, false);
                  
                  
                  
                  R 1 Reply Last reply Reply Quote 0
                  • R
                    raspido @Glasfaser last edited by

                    @glasfaser Oder so. Danke für die Hilfe.

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

                      @paul53 said in Erstes Scipt reagiert nicht wie geplant:

                      Hysterese

                      Meist am besten zusätzlich noch eine "Pause" einbauen, dass nach dem Fahren der Rollos z.B. 15 - 30 Minuten keine weitere Aktion gestartet wird oder so?

                      Also so oder so ähnlich:

                      await Sleep(900000);
                      

                      Michael

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

                        @glasfaser sagte: und dein Duty Cycle explodiert in der CCU !

                        Auch, weil bei jeder Temperaturänderung wieder an alle Rollos gesendet wird. Besser so:

                        var level = getState('hm-rpc.0.PEQ0181456.1.LEVEL').val;
                        
                        on('hm-rpc.1.0010D8A990A07B.1.ACTUAL_TEMPERATURE', function (dp) {
                            let temp = dp.state.val;
                            let licht = getState("hm-rpc.1.000D58A9915FBC.1.AVERAGE_ILLUMINATION").val;
                            if(licht > 2500) {
                                if (temp > 25) level = 25;
                                else if (temp < 24) level = 100;
                                if(level != getState('hm-rpc.0.PEQ0181456.1.LEVEL').val) {
                                    setState("hm-rpc.0.PEQ0181456.1.LEVEL", level);
                                    setStateDelayed("hm-rpc.0.PEQ0181557.1.LEVEL", level, 5000);
                                    setStateDelayed("hm-rpc.0.PEQ0181507.1.LEVEL", level, 10000);
                                    setStateDelayed("hm-rpc.0.OEQ2341971.1.LEVEL", level, 15000);
                                    setStateDelayed("hm-rpc.0.PEQ0181297.1.LEVEL", level, 20000);
                                    setStateDelayed("hm-rpc.0.PEQ0181518.1.LEVEL", level, 25000);
                                    setStateDelayed("hm-rpc.0.PEQ0181504.1.LEVEL", level, 30000);
                                    setStateDelayed("hm-rpc.0.PEQ0181520.1.LEVEL", level, 35000);
                                    setStateDelayed("hm-rpc.0.PEQ0181559.1.LEVEL", level, 40000);
                                }
                            }
                        });
                        
                        R 1 Reply Last reply Reply Quote 0
                        • R
                          raspido @paul53 last edited by

                          @paul53 Okay danke für die Hilfe. Ich merke, ich muss noch einiges "üben" und lernen was Programmieren an geht.

                          Aber ich denke es wird schon mit etwas Mühe.

                          Einer der nächsten Projekte was noch auf dem Plan steht, eine Werteliste aus einem Datenpunkt in ein Array packen, den im Anschluß in ein neues Format zu packen und in ein neuen Array packen und im Anschluß in einen anderen Datenpunkt zu packen. Aber ich denke dafür werde ich nochmal etwas üben.

                          Also der Plan ist aus dem Datenpunkt A (Auto,Apfel,Baum,...) einen Datenpunkt B folgenden Inhalt bringen (Auto=Auto,Apfel=Apfel,Baum,Baum,...). Dieses "Problem" ist für mein Sonos Lautsprecher.

                          Michael

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            raspido @raspido last edited by

                            Das Problem mit dem Array habe ich gelöst. Vielleicht nicht die Eleganteste Lösung aber zumindest der Teil mit den Datenpunkten funktioniert. Nur leider bringt mir das mit meiner Situation im Habpanel nicht weiter.

                            Aber trotzdem wollte ich mal mein Code zeigen, der mit Sicherheit nicht der eleganteste ist, aber er funktioniert.

                            on({id: 'hm-rpc.0.PEQ0177610.1.PRESS_SHORT'/*Display Wz:1 PRESS SHORT*/}, function (obj) {
                               var favoritenliste = getState("javascript.0.sonos.favTexte").val;
                               var listederfavoriten = favoritenliste.split(";");
                               var aneueliste = ["a","b"];
                               var sneueliste = "a";
                               var elemente = listederfavoriten.length;
                               console.log(elemente);
                               for (var i = 0; i<elemente; i++) {
                                   aneueliste[i] = listederfavoriten[i] + "=" + listederfavoriten[i];
                                   console.log(aneueliste[i]);
                               }
                            
                               setState("javascript.0.sonos.favoriten", aneueliste.join(","));
                            });
                            

                            Mein Plan war es eigentlich über meinen neu erzeugten Datenpunkt die Items des Auswahlwidgets zu erzeugen, nur leider klappt das nicht wie erhofft. Bei der Manuell erzeugten Liste, ändert das Auswahlwidget beim auswählen den Datenpunkt vom Sonos, welcher den aktuellen Favoriten in die Wiedergabe bringt. Also den Datenpunkt favorietes_set mit der Auswahl füllt.
                            cf1a577c-0a77-4a30-bde7-82d3f2658639-grafik.png

                            Vielleicht hat von euch jemand eine Idee oder kennt eine Möglichkeit für mein Problem.

                            Ich hoffe man versteht was ich machen möchte und wozu.

                            Michael

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            944
                            Online

                            31.9k
                            Users

                            80.1k
                            Topics

                            1.3m
                            Posts

                            javascript
                            4
                            12
                            317
                            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