Aus Logdatei dummy-Status aktualiseren

Begonnen von NeuFehm, 11 März 2017, 01:25:19

Vorheriges Thema - Nächstes Thema

NeuFehm

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
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

KernSani

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?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

NeuFehm

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?
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul

KernSani

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");
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

NeuFehm

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
Raspberry Pi B+
RS 485 Schnittstellen: DIGITUS DA-70157, LINKSPTITE RS485/GPIO Shield for Raspberry Pi
RS485 Geräte: Ultraschallsensor für Zisternenfüllstand (Eigenbau), 4x8 Relais-M-Mastermodule (Eigenbau), 6 T-Module (Schalter und 3 analoge Eingänge) (Eigenbau)
sonstige Hardware: 2 Relay Modul