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:
@@ -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öglicht direkten Zugriff zu einigen GPIO's über den Pfostenstecker P1 (und P5 bei V2). Die Steckerbelegung ist in den Tabellen unter Define zu finden.
|
||||
Dieses Modul ermöglicht es, die herausgefühten GPIO's direkt als Ein- und Ausgang zu benutzen. Die Eingä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 überschreiten der 3,3V zerstö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 über sysfs zugegriffen. Die Dateien befinden sich unter /system/class/gpio und kö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 <name> RPI_GPIO <GPIO number></code><br><br>
|
||||
Alle verf<EFBFBD>gbaren <code>GPIO number</code> sind in den folgenden Tabellen zu finden<br><br>
|
||||
Alle verfü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 <name> <value></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ü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ützt.<br>
|
||||
</li>
|
||||
<li>F<EFBFBD>r GPIO der als input konfiguriert ist
|
||||
<li>Für GPIO der als input konfiguriert ist
|
||||
<ul><code>
|
||||
readval
|
||||
</code></ul>
|
||||
@@ -755,7 +763,7 @@ sub inthandling($$) {
|
||||
<ul>
|
||||
<code>get <name></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ü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ü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ählt werden, wenn der GPIO als Eingang konfiguriert ist</b><br>
|
||||
Aktiviert Flankenerkennung für den GPIO<br>
|
||||
bei jedem interrupt Ereignis werden die readings Pinlevel und state aktualisiert<br>
|
||||
Standard: none, gü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äßig ensprechend des eingestellten Wertes in Minuten ab<br>
|
||||
Standard: -, gü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ü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ü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östem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden<br>
|
||||
Standard: 0, gü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ültige Werte: on, off<br><br>
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
Reference in New Issue
Block a user