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?
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
}