NEWS
Blockly um Markise bei böigem Wind einzufahren
-
Hallo zusammen.
ich hab da mal wieder eine FrageJetzt wo die Sonne endlich mal wieder scheint kommt auch unsere Markise wieder zum Einsatz.
Diese ist nicht so ganz klein (650x350cm) was sie natürlich zu einem hervorragenden Segel macht.Bisher habe ich sie versucht über die HomeMatic-Wetterstation zu steuern.
Windwerte werden aber dort nur alle 3 Minuten gesendet, was bereits den Tod der Markise bedeuten könnte oder per Direktverknüpfung. Diese ist aber sehr grob einzustellen. Entweder fährt die Markise viel zu früh oder zu spät ein.Dazu kommt noch, dass zum einen je nach Windrichtung die Markise schon zappelt, das Anemometer aber nichts mitbekommt oder umgekehrt.
Zum anderen fahre ich bei etwas stärkerem Wind die Markise auch gerne auf die Hälfte oder ein Viertel ein, so dass das Fenster noch genug Schatten bekommt, aber der Wind nicht mehr greift. Trotzdem fährt dann die Markise ein, da man die Direktverknüpfung nicht ausfallbedingt verknüpfen kannjetzt habe ich mir bereits vor längerer Zeit zwei Sensoren montiert. zum einen den alten Tilt-Sensor zum anderen den Gyrosensor.
Jetzt möchte ich deren Ergebnisse auswerten um festzustellen wann es böig wird, ohne dass die Windgeschwindigkeit selber messbar steigt.
- zum einen die Anzahl erfasste "Schläge" über einen fließenden Zeitraum
- zum anderen den kürzesten Abstand dieser Schläge ebenfalls über einen Zeitraum
Ich bin im Moment noch am Anfang:
Es scheint besser zu sein, für jeden Sensor einen eigenen Trigger zu nehmen um, dann anschließend mit dem Pulldown-Baustein des Triggers zu arbeiten der Timestamp/Wert usw. anbietet)
Hauptsächlich für die Berechnung der Werte über ein fließendes Zeitintervall habe ich keine Ahnung wie ich das angehen kann und wäre für jeden Schubser dankbar.
Interessantes am Rande:
Habe inzwischen festgestellt, dass man sogar die Windrichtung analysieren könnte. Der Tilt-Sensor sitzt in der Mitte des Ausfalls und der Gyrosensor an einem Rand (nahe der Garage auf der die Wetterstation steht).
Der Gyro schlägt eher aus, wenn der Wind seitlich kommt und die Markise verdreht, der Tilt, wenn die Markise zentral schwankt. -
@Homoran sagte:
Es scheint besser zu sein, für jeden Sensor einen eigenen Trigger zu nehmen um, dann anschließend mit dem Pulldown-Baustein des Triggers zu arbeiten der Timestamp/Wert usw. anbietet)
Ja, das ist besser. Für die gemeinsame Auswertung verwende eine Funktion.
@Homoran sagte in Blockly um Markise bei böigem Wind einzufahren:
den kürzesten Abstand dieser Schläge ebenfalls über einen Zeitraum
Dann musst Du Dir die "letzte Änderung" in einer Variablen merken, die beim nächsten Schlag für die Differenz-Berechnung verwendet wird.
@Homoran sagte in Blockly um Markise bei böigem Wind einzufahren:
die Anzahl erfasste "Schläge" über einen fließenden Zeitraum
Was verstehst Du unter einem "fließenden Zeitraum" ?
-
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
Was verstehst Du unter einem "fließenden Zeitraum" ?
Da meine ich die letzten x Minuten(?), aber eben fließend
Wenn das jetzt verständlicher warHatte gerade mit Intervall gearbeitet, das jede Minute(?) den Wert der counts um einen zurücksetzt, wenn kein neuer "Schlag" kommt. Dann wird Intervall wieder abgebrochen
Sieht eigentlich vielversprechend aus -
Eine kleine RRD?
Dann kannst du über Zeitraum X auswerten. -
@SBorg Danke!
Das hatte ich befürchtet - ist aber noch außer meiner Skills
kommt sicher irgendwannEDIT:
sieht aber doch gar nicht so schwer aus.
Warum hatte ich immer so einen Respekt vor Arrays?? -
@Homoran Nicht nur Array, sogar eine RRD (Round Robin Datenbank)
Damit steht der aktuellste Wert immer an 1. Stelle, der älteste an letzter...und wenn man es runter bricht sind es sogar nur zwei Anweisungen.
-
@Homoran sagte:
den kürzesten Abstand dieser Schläge ebenfalls über einen Zeitraum
Das könnte prinzipiell so erfolgen:
@Homoran sagte in Blockly um Markise bei böigem Wind einzufahren:
die Anzahl erfasste "Schläge" über einen fließenden Zeitraum
Füge die "letzte Änderung" zu einem Array hinzu, und lösche alle Einträge im Array, die älter sind als "letzte Änderung" - Zeitraum. Die Länge des resultierende Arrays ist die Anzahl der Schläge im definierten Zeitraum. Etwa so:
-
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
Füge die "letzte Änderung" zu einem Array hinzu, und lösche alle Einträge im Array, die älter sind als "letzte Änderung" - Zeitraum. Die Länge des resultierende Arrays ist die Anzahl der Schläge im definierten Zeitraum.
das geht??
Das ist ja das was ich will.EDIT:
Du hast editiert! DANKE!Sieht im Moment bei mir so aus:
Testing ist jetzt erst mal sowieso nicht mehr, da die Markise jetzt drin ist
-
@Homoran sagte:
Sieht im Moment bei mir so aus:
Gyro_time = Zeitstempel - vorheriger Zeitstempel
ist die Dauer des Wertes falsch (Auschaltdauer), nicht der zeitliche Abstand zwischen 2 mal wahr. Ist es das was Du brauchst ? -
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
@Homoran sagte:
Sieht im Moment bei mir so aus:
Gyro_time = Zeitstempel - vorheriger Zeitstempel
ist die Dauer des Wertes falsch, nicht der zeitliche Abstand zwischen 2 mal wahr. Ist es das was Du brauchst ?Sorry, was willst du mir sagen?
Heisst das dass der letzte Zeitstempel, der ist, wenn der Wert auf false springt? Also der in dem Device eingestellte Timeout?
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
nicht der zeitliche Abstand zwischen 2 mal wahr.
Das wäre Mist!
ich brauche natürlich den Abstand zwischen 2*true -
@Homoran sagte:
ich brauche natürlich den Abstand zwischen 2*true
Dann brauchst Du eine Variable wie in meinem 1. Beispiel oben (lastWindschlag).
-
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
@Homoran sagte:
ich brauche natürlich den Abstand zwischen 2*true
Dann brauchst Du eine Variable wie in meinem 1. Beispiel oben (lastWindschlag).
Ok, dann baue ich komplett um
Danke (mal wieder!!)
-
Hallo @paul53
Gehirnjogging tut immer mal wieder gut.
Hat was länger gedauert, bis ich es vollstäündig nachvollziehen konnte, aber das ist ja Sinn der Sache.
Ich hoffe ich habe es verstanden. Das War genau das was ich mit dem fließenden Wert meinte und auch so realisieren wollte, aber nicht die Bausteine/Befehle kannte, die dazu notwendig waren.Du hast natürlich zusätzlich noch ein paar Schmankerl reingesetzt
Wenn ich es richtig verstanden und umgesetzt habe müsste es dieses sein:
Habe ich das richtig verstanden dass die 600000 Millisekunden der "Beobachtungszeitraum" sein sollen, also 10 Minuten?
Wenn ja, habe ich das mal runtergesetzt und spiele an den Werten bis ich empirisch eine vernünftige Lösung habe.Die Namen habe ich angepasst, da ich das Ganze auch noch für den Tilt-Sensor machen will.
da kommt dann (viel) später als Kirsche auf die Sahne noch ein Vergleich und/oder Addition beider Sensoren.EDIT: sehe gerade die Variable "Gyro" kann weg - die wird nicht mehr benutzt
-
@Homoran sagte:
müsste es dieses sein:
Gyro_min_Time auf 0 zu initialisieren, ist keine gute Idee.
@Homoran sagte in Blockly um Markise bei böigem Wind einzufahren:
die 600000 Millisekunden der "Beobachtungszeitraum" sein sollen, also 10 Minuten?
Ja.
-
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
Gyro_min_Time auf 0 zu initialisieren, ist keine gute Idee.
Warum?
was wäre denn besser? -
@Homoran sagte:
was wäre denn besser?
Der Beobachtungszeitraum, da der neue Wert nie kleiner 0 sein kann. Außerdem bei Initialisierung:
-
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
da der neue Wert nie kleiner 0 sein kann
Das leuchtet mir sogar auf Anhieb ein
-
Habe ich jetzt angepasst - Danke auch dafür!
Markise wieder ausgefahren - mal sehen was heute noch kommt
-
@Homoran sagte:
müsste es dieses sein:
Die Variable Gyro_min_Time wird zur Laufzeit nie wieder hochgesetzt (s. mein 1. Beispiel mit timeout).
-
@paul53 sagte in Blockly um Markise bei böigem Wind einzufahren:
@Homoran sagte:
müsste es dieses sein:
Die Variable Gyro_min_Time wird zur Laufzeit nie wieder hochgesetzt (s. mein 1. Beispiel mit timeout).
Hast recht!
immer nur kleinerDa lass ich mir noch was anderes einfallen als einen schnöden Timeout mit fixem Reset.
Das hast du nun davon wenn du jemanden mit deiner Perfektion anfixest.
Und ich will nichts von dir zu diesem "Problem" hören bevor ich nicht winselnd angekrochen kommen