FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: NeuFehm am 11 März 2017, 01:25:19

Titel: Aus Logdatei dummy-Status aktualiseren
Beitrag von: NeuFehm am 11 März 2017, 01:25:19
Ein Cron-Job führt ein Python aus und misst regelmäßig den Zisternenstand und schreibt ihn in ein log.
In Fhem greife ich für ein Diagramm dieses log ab.
Nun hätte ich aber gern noch die Möglichkeit eine eMail zu versenden, wenn der Füllstand zu gering ist.

Ich weiß nur wie man einen Stauts "überwacht" und auch wie man eine eMail sendet, aber nicht, wie ich aus einem Log eine Stauts generiere.
Kann mir jemand die Richtung geben?
LG Mirko
Titel: Antw:Aus Logdatei dummy-Status aktualiseren
Beitrag von: KernSani am 11 März 2017, 08:40:54
Das Log an sich kann meines Wissens keine Events generieren... kannst du nicht aus deinem Python script z.B. noch einen Dummy befülllen und darauf reagieren?
Titel: Antw:Aus Logdatei dummy-Status aktualiseren
Beitrag von: NeuFehm am 11 März 2017, 10:59:52
Kann man von Fhem aus auch ein script auf Systemebene ausführen?
Da könnte ich ja Fhem veranlassen, das Script auszuführen und gebe Fhem einen Rückgabewert, also den Zisternenfüllstand...

Ich müsste dann wahrscheinlich die Rechte des Scriptes auch Fhem erlauben...

Das Script könnte ich dann als classdef auch in perl schreiben...

--------
Dein Weg: Wie kann man vom System aus einen dummy befüllen?
Gibt es da sowas wie: fhem.import.pl DEVICENAME DEVICESTATUS
oder wie muss man das machen?
Titel: Aus Logdatei dummy-Status aktualiseren
Beitrag von: KernSani am 11 März 2017, 11:33:01
Geht beides. Aof OS Ebene sowas:
perl /opt/fhem/fhem.pl 7072 "set <dummy> <value>"

In perl (z.B. MyUtils):

my $value=qw("python zisterne.py");
Titel: Antw:Aus Logdatei dummy-Status aktualiseren
Beitrag von: justme1968 am 11 März 2017, 11:36:51
ausführen geht. einfach per at "..." shell code ausführen.

aber das läuft asynchron und im hintergrund und du kannst keinen wert zurückgeben.

das synchrone und blockierende ausführen ist normalerweise nicht sinnvoll.

du kannst aber einfach am ende deines scripts wieder fhem.pl ... set ... aufrufen um einen wert zu setzen
Titel: Antw:Aus Logdatei dummy-Status aktualiseren
Beitrag von: NeuFehm am 15 März 2017, 10:02:48
Huch, da habe ich es wahrscheinlich zu umständlich realisiert:
Ich habe einem vorhanden ECMD-Device:
define mytermo ECMD serial /dev/ttyAMA0@9600
attr mytermo classdefs mytermodev=/opt/fhem/temp.classdef
attr mytermo partial 2

eine Codeerweiterung der Classdef aufgedrückt:

set ZS cmd {}
set ZS postproc {my $logfile = "/share/zisterne.log";;\
    my $last_line = `tail -1 $logfile`;;\
    $_ = $last_line ;;\
    $_ =~ /.*Zisterne Fuellmenge: (.*)/;;\
    $_ = $1;;}

und habe dann das eigentliche device? angelegt:
#Zisterne letzten Stand
define Zisternenstand1 ECMDDevice mytermodev \000
attr Zisternenstand1 IODev mytermo
attr Zisternenstand1 room Terasse

define Zisternenabfrage at +*00:15 set Zisternenstand1 ZS


Und siehe Bild, ich habe den aktuellen Zisternenstand