"Echtzeit" Position von Markise berechnen

Begonnen von Johnnyflash, 30 April 2021, 11:11:17

Vorheriges Thema - Nächstes Thema

Johnnyflash

Hallo,
für die Steuerung zweier versetzt angeordneter Markisen suche ich eine Möglichkeit, die aktuelle Position der "Master-Markise" relativ genau zu bestimmen. Anforderung wäre allerdings, dass ich das Reading in "Echtzeit" habe, und nicht erst nach einem Stop der Markise berechnet wird. Zur Verdeutlichung eine kleine Skizze im Anhang.
Lässt sich so etwas mit einem (Perl)-DOIF lösen, oder ist es sinnvoller das durch externe Hardware zu realisieren (µC + 4 Relais)?

Danke für einen Denkanstoß :-)

Papa Romeo

#1
Am optimalsten wäre es natürlich, du könntest an der "Mastermarkise" einen Drehgeber oder etwas Äquivalentes anbringen. Genauer dürfte sich die Position nicht bestimmen lassen.
Wie schnell du die Daten zu Verfügung hast (Echtzeit) ist abhängig davon, wie du die Daten vom Sketch verarbeiten lässt und dieser dann auch sendet.
In meinem ersten Projekt (GW60 Rollladen) hatte ich das am Anfang zum Testen mal so, dass mir jede Positionsänderung des Rollladens sofort über MQTT mitgeteilt wurde.

Die Alternative, wäre es, die Gesamt- bzw. entsprechenden Teillaufzeiten der Mastermarkise dafür in Betracht zu ziehen.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Beta-User

Na ja, erfahrungsgemäß ist das mit der exakten Positionierung so eine Sache, wenn man ein paarmal Zwischenpositionen angesteuert hatte...

Vielleicht mal folgender Ansatz:
Rollo links fährt los => vermutlich Event vorhanden und Position (unten) und Fahrtrichtung bekannt. Dann kannst du die Zeit bestimmen, die es (in etwa) dauert, bis die 2. Position erreicht wird.
Was hindert dich daran, dann (beim Losfahr-Event) einfach ein entsprechendes (benanntes) sleep oder ein at anzulegen, das den 2. dann "rechtzeitig anschubst", und das du notfalls wieder löschst (cancel oder delete), falls jemand den Rollladen vorher stoppt?

(Kann man bestimmt auch mit DOIF machen, ich habe nur keine Ahnung wie... Ging eher um den Ablauf).

(Ansonsten ist es wie immer: Wenn man weiß, mit was man es zu tun hat (list der beiden Rollladenaktoren und ggf. Infos, wann welche Events kommen!), ist es einfacher zu helfen...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

enno

Moin,

wie stark schwankt denn die Geschwindigkeit der beiden Markisen beim Ausfahren? Bei meiner kann ich fast mit der "Stopuhr" die Position bestimmen. Geht natürlich nur wenn immer von ganz eingefahren gestartet wird.

Gruss
  Enno

Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

frank

oder einen sensor an der vorderkante der markise anbringen, der triggert, wenn beide markiesen auf gleicher "höhe" sind.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Papa Romeo

Johnnyflash,

mit was steuerst/bedienst du die Markisen bisher ?

Ohne externe Sensoren ist der Ansatz von Enno "nicht ohne".

Denn irgendwann ist die Markise mal ganz ein- oder ausgefahren und mit diesen Punkten lassen sich die Fahrzeiten dann immer wieder
sehr einfach "kalibrieren", so dass auch Zwischenstellungen kein Problem darstellen, wenn man die Fahrtrichtung berücksichtigt.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Johnnyflash

Hallo,
danke für eure Antworten. Die Hardware zur Ansteuerung ist noch nicht vorhanden, da ich ja aktuell noch prüfe ob es mit Standard-Hardware zu erledigen ist oder ob ich mir etwas selber baue (ESP + Relais oder µC + Relais + Funkmodul). Bei der Standard-Hardware lege ich allerdings eine Gemeinsamkeit zu Grunde: Ich bekomme den Zeitpunkt von Start und Stop mitgeteilt, nicht aber die aktuelle Position während der Laufzeit. Die aktuelle Position bekomme ich allenfalls am Ende der Laufzeit.
Die Idee mit einem "Positionsgeber" an der Schaltschwelle hatte ich auch, leider ist es nicht ganz ohne so etwas dauerhaft Wetterfest zu montieren (Es ist eine Aufdach-Markise für einen Wintergarten).
Ein sleep oder at hilft mir nur dann, wenn ich davon ausgehe, dass die Markise immer mindestens bis zum Mauervorsprung gefahren wird. Wenn sie vorher gestoppt wird kann ich es zwar löschen, müsste aber dann für die nächste Fahrt in die gleiche Richtung ein entsprechend verkürztes at/sleep definieren.
Mein Lösungsansatz, würde ich es in einem Mikrocontroller umsetzen, wäre folgender:
Wird die Markise ausgefahren, inkrementiere ich einen Zähler alle 100 ms. Sobald der Zähler größer als 63 ist (die Laufzeit ab wann die zweite Markise losfahren muss ist 6,3 Sekunden), schalte ich das Relais für die zweite Markise zu. Beim einfahren der Markisen zähle ich alle 100 ms wieder eins Runter. Dann wüsste ich immer relativ genau, wo sich die Markise derzeit befindet (nicht in Prozent, aber in Form eines Zählers). Beim reinfahren auf Position 0 würde das ganze sich ja auch wieder kalibrieren, falls doch einmal eine Abweichung durch wiederholtes halb Ein- und Ausfahren entstehen würde.

Zur Verdeutlichung einmal etwas Pseudocode, den ich gerne irgendwie in ein DOIF packen würde (hier mit Delay, auf einem echten Mikrocontroller würde ich es in Form eines Timer-Interrupts machen.)


int timer = 0;
while(1)
{
    if(Rel_Markise1_aus == 1)
    {
        while(timer < 900)     // 900 = Maximalfahrzeit
        {
            delay(100ms);
            timer++;
        }
        if(timer > 63)
            Rel_Markise2_aus = 1;
    }
    else if(Rel_Markise1_ein == 1)
    {
        Rel_Markise2_ein = 1;    // Beim Einfahren darf die zweite Markise immer fahren
        while(timer > 0)
        {
            delay(100ms);
            timer--;
        }
    }
    else if(Rel_Markise1_ein == 0 && Rel_Markise1_aus == 0)
    {
        Rel_Markise2_ein = 0;
        Rel_Markise2_aus = 0;
    }
}


Viele Grüße,
Philipp

Papa Romeo

Zitat von: Johnnyflash am 30 April 2021, 20:59:01
Die Idee mit einem "Positionsgeber" an der Schaltschwelle hatte ich auch, leider ist es nicht ganz ohne so etwas dauerhaft Wetterfest zu montieren (Es ist eine Aufdach-Markise für einen Wintergarten).

Da würde ich weniger Probleme sehen, hier eine wetterfeste Abtastung hin zu bekommen. Kleine Magnete auf einer Scheibe und ein Hallsensor oder Optoelektronisch.

Da ich bei solchen Problemen schon öfters tätig werden musste, hab ich mir schon vor einiger Zeit eine Platine gemacht, die ich für solche Aufgaben nutze.
(OT: aktuell gerade bei einer Aufrüstung eines Spülwagens einer Kanalreinigungsfirma für die Schlauchlängen- und Schlauchlagenerkennung)

Auf der Platine sind jede Menge Löcher. Die Löcher des außeren Kreises sind durchgebend und für eine optoelektronische Abtastung gedacht.
Die beiden inneren Lochkreise werden für die magnetische Abtastung über z.B. Hallsensoren genutzt. Hinter diesen Löchern befinden sich kleine Magnete.
(Einer ist oben zu sehen). Durch den Versatz der zweiten Lochreihe, kann, wenn nötig, auch die Drehrichtung erkannt werden.

Genauer geht´s kaum ... aber klar, ist eben ein Aufwand und eine Aufgabe einen Platz zu finden, wo man die Scheibe montieren bzw. mit der Welle verbinden kann.
Manchmal geht´s direkt, manchmal über einen Riementrieb, manchmal über eine Andruckrolle ... aber ... manchmal geht´s auch nicht  :-[

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary