STELLMOTOR: Unterschied zwischen den Versionen
K (Infobox angepasst) |
KKeine Bearbeitungszusammenfassung |
||
Zeile 30: | Zeile 30: | ||
Vorrangig ist dieses Modul für zwei Relais an GPIO- oder an PIFace-Pins eines Rasberrys gedacht. Andere Einplatinencomputer werden | Vorrangig ist dieses Modul für zwei Relais an GPIO- oder an PIFace-Pins eines Rasberrys gedacht. Andere Einplatinencomputer werden | ||
mit dem Device-Typ SysCmd unterstützt. | mit dem Device-Typ SysCmd unterstützt. Es bietet zusätzlich auch die Option, zwei Schaltaktoren per Funk (aus Timinggründen nicht | ||
empfohlen) oder 1-Wire anzusteuern. | empfohlen) oder 1-Wire anzusteuern. | ||
Zeile 37: | Zeile 37: | ||
FHEM läuft dann weiter ohne einzufrieren, und prüft im Loop nur noch ob, die Stoppzeit im Cache erreicht ist. Da der Stopp nie | FHEM läuft dann weiter ohne einzufrieren, und prüft im Loop nur noch ob, die Stoppzeit im Cache erreicht ist. Da der Stopp nie | ||
exakt zur geplanten Zeit ausgeführt wird, liegt im Cache ein weiterer Wert der die Differenz zwischen geplanter und tatsächlicher | exakt zur geplanten Zeit ausgeführt wird, liegt im Cache ein weiterer Wert, der die Differenz zwischen geplanter und tatsächlicher | ||
Stoppzeit dem nächsten Kommando hinzurechnet. So werden sich addierende kleine Zeitdifferenzen vermieden. | Stoppzeit dem nächsten Kommando hinzurechnet. So werden sich addierende kleine Zeitdifferenzen vermieden. | ||
Zeile 43: | Zeile 43: | ||
Endschalter genutzt, um den "Null-Punkt" sicher zu finden. Falls ein angeschlossener Motor solche Endschalter nicht hat, müssen diese | Endschalter genutzt, um den "Null-Punkt" sicher zu finden. Falls ein angeschlossener Motor solche Endschalter nicht hat, müssen diese | ||
für diese Schaltungsweise unbedingt vorgesehen werden. | für diese Schaltungsweise unbedingt vorgesehen werden. | ||
Übliche Montagepunkte sind ein Wellrad an der Ansgangswelle, an Endpunkten des zu bewegenden Objektes | Übliche Montagepunkte sind ein Wellrad an der Ansgangswelle, an Endpunkten des zu bewegenden Objektes oder direkt am Motor gegen | ||
eine drehend gefedert gelagerte Motoraufhängung. | eine drehend gefedert gelagerte Motoraufhängung. | ||
Zeile 63: | Zeile 63: | ||
define <name> STELLMOTOR <PiFace|Gpio|FhemDev|SysCmd> | define <name> STELLMOTOR <PiFace|Gpio|FhemDev|SysCmd> | ||
</code> | </code> | ||
Je nach Device Typ sind verschiedene Attribute zur erforderlich, damit STELLMOTOR weiß wie die beiden Relais angeschlossen sind. | Je nach Device Typ sind verschiedene Attribute zur erforderlich, damit STELLMOTOR weiß, wie die beiden Relais angeschlossen sind. | ||
* '''PiFace''' und '''Gpio''' benötigen STMgpioPortRL und STMgpioPortSTART | * '''PiFace''' und '''Gpio''' benötigen STMgpioPortRL und STMgpioPortSTART | ||
* '''FhemDev''' benötigt STMfhemDevRL und STMfhemDevSTART | * '''FhemDev''' benötigt STMfhemDevRL und STMfhemDevSTART | ||
Zeile 77: | Zeile 77: | ||
* Die Schaltbefehle 0 und 1 können mit Attributen invertiert und/oder gemapped werden (zB.: On/Off) | * Die Schaltbefehle 0 und 1 können mit Attributen invertiert und/oder gemapped werden (zB.: On/Off) | ||
Um die Wirkung auszuprobieren, ohne jedes Mal zum Mischer rennen zu müssen, bietet sich an zwei '''Dummys''' zu verwenden: | Um die Wirkung auszuprobieren, ohne jedes Mal zum Mischer rennen zu müssen, bietet sich an, zwei '''Dummys''' zu verwenden: | ||
<code> | <code> | ||
Zeile 96: | Zeile 96: | ||
Typische Getriebemotoren haben eingebaute Endschalter, die beim Erreichen der 0%- oder 100%-Position die Stromversorgung unterbrechen. Das Modul Stellmotor nutzt dies | Typische Getriebemotoren haben eingebaute Endschalter, die beim Erreichen der 0%- oder 100%-Position die Stromversorgung unterbrechen. Das Modul Stellmotor nutzt dies | ||
aus, um eine Kalibrierung zwischen rechnerischem und tatsächlichen Stand herzustellen. | aus, um eine Kalibrierung zwischen rechnerischem und tatsächlichen Stand herzustellen. | ||
---- | ---- | ||
Zeile 103: | Zeile 102: | ||
Alle Attributes sind auch in fhem durch das Kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch". | Alle Attributes sind auch in fhem durch das Kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch". | ||
=== Global gültige Attribute === | === Global gültige Attribute === | ||
Zeile 112: | Zeile 110: | ||
|- | |- | ||
| STMrlType|| String || einzel || je nach Schaltplan, Wechsel=start+RL-relais, einzel=R-Relais+L-Relais werden geschaltet | | STMrlType|| String || einzel || je nach Schaltplan, Wechsel=start+RL-relais, einzel=R-Relais+L-Relais werden geschaltet | ||
<b>'''ACHTUNG:'''</b> falsche Einstellung kann zu | <b>'''ACHTUNG:'''</b> falsche Einstellung kann zu Kurzschluss am Motor führen, bitte Einstellung genau überdenken oder mit dummy testen | ||
bei einzel: | bei einzel: | ||
Zeile 131: | Zeile 129: | ||
|STMpollInterval || Float ||0.1||Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte mit einem möglichst | |STMpollInterval || Float ||0.1||Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte mit einem möglichst | ||
kleinen Wert gestartet werden, der vorsichtig erhöht werden kann, falls FHEM zu langsam läuft wegen des Stellmotors. Darf nicht größer | kleinen Wert gestartet werden, der vorsichtig erhöht werden kann, falls FHEM zu langsam läuft wegen des Stellmotors. Darf nicht größer | ||
STMlastDiffMax sein, sonst beginnt der Motor zu | STMlastDiffMax sein, sonst beginnt der Motor zu schwingen. | ||
|- | |- | ||
Zeile 147: | Zeile 145: | ||
| STMlastDiffMax|| Zahl || 1|| ist die Stoppzeit weiter als dieser wert vom Soll entfernt, wird sofort ein neuer drive | | STMlastDiffMax|| Zahl || 1|| ist die Stoppzeit weiter als dieser wert vom Soll entfernt, wird sofort ein neuer drive | ||
gestartet. Wert | gestartet. Wert muss immer größer als STMpollInterval sein, sonst beginnt der Motor zu schwingen | ||
|- | |- | ||
| STMtimeTolerance|| Float || 0.001 || Stop-Time Differenzen kleiner als dieser Wert werden bei der Berechnung vollständig | | STMtimeTolerance|| Float || 0.001 || Stop-Time Differenzen kleiner als dieser Wert werden bei der Berechnung vollständig | ||
Zeile 153: | Zeile 151: | ||
|- | |- | ||
| STMdebugToLog3|| Zahl || 0/1 || Debug Informationen ins Log schreiben. Achtung, kann eine Menge Daten verursachen falls | | STMdebugToLog3|| Zahl || 0/1 || Debug Informationen ins Log schreiben. Achtung, kann eine Menge Daten verursachen, falls | ||
man | man vergisst, es wieder abzuschalten! | ||
|- | |- | ||
Zeile 165: | Zeile 163: | ||
Je nach Device Type sind verschiedene Attribute vorgesehen, um STELLMOTOR mitzuteilen, wie die beiden Relais angesprochen | Je nach Device Type sind verschiedene Attribute vorgesehen, um STELLMOTOR mitzuteilen, wie die beiden Relais angesprochen | ||
werden. Man kann so | werden. Man kann so z. B. während der Aufbauphase der Installation neben den Gpio devices noch 2 dummy devices im Attr | ||
vorhalten um zwischendurch zu testen. Hierzu | vorhalten um zwischendurch zu testen. Hierzu muss dann nur noch die DEF des STELLMOTOR Devices vorübergehend auf FhemDev | ||
geändert werden. | geändert werden. | ||
Alle Attributes sind auch in fhem durch das kommando get attrHelp <varname> erklärt, für | Alle Attributes sind auch in fhem durch das kommando get attrHelp <varname> erklärt, für das "schnelle Nachschauen zwischendurch". | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
Zeile 183: | Zeile 181: | ||
| FhemDev || STMfhemDevSTART|| String || RelaisSTART || Fhem-Device name für START (oder L) Aktor (zB.: 'keller portC' oder 'dummySTARTrelais') | | FhemDev || STMfhemDevSTART|| String || RelaisSTART || Fhem-Device name für START (oder L) Aktor (zB.: 'keller portC' oder 'dummySTARTrelais') | ||
|- | |- | ||
| SysCmd || STMsysCmdRL|| String || 0 || freies Command das für RL an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 4', STELLMOTOR fügt 0 oder 1 arg. dazu) | | SysCmd || STMsysCmdRL|| String || 0 || freies Command, das für RL an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 4', STELLMOTOR fügt 0 oder 1 arg. dazu) | ||
|- | |- | ||
| SysCmd || STMsysCmdSTART|| String || 0 || freies Command das für START an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 5', STELLMOTOR fügt 0 oder 1 arg. am Ende dazu) | | SysCmd || STMsysCmdSTART|| String || 0 || freies Command, das für START an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 5', STELLMOTOR fügt 0 oder 1 arg. am Ende dazu) | ||
|- | |- | ||
|} | |} | ||
Zeile 204: | Zeile 202: | ||
|set <name> reset|| - ||Setzt die Position und die Werte im Cache auf Null. Verwendung ist intern (am Ende von calibrate) oder nach mechanischem Neueinbau des Motors (da reicht aber auch ein Calibrate) | |set <name> reset|| - ||Setzt die Position und die Werte im Cache auf Null. Verwendung ist intern (am Ende von calibrate) oder nach mechanischem Neueinbau des Motors (da reicht aber auch ein Calibrate) | ||
|} | |} | ||
---- | ---- | ||
Zeile 210: | Zeile 207: | ||
== Readings == | == Readings == | ||
Alle Readings sind auch in fhem durch das | Alle Readings sind auch in fhem durch das Kommando get readingsHelp <varname> erklärt, für das "schnelle nachschauen zwischendurch". | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
Zeile 238: | Zeile 235: | ||
|DoResetAtStop||||Zeitstempel des Ende der letzten Kalibrierfahrt | |DoResetAtStop||||Zeitstempel des Ende der letzten Kalibrierfahrt | ||
|} | |} | ||
---- | ---- |
Version vom 12. August 2014, 21:26 Uhr
STELLMOTOR | |
---|---|
Zweck / Funktion | |
Stellmotor-Steuerung mit Zeitabweichungskorrektur | |
Allgemein | |
Typ | Inoffiziell |
Details | |
Dokumentation | siehe Forum |
Support (Forum) | [http://forum.fhem.de/index.php/board,8.0.html Codeschnipsel / STELLMOTOR] |
Modulname | 39_STELLMOTOR.pm |
Ersteller | epsrw1,cwagner |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Das Modul STELLMOTOR bietet eine einfache Möglichkeit, mit zwei Relais den Rechts-/Linkslauf eines Motors zu steuern und punktgenau anzuhalten.
Features
Diese Wiki-Seite beschreibt die Version 2.0 des STELLMOTOR Moduls.
- Wiedereintrittsfähig nach einem Neustart
- Wiederholungsgenauigkeit durch Ausgleich von Rundungs- und Laufzeitabweichungen
- Vermeiden von Blockade des FHEM während der Laufzeit des Motors
Thread im Forum:[1]
Beschreibung
Vorrangig ist dieses Modul für zwei Relais an GPIO- oder an PIFace-Pins eines Rasberrys gedacht. Andere Einplatinencomputer werden mit dem Device-Typ SysCmd unterstützt. Es bietet zusätzlich auch die Option, zwei Schaltaktoren per Funk (aus Timinggründen nicht empfohlen) oder 1-Wire anzusteuern.
Aus den Werten MaxTics (Default=100, für Prozentanzeige) und MaxDriveSeconds (Laufzeit des Motors von 0 bis 100%) wird die Zeit berechnet, die der Motor nach rechts oder links laufen muss, um die mit set gewünschte Motorstellung zu erreichen.
FHEM läuft dann weiter ohne einzufrieren, und prüft im Loop nur noch ob, die Stoppzeit im Cache erreicht ist. Da der Stopp nie exakt zur geplanten Zeit ausgeführt wird, liegt im Cache ein weiterer Wert, der die Differenz zwischen geplanter und tatsächlicher Stoppzeit dem nächsten Kommando hinzurechnet. So werden sich addierende kleine Zeitdifferenzen vermieden.
Zum Kalibrieren (set calibrate) fährt der Motor einfach volle Zeit nach links/null. Hier wird der in Getriebemotoren meist eingebaute Endschalter genutzt, um den "Null-Punkt" sicher zu finden. Falls ein angeschlossener Motor solche Endschalter nicht hat, müssen diese für diese Schaltungsweise unbedingt vorgesehen werden. Übliche Montagepunkte sind ein Wellrad an der Ansgangswelle, an Endpunkten des zu bewegenden Objektes oder direkt am Motor gegen eine drehend gefedert gelagerte Motoraufhängung.
Anwendungsszenarien für das Modul sind unter Anderem:
- 3- oder 4-Wege Heizkreis-Mischer
- Warmwasser-Mischventil für Solarspeicher
- Eigenbau-Heizungsthermostate
- Eigenbau-Rolladensteuerung
- (Dach-)Fensteröffner
- Beamer-Leinwand
- Heliostaten
- ....
Define
define <name> STELLMOTOR <PiFace|Gpio|FhemDev|SysCmd>
Je nach Device Typ sind verschiedene Attribute zur erforderlich, damit STELLMOTOR weiß, wie die beiden Relais angeschlossen sind.
- PiFace und Gpio benötigen STMgpioPortRL und STMgpioPortSTART
- FhemDev benötigt STMfhemDevRL und STMfhemDevSTART
- SysCmd benötigt STMsysCmdRL und STMsysCmdSTART
Für den Schaltvorgang "baut" STELLMOTOR einen set-Befehl zusammen. Beispielsweise bei FhemDev
set <**..PortRL> 0 sowie set <**..PortSTART> 1 zum Einschalten links
set <**..PortRL> 1 sowie set <**..PortSTART> 0 zum Einschalten rechts (bei Type "einzel", sonst 1,1)
set <**..PortRL> 0 sowie set <**..PortSTART> 0 zum Ausschalten
- Die Schaltbefehle 0 und 1 können mit Attributen invertiert und/oder gemapped werden (zB.: On/Off)
Um die Wirkung auszuprobieren, ohne jedes Mal zum Mischer rennen zu müssen, bietet sich an, zwei Dummys zu verwenden:
define Stellmotor2rl dummy
define Stellmotor2start dummy
set <name> 45
stellt den Motor nun auf 45%. Angenommen, stand er bei 10%, wird er nun (45-10)*MaxDriveSeconds/MaxTics Sekunden lang nach rechts laufen und dann von STELLMOTOR gestoppt.
Diese beiden Bilder zeigen die elektrische Verdrahtung von zwei Relais, die von je einem Aktor gesteuert werden:
Typische Getriebemotoren haben eingebaute Endschalter, die beim Erreichen der 0%- oder 100%-Position die Stromversorgung unterbrechen. Das Modul Stellmotor nutzt dies aus, um eine Kalibrierung zwischen rechnerischem und tatsächlichen Stand herzustellen.
Attribute
Alle Attributes sind auch in fhem durch das Kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch".
Global gültige Attribute
Parameter | Wertebereich | Default | Beschreibung |
---|---|---|---|
STMrlType | String | einzel | je nach Schaltplan, Wechsel=start+RL-relais, einzel=R-Relais+L-Relais werden geschaltet
ACHTUNG: falsche Einstellung kann zu Kurzschluss am Motor führen, bitte Einstellung genau überdenken oder mit dummy testen bei einzel: Rechtslauf: start=0 rl=1 Linkslauf: start=1 rl=0 Ruhe: start=0 rl=0 bei wechsel: Rechtslauf start=0 rl=1 Linkslauf: L start=1 rl=0 Ruhe: start=0 rl=0 |
STMmaxDriveSeconds | [0...n] | muss angepasst werden | gestoppte Zeit in Sekunden, die der Motor für die Fahrt von 0 bis 100 Prozent braucht |
STMmaxTics | [0...100] | 100 | Motorstellung - bei Prozentangaben 100, bei Winkelangaben anzupassen |
STMpollInterval | Float | 0.1 | Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte mit einem möglichst
kleinen Wert gestartet werden, der vorsichtig erhöht werden kann, falls FHEM zu langsam läuft wegen des Stellmotors. Darf nicht größer STMlastDiffMax sein, sonst beginnt der Motor zu schwingen. |
STMresetOtherDeviceAtCalibrate | String | 0 | Fhem Device das am Ende des Kalibriervorganges zusätzlich resettet wird. (command:
set <STMresetOtherDeviceAtCalibrate> reset" wird abgesetzt), zB für eigenes Logging oder Rotary Encoder |
STMinvertOut | Zahl | 0 | setzen für Devices die 0 für Start und 1 für Stop erwarten |
STMmapOffCmd | String | 0 | string der im device-command anstelle '0' verwendet wird für stop |
STMmapOnCmd | String | 0 | string der im device-command anstelle '1' verwendet wird für start |
STMcalibrateDirection | String | L | auf R wird die Ralibrierung nach rechts gefahren, default= L (links) |
STMlastDiffMax | Zahl | 1 | ist die Stoppzeit weiter als dieser wert vom Soll entfernt, wird sofort ein neuer drive
gestartet. Wert muss immer größer als STMpollInterval sein, sonst beginnt der Motor zu schwingen |
STMtimeTolerance | Float | 0.001 | Stop-Time Differenzen kleiner als dieser Wert werden bei der Berechnung vollständig
ignoriert (Parameter wird voraussichtlich in der nächsten Modulversion entfallen) |
STMdebugToLog3 | Zahl | 0/1 | Debug Informationen ins Log schreiben. Achtung, kann eine Menge Daten verursachen, falls
man vergisst, es wieder abzuschalten! |
readingFnAttributes | readingFnAttributes |
Device Type abhängige Attribute
Je nach Device Type sind verschiedene Attribute vorgesehen, um STELLMOTOR mitzuteilen, wie die beiden Relais angesprochen werden. Man kann so z. B. während der Aufbauphase der Installation neben den Gpio devices noch 2 dummy devices im Attr vorhalten um zwischendurch zu testen. Hierzu muss dann nur noch die DEF des STELLMOTOR Devices vorübergehend auf FhemDev geändert werden.
Alle Attributes sind auch in fhem durch das kommando get attrHelp <varname> erklärt, für das "schnelle Nachschauen zwischendurch".
Device Type | Parameter | Typ | Default | Beschreibung |
---|---|---|---|---|
PiFace / Gpio | STMgpioPortRL | Zahl | 5 | PiFace Digital port oder Gpio-Port für RL oder R Relais |
PiFace / Gpio | STMgpioPortSTART | Zahl | 4 | PiFace Digital Port oder Gpio-Port für START (oder L Relais bei 'einzel') |
FhemDev | STMfhemDevRL | String | RelaisRL | Fhem-Device name für RL (oder R) Aktor (zB.: 'keller portB' oder 'dummyRLrelais') |
FhemDev | STMfhemDevSTART | String | RelaisSTART | Fhem-Device name für START (oder L) Aktor (zB.: 'keller portC' oder 'dummySTARTrelais') |
SysCmd | STMsysCmdRL | String | 0 | freies Command, das für RL an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 4', STELLMOTOR fügt 0 oder 1 arg. dazu) |
SysCmd | STMsysCmdSTART | String | 0 | freies Command, das für START an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 5', STELLMOTOR fügt 0 oder 1 arg. am Ende dazu) |
Settings
SET | Wertebereich | Beschreibung |
---|---|---|
set <name> N | [1...100] | stellt den Mischer auf N % Öffnung |
set <name> calibrate | - | stellt den Mischer auf Min. oder Max. (in Fhem 1% oder 100%); default: maximaler Linkslauf bis zur Endschalterpostion. Kann über Attr in Rechtslauf geändert werden. |
set <name> reset | - | Setzt die Position und die Werte im Cache auf Null. Verwendung ist intern (am Ende von calibrate) oder nach mechanischem Neueinbau des Motors (da reicht aber auch ein Calibrate) |
Readings
Alle Readings sind auch in fhem durch das Kommando get readingsHelp <varname> erklärt, für das "schnelle nachschauen zwischendurch".
readings | Wertebereich | Beschreibung |
---|---|---|
position | [1..100%] | der Wert wird gesetzt am Beginn einer Mischerbewegung (anderer Wertebereich, wenn MaxTics nicht 100) |
state | active,error,position | Position wird beim Stopp der Motorbewegung gesetzt |
lastStart | Float | Zeitstempel der letzten Motorbewegung |
locked | [0 1] | Steht auf 1 während der Motor gerade läuft (Calibrate oder gewünsche Position per set).
Neue Kommandos werden während lock nur in eine Warteschleife (reading: command_queue) genommen. Zeigt im im Frontend, dass der Motor gerade läuft. |
queue_lastdiff | Letzte Zeitdifferenz beim Stopp: abhängig von der Systemlast oder anderen blockierenden Kommandos wird das Stopp-Kommando nur nahe an der kalkulierten Stoppzeit ausgeführt, potentiell niemals exakt zum berechneten Zeitpunkt. STELLMOTOR merkt sich die Zeitdifferenz zwischen geplantem und tatsächlichem Stopp und addiert bei der nächsten Bewegung des Motors die Differenz, um möglichst präzise die gewünschte Motorstellung zu erreichen. | |
stopTime | Null oder die errechnete Zeit zum Stopp der Motorbewegung | |
command_queue | Position einer anstehenden neuen Motorposition, die angefordert wurde als die letzte Motorbewegung noch ausgeführt oder das Modul disabled war | |
OutType | Bei der Defintion gewählte Arbeitsart: PiFace,Gpio,FhemDev,SysCmd | |
DoResetAtStop | Zeitstempel des Ende der letzten Kalibrierfahrt |
Weblinks
- Thread im Forum, in dem dieses Modul vorgestellt wurde
- to be continued