correction for attr poll_interval and german documentation

git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@4581 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
klauswitt
2014-01-06 20:35:10 +00:00
parent 00d9f018ac
commit ef1002e240

View File

@@ -60,7 +60,7 @@ sub RPI_GPIO_Define($$) {
"define <name> RPI_GPIO <GPIO>";
}
#Pr<EFBFBD>fen, ob GPIO bereits verwendet
#Prüfen, ob GPIO bereits verwendet
foreach my $dev (devspec2array("TYPE=$hash->{TYPE}")) {
if ($args[2] eq InternalVal($dev,"RPI_pin","")) {
return "GPIO $args[2] already used by $dev";
@@ -70,7 +70,7 @@ sub RPI_GPIO_Define($$) {
my $name = $args[0];
$hash->{RPI_pin} = $args[2];
#export Pin alte Version -> wird jetzt <EFBFBD>ber direction gemacht (WiringPi Programm GPIO)
#export Pin alte Version -> wird jetzt über direction gemacht (WiringPi Programm GPIO)
#my $exp = IO::File->new("> /sys/class/gpio/export");
#print $exp "$hash->{RPI_pin}";
#$exp->close;
@@ -120,10 +120,18 @@ sub RPI_GPIO_Set($@) {
}
if ($cmd eq 'on') {
fileaccess($hash, "value", "1");
$hash->{STATE} = 'on';
#$hash->{STATE} = 'on';
readingsBeginUpdate($hash);
#readingsBulkUpdate($hash, 'Pinlevel', $valalt);
readingsBulkUpdate($hash, 'state', "on");
readingsEndUpdate($hash, 1);
} elsif ($cmd eq 'off') {
fileaccess($hash, "value", "0");
$hash->{STATE} = 'off';
#$hash->{STATE} = 'off';
readingsBeginUpdate($hash);
#readingsBulkUpdate($hash, 'Pinlevel', $valalt);
readingsBulkUpdate($hash, 'state', "off");
readingsEndUpdate($hash, 1);
} else {
my $slist = join(' ', keys %setsoutp);
return SetExtensions($hash, $slist, @a);
@@ -192,7 +200,7 @@ sub RPI_GPIO_Attr(@) {
}
if ($attr eq 'direction') {
if (!$val) { #$val nicht definiert: Einstellungen l<EFBFBD>schen
if (!$val) { #$val nicht definiert: Einstellungen löschen
$msg = "$hash->{NAME}: no direction value. Use input output";
} elsif ($val eq "input") {
#fileaccess($hash, "direction", "in");
@@ -308,7 +316,7 @@ sub RPI_GPIO_Undef($$) {
sub RPI_GPIO_Except($) {
my ($hash) = @_;
#seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist n<EFBFBD>tig falls vorher schon etwas gelesen wurde)
#seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nötig falls vorher schon etwas gelesen wurde)
#chomp ( my $firstval = $hash->{filehandle}->getline ); #aktuelle Zeile auslesen und Endezeichen entfernen
my $eval = fileaccess($hash, "edge"); #Eintstellung Flankensteuerung auslesen
my ($valst, $valalt, $valto, $valcnt) = undef;
@@ -319,7 +327,7 @@ sub RPI_GPIO_Except($) {
select(undef, undef, undef, $debounce_time);
}
seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist n<EFBFBD>tig falls vorher schon etwas gelesen wurde)
seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nötig falls vorher schon etwas gelesen wurde)
chomp ( my $val = $hash->{filehandle}->getline ); #aktuelle Zeile auslesen und Endezeichen entfernen
if ( ( $val == 1) && ( $eval ne ("falling") ) ) {
@@ -344,26 +352,26 @@ sub RPI_GPIO_Except($) {
$valto = "off";
}
#Log 1, "Toggle ist jetzt $valto";
if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "yes" )) { #wenn Attr "toggletostate" gesetzt auch die Variable f<EFBFBD>r den STATE wert setzen
if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "yes" )) { #wenn Attr "toggletostate" gesetzt auch die Variable für den STATE wert setzen
$valst = $valto;
}
#Z<EFBFBD>hlfunktion
if (!defined($hash->{READINGS}{Counter}{VAL})) { #Z<EFBFBD>hler existiert nicht -> anlegen
#Log 1, "Z<EFBFBD>hler war nicht def";
#Zählfunktion
if (!defined($hash->{READINGS}{Counter}{VAL})) { #Zähler existiert nicht -> anlegen
#Log 1, "Zähler war nicht def";
$valcnt = "1";
} else {
$valcnt = $hash->{READINGS}{Counter}{VAL} + 1;
#Log 1, "Z<EFBFBD>hler ist jetzt $valcnt";
#Log 1, "Zähler ist jetzt $valcnt";
}
}
delete ($hash->{READINGS}{Toggle}) if ($eval ne ("rising" || "falling")); #Reading Toggle l<EFBFBD>schen wenn kein Wert in Variable
delete ($hash->{READINGS}{Toggle}) if ($eval ne ("rising" || "falling")); #Reading Toggle löschen wenn kein Wert in Variable
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Pinlevel', $valalt);
readingsBulkUpdate($hash, 'state', $valst);
readingsBulkUpdate($hash, 'Toggle', $valto) if ($valto);
readingsBulkUpdate($hash, 'Counter', $valcnt) if ($valcnt);
readingsEndUpdate($hash, 1);
#Log 1, "RPIGPIO: Except ausgel<EFBFBD>st: $hash->{NAME}, Wert: $val, edge: $eval,vt: $valto, $debounce_time s: $firstval";
#Log 1, "RPIGPIO: Except ausgelöst: $hash->{NAME}, Wert: $val, edge: $eval,vt: $valto, $debounce_time s: $firstval";
}
sub updatevalue($) {
@@ -380,7 +388,7 @@ sub updatevalue($) {
}
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Pinlevel', $valalt);
readingsBulkUpdate($hash, 'state', $valst) if (( AttrVal($hash->{NAME}, "toggletostate", "yes") ) eq ( "no" ));
readingsBulkUpdate($hash, 'state', $valst) if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "no" ));
readingsEndUpdate($hash, 1);
} else {
Log 1, "$hash->{NAME}: readout of Pinvalue fail";
@@ -449,7 +457,7 @@ sub inthandling($$) {
my ($hash, $arg) = @_;
my $msg = '';
if ( $arg eq "start") {
#FH f<EFBFBD>r value-datei
#FH für value-datei
my $pinroot = qq($gpiodir/gpio$hash->{RPI_pin});
my $valfile = qq($pinroot/value);
$hash->{filehandle} = IO::File->new("< $valfile");
@@ -641,12 +649,12 @@ sub inthandling($$) {
<ul>
<a name="RPI_GPIO"></a>
<p>
Das Raspberry Pi erm<EFBFBD>glicht direkten Zugriff zu einigen GPIO's <EFBFBD>ber den Pfostenstecker P1 (und P5 bei V2). Die Steckerbelegung ist in den Tabellen unter Define zu finden.
Dieses Modul erm<EFBFBD>glicht es, die herausgef<EFBFBD>hten GPIO's direkt als Ein- und Ausgang zu benutzen. Die Eing<EFBFBD>nge k<>nnen zyklisch abgefragt werden oder auch sofort bei Pegelwechsel gesetzt werden.<br><br>
<b>Wichtig: Niemals Spannung an einen GPIO anlegen, der als Ausgang eingestellt ist! Die interne Logik der GPIO's arbeitet mit 3,3V. Ein <EFBFBD>berschreiten der 3,3V zerst<EFBFBD>rt den GPIO und vielleicht auch den ganzen Prozessor!</b><br><br>
Das Raspberry Pi erm&ouml;glicht direkten Zugriff zu einigen GPIO's &uuml;ber den Pfostenstecker P1 (und P5 bei V2). Die Steckerbelegung ist in den Tabellen unter Define zu finden.
Dieses Modul erm&ouml;glicht es, die herausgef&uuml;hten GPIO's direkt als Ein- und Ausgang zu benutzen. Die Eing&auml;nge k&ouml;nnen zyklisch abgefragt werden oder auch sofort bei Pegelwechsel gesetzt werden.<br><br>
<b>Wichtig: Niemals Spannung an einen GPIO anlegen, der als Ausgang eingestellt ist! Die interne Logik der GPIO's arbeitet mit 3,3V. Ein &uuml;berschreiten der 3,3V zerst&ouml;rt den GPIO und vielleicht auch den ganzen Prozessor!</b><br><br>
<b>Vorbereitung:</b><br>
Auf GPIO Pins wird im Modul <EFBFBD>ber sysfs zugegriffen. Die Dateien befinden sich unter /system/class/gpio und k<EFBFBD>nnen nur mit root erreicht werden.
Auf GPIO Pins wird im Modul &uuml;ber sysfs zugegriffen. Die Dateien befinden sich unter /system/class/gpio und k&ouml;nnen nur mit root erreicht werden.
Dieses Modul nutzt das gpio Tool von der <a href="http://wiringpi.com/download-and-install/">WiringPi</a>. Bibliothek um GPIS zu exportieren und die korrekten Nutzerrechte zu setzen.
Installation WiringPi:
<pre>
@@ -663,7 +671,7 @@ sub inthandling($$) {
<b>Define</b>
<ul>
<code>define &lt;name&gt; RPI_GPIO &lt;GPIO number&gt;</code><br><br>
Alle verf<EFBFBD>gbaren <code>GPIO number</code> sind in den folgenden Tabellen zu finden<br><br>
Alle verf&uuml;gbaren <code>GPIO number</code> sind in den folgenden Tabellen zu finden<br><br>
<table border="0" cellspacing="0" cellpadding="0">
<td>
@@ -727,16 +735,16 @@ sub inthandling($$) {
<code>set &lt;name&gt; &lt;value&gt;</code>
<br><br>
<code>value</code> ist dabei einer der folgenden Werte:<br>
<ul><li>F<EFBFBD>r GPIO der als output konfiguriert ist
<ul><li>F&uuml;r GPIO der als output konfiguriert ist
<ul><code>
off<br>
on<br>
toggle<br>
</code>
</ul>
Die <a href="#setExtensions"> set extensions</a> werden auch unterst<EFBFBD>tzt.<br>
Die <a href="#setExtensions"> set extensions</a> werden auch unterst&uuml;tzt.<br>
</li>
<li>F<EFBFBD>r GPIO der als input konfiguriert ist
<li>F&uuml;r GPIO der als input konfiguriert ist
<ul><code>
readval
</code></ul>
@@ -755,7 +763,7 @@ sub inthandling($$) {
<ul>
<code>get &lt;name&gt;</code>
<br><br>
Gibt "high" oder "low" entsprechend dem aktuellen Pinstatus zur<EFBFBD>ck und schreibt den Wert auch in das reading <b>Pinlevel</b>
Gibt "high" oder "low" entsprechend dem aktuellen Pinstatus zur&uuml;ck und schreibt den Wert auch in das reading <b>Pinlevel</b>
</ul><br>
<a name="RPI_GPIOAttr"></a>
@@ -763,34 +771,34 @@ sub inthandling($$) {
<ul>
<li>direction<br>
Setzt den GPIO auf Ein- oder Ausgang.<br>
Standard: input, g<EFBFBD>ltige Werte: input, output<br><br>
Standard: input, g&uuml;ltige Werte: input, output<br><br>
</li>
<li>interrupt<br>
<b>kann nur gew<EFBFBD>hlt werden, wenn der GPIO als Eingang konfiguriert ist</b><br>
Aktiviert Flankenerkennung f<EFBFBD>r den GPIO<br>
bei jedem interrupt Erwignis werden die readings Pinlevel und state aktualisiert<br>
Standard: none, g<EFBFBD>ltige Werte: none, falling, rising, both<br><br>
<b>kann nur gew&auml;hlt werden, wenn der GPIO als Eingang konfiguriert ist</b><br>
Aktiviert Flankenerkennung f&uuml;r den GPIO<br>
bei jedem interrupt Ereignis werden die readings Pinlevel und state aktualisiert<br>
Standard: none, g&uuml;ltige Werte: none, falling, rising, both<br><br>
</li>
<li>poll_interval<br>
Fragt den Zustand des GPIO regelm<EFBFBD><EFBFBD>ig ensprechend des eingestellten Wertes in Minuten ab<br>
Standard: -, g<EFBFBD>ltige Werte: Dezimalzahl<br><br>
Fragt den Zustand des GPIO regelm&auml;&szlig;ig ensprechend des eingestellten Wertes in Minuten ab<br>
Standard: -, g&uuml;ltige Werte: Dezimalzahl<br><br>
</li>
<li>toggletostate<br>
<b>Funktioniert nur bei auf falling oder rising gesetztem Attribut interrupt</b><br>
Wenn auf "yes" gestellt wird bei jedem Triggerereignis das <b>state</b> reading invertiert<br>
Standard: no, g<EFBFBD>ltige Werte: yes, no<br><br>
Standard: no, g&uuml;ltige Werte: yes, no<br><br>
</li>
<li>pud_resistor<br>
Interner Pullup/down Widerstand<br>
Standard: -, g<EFBFBD>ltige Werte: off, up, down<br><br>
Standard: -, g&uuml;ltige Werte: off, up, down<br><br>
</li>
<li>debounce_in_ms<br>
Wartezeit in ms bis nach ausgel<EFBFBD>stem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden<br>
Standard: 0, g<EFBFBD>ltige Werte: Dezimalzahl<br><br>
Wartezeit in ms bis nach ausgel&ouml;stem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden<br>
Standard: 0, g&uuml;ltige Werte: Dezimalzahl<br><br>
</li>
<li>restoreOnStartup<br>
Wiederherstellen der Portzust<EFBFBD>nde nach Neustart<br>
Standard: on, g<EFBFBD>ltige Werte: on, off<br><br>
Wiederherstellen der Portzust&äuml;nde nach Neustart<br>
Standard: on, g&uuml;ltige Werte: on, off<br><br>
</li>
</ul>
<br>