FHEM – Analoge Eingänge einlesen

Das Anlegen eines analogen I2C-Eingangsmodules wurde in diesem Beitrag beschrieben
FHEM – I2C-Module anlegen und adressieren.
Hier zeigen wir, wie die einzelnen Analogeingänge definiert und angesprochen werden.

Die Analog-Eingangskarte stellt ihre Messwerte als Byte-Array zur Verfügung.

Byte 1 Zeiger
Byte 2 Analogwert 1 Low Byte
Byte 3 Analogwert 1 High Byte
Byte 4 Analogwert 2 Low Byte
Byte 5 Analogwert 2 High Byte
Byte 6 Analogwert 3 Low Byte
Byte 7 Analogwert 3 High Byte
Byte 8 Analogwert 4 Low Byte
Byte 9 Analogwert 4 High Byte
Byte 10 Analogwert 5 Low Byte
Byte 11 Analogwert 5 High Byte

Die genaue Beschreibung der 5-Kanal Analogkarte I2HAE ist hier beschrieben.
I2C-Analog Input 5 Kanäle 0-10V 10 Bit

Aber jetzt zu FHEM. Wir möchten die Analogwerte alle zwei Sekunden lesen um den PI nicht unnötig zu belasten.
Für zyklische Abfragen kann man in FHEM den Befehl bzw. das Modul AT verwenden.

Diese Zeile legt einen AT an, der alle zwei Sekunden Zeitintervall triggert.

define read_AE at +*00:00:02 .

Um an die Werte zu kommen, müssen 11 Bytes von der Karte gelesen werden.
Das erfolgt über den Befehl “get myI2C readblock 0x08 11”. Aus dem Byte-Array können die einzelnen Messwerte dann berechnet werden.

In dem AT-Modul dann folgende Codezeilen in die DEF kopieren:

+*00:00:02 {
 my @parts = split(/ /,fhem "get myI2C readblock 0x08 11");;
 my $value_1 = $parts[4] * 256 + $parts[3];;
 my $value_2 = $parts[6] * 256 + $parts[5];;
 my $value_3 = $parts[8] * 256 + $parts[7];;
 my $value_4 = $parts[10] * 256 + $parts[9];;
 my $value_5 = $parts[12] * 256 + $parts[11];;
 fhem("set AE08_CH0 $value_1");;
 fhem("set AE08_CH1 $value_2");;
 fhem("set AE08_CH2 $value_3");;
 fhem("set AE08_CH3 $value_4");;
 fhem("set AE08_CH4 $value_5");;
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.