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,
es passt leider immer noch nicht.
Deine neu eingefügten debug Meldungen erscheinen nur im Event-Monitor. Ich hab dir mal die Auszüge des Event Monitors und das Log in jeweils ein Excel-Sheet kopiert (ich hoffe du kannst das Format öffnen, wenn nicht bitte melden) und die entsprechenden Zeilen farbig markiert. Grün die jeweiligen Start Befehle, GelbOrange die dazu passenden Stoppmeldungen des Stellmotors und einen Pink-Block bei dem ich die Motorfahrt mit einem set stop abbreche.
Wie du siehst, schicke ich den Motor wieder von 99 nach 1 und breche die Fahrt nach ca. 7 Sekunden ab. Rechnerisch sollte der Motor zu dieser Zeit in der Nähe der Position 90 sein. Die neue debug Meldung gibt zu diesem Zeitpunkt Position 100 aus – Würde hier 80 rauskommen würde das irgendwie auch wieder mit der queue_lastdiff von 9,irgendwas zusammen passen. Ich will nicht nerven, aber mir geht die GetUpdate noch immer nicht aus dem Kopf – stoppst du die ,Updateberechnung' sofort, wenn der Stoppbefehl erkannt wird, oder laufen die erst mal (unabhängig) weiter und überbügeln vielleicht deine Berechnung, die du bei einem Stoppbefehl (außerhalb der Updateroutine) zur aktuellen Positionsbestimmungen durchführst? Vielleicht bin ich hier ein gebranntes Kind aber ich hatte schon die schönsten Effekte bei unabhängig laufenden ,Threads'.
Grüße
Holger

hollyghost

Und noch ein Nachtrag:
Wenn ich eine Fahrt von 1 nach 99 mit einem set stop abbreche, wird durch das Modul ein 'negatives' Target berechnet - siehe Log:

2014.09.22 10:09:14 4: STELLMOTOR gwc_rollladen Set Target:99 Cmd:98.1334744029575 RL:R
2014.09.22 10:09:14 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.22 10:09:14 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.22 10:09:14 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.22 10:09:14 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 on
2014.09.22 10:09:14 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.22 10:09:22 3: delete gwc_longPressTimer : Please define gwc_longPressTimer first
2014.09.22 10:09:22 3: gwc Longpress-Status: yes
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.22 10:09:22 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411373442.44468 now:1411373362.60794 queue_lastdiff:-9.29251665539212
2014.09.22 10:09:22 4: STELLMOTOR gwc_rollladen User submitted Stop Request
2014.09.22 10:09:22 4: STELLMOTOR gwc_rollladen Set Target:-8 Cmd:-9.29251665539212 RL:L
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.22 10:09:22 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 on
2014.09.22 10:09:31 3: STELLMOTOR gwc_rollladen debug data for R=>rl=on,st=on
2014.09.22 10:09:31 3: STELLMOTOR gwc_rollladen debug data for L=>rl=off,st=on
2014.09.22 10:09:31 3: STELLMOTOR gwc_rollladen debug data for S=>rl=off,st=off
2014.09.22 10:09:31 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA2 off
2014.09.22 10:09:31 3: STELLMOTOR gwc_rollladen debug2 command: set prxPortA1 off
2014.09.22 10:09:31 4: STELLMOTOR gwc_rollladen Stop Timing Call: stopTime:1411373371.10756 now:1411373371.28571 queue_lastdiff:0.197944376203749

Es scheint, als ob er versucht, auf die 'Ausgangsposition' (hier 1) zurückzufahren. Vielleicht hilft dir das weiter.
LG Holger

epsrw1

ich kann den beschriebenen fehler leider nicht reproduzieren. bist Du sicher dass Du das modul neu geladen hast?

die geplante stopzeit wird beim set-befehl berechnet und ins reading geschrieben. getUpdate prüft das reading und stoppt wenn zeitpunkt erreicht bzw. überschritten ist.

die neue beta stoppt im gegensatz zur vorherigen beim user-stop nicht mehr selbst, sondern berechnet nur stopTime neu und aktualisiert das reading. der eigentliche stop wird wieder von getUpdate ausgeführt. so sollte konfusion zwischen den beiden teilen ausgeschlossen sein.

ich prüfe das modul heute abend nochmal durch und räume den zeilensalat etwas auf, vielleicht finde ich dann noch was ...

edit: in der beta sollten die readings debug_05 und debug_06 jeweils den gleichen wert enthalten. ist das zutreffend bei Dir?

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

hollyghost

Bingo!!
Zitatbist Du sicher dass Du das modul neu geladen hast?
:-[ Das war der entscheidende Hinweis. Ich habe zwar immer schön einen rereadcfg durchgeführt aber kein reload <modul>.
Super - herzlichen Dank für deine Mühe und Geduld bisher. Im Moment läuft das Modul wie gewünscht.

Eine Anpassung habe ich noch vorgenommen - vielleicht willst du die bei dir übernehmen.
Ich betreibe dein Modul im Modus 'wechsel'. Mir ist aufgefallen, dass in diesem Modus sowohl beim Starten als auch beim Stoppen das 'Start' Relais immer als zweites schaltet. In meiner Schaltung habe ich zum Schutz der Relaiskontakte einen Varistor über dem Schaltkontakt des Startrelais verbaut. (Ich weiß, ich könnte auch das R/L Relais mit einem Varistor versehen....) Sprich, dieses Relais muss beim Stoppen zuerst schalten, sodass der Stromkreis darüber getrennt wird. Wird das R/L Relais beim Stoppen zuerst geschaltet, hat das ja auch noch den Effekt, dass der Motor (zumindest theoretisch) kurzzeitig die Richtung wechselt. Durch die Trägheit des Systems ist dieser Wechsel nicht auszumachen - aber ich glaube gut tut es dem Motor nicht. Wie auch immer - ich habe für mich den "FhemDev"-Zweig der command sub wie folgt angepasst, vielleicht willst du das ja generell übernehmen.

elsif($OutType eq "FhemDev"){
if($command eq "S"){#Stop - switch off START first
my $STMfhemDevSTART = AttrVal($name, "STMfhemDevSTART", "Stellmotor2start");
CommandSet(undef,$STMfhemDevSTART." ".$portST{$command});
my $STMfhemDevRL = AttrVal($name, "STMfhemDevRL", "Stellmotor2rl");
CommandSet(undef,$STMfhemDevRL." ".$portRL{$command});
#2014-06-13 debug
if(AttrVal($name,"STMdebugToLog3",0)){
Log3($name, 3, "STELLMOTOR $name debug2 switch to stop");
Log3($name, 3, "STELLMOTOR $name debug2 command: set ".$STMfhemDevSTART." ".$portST{$command});
Log3($name, 3, "STELLMOTOR $name debug2 command: set ".$STMfhemDevRL." ".$portRL{$command});
}
}else{#Move - set R/L first
my $STMfhemDevRL = AttrVal($name, "STMfhemDevRL", "Stellmotor2rl");
CommandSet(undef,$STMfhemDevRL." ".$portRL{$command});
my $STMfhemDevSTART = AttrVal($name, "STMfhemDevSTART", "Stellmotor2start");
CommandSet(undef,$STMfhemDevSTART." ".$portST{$command});
#2014-06-13 debug
if(AttrVal($name,"STMdebugToLog3",0)){
Log3($name, 3, "STELLMOTOR $name debug2 begin to run");
Log3($name, 3, "STELLMOTOR $name debug2 command: set ".$STMfhemDevRL." ".$portRL{$command});
Log3($name, 3, "STELLMOTOR $name debug2 command: set ".$STMfhemDevSTART." ".$portST{$command});
}
}
}


LG & nochmal herzlichen Dank
Holger

epsrw1

Zitat von: hollyghost am 22 September 2014, 12:19:48
Eine Anpassung habe ich noch vorgenommen - vielleicht willst du die bei dir übernehmen.
Ich betreibe dein Modul im Modus 'wechsel'. Mir ist aufgefallen, dass in diesem Modus sowohl beim Starten als auch beim Stoppen das 'Start' Relais immer als zweites schaltet. In meiner Schaltung habe ich zum Schutz der Relaiskontakte einen Varistor über dem Schaltkontakt des Startrelais verbaut. (Ich weiß, ich könnte auch das R/L Relais mit einem Varistor versehen....) Sprich, dieses Relais muss beim Stoppen zuerst schalten, sodass der Stromkreis darüber getrennt wird. Wird das R/L Relais beim Stoppen zuerst geschaltet, hat das ja auch noch den Effekt, dass der Motor (zumindest theoretisch) kurzzeitig die Richtung wechselt. Durch die Trägheit des Systems ist dieser Wechsel nicht auszumachen - aber ich glaube gut tut es dem Motor nicht. Wie auch immer - ich habe für mich den "FhemDev"-Zweig der command sub wie folgt angepasst, vielleicht willst du das ja generell übernehmen.

neue (nicht-beta) version 3001 kommt gleich online. die start/stop sache habe ich etwas abgewandelt gleich ins modul eingebaut.

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

hollyghost

Mensch prima, das läuft ja hier wie geschmiert.
Eine Frage noch zur Performance - wieviele Stellmotoren hast du in deinem System am Laufen? Ich plane 7 Instanzen einzusetzen, die im ungünstigsten Fall parallel ihre Positionen anfahren werden.
Grüße Holger

epsrw1

Zitat von: hollyghost am 22 September 2014, 15:23:57
Mensch prima, das läuft ja hier wie geschmiert.
Eine Frage noch zur Performance - wieviele Stellmotoren hast du in deinem System am Laufen? Ich plane 7 Instanzen einzusetzen, die im ungünstigsten Fall parallel ihre Positionen anfahren werden.
Grüße Holger

das nadelöhr sind eher die schaltaktoren. modul-performance sollte mit durchschnittlicher serverhardware kein thema sein
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Die Aktoren sollten passen, das hab ich per I2C mit nem 23017 gelöst.
Hast du die HTML Doku bei der 3001 am Ende extra weggelassen?

epsrw1

Zitat von: hollyghost am 22 September 2014, 16:43:47
Hast du die HTML Doku bei der 3001 am Ende extra weggelassen?

ja, die war eh nicht mehr up-to-date. etwas umständlich wiki und pod gleichzeitig zu pflegen.
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:


# $Id: 39_STELLMOTOR.pm 3002 2014-10-03 11:51:00Z Florian Duesterwald $


--> disable [0..1]
Ich habe keine Ahnung, aber davon wenigstens ganz viel

hollyghost

Hallo Florian, was bewirkt das Disable bzw. Wofür setzt du es ein/kann es verwendet werden?

epsrw1

Zitat von: hollyghost am 03 Oktober 2014, 20:41:01
Hallo Florian, was bewirkt das Disable bzw. Wofür setzt du es ein/kann es verwendet werden?

disable verhindert die motorbewegung und merkt sich das jeweils letzte command in command_queue
Ich habe keine Ahnung, aber davon wenigstens ganz viel

cwagner

Hallo Florian,

Dein Stellmotor fordert mich viel hundertfach auf, Dir dies mitzuteilen :-)

2014.10.24 22:26:59 3: STELLMOTOR Stellmotor2 Stop Problem: lastGuiState:7.8 please report this error L.414
2014.10.24 22:26:59 3: STELLMOTOR Stellmotor2 Stop Problem: lastGuiState:7.8 please report this error L.414
2014.10.24 22:26:59 3: STELLMOTOR Stellmotor2 Stop Problem: lastGuiState:7.8 please report this error L.414


Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

epsrw1

Zitat von: cwagner am 24 Oktober 2014, 22:30:20
2014.10.24 22:26:59 3: STELLMOTOR Stellmotor2 Stop Problem: lastGuiState:7.8 please report this error L.414
2014.10.24 22:26:59 3: STELLMOTOR Stellmotor2 Stop Problem: lastGuiState:7.8 please report this error L.414
2014.10.24 22:26:59 3: STELLMOTOR Stellmotor2 Stop Problem: lastGuiState:7.8 please report this error L.414


hallo christian,
tritt der fehler nach dem neustart auf? der wert sollte eine ganze zahl sein, ist aber bei Dir im log 7,8. wie kann man den fehler provozieren daß er wieder auftritt?
LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

cwagner

Hallo Florian, Treffer! Die Fehlermeldung erschien nicht nur nach Neustart, erscheint aber nicht mehr, seitdem ich nur noch Ganzzahlen an STELLMOTOR übergebe. Ich trage das mal im WIKI ein. Bei mir war das Aufgetreten, nachdem ich den Dummy zwischen PID20 und STELLMOTOR abgeschafft hatte - offenbar hatte ich durch den DUMMY die Werte aus PID20 - bisher auf 1 Nachkommastelle gerechnet, nun durch das Attribut pidActorValueDecPlaces=0 auf Ganzzahl eingestellt - bisher immer Ganzzahlen übergeben.


Danke und schönes Wochenende

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB