FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: Meikel1972 am 21 November 2015, 15:12:27

Titel: RPII2C Werte lesen vom Adruino Uno
Beitrag von: Meikel1972 am 21 November 2015, 15:12:27
Hallo,

ich habe meinen Raspberry mit einem Adruino Uno über I2C verbunden. Der
Adruino hängt am I2C Bus 1 und hat die Adresse 0x04 und liefert mir folgende
Zustandswerte von meinem Garagentor:

0  -> Tor öffnet oder schließt gerade
1  -> Tor geschlossen
2  -> Tor geöffnet
3  -> Illegaler Zustand

Ich frage den Zustand aller 30 Sekunden mit folgenden Kommando ab:

define Tor_check at +*00:00:30 get I2C_BUS_01 read 4

Die Übertragung klappt. Im log befinden sich folgende Einträge:

2015.11.21 14:26:34 3: Tor_check: received : 1  |  transmission: Ok
2015.11.21 14:27:04 3: Tor_check: received : 2  |  transmission: Ok
2015.11.21 14:27:34 3: Tor_check: received : 0  |  transmission: Ok
2015.11.21 14:28:04 3: Tor_check: received : 3  |  transmission: Ok

In "Tor_check:STATE"  ist der nächste Zeitpunkt wann "get I2C_BUS_01 read 4"
wird der nächste Zeitpunkt z.B. 14:28:34 zurückgeben. Ich möchte aber das
der zurückgegebene Wert der "get I2C_BUS_01 read 4"  Funktion
in "Tor_check:STATE" gespeichert wird.

Bin um jede Hilfe dankbar! Kann mir jemand helfen?
   
Titel: Antw:RPII2C Werte lesen vom Adruino Uno
Beitrag von: klausw am 06 Januar 2016, 12:49:21
anstelle vonget I2C_BUS_01 read 4
das im DEF deines at einfügen:
{
my $new = fhem("get I2C_BUS_01 read 4"); #Wert auslesen
if ($new =~ /Ok$/ ) { #ueberpruefen of Uebertragung fehlerfrei
$new =~ s/[^\d]//g; #wenn ja, dann die Zahl extrahieren
} else { #wenn nein, Variable auf error setzen
$new = "error";
}
fhem("setreading Tor_check state $new"); #Reading aktualisieren
}


sollte gehen

oder wenn du Klartext haben willst:
{
my %stats = (
'0' => 'Tor öffnet oder schließt gerade',
'1' => 'Tor geschlossen',
'2' => 'Tor geöffnet',
'3' => 'Illegaler Zustand',
'4' => 'error'
);

my $new = fhem("get I2C_BUS_01 read 4"); #Wert auslesen
if ($new =~ /Ok$/ ) { #ueberpruefen of Uebertragung fehlerfrei
$new =~ s/[^\d]//g; #wenn ja, dann die Zahl extrahieren
} else { #wenn nein, Variable auf error setzen
$new = 4;
}
fhem("setreading Tor_check state $stats{$new}"); #Reading aktualisieren
}