NEWS
Schedule im ms Bereich
-
Hallo, ich würde gerne für eine Regelung eine Funktion im sagen wir 200msZyklus aufrufen.
Geht das mit iobroker im JS code?
Bekomme mit schedule nur sekundenwerte hin. -
Das geht. Dazu dient die Funktion setIntervall. Da kannst du etwas alle x ms laufen lassen.
Allerdings musst du aufpassen das die Aktionen sich dann nicht überschneiden.
A.
-
@asgothian danke.
Probiere ich mal aus.
Kannte bis dato nur die schedule Funktion. -
@asgothian welche Aktionen sollen sich überschneiden?
-
@ben1983 sagte in Schedule im ms Bereich:
@asgothian danke.
Probiere ich mal aus.
Kannte bis dato nur die schedule Funktion. -
@ben1983 wenn du versuchst alle 200 ms eine Aktion durchzuführen die 400 ms dauert dann hast du das System in ca. 3 bis 5 Minuten tot.
A.
-
@asgothian habe gerade wohl ein komma falsxh gesetzt jetzt geht nochts mehr.
komme nicht mal mehr ins script um es zu stoppen. -
@asgothian wenn ich das setinterval im skript entferne und das skript speichere, dann istves doch weg, oder muss es aktiv wieder deaktiviert werden?
-
@ben1983 Skript anhalten sollte reichen
-
@asgothian habe es hin bekommen,
aber leichter gesagt als getan. ich kam nicht mal auf den reiter instanzen.
irgebdwann klappte es mal und dann au h beim 50. mal stoppen hat er auch gestoppt.
glaube ein getstate oder setstate hat mir das genick gebrochen.macht dann nicht wirklich sinn, wenn man nichts beschreiben kann.
-
@ben1983 in dem fall ist der trick ein setstateasync zu nutzen und jeweils nach dem erfolg es set state ein settimeout mit 200 ms zu nutzen
A.
-
@asgothian aus Neugier.. was genau willst du tun ?
-
@asgothian ich wollte ein regelallgorythmus für einen lowpass zyklisch aufrufen.
dazu ist halt ein timeout nicht so gut, da man dann natürlich nicht auf seinen wiederkehreneden zyklus kommt.
warum benötigt denn das setstate mehr als 200ms, ist das so unperformant?
habe es jetzt wieder mit schedule und im 2s takt laufen.
ist dann halt reglungstechnisch etwas grob. -
@ben1983 Zeig doch mal das Skript.. die Kombination setState / getState auf den gleichen State ist nicht besonders gut.
A.
-
@asgothian Auch.. wenn du so schnell regelst solltest du darüber nachdenken die statesdb auf redis umzustellen.
A.
-
@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. -
@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.
-
@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.
-
@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.
-
@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);