mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 07:56:03 +00:00
correction for attr poll_interval and german documentation
git-svn-id: https://svn.fhem.de/fhem/trunk@4581 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
ab7d743849
commit
1169d6c739
@ -60,7 +60,7 @@ sub RPI_GPIO_Define($$) {
|
|||||||
"define <name> RPI_GPIO <GPIO>";
|
"define <name> RPI_GPIO <GPIO>";
|
||||||
}
|
}
|
||||||
|
|
||||||
#Prüfen, ob GPIO bereits verwendet
|
#Prüfen, ob GPIO bereits verwendet
|
||||||
foreach my $dev (devspec2array("TYPE=$hash->{TYPE}")) {
|
foreach my $dev (devspec2array("TYPE=$hash->{TYPE}")) {
|
||||||
if ($args[2] eq InternalVal($dev,"RPI_pin","")) {
|
if ($args[2] eq InternalVal($dev,"RPI_pin","")) {
|
||||||
return "GPIO $args[2] already used by $dev";
|
return "GPIO $args[2] already used by $dev";
|
||||||
@ -70,7 +70,7 @@ sub RPI_GPIO_Define($$) {
|
|||||||
my $name = $args[0];
|
my $name = $args[0];
|
||||||
$hash->{RPI_pin} = $args[2];
|
$hash->{RPI_pin} = $args[2];
|
||||||
|
|
||||||
#export Pin alte Version -> wird jetzt ü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");
|
#my $exp = IO::File->new("> /sys/class/gpio/export");
|
||||||
#print $exp "$hash->{RPI_pin}";
|
#print $exp "$hash->{RPI_pin}";
|
||||||
#$exp->close;
|
#$exp->close;
|
||||||
@ -118,12 +118,20 @@ sub RPI_GPIO_Set($@) {
|
|||||||
my $val = fileaccess($hash, "value"); #alten Wert des GPIO direkt auslesen
|
my $val = fileaccess($hash, "value"); #alten Wert des GPIO direkt auslesen
|
||||||
$cmd = $val eq "0" ? "on" :"off";
|
$cmd = $val eq "0" ? "on" :"off";
|
||||||
}
|
}
|
||||||
if ($cmd eq 'on') {
|
if ($cmd eq 'on') {
|
||||||
fileaccess($hash, "value", "1");
|
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') {
|
} elsif ($cmd eq 'off') {
|
||||||
fileaccess($hash, "value", "0");
|
fileaccess($hash, "value", "0");
|
||||||
$hash->{STATE} = 'off';
|
#$hash->{STATE} = 'off';
|
||||||
|
readingsBeginUpdate($hash);
|
||||||
|
#readingsBulkUpdate($hash, 'Pinlevel', $valalt);
|
||||||
|
readingsBulkUpdate($hash, 'state', "off");
|
||||||
|
readingsEndUpdate($hash, 1);
|
||||||
} else {
|
} else {
|
||||||
my $slist = join(' ', keys %setsoutp);
|
my $slist = join(' ', keys %setsoutp);
|
||||||
return SetExtensions($hash, $slist, @a);
|
return SetExtensions($hash, $slist, @a);
|
||||||
@ -192,7 +200,7 @@ sub RPI_GPIO_Attr(@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($attr eq 'direction') {
|
if ($attr eq 'direction') {
|
||||||
if (!$val) { #$val nicht definiert: Einstellungen löschen
|
if (!$val) { #$val nicht definiert: Einstellungen löschen
|
||||||
$msg = "$hash->{NAME}: no direction value. Use input output";
|
$msg = "$hash->{NAME}: no direction value. Use input output";
|
||||||
} elsif ($val eq "input") {
|
} elsif ($val eq "input") {
|
||||||
#fileaccess($hash, "direction", "in");
|
#fileaccess($hash, "direction", "in");
|
||||||
@ -308,7 +316,7 @@ sub RPI_GPIO_Undef($$) {
|
|||||||
|
|
||||||
sub RPI_GPIO_Except($) {
|
sub RPI_GPIO_Except($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
#seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nö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
|
#chomp ( my $firstval = $hash->{filehandle}->getline ); #aktuelle Zeile auslesen und Endezeichen entfernen
|
||||||
my $eval = fileaccess($hash, "edge"); #Eintstellung Flankensteuerung auslesen
|
my $eval = fileaccess($hash, "edge"); #Eintstellung Flankensteuerung auslesen
|
||||||
my ($valst, $valalt, $valto, $valcnt) = undef;
|
my ($valst, $valalt, $valto, $valcnt) = undef;
|
||||||
@ -319,7 +327,7 @@ sub RPI_GPIO_Except($) {
|
|||||||
select(undef, undef, undef, $debounce_time);
|
select(undef, undef, undef, $debounce_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nö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
|
chomp ( my $val = $hash->{filehandle}->getline ); #aktuelle Zeile auslesen und Endezeichen entfernen
|
||||||
|
|
||||||
if ( ( $val == 1) && ( $eval ne ("falling") ) ) {
|
if ( ( $val == 1) && ( $eval ne ("falling") ) ) {
|
||||||
@ -344,26 +352,26 @@ sub RPI_GPIO_Except($) {
|
|||||||
$valto = "off";
|
$valto = "off";
|
||||||
}
|
}
|
||||||
#Log 1, "Toggle ist jetzt $valto";
|
#Log 1, "Toggle ist jetzt $valto";
|
||||||
if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "yes" )) { #wenn Attr "toggletostate" gesetzt auch die Variable fü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;
|
$valst = $valto;
|
||||||
}
|
}
|
||||||
#Zählfunktion
|
#Zählfunktion
|
||||||
if (!defined($hash->{READINGS}{Counter}{VAL})) { #Zähler existiert nicht -> anlegen
|
if (!defined($hash->{READINGS}{Counter}{VAL})) { #Zähler existiert nicht -> anlegen
|
||||||
#Log 1, "Zähler war nicht def";
|
#Log 1, "Zähler war nicht def";
|
||||||
$valcnt = "1";
|
$valcnt = "1";
|
||||||
} else {
|
} else {
|
||||||
$valcnt = $hash->{READINGS}{Counter}{VAL} + 1;
|
$valcnt = $hash->{READINGS}{Counter}{VAL} + 1;
|
||||||
#Log 1, "Zähler ist jetzt $valcnt";
|
#Log 1, "Zähler ist jetzt $valcnt";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete ($hash->{READINGS}{Toggle}) if ($eval ne ("rising" || "falling")); #Reading Toggle lö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);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash, 'Pinlevel', $valalt);
|
readingsBulkUpdate($hash, 'Pinlevel', $valalt);
|
||||||
readingsBulkUpdate($hash, 'state', $valst);
|
readingsBulkUpdate($hash, 'state', $valst);
|
||||||
readingsBulkUpdate($hash, 'Toggle', $valto) if ($valto);
|
readingsBulkUpdate($hash, 'Toggle', $valto) if ($valto);
|
||||||
readingsBulkUpdate($hash, 'Counter', $valcnt) if ($valcnt);
|
readingsBulkUpdate($hash, 'Counter', $valcnt) if ($valcnt);
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
#Log 1, "RPIGPIO: Except ausgelö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($) {
|
sub updatevalue($) {
|
||||||
@ -380,7 +388,7 @@ sub updatevalue($) {
|
|||||||
}
|
}
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash, 'Pinlevel', $valalt);
|
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);
|
readingsEndUpdate($hash, 1);
|
||||||
} else {
|
} else {
|
||||||
Log 1, "$hash->{NAME}: readout of Pinvalue fail";
|
Log 1, "$hash->{NAME}: readout of Pinvalue fail";
|
||||||
@ -449,7 +457,7 @@ sub inthandling($$) {
|
|||||||
my ($hash, $arg) = @_;
|
my ($hash, $arg) = @_;
|
||||||
my $msg = '';
|
my $msg = '';
|
||||||
if ( $arg eq "start") {
|
if ( $arg eq "start") {
|
||||||
#FH für value-datei
|
#FH für value-datei
|
||||||
my $pinroot = qq($gpiodir/gpio$hash->{RPI_pin});
|
my $pinroot = qq($gpiodir/gpio$hash->{RPI_pin});
|
||||||
my $valfile = qq($pinroot/value);
|
my $valfile = qq($pinroot/value);
|
||||||
$hash->{filehandle} = IO::File->new("< $valfile");
|
$hash->{filehandle} = IO::File->new("< $valfile");
|
||||||
@ -641,12 +649,12 @@ sub inthandling($$) {
|
|||||||
<ul>
|
<ul>
|
||||||
<a name="RPI_GPIO"></a>
|
<a name="RPI_GPIO"></a>
|
||||||
<p>
|
<p>
|
||||||
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.
|
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>
|
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>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>
|
<b>Vorbereitung:</b><br>
|
||||||
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.
|
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.
|
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:
|
Installation WiringPi:
|
||||||
<pre>
|
<pre>
|
||||||
@ -663,7 +671,7 @@ sub inthandling($$) {
|
|||||||
<b>Define</b>
|
<b>Define</b>
|
||||||
<ul>
|
<ul>
|
||||||
<code>define <name> RPI_GPIO <GPIO number></code><br><br>
|
<code>define <name> RPI_GPIO <GPIO number></code><br><br>
|
||||||
Alle verfü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">
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
<td>
|
<td>
|
||||||
@ -727,16 +735,16 @@ sub inthandling($$) {
|
|||||||
<code>set <name> <value></code>
|
<code>set <name> <value></code>
|
||||||
<br><br>
|
<br><br>
|
||||||
<code>value</code> ist dabei einer der folgenden Werte:<br>
|
<code>value</code> ist dabei einer der folgenden Werte:<br>
|
||||||
<ul><li>Für GPIO der als output konfiguriert ist
|
<ul><li>Für GPIO der als output konfiguriert ist
|
||||||
<ul><code>
|
<ul><code>
|
||||||
off<br>
|
off<br>
|
||||||
on<br>
|
on<br>
|
||||||
toggle<br>
|
toggle<br>
|
||||||
</code>
|
</code>
|
||||||
</ul>
|
</ul>
|
||||||
Die <a href="#setExtensions"> set extensions</a> werden auch unterstützt.<br>
|
Die <a href="#setExtensions"> set extensions</a> werden auch unterstützt.<br>
|
||||||
</li>
|
</li>
|
||||||
<li>Für GPIO der als input konfiguriert ist
|
<li>Für GPIO der als input konfiguriert ist
|
||||||
<ul><code>
|
<ul><code>
|
||||||
readval
|
readval
|
||||||
</code></ul>
|
</code></ul>
|
||||||
@ -755,7 +763,7 @@ sub inthandling($$) {
|
|||||||
<ul>
|
<ul>
|
||||||
<code>get <name></code>
|
<code>get <name></code>
|
||||||
<br><br>
|
<br><br>
|
||||||
Gibt "high" oder "low" entsprechend dem aktuellen Pinstatus zurü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>
|
</ul><br>
|
||||||
|
|
||||||
<a name="RPI_GPIOAttr"></a>
|
<a name="RPI_GPIOAttr"></a>
|
||||||
@ -763,34 +771,34 @@ sub inthandling($$) {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>direction<br>
|
<li>direction<br>
|
||||||
Setzt den GPIO auf Ein- oder Ausgang.<br>
|
Setzt den GPIO auf Ein- oder Ausgang.<br>
|
||||||
Standard: input, gültige Werte: input, output<br><br>
|
Standard: input, gültige Werte: input, output<br><br>
|
||||||
</li>
|
</li>
|
||||||
<li>interrupt<br>
|
<li>interrupt<br>
|
||||||
<b>kann nur gewählt werden, wenn der GPIO als Eingang konfiguriert ist</b><br>
|
<b>kann nur gewählt werden, wenn der GPIO als Eingang konfiguriert ist</b><br>
|
||||||
Aktiviert Flankenerkennung für den GPIO<br>
|
Aktiviert Flankenerkennung für den GPIO<br>
|
||||||
bei jedem interrupt Erwignis werden die readings Pinlevel und state aktualisiert<br>
|
bei jedem interrupt Ereignis werden die readings Pinlevel und state aktualisiert<br>
|
||||||
Standard: none, gültige Werte: none, falling, rising, both<br><br>
|
Standard: none, gültige Werte: none, falling, rising, both<br><br>
|
||||||
</li>
|
</li>
|
||||||
<li>poll_interval<br>
|
<li>poll_interval<br>
|
||||||
Fragt den Zustand des GPIO regelmäßig ensprechend des eingestellten Wertes in Minuten ab<br>
|
Fragt den Zustand des GPIO regelmäßig ensprechend des eingestellten Wertes in Minuten ab<br>
|
||||||
Standard: -, gültige Werte: Dezimalzahl<br><br>
|
Standard: -, gültige Werte: Dezimalzahl<br><br>
|
||||||
</li>
|
</li>
|
||||||
<li>toggletostate<br>
|
<li>toggletostate<br>
|
||||||
<b>Funktioniert nur bei auf falling oder rising gesetztem Attribut interrupt</b><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>
|
Wenn auf "yes" gestellt wird bei jedem Triggerereignis das <b>state</b> reading invertiert<br>
|
||||||
Standard: no, gültige Werte: yes, no<br><br>
|
Standard: no, gültige Werte: yes, no<br><br>
|
||||||
</li>
|
</li>
|
||||||
<li>pud_resistor<br>
|
<li>pud_resistor<br>
|
||||||
Interner Pullup/down Widerstand<br>
|
Interner Pullup/down Widerstand<br>
|
||||||
Standard: -, gültige Werte: off, up, down<br><br>
|
Standard: -, gültige Werte: off, up, down<br><br>
|
||||||
</li>
|
</li>
|
||||||
<li>debounce_in_ms<br>
|
<li>debounce_in_ms<br>
|
||||||
Wartezeit in ms bis nach ausgelöstem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden<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>
|
Standard: 0, gültige Werte: Dezimalzahl<br><br>
|
||||||
</li>
|
</li>
|
||||||
<li>restoreOnStartup<br>
|
<li>restoreOnStartup<br>
|
||||||
Wiederherstellen der Portzustände nach Neustart<br>
|
Wiederherstellen der Portzust&äuml;nde nach Neustart<br>
|
||||||
Standard: on, gültige Werte: on, off<br><br>
|
Standard: on, gültige Werte: on, off<br><br>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user