FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Gisbert am 06 Februar 2017, 22:51:00

Titel: Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Gisbert am 06 Februar 2017, 22:51:00
Liebe Fhem-Forumsmitglieder,

ich benötige Unterstützung für folgendes Problem.
Ein DOIF überwacht unsere Handys auf Anwesenheit per Lan ping und schaltet demnach ein Dummy an oder aus.
Um das Ganze graphisch auszuwerten, bekommt im Dummy-Device "off" eine 0 und "on" eine 1 zugewiesen.
Um ein schöneres Diagramm zu bekommen, wird jede 2 Minute eine 1 oder 0 in einen logfile geschrieben.
Soweit so gut.
Um 12:43:59 war der letzte Eintrag heute mittag, bevor ich um 12:45 eine shutdown restart gemacht habe.
Seit diesem Zeitpunkt wurden keine neuen Daten in das logfile geschrieben und das Diagramm blieb deshalb auch leer.
Nachdem ich wieder zuhause war und das DOIF mein Handy registriert hat, wurden auch wieder fleißig Werte in den logfile geschrieben.

Mein DOIF ist angefügt.
Damit der Befehl immer ausgeführt wird, wurde das Attribut do always gesetzt.
Um tagsüber alle 2 Minuten einen Eintrag für die Anwesenheit im logfile zu generieren, wurde das Attribut repeatcmd mit 120 Sekunden tagsüber und 20 Minuten nachts gesetzt.
Das funktioniert auch immer bis auf die Situation nach dem Fhem restart.

define Anwesenheit.Zuhause DOIF ([06:30:00-22:30:00] and [Handy1] eq "absent" and [Handy2] eq "absent" and [Handy3] eq "absent" and [Handy4] eq "absent") \
(set Anwesenheit.dum off) \
DOELSEIF ([22:30:01-06:29:59] and [Handy1] eq "absent" and [Handy2] eq "absent" and [Handy3] eq "absent" and [Handy4] eq "absent") \
(set Anwesenheit.dum off) \
DOELSEIF ([06:30:00-22:30:00] and ([Handy1] eq "present" or [Handy2] eq "present" or [Handy3] eq "present" or [Handy4] eq "present")) \
(set Anwesenheit.dum on) \
DOELSEIF ([22:30:01-06:29:59] and ([Handy1] eq "present" or [Handy2] eq "present" or [Handy3] eq "present" or [Handy4] eq "present")) \
(set Anwesenheit.dum on)
attr Anwesenheit.Zuhause do always
attr Anwesenheit.Zuhause repeatcmd 120:1200:120:1200


Die Definition des logfiles:
define FileLog_Smartphone FileLog ./log/Smartphone-%Y-%m.log (Handy1|Handy2|Handy3|Handy4|Anwesenheit.dum):(present|absent|1|0)
attr FileLog_Smartphone createGluedFile 1
attr FileLog_Smartphone logtype text


Die Einträge im logfile werden erst wieder geschrieben, wenn sich der Zustand im DOIF ändert, d.h. in diesem Fall ich wieder zuhause war und mein Handy im Wlan eingebucht wurde.
Hier noch ein paar Zeilen aus meinem logfile; man bemerke die Lücke zwischen 12:43:59 und 21:22:43.
2017-02-06_12:37:59 Anwesenheit.dum 1
2017-02-06_12:39:59 Anwesenheit.dum 1
2017-02-06_12:41:59 Anwesenheit.dum 1
2017-02-06_12:43:59 Anwesenheit.dum 1
2017-02-06_21:22:43 Anwesenheit.dum 1
2017-02-06_21:22:43 Handy1 present
2017-02-06_21:24:43 Anwesenheit.dum 1
2017-02-06_21:26:43 Anwesenheit.dum 1
2017-02-06_21:28:43 Anwesenheit.dum 1
2017-02-06_21:30:44 Anwesenheit.dum 1
2017-02-06_21:32:44 Anwesenheit.dum 1


Hat irgendwer eine Idee, was ich machen könnte, dass der Zustand Anwesenheit.dum 1 nach einem Fhem restart ins logfile geschrieben wird, ohne dass eine Zustandsänderung bei einem eingewählten Handy eintritt?

Viele Grüße
Gisbert
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Ellert am 06 Februar 2017, 23:32:48
Dann könntest Du den Zweig mit der Zeitspanne in der Du anwesend bist und den Neustart ausführst  mit

or [global:"INITIALIZED"] ergänzen.

siehe global (https://fhem.de/commandref_DE.html#global) unter Events
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Gisbert am 07 Februar 2017, 07:59:19
Hallo Ellert,

ich hab's ausprobiert, und es scheint zu funktionieren, hab's aber mit and statt or kombiniert. Ich werde das mal die nächsten Tage im Auge behalten.

Müsste es aber nicht so heißen?
and [global:"INITIALIZED"]
Mit or ist die Bedingung ja immer erfüllt, egal ob Handys eingebucht sind oder nicht.

Viele Grüße
Gisbert
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Per am 07 Februar 2017, 11:01:22
Warum setzt du einen Dummy statt den Status (cmdState (https://fhem.de/commandref_DE.html#DOIF_Reine_Statusanzeige_ohne_Ausfuehrung_von_Befehlen)) des DOIF direkt zu nutzen?
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Gisbert am 07 Februar 2017, 20:52:27
Hallo Per,

ich nutzte den state des Anwesenheit-Dummies noch für weitere Schaltungen. Insofern glaube, dass es Sinn macht einen Dummy dafür zu haben.

Ich hab versucht das Attribut cmdState zu verstehen, was mir aber nicht gelungen ist. Weiterhin ist mir unklar, wie ich daraus eine Grafik erstellen kann. Kann man denn aus den Readings eines Doifs einen logfile befüllen?
Vielleicht kannst Du mir ein konkretes Beispiel für die Anwendung des cmdState geben.

Viele Grüße
Gisbert
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Gisbert am 08 Februar 2017, 07:36:40
Hallo Ellert,

zu früh gefreut. Mit and [global:"INITIALIZED"] wird zwar fleißig in den logfile geschrieben nach einem restart, aber das unabhängig davon, ob nun Handys eingebucht sind oder nicht.

Ich hab's mit "and" verknüpft, da diese Bedingung​ zu den anderen Bedingung​en dazukommen soll. Mit "or" erschien es mir nicht sinnvoll, werde es aber auch noch ausprobieren.

Viele Grüße
Gisbert

Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Gisbert am 08 Februar 2017, 08:01:00
Hallo Ellert,

mit or [global:"INITIALIZED"] geht es auch nicht, d.h. es tritt keine Änderung beim Anwesenheits-Dummy ein, wenn alle Handys abwesend sind oder wieder eins eingebucht wird.

Viele Grüße Gisbert
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Ellert am 08 Februar 2017, 11:40:06
Dann versuche

<Bedingung> or <Bedingung> and ["global:INITIALITED"]

für alle Bedingungszweige

Zitatich nutzte den state des Anwesenheit-Dummies noch für weitere Schaltungen. Insofern glaube, dass es Sinn macht einen Dummy dafür zu haben.
state des DOIF ist genauso gut
ZitatIch hab versucht das Attribut cmdState zu verstehen, was mir aber nicht gelungen ist. Weiterhin ist mir unklar, wie ich daraus eine Grafik erstellen kann. Kann man denn aus den Readings eines Doifs einen logfile befüllen?
Vielleicht kannst Du mir ein konkretes Beispiel für die Anwendung des cmdState geben.

Mit
cmdState off|off|on|on
hat das DOIF den gleichen Status wie Anwesenheit.dum.

Was ist daran schwer zu verstehen?

ZitatDer Status des Moduls wird standardmäßig mit cmd_1, cmd_2, usw., bzw. cmd1_1 cmd1_2 usw. für Befehlssequenzen belegt. Dieser lässt sich über das Attribut "cmdState" mit Komma bzw. | getrennt umdefinieren
Titel: Antw:Logfile eines durch ein DOIF gesteuerten Dummies bleibt nach Fhem restart leer
Beitrag von: Gisbert am 10 Februar 2017, 12:32:58
Hallo Ellert,
hallo Per,

nochmlas vielen Dank für eure Unterstützung. Ich hab bei der ganzen Sache mal wieder etwas dazu gelernt.
Ich möchte noch ein Feedback geben.
Egal wie ich es mit <Bedingung> or <Bedingung> and ["global:INITIALITED"] versucht habe, es hat nicht funktioniert, d.h. nach einem shutdown restart gab es keine Zustandsänderung im DOIF und folglich wurde nichts in den logfile geschrieben.

Ich hab eine Lösung gefunden, die aber weniger elegant ist.
Sie hängt mit den Attributen der Handys ab; hier hatte ich den folgendes Attribute gesetzt:
attr Handy1 event-on-change-reading state
Da sich nach einem Restart an der Anmeldung des Handys am Wlan nichts geändert hat, wurde auch im DOIF keine Zustandsänderung ausgelöst.
Ohne event-on-change-reading ändert sich der Status des Handys laufend und das DOIF schreibt laufend Einträge in den logfile, auch nach einem restart.

Viele Grüße Gisbert