FHEM Forum

Verschiedenes => Bastelecke => Thema gestartet von: fstefan1960 am 04 Februar 2023, 09:22:22

Titel: FHEM und PiLogger
Beitrag von: fstefan1960 am 04 Februar 2023, 09:22:22
Hallo,

beim Ausrüsten meines Caravan bin ich auf PiLogger gestoßen: www.pilogger.de. Mit diesem HAT für den Raspi können div. Werte wie Spannung, Strom, ein Counter z.B. für Windradumdrehungen sowie Temperatur eingelesen werden.

Ist gar nicht so teuer. Wenn man einen Raspberry Pi 4 nutzt, bitte unbedingt den Thread im Forum (https://www.pilogger.de/index.php/de/forum/allgemein/12-fehlermeldung-fehler-i2cbus-bei-blockread) beachten, da man nach Nutzung der normalen Anleitung immer wieder Lesefehler auf dem 1c2-Bus bekommt und das Programm abbricht.

PiLogger stellt auch einen Webserver mit Statistiken und Grafiken zur Verfügung.

Wie bekommt man die Werte nun nach FHEM?

Um den PiLogger unter FHEM zu nutzen, richtet man in FHEM ein RPII2C-Device ein:
   defmod myI2C RPII2C 1
und ein Dummy für das Ergebnis
  defmod LoggerVolt dummy

Bei dem RPII2C-Device kann man dann zum Beispiel mit dem Befehl
   get myI2C readblockreg 0x48 0x50 2
die beiden Bytes für die aktuelle Spannung auslesen. Dabei ist 0x48 die Adresse des Busses und 0x50 das Register für die aktuelle Spannung (siehe dazu die PiLogger-Anleitung ab S. 65). https://www.pilogger.de/index.php/de/download-de/download/3-documentation/1-handbuch-pilogger-one Analog können auch die anderen Register für Temperatur etc. gelesen werden.

Eine kleine eigene Funktion in der 99_myUtils.pm (wer FHEM nutzt, kennt die hoffentlich) berechnet dann daraus die Spannung:
sub ReadVoltage()
{
my @parts = split(/ /,fhem "get myI2C readblockreg 0x48 0x50 2");
my $Voltage=sprintf("%.2f",  ($parts[3] * 256 + $parts[2]) / 1092.267);
fhem("set LoggerVolt $Voltage V " );
}

Zeile 1 liest die Register vom Bus
Zeile 2 parst das Ergebnis und berechnet aus den zwei Bytes das WORD, das dann durch 1092.267 geteilt wird, um die Voltzahl zu bekommen (Der Teiler stammt aus der PiLogger-Doku) und kürzt es auf 2 Nachkommastellen.
Zeile 3 schreibt das Ergebnis in das Dummy-Device namens LoggerVolt.

Die Funktion kann dann z.B. mit
defmod atLoggerVolt at +*00:01:00 {ReadVoltage()}
jede Minute einmal aufgerufen werden und schreibt das Dummy neu. Damit kann man dann in FHEM alles Weitere anstellen.

Have fun!