NEWS
höchste Windgeschwindigkeit der letzten 30 Min bekommen
-
Hallo zusammen,
ich stehe gedanklich gerade auf dem Schlauch, bin aber auch kein begnadeter Programmierer
Ich möchte gerne meine Rolladensteuerung organisieren (Werte und Steuerung kommt aus Homematic).
Ich möchte gerne zeitgesteuert die Rolladen rauf oder runter fahren (soweit kein Problem)Nun möchte ich das raus und runterfahren aber nur machen, wenn kein Sturm ist. Habe ich auch hinbekommen, die letzte Windgeschwindigkeit zu nehmen und in die Prüfung mit eingebaut.
Nun ist aber das Problem, dass Wind ja in Böen auftritt. Es kann also sein, dass vor 10 Min eine heftige Böe war, der Wind sich gerade ausruht, und wenn ich die Rolläden dann hochfahre die nächste Böe kommt.
Also würde ich gerne für die letzten 30 Min prüfen, ob eine Windgeschwindigkeit über einerm Mindestwert war.
Hier hapert es nun leider.- kann ich irgendwie die letzten historischen Werte auslesen und dagegen prüfen?
- Falls erstes nicht geht, habt ihr eine gute Idee, wie ich immer den höchsten Wert der letzten 30 Min speichern kann?
Derzeit bekomme ich den höchsten, allerdins wenn 30 Min vorbei sind, dann bekomme ich nicht den 2 höchsten Wert, sondern den aktuellen Wert und würde dagegen wieder eine 30 Min Tabelle mit dem höchsten Wert aufbauen.
Beispiel
Wind 60km/h um 12:00 = höchster Wert
Wind 58 km/h um 12:28 = zweithöchster Wert
Wind 20 km/h um 12:31 => würde mein neuester höchster Wert werden, obwohl nur vor 3 Min. 58 km/h waren, da ich ja immer nur gegen den höchsten Wert messe.Aus dem Bauch raus würde ich nun 2 Variablenb aufmachen und mir auch den 2 höchsten Wert speichern, aber vielleicht geht es ja geschickter.
Habt schon mal vielen Dank
Matthias -
@mse1971 sagte:
Also würde ich gerne für die letzten 30 Min prüfen, ob eine Windgeschwindigkeit über einerm Mindestwert war.
Dazu ist es nicht nötig, die höchste Windgeschwindigkeit zu ermitteln, sondern es genügt, den Grenzwert zu überwachen. Etwa so:
const idWind = '...'; // Windgeschwindigkeit const idSturm = '...'; // Grenzwert überschritten const gw = 30; // Grenzwert für Sturm var timer = null; on({id: idWind, valGt: gw}, function() { setState(idSturm, true, true); if(timer) clearTimeout(timer); timer = setTimeout(function() { setState(idSturm, false, true); }, 30 * 60000); });
Bei jeder Böe über dem Grenzwert wird der Timer neu gestartet.
-
-
@iomountain sagte:
Würde das so passen?
Nein, es können mehrere Timer ausgelöst werden, da innerhalb von 30 Minuten mehrere Messwerte größer dem Grenzwert auftreten können.
Wie wird die Variable idWarn ausgewertet ? Weshalb beginnen die Variablennamen mit "id", obwohl es sich nicht um IDs handelt ? -
@paul53 ja es können mehrere laufen, aber nur wenn einer die 30 Minutengrenze erreicht wird warn auf true gesetzt.
Sollte in der Zwischenzeit ein Wert unter dem Warnwert kommen werden die Timeouts alle gestoppt (Entwarnung).
So hab ich mir das jedenfalls gedacht.
ID weil ich erst Datenpunkte verwenden wollte, dann aber doch nur einen für den Sensor angelegt habe, bzw weil ich es auch nicht besser weiß.
Gibt es eine Übersicht wie Variablen, Zähler usw. benannt werden sollten? -
@iomountain sagte:
Sollte in der Zwischenzeit ein Wert unter dem Warnwert kommen werden die Timeouts alle gestoppt
Es wird erst dann ein Timer gestoppt. Bleibt es über dem Grenzwert, laufen die zuerst gestarten Timer ab und es wird immer wieder "kein Sturm mehr" signalisiert (bis zum nächsten Trigger über dem Grenzwert).
@iomountain sagte in höchste Windgeschwindigkeit der letzten 30 Min bekommen:
Gibt es eine Übersicht wie Variablen, Zähler usw. benannt werden sollten?
Nein, aber möglichst nicht irreführend.
-
@paul53 said in höchste Windgeschwindigkeit der letzten 30 Min bekommen:
@mse1971 sagte:
Also würde ich gerne für die letzten 30 Min prüfen, ob eine Windgeschwindigkeit über einerm Mindestwert war.
Dazu ist es nicht nötig, die höchste Windgeschwindigkeit zu ermitteln, sondern es genügt, den Grenzwert zu überwachen.
Bei jeder Böe über dem Grenzwert wird der Timer neu gestartet.Hallo Paul53,
vielen lieben Dank für den Hinweis - das wird die Lösung werden.
Gruß
Matthias -
@iomountain sagte:
Meine Lösung in Blockly:
Vorschlag:
Wert ist eine Eigenschaft des Trigger-Datenpunktes (unter Blöcke Trigger).
-
Danke @paul53 für Deinen Vorschlag, aber muss das unterschreiten nicht auch irgendwie abgefragt werden? Muss ich mir noch genau reinziehen.
Ich brauch etwas länger und hab jetzt eine etwas kompliziertere Lösung über die Suchfunktion des Forums zusammengesteckt und frage einfach ab ob schon ein Timer läuft:
-
@iomountain Du setzt warn sofort auf falsch, wenn der Grenzwert unterschritten wird und erst nach 30 Minuten auf wahr bei Grenzwertüberschreitung. Es muss genau umgekehrt erfolgen: Sofort Warnung und erst nach 30 Minuten Entwarnung.
-
@paul53 stimmt, bei mir muss 30 Minuten Sturm geben, damit es auf true geht. Aber immerhin hab ich etwas über timeout gelernt. Danke und schöne Ostern noch.
-
Ich habe es am Ende etwas anders gelöst.
Wenn der Wind den Sturm-Wert überschreitet setze ich einfach einen neuen Zeitstempel in eine Variable.Diese frage ich dann vor den rauf- oder runterfahren immer ab, und schuae ob sie älter als 30 Min ist.