39_STELLMOTOR - ventilsteuerung mit R/L-Motor und relais, zB.Heizungsmischer 3.0

Begonnen von epsrw1, 24 Mai 2014, 15:52:17

Vorheriges Thema - Nächstes Thema

hollyghost

Hallo Florian,
ich möchte dein Modul gerne für eine selbstentwickelte Rolladensteuerung einsetzten.
Bei einer Mischersteuerung kommt es sicher selten vor, dass ich eine einmal angestoßene Fahrt unterbrechen muss. Bei einer Rolladen / Leinwandsteuerung, die sowohl zeitgesteuert als auch manuell (durch Betätigung von Tastern) bedient werden kann - ist das Anhalten nach einer Fahrtzeit x sicher keine Seltenheit. Die Möglichkeit zum Stoppen einer Fahrt sehe ich in deinem Modul (bisher  :) ) noch nicht. Habe ich etwas übersehen oder oder hast du diese Möglichkeit nicht vorgesehen?

Grüße
Holger

epsrw1

hallo Holger,
ich schau mir das nach dem urlaub mal an, sollte normalerweise leicht nachzurüsten sein. es ist eh noch ein anderes feature in der warteschleife für dieses modul.
es wird allerdings etwas dauern, ein anderes modul von mir ist bereits in arbeit wird vorher ein update bekommen.
LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Hallo Florian,
das klingt gut - genieße deinen Urlaub.
Grüße
Holger

epsrw1

Zitat von: hollyghost am 07 August 2014, 17:11:01
Hallo Florian,
ich möchte dein Modul gerne für eine selbstentwickelte Rolladensteuerung einsetzten.
Bei einer Mischersteuerung kommt es sicher selten vor, dass ich eine einmal angestoßene Fahrt unterbrechen muss. Bei einer Rolladen / Leinwandsteuerung, die sowohl zeitgesteuert als auch manuell (durch Betätigung von Tastern) bedient werden kann - ist das Anhalten nach einer Fahrtzeit x sicher keine Seltenheit. Die Möglichkeit zum Stoppen einer Fahrt sehe ich in deinem Modul (bisher  :) ) noch nicht. Habe ich etwas übersehen oder oder hast du diese Möglichkeit nicht vorgesehen?

Grüße
Holger


update:
# $Id: 39_STELLMOTOR.pm 2025 2014-08-25 14:58:00Z Florian Duesterwald $



in der aktuellen neuen version ist das kommando stop als neuer set befehl eingebaut.
LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Super & Danke :o) - das werde ich nach meinem Urlaub testen.
Grüße Holger

hollyghost

Hallo Florian,
ich bin heute endlich mal zum Testen gekommen.
Vielleicht noch kurz zum meinem ,Setup' – ich verwende dein Szenario ,wechsel' und habe als fhemDEV zwei ReadingProxy eingebunden, die via I2C meine Relais schalten. Das Einbinden und Ansprechen funktioniert einwandfrei.
Der Stoppbefehl funktioniert allerdings nicht so, wie ich ihn mir ,vorgestellt' habe.
Folgenden Ablauf habe ich geplant:
Druck auf einen Taster ,Up' schickt den Motor auf Position 1.
Wird der Taster länger als 2 Sekunden gedrückt, wird nach dem Loslassen des Tasters der Befehl ,stop' zum Motor gesendet. Nun kann es vorkommen, dass
a) der Motor sofort stehen bleibt
b) der Motor noch ein Stückchen weiter läuft und stehen bleibt oder
c) der Motor stopt & wieder ein wenig zurück läuft.
Ich kann mir das nur so vorstellen, dass du die aktuelle Fahrt nicht an x-beliebiger Stelle abbrechen kannst und du nach dem Abbruch die angefahrene Position korrigierst (klassische Korrektur eines Überschwingers). Bei einer Ventilregelung macht das Sinn und ist sicher auch notwendig. Bei einer Rollladen Steuerung bzw. einer Leinwand mutet diese Verhalten ein wenig ,lustig' an  ;)
Siehst du ne Chance an diesem Stoppverhalten noch etwas zu ändern?
Viele Grüße
Holger

epsrw1

A und b sind normale Funktion. B bedeutet dass fhem ausgelastet war.
C sollte normal nicht vorkommen, daß ist evtl ein rechenproblem. Schau ich mir am we mal an...

Gruß florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Super,
A&B sind für mich auch 'normal' ich wollte sie nur der Vollständigkeit halber aufführen. c ist eben ein wenig seltsam - ich bin nun aber schon beruhigt, dass das von dir auch so gesehen wird.
Grüße Holger

hollyghost

Hallo Florian,
ich habe gestern noch ein wenig rumprobiert und wollte dir den Log-Auszug nicht vorenthalten - vielleicht hilft er dir bei der Fehlersuche:

2014.09.17 15:49:40 4: STELLMOTOR gwc_rollladen Set Target:99 Cmd:98.117449230618 RL:R
2014.09.17 15:49:40 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.17 15:49:40 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.17 15:49:40 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.17 15:49:40 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 on
2014.09.17 15:49:40 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.17 15:49:40 3: gwc Longpress-Status: no
2014.09.17 15:51:09 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.17 15:51:09 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.17 15:51:09 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.17 15:51:09 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.17 15:51:09 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.17 15:51:09 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1410961868.98193 now:1410961869.15684 queue_lastdiff:-0.194344255659315
2014.09.17 15:53:12 4: STELLMOTOR gwc_rollladen Set Target:0 Cmd:-98.1943442556593 RL:L
2014.09.17 15:53:12 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.17 15:53:12 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.17 15:53:12 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.17 15:53:12 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.17 15:53:12 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.17 15:53:19 3: gwc Longpress-Status: yes
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.17 15:53:19 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1410962080.50154 now:1410961999.36094 queue_lastdiff:9.84378788206313
2014.09.17 15:53:19 4: STELLMOTOR gwc_rollladen User submitted Stop Request
2014.09.17 15:53:19 4: STELLMOTOR gwc_rollladen Set Target:110 Cmd:9.84378788206313 RL:R
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 on
2014.09.17 15:53:19 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.17 15:53:28 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.17 15:53:28 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.17 15:53:28 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.17 15:53:28 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.17 15:53:28 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.17 15:53:28 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1410962008.30383 now:1410962008.49659 queue_lastdiff:0.214180946350098

Als erstes lasse ich den Motor auf Position 99 fahren, dazu benötigt er 90sec. Das läuft soweit prima durch.
Dann schicke ich ihn auf Position 1 (hier fällt mir auf, dass die Debugmeldung ihn auf Position 0 schickt, ich gehe mal davon aus, dass das mit dem 'lastdiff' zusammen hängt).
7 Sekunden später stoppe ich den Motor, was auch im Log mit den beiden off Befehlen und dem Eintrag 'User submitted Stop Request' quittiert wird.
Der nun folgende Set-Befehl (Set Target:110 Cmd:9.84378788206313 RL:R) wird von deinem Modul erzeugt. Auffallend ist, dass das CMD genau dem lastdiff aus der vorhergehende Stopp Meldung entspricht.
Ich habe im Moment die GetUpdate-Sub im Verdacht - kann es sein, dass sie vom Stoppen nichts mitbekommt, und einfach munter weiter berechnet, wo sie hinfahren soll?
Kein Stress - ich wollte dir die Gedanken nur mit auf den Weg geben.
Grüße
Holger

epsrw1

L.335 ff.:
my $STMlastDiffMax = AttrVal($name, "STMlastDiffMax", 1);
my $position = ReadingsVal($name,"position", 1);
     ........
}elsif(abs($queue_lastdiff)>$STMlastDiffMax){ #start new drive if last diff > 1sec (attr: STMlastDiffMax)
STELLMOTOR_Set($hash,$name,$position);
}


die konstellation mit der ich das überschwing-verhalten reproduzieren kann ist wie folgt:

lastdiff hat einen wert nahe der toleranzschwelle, zB. 0,9. setze ich nun den stop-befehl ab stoppt der motor sofort, dann wird der aktuelle stand berechnet. um rundungsfehler abzufangen werden die nachkommastellen der aktuellen position mit dem letzten wert von queue_lastdiff addiert.
war die lastdiff vorher groß, ist die chance daß ( queue_lastdiff + nachkommastellen ) > STMlastDiffMax ist recht groß, und im nächsten loop wird eine kurze fahrt gestartet um queue_lastdiff wieder unterhalb STMlastDiffMax zu bringen.

mögliche abhilfe: atttr STMlastDiffMax vorsichtig erhöhen

sollte das nichts bringen brauche ich die kompl. config von Deinem STELLMOTOR device um es nochmal genau zu prüfen.

die neue version (2026) macht nochmal mehr debug einträge bei loglevel 4, wenn das attr nicht hilft brauche ich davon nochmal einen logauszug.

LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Hallo Florian,
Wie du aus meinem Log erkennen kannst, war queue_lastdiff bei 9.84.....
Ich glaube, soweit kann ich nicht aufbohren.
Die Theorie, dass der Loop mitten in den Stop fällt und dadurch vielleicht Variablen ausgewertet werden, welche durch den Stop gerade aktualisiert werden, kann hier nicht greifen?
Das SetTarget 110 kommt mir eben auch spanisch vor.
Mit der kompletten Konfiguration meinst du die Stellmotor Settings?
Grüße Holger

epsrw1

ZitatMit der kompletten Konfiguration meinst du die Stellmotor Settings?

ja :)
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Ok
hier schon mal die Konfig - zum Testen komme ich leider erst heute Nachmittag.

Vile Grüße Holger

#--Rolladen deffinieren--
define gwc_rollladen STELLMOTOR FhemDev
attr gwc_rollladen STMcalibrateDirection L
attr gwc_rollladen STMdebugToLog3 1
attr gwc_rollladen STMfhemDevRL prxPortA2
attr gwc_rollladen STMfhemDevSTART prxPortA1
attr gwc_rollladen STMinvertOut 0
attr gwc_rollladen STMlastDiffMax 1
attr gwc_rollladen STMmapOffCmd off
attr gwc_rollladen STMmapOnCmd on
attr gwc_rollladen STMmaxDriveSeconds 90
attr gwc_rollladen STMmaxTics 100
attr gwc_rollladen STMpollInterval 0.1
attr gwc_rollladen STMresetOtherDeviceAtCalibrate 0
attr gwc_rollladen STMrlType wechsel
attr gwc_rollladen STMtimeTolerance 0.01
attr gwc_rollladen room Rollo
attr gwc_rollladen verbose 4

hollyghost

Hallo Florian,
ist ein wenig später geworden  - aber hier nun der Log-Auszug zu meinen Test:
An den Settings habe ich zunächst nichts geänderte. Deine beiden neu angelegten Log3 Zeilen kommen wohl nicht zum Zuge - zumindest sehe ich keine entsprechenden Einträge im Log.

2014.09.21 20:10:29 3: STELLMOTOR gwc_rollladen active, type=FhemDev
2014.09.21 20:11:00 4: STELLMOTOR gwc_rollladen Set Target:50 Cmd:42.1253175735474 RL:R
2014.09.21 20:11:00 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:11:00 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:11:00 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:11:00 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 on
2014.09.21 20:11:00 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.21 20:11:38 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:11:38 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:11:38 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:11:38 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:11:38 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.21 20:11:38 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411323098.70067 now:1411323098.8281 queue_lastdiff:-0.14158911175198
2014.09.21 20:11:51 4: STELLMOTOR gwc_rollladen Set Target:0 Cmd:-49.141589111752 RL:L
2014.09.21 20:11:51 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:11:51 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:11:51 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:11:51 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:11:51 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.21 20:11:51 3: gwc Longpress-Status: no
2014.09.21 20:12:35 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:12:35 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:12:35 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:12:35 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:12:35 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.21 20:12:35 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411323155.40294 now:1411323155.50883 queue_lastdiff:0.117663012610541
2014.09.21 20:12:54 4: STELLMOTOR gwc_rollladen Set Target:99 Cmd:98.1176630126105 RL:R
2014.09.21 20:12:54 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:12:54 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:12:54 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:12:54 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 on
2014.09.21 20:12:54 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.21 20:12:54 3: gwc Longpress-Status: no
2014.09.21 20:14:22 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:14:22 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:14:22 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:14:22 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:14:22 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.21 20:14:22 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411323262.61885 now:1411323262.71733 queue_lastdiff:-0.109417968326145
2014.09.21 20:15:06 4: STELLMOTOR gwc_rollladen Set Target:0 Cmd:-98.1094179683261 RL:L
2014.09.21 20:15:06 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:15:06 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:15:06 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:15:06 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:15:06 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.21 20:15:14 3: delete gwc_longPressTimer : Please define gwc_longPressTimer first
2014.09.21 20:15:14 3: gwc Longpress-Status: yes
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.21 20:15:14 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411323394.96061 now:1411323314.54531 queue_lastdiff:9.64966625637479
2014.09.21 20:15:14 4: STELLMOTOR gwc_rollladen User submitted Stop Request
2014.09.21 20:15:14 4: STELLMOTOR gwc_rollladen Set Target:109 Cmd:9.64966625637479 RL:R
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 on
2014.09.21 20:15:14 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.21 20:15:23 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.21 20:15:23 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.21 20:15:23 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.21 20:15:23 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.21 20:15:23 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.21 20:15:23 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411323323.35283 now:1411323323.51943 queue_lastdiff:0.185115072462294


Ich schicke den Stellmotor über die Weboberfläche auf Position 50.
Dann via notify auf Position 1.
Nun via notify auf Position 99. (100 hatte bei meinen ersten Versuchen mit deinem Modul Schwierigkeiten gemacht, deshalb 99)
Von hier wieder via notify auf 1 und dann schicke ich via notify (-Longpress yes-) das 'set stop'.
Hier zeigt sich dann wieder das angesprochene Verhalten 'C'. Auch deutlich zu sehen, die queue_lastdiff wird 1:1 als CMD übernommen. Wo das Set Target:109 herkommt, verstehe ich in diesem Zusammenhang immer noch nicht.

Wann hätten deiner Meinung nach die beiden neu eingefügten Log3 Zeilen ausgegeben werden sollen?
Grüße und Danke schon/noch-mal für deine Mühe.
Holger

epsrw1

ich habe an der falschen stelle gesucht.
hier im anhang (fußzeile) mal die BETA version 2027, kannst Du bitte mal testen ob das bei Dir anständig läuft? wenn ja schreibe ich das ins reine für ein offizielles update.
LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel