mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-05 17:48:44 +00:00
modified commandref
git-svn-id: https://svn.fhem.de/fhem/trunk@5358 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
56be2bfd99
commit
8124494a31
@ -32,7 +32,7 @@ sub RPII2C_Initialize($) {
|
|||||||
# Provider
|
# Provider
|
||||||
$hash->{Clients} = join (':',@clients);
|
$hash->{Clients} = join (':',@clients);
|
||||||
#$hash->{WriteFn} = "RPII2C_Write"; #wird vom client per IOWrite($@) aufgerufen
|
#$hash->{WriteFn} = "RPII2C_Write"; #wird vom client per IOWrite($@) aufgerufen
|
||||||
$hash->{I2CWrtFn} = "RPII2C_Write"; #zum testen als alternative für IOWrite
|
$hash->{I2CWrtFn} = "RPII2C_Write"; #zum testen als alternative für IOWrite
|
||||||
|
|
||||||
# Normal devices
|
# Normal devices
|
||||||
$hash->{DefFn} = "RPII2C_Define";
|
$hash->{DefFn} = "RPII2C_Define";
|
||||||
@ -54,7 +54,7 @@ sub RPII2C_Define($$) { #
|
|||||||
Log3 undef, 2, $msg;
|
Log3 undef, 2, $msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
if(-e $gpioprg) { #I2C Devices für FHEM User lesbar machen
|
if(-e $gpioprg) { #I2C Devices für FHEM User lesbar machen
|
||||||
if(-x $gpioprg) {
|
if(-x $gpioprg) {
|
||||||
if(-u $gpioprg) {
|
if(-u $gpioprg) {
|
||||||
my $exp = $gpioprg.' load i2c';
|
my $exp = $gpioprg.' load i2c';
|
||||||
@ -148,12 +148,12 @@ sub RPII2C_Set($@) { #writeBlock noch nicht fertig
|
|||||||
my @sets = ('writeByte', 'writeByteReg', 'writeBlock'); #, 'writeNBlock');
|
my @sets = ('writeByte', 'writeByteReg', 'writeBlock'); #, 'writeNBlock');
|
||||||
return "Unknown argument $type, choose one of " . join(" ", @sets) if @a < 2;
|
return "Unknown argument $type, choose one of " . join(" ", @sets) if @a < 2;
|
||||||
|
|
||||||
foreach (@a) { #Hexwerte prüfen und in Dezimalwerte wandeln
|
foreach (@a) { #Hexwerte prüfen und in Dezimalwerte wandeln
|
||||||
return "$name: $_ is no 1byte hexadecimal value" if $_ !~ /^(0x|)[0-9A-F]{1,2}$/xi ;
|
return "$name: $_ is no 1byte hexadecimal value" if $_ !~ /^(0x|)[0-9A-F]{1,2}$/xi ;
|
||||||
$_ = hex;
|
$_ = hex;
|
||||||
}
|
}
|
||||||
my $i2ca = shift @a;
|
my $i2ca = shift @a;
|
||||||
return "$name: I2C Address not valid" unless ($i2ca > 3 && $i2ca < 128); #prüfe auf Hexzahl zwischen 4 und 7F
|
return "$name: I2C Address not valid" unless ($i2ca > 3 && $i2ca < 128); #prüfe auf Hexzahl zwischen 4 und 7F
|
||||||
|
|
||||||
my $i2chash = { i2caddress => $i2ca, direction => "i2cwrite" };
|
my $i2chash = { i2caddress => $i2ca, direction => "i2cwrite" };
|
||||||
my ($reg, $nbyte, $data) = undef;
|
my ($reg, $nbyte, $data) = undef;
|
||||||
@ -185,7 +185,7 @@ sub RPII2C_Set($@) { #writeBlock noch nicht fertig
|
|||||||
$i2chash->{nbyte} = $nbyte if defined($nbyte);
|
$i2chash->{nbyte} = $nbyte if defined($nbyte);
|
||||||
$i2chash->{data} = $data if defined($data);
|
$i2chash->{data} = $data if defined($data);
|
||||||
RPII2C_HWACCESS($hash, $i2chash);
|
RPII2C_HWACCESS($hash, $i2chash);
|
||||||
undef $i2chash; #Hash löschen
|
undef $i2chash; #Hash löschen
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
##################################### fertig?
|
##################################### fertig?
|
||||||
@ -209,7 +209,7 @@ sub RPII2C_Get($@) { #
|
|||||||
my $status = RPII2C_HWACCESS($hash, $i2chash);
|
my $status = RPII2C_HWACCESS($hash, $i2chash);
|
||||||
#my $received = join(" ", @{$i2chash->{received}}); #als Array
|
#my $received = join(" ", @{$i2chash->{received}}); #als Array
|
||||||
my $received = $i2chash->{received}; #als Scalar
|
my $received = $i2chash->{received}; #als Scalar
|
||||||
undef $i2chash; #Hash löschen
|
undef $i2chash; #Hash löschen
|
||||||
return "$received transmission: $status";
|
return "$received transmission: $status";
|
||||||
}
|
}
|
||||||
return undef;
|
return undef;
|
||||||
@ -235,7 +235,7 @@ sub RPII2C_Write($$) { #wird vom Client aufgerufen
|
|||||||
my $chash = $main::defs{$d};
|
my $chash = $main::defs{$d};
|
||||||
Log3 $hash, 5, "$name ->Client gefunden: $d". ($main::defs{$d}{I2C_Address} ? ", I2Caddress: $main::defs{$d}{I2C_Address}":"") . ($clientmsg->{data} ? " Data: $clientmsg->{data}" : "");
|
Log3 $hash, 5, "$name ->Client gefunden: $d". ($main::defs{$d}{I2C_Address} ? ", I2Caddress: $main::defs{$d}{I2C_Address}":"") . ($clientmsg->{data} ? " Data: $clientmsg->{data}" : "");
|
||||||
CallFn($d, "I2CRecFn", $chash, $clientmsg);
|
CallFn($d, "I2CRecFn", $chash, $clientmsg);
|
||||||
undef $clientmsg #Hash löschen nachdem Daten verteilt wurden
|
undef $clientmsg #Hash löschen nachdem Daten verteilt wurden
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return undef;
|
return undef;
|
||||||
@ -267,7 +267,7 @@ sub RPII2C_HWACCESS($$) {
|
|||||||
last if $inh != 0;
|
last if $inh != 0;
|
||||||
$status = "Ok" if $inh == 0;
|
$status = "Ok" if $inh == 0;
|
||||||
}
|
}
|
||||||
#hier Mehrfachbeschreibung eines Registers noch entfernen und dafür Bereich mit Registeroperationen beschreiben
|
#hier Mehrfachbeschreibung eines Registers noch entfernen und dafür Bereich mit Registeroperationen beschreiben
|
||||||
} elsif (defined($clientmsg->{reg}) && defined($clientmsg->{data}) && $clientmsg->{direction} eq "i2cwrite") { #Register beschreiben
|
} elsif (defined($clientmsg->{reg}) && defined($clientmsg->{data}) && $clientmsg->{direction} eq "i2cwrite") { #Register beschreiben
|
||||||
my @data = split(" ", $clientmsg->{data});
|
my @data = split(" ", $clientmsg->{data});
|
||||||
foreach (@data) {
|
foreach (@data) {
|
||||||
@ -296,8 +296,8 @@ sub RPII2C_HWACCESS($$) {
|
|||||||
$rmsg .= " " if $n <= $nbyte;
|
$rmsg .= " " if $n <= $nbyte;
|
||||||
$status = "Ok" if ($n + 1) == $nbyte;
|
$status = "Ok" if ($n + 1) == $nbyte;
|
||||||
}
|
}
|
||||||
#@{$clientmsg->{received}} = split(" ", $rmsg) if($rmsg); #Daten als Array übertragen
|
#@{$clientmsg->{received}} = split(" ", $rmsg) if($rmsg); #Daten als Array übertragen
|
||||||
$clientmsg->{received} = $rmsg if($rmsg); #Daten als Scalar übertragen
|
$clientmsg->{received} = $rmsg if($rmsg); #Daten als Scalar übertragen
|
||||||
} elsif ($clientmsg->{direction} eq "i2cread") { #Byte lesen
|
} elsif ($clientmsg->{direction} eq "i2cread") { #Byte lesen
|
||||||
my $nbyte = defined($clientmsg->{nbyte}) ? $clientmsg->{nbyte} : 1;
|
my $nbyte = defined($clientmsg->{nbyte}) ? $clientmsg->{nbyte} : 1;
|
||||||
my $rmsg = "";
|
my $rmsg = "";
|
||||||
@ -309,8 +309,8 @@ sub RPII2C_HWACCESS($$) {
|
|||||||
$rmsg .= " " if $n <= $nbyte;
|
$rmsg .= " " if $n <= $nbyte;
|
||||||
$status = "Ok" if ($n + 1) == $nbyte;
|
$status = "Ok" if ($n + 1) == $nbyte;
|
||||||
}
|
}
|
||||||
#@{$clientmsg->{received}} = split(" ", $rmsg) if($rmsg); #Daten als Array übertragen
|
#@{$clientmsg->{received}} = split(" ", $rmsg) if($rmsg); #Daten als Array übertragen
|
||||||
$clientmsg->{received} = $rmsg if($rmsg); #Daten als Scalar übertragen
|
$clientmsg->{received} = $rmsg if($rmsg); #Daten als Scalar übertragen
|
||||||
}
|
}
|
||||||
$hash->{STATE} = $status;
|
$hash->{STATE} = $status;
|
||||||
$hash->{ERRORCNT} = defined($hash->{ERRORCNT}) ? $hash->{ERRORCNT} += 1 : 1 if $status ne "Ok";
|
$hash->{ERRORCNT} = defined($hash->{ERRORCNT}) ? $hash->{ERRORCNT} += 1 : 1 if $status ne "Ok";
|
||||||
@ -353,7 +353,8 @@ sub RPII2C_HWACCESS($$) {
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
To access the I2C-Bus the Device::SMBus module is necessary:<br>
|
To access the I2C-Bus the Device::SMBus module is necessary:<br>
|
||||||
<code>sudo cpan Device::SMBus</code><br>
|
<code>sudo apt-get install libmoose-perl<br>
|
||||||
|
sudo cpan Device::SMBus</code><br>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="RPII2CDefine"></a><br>
|
<a name="RPII2CDefine"></a><br>
|
||||||
@ -439,7 +440,7 @@ sub RPII2C_HWACCESS($$) {
|
|||||||
<li>
|
<li>
|
||||||
Dieses Modul nutzt das gpio Utility der <a href="http://wiringpi.com/download-and-install/">WiringPi</a> Bibliothek um FHEM Schreibrechte auf die I2C Schnittstelle zu geben.<br>
|
Dieses Modul nutzt das gpio Utility der <a href="http://wiringpi.com/download-and-install/">WiringPi</a> Bibliothek um FHEM Schreibrechte auf die I2C Schnittstelle zu geben.<br>
|
||||||
WiringPi Installation ist hier beschrieben: <a href="#RPI_GPIO">RPI_GPIO</a><br>
|
WiringPi Installation ist hier beschrieben: <a href="#RPI_GPIO">RPI_GPIO</a><br>
|
||||||
Für andere Systeme (BeagleBone, etc.) oder auch für das Raspberry kann auf WiringPi verzichtet werden. In diesem Fall müssen die Dateien <code>/dev/i2c-x</code> Schreib-/Leserechte, für den User unter dem FHEM läuft, gesetzt bekommen. (z.B. in der etc/init.d/fhem)<br>
|
Für andere Systeme (BeagleBone, etc.) oder auch für das Raspberry kann auf WiringPi verzichtet werden. In diesem Fall müssen die Dateien <code>/dev/i2c-x</code> Schreib-/Leserechte, für den User unter dem FHEM läuft, gesetzt bekommen. (z.B. in der etc/init.d/fhem)<br>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Installation der I2C Abhängigkeiten:<br>
|
Installation der I2C Abhängigkeiten:<br>
|
||||||
@ -457,7 +458,8 @@ sub RPII2C_HWACCESS($$) {
|
|||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Desweiteren ist das Perl Modul Device::SMBus für den Zugrff auf den I2C Bus notwendig:<br>
|
Desweiteren ist das Perl Modul Device::SMBus für den Zugrff auf den I2C Bus notwendig:<br>
|
||||||
<code>sudo cpan Device::SMBus</code><br>
|
<code>sudo apt-get install libmoose-perl<br>
|
||||||
|
sudo cpan Device::SMBus</code><br>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="RPII2CDefine"></a><br>
|
<a name="RPII2CDefine"></a><br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user