Navigation

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

    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

    Schedule im ms Bereich

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

      @ben1983 sagte: setstate mehr als 200ms, ist das so unperformant?

      200 ms benötigt setState() normalerweise nicht. Ein 200 ms Intervall sollte keine Probleme machen, wenn nur Standard-Befehle wie setState() verwendet werden.

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

        @asgothian sagte: wenn du so schnell regelst solltest du darüber nachdenken die statesdb auf redis umzustellen.

        Die Art der DB hat so gut wie keinen Einfluss, da alles im RAM abläuft.

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

          @paul53 sagte in Schedule im ms Bereich:

          @asgothian sagte: wenn du so schnell regelst solltest du darüber nachdenken die statesdb auf redis umzustellen.

          Die Art der DB hat so gut wie keinen Einfluss, da alles im RAM abläuft.

          Wenn die statesdb auf File steht dann wird es immer wieder zu Situationen kommen in denen die Kombination setstate/getstate zeit dauert da die states auf den Massenspeicher geschrieben werden. Ich konnte einen deutlichen Performancegewinn bei den States durch die Nutzung von redis feststellen.

          1 Reply Last reply Reply Quote 0
          • Ben1983
            Ben1983 last edited by

            @asgothian sagte in Schedule im ms Bereich:

            redis

            habe das script schon wieder umgestellt.
            grundlegend ist es eine solche funktion:

            setState(IdLowpass,getLowpass(getSTate(IdLowpass).val,getState(IdFilerTime).val,200);

            paul53 1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Jey Cee last edited by

              @jey-cee sagte in Schedule im ms Bereich:

              @asgothian sagte in Schedule im ms Bereich:

              @ben1983 Skript anhalten sollte reichen

              Nein setIntervall verhält sich wie setTiemout, das muss beim beenden des Skripts gelöscht werden.
              Sonst läuft das einfach fröhlich weiter.

              bist du sicher ? bei meinen Skripten muss ich die nicht löschen wenn ich das Skript anhalte.

              A.

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

                @ben1983 sagte: setState(IdLowpass,getLowpass(getSTate(IdLowpass).val,getState(IdFilerTime).val,200);

                Verwende Variablen anstelle von getState(id).val.

                Ben1983 1 Reply Last reply Reply Quote 0
                • Ben1983
                  Ben1983 @Jey Cee last edited by

                  @jey-cee hatte jetzt das setintervall aus dem script gelöscht und das script gespeichert, dann läuft es ja neu an und sollte weg sein, oder?

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

                    @asgothian sagte: bei meinen Skripten muss ich die nicht löschen wenn ich das Skript anhalte.

                    Mit Skript anhalten werden alle Timer des Skriptes gestoppt (gelöscht).

                    Jey Cee 1 Reply Last reply Reply Quote 0
                    • Ben1983
                      Ben1983 @paul53 last edited by

                      @paul53 und wann sollen die beschrieben werden?
                      Der Verwendete Wert ist nun mal global, wie soll ich den sonst bekommen, außer mit getState?

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

                        @ben1983 sagte: wie soll ich den sonst bekommen, außer mit getState?

                        Bei Skriptstart den Wert mit getState(id).val in die Variable einlesen und dann mit der Variablen weiter arbeiten. Den Datenpunkt dann laufend mit setState(id, variable, true) aktualiseren.

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

                          @paul53 würde funktionieren,
                          aber das was ich mit setstate beschreibe ist ja auch die zu lesende Variable.
                          ok, könnte man auch auf die Variable schreiben und direkt nach dem schreiben darauf dann mit setstate zuweisen. also quasi so:

                          let myVar = getState(Idxy).val;
                          let myTime = getState(IdTime).val;
                          

                          im intervall dann:

                          myVar = getLowpass(myVar,myTime,200);
                          setState(Idxy,myVar);
                          

                          sollte das besser funktionieren?

                          Bedeutet also, dass man in einem intervall besser kein getState verwenden sollte?
                          dann müsste ich nur den aktualwert über ein .on event der variable zuweisen.

                          ein .n event einer variable gibts nicht, oder?

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

                            @ben1983 sagte: sollte das besser funktionieren?

                            Ja.

                            Wenn myTime variabel sein soll, kann man sie per on(IdTime, callback) aktualisieren.

                            Ben1983 1 Reply Last reply Reply Quote 0
                            • Jey Cee
                              Jey Cee Developer @paul53 last edited by

                              @paul53 sagte in Schedule im ms Bereich:

                              Mit Skript anhalten werden alle Timer des Skriptes gestoppt (gelöscht).

                              Sollten sie ja. Ich hatte früher seltsamme Effekte in Skripten. Seit dem lösche ich beim beenden vom Skript alles was potentiell weiter laufen könnte.

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

                                @paul53 sollte so gehen, oder?

                                let myLowpass = getState(IdWirkleistungGesamtLowpass).val;
                                let myFiltertime = getState(IdLowpassFilterTime).val;
                                let myValue = 0;
                                on(IdWirkleistungGesamt,setmyVal);
                                function setmyVal()
                                {
                                    myValue = getState(IdWirkleistungGesamt).val;
                                }
                                
                                function myInterval()
                                {
                                    myLowpass = GetLowpassValue(myLowpass,myValue,myFiltertime,0.2);
                                    setState(IdWirkleistungGesamtLowpass,myLowpass);
                                }
                                
                                setInterval(myInterval,200);
                                
                                Asgothian 1 Reply Last reply Reply Quote 0
                                • Ben1983
                                  Ben1983 @Jey Cee last edited by

                                  @jey-cee keine ahnung, ob es an dem set und get gelegen hat, oder einfach nur am mehrfach übertragen?
                                  auf jeden fall war er überlastet und durcheinander

                                  1 Reply Last reply Reply Quote 0
                                  • Asgothian
                                    Asgothian Developer @Ben1983 last edited by

                                    @ben1983 was macht die Funktion “GetLowpassValue”, und wie lange braucht sie ?

                                    1 Reply Last reply Reply Quote 0
                                    • Ben1983
                                      Ben1983 last edited by

                                      @asgothian also hier der gesamte Aufruf:
                                      Habe mal davor und danach geloggt.

                                      log("Start Befehl");
                                      setState(IdWirkleistungGesamtLowpass,GetLowpassValue(getState(IdWirkleistungGesamtLowpass).val,getState(IdWirkleistungGesamt).val,getState(IdLowpassFilterTime).val,2));
                                      log("Ende Befehl");
                                      

                                      Ergebnis:

                                      javascript.0
                                      2022-01-27 23:18:44.685	info	script.js.common.Allgemein: Ende Befehl
                                      
                                      javascript.0
                                      2022-01-27 23:18:44.685	info	script.js.common.Allgemein: Start Befehl
                                      

                                      denke max 1ms dauert das ganze.

                                      vielleicht war es nur eine falsche eingabe vorher.

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

                                        @ben1983 sagte: denke max 1ms dauert das ganze.

                                        Nein, es dauert wahrscheinlich etwas länger, denn setState() arbeitet asynchron, d.h. log("Ende Befehl") wird ausgeführt, bevor setState() fertig ist.

                                        @asgothian sagte in Schedule im ms Bereich:

                                        was macht die Funktion “GetLowpassValue”

                                        Ich schließe mich der Frage an. Nur wenn man die Funktion kennt, kann man beurteilen, ob daraus ein zeitliches Problem entstehen könnte.

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

                                          @paul53 Stimmt, habe es mal so gemacht:

                                          log("Start");
                                          setState(IdWirkleistungGesamtLowpass,GetLowpassValue(getState(IdWirkleistungGesamtLowpass).val,getState(IdWirkleistungGesamt).val,2,0.2))
                                          
                                          on(IdWirkleistungGesamtLowpass,logging);
                                          
                                          function logging()
                                          {
                                              log("Ende");
                                          }
                                          

                                          Ergebnis:

                                          javascript.0
                                          2022-01-27 23:52:36.433	info	script.js.common.Allgemein: Ende
                                          javascript.0
                                          2022-01-27 23:52:36.348	info	script.js.common.Allgemein: Start
                                          

                                          Also 85ms benötigt setState

                                          Wie ist das denn zu sehen, wenn ich bspw. 20 werte hintereinander mit setSTate schreibe die brauchen doch dann keine 20 * 85ms, oder?

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

                                            @ben1983 sagte: Also 85ms benötigt setState

                                            Nein, weniger: Der Trigger benötigt auch einige Zeit.

                                            @ben1983 sagte in Schedule im ms Bereich:

                                            wenn ich bspw. 20 werte hintereinander mit setSTate schreibe die brauchen doch dann keine 20 * 85ms, oder?

                                            Nein, die setState() werden kurz (< 1ms) nacheinander ausgeführt, aber alle sind erst nach einigen ms Verzögerung fertig.

                                            So siehst Du die Dauer von setState(), wobei noch 2 getState() dabei sind (Variablen wären schneller):

                                            function logging()
                                            {
                                                log("Ende");
                                            }
                                            log("Start");
                                            setState(IdWirkleistungGesamtLowpass,GetLowpassValue(getState(IdWirkleistungGesamtLowpass).val,getState(IdWirkleistungGesamt).val,2,0.2), logging)
                                            
                                            Ben1983 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            777
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            38
                                            752
                                            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