[gelöst] Für DOIF ein LogFile?

Begonnen von curt, 06 Mai 2019, 19:26:41

Vorheriges Thema - Nächstes Thema

curt

Hallo allerseits,

mein allererstes DOIF ... gegeben sei eine eigene Wetterstation und ein Mover, also ein Rasenmähroboter. Ziel der Übung: Wenn es anfängt zu regnen einen Befehl an Movie senden: "Movie! Gaaaanz schnell nach Hause laufen!"

define Movie_Regen DOIF ([ws980wifi:rainRate] >= 0.5) (set Movie feierabend)

FHEM hat jedenfalls nicht genörgelt, als ich das (ich war artig: über die Web-Kommandozeile) eingab. Aber ob das funktioniert? Da wäre ja ein FileLog für Movie_Regen ganz nett ...

Frage:
Wie baut man denn ein FileLog, welches nur protokolliert, wenn via DOIF der Befehl "Movie! Gaaaanz schnell nach Hause laufen!" gesendet wird?

Ich habe keine Idee, wie das geht, ob das überhaupt geht.
RPI 4 - Jeelink HomeMatic Z-Wave

Ellert

DOIF liefert bei der Ausführung von Befehlen Events. Du könntest im Eventmonitor ein Event markieren, das der Ausführung des Befehls entspricht und ein FileLog damit erzeugen.

curt

@Ellert
Danke das Du mir antwortest. Leider habe ich die Antwort nicht vollständig verstanden.

Ich startete den Eventmonitor, gab als Filter Movie.* ein und begab mich in den Garten um der Wetterstation vermittels einer Tasse Regen vorzuspielen. Das Ergebnis im Eventmonitor ist


2019-05-07 17:55:35 Robonect Movie feierabend
2019-05-07 17:55:35 DOIF Movie_Regen cmd_nr: 1
2019-05-07 17:55:35 DOIF Movie_Regen cmd: 1
2019-05-07 17:55:35 DOIF Movie_Regen cmd_event: ws980wifi
2019-05-07 17:55:35 DOIF Movie_Regen cmd_1
2019-05-07 17:56:04 Robonect Movie allgemein-status: suche-base
2019-05-07 17:56:04 Robonect Movie suche-base


Mich erstaunt die Reihenfolge, ich hätte "feierabend" erst nach cmd_event erwartet. Aber egal, ich muss auch nicht alles verstehen.

Es geht wohl um diese Zeile:

2019-05-07 17:55:35 DOIF Movie_Regen cmd_event: ws980wifi


Aber wie kommt die nun in ein Log? Normalerweise nimmt man ja event-on*. Für dieses DOIF habe ich schon ein Log angelegt. Aber das wird natürlich nicht gefüllt und ist vielleicht auch falsch gedacht.

Raw sieht das alles so aus (setuuid hier nicht zitiert):

define Movie_Regen DOIF ([ws980wifi:rainRate] >= 0.5) (set Movie feierabend)
attr Movie_Regen room 15 Movie,99 System

define FileLog_Movie_Regen FileLog ./log/Movie_Regen-%Y.log Movie_Regen
attr FileLog_Movie_Regen logtype text
attr FileLog_Movie_Regen room Alle_Logs

RPI 4 - Jeelink HomeMatic Z-Wave

amenomade

Zitat von: curt am 07 Mai 2019, 21:23:51

Es geht wohl um diese Zeile:

2019-05-07 17:55:35 DOIF Movie_Regen cmd_event: ws980wifi


Im EventMonitor diese Zeile markieren, und oben auf "Create/modify device" klicken, dann in der Liste "Filelog" auswählen. Andere Optionen nach Bedarf anpassen, und auf "OK" drucken.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Bartimaus

Und "createlog <Name des DOIF> ?
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

amenomade

#5
createlog geht auch, aber loggt alles vom Device, nicht nur das gewünschte Event.

Wenn ich aber das ganze Thread wieder lese, sollte curt schon so eine Log haben: FileLog_Movie_Regen
Warum die Logfile nicht geschrieben wird kann ich so nicht sagen. Vielleicht würde man mit verbose 5 auf dem DOIF in der fhem Log besser sehen. Ein Berechtigungsproblem?

@curt: bitte ein "list" von Movie_Regen und von FileLog_Movie_Regen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

curt

Zitat von: amenomade am 08 Mai 2019, 10:55:26
Wenn ich aber das ganze Thread wieder lese, sollte curt schon so eine Log haben: FileLog_Movie_Regen

Ja, das hatte ich kurz zuvor angelegt - aber einfach nur angelegt. Wie man halt so ein Filelog für eine Device anlegt. (Dabei war mir nicht klar, dass das schon reicht.)

Zitat von: amenomade am 08 Mai 2019, 10:55:26
Warum die Logfile nicht geschrieben wird kann ich so nicht sagen.

Weil es nicht geregnet hat ... ich bin vorhin wieder mit einer Tasse Wasser zur Wetterstation und habe es regnen lassen. Und siehe da:

Movie_Regen-2019.log

2019-05-08_22:19:05 Movie_Regen cmd_nr: 1
2019-05-08_22:19:05 Movie_Regen cmd: 1
2019-05-08_22:19:05 Movie_Regen cmd_event: ws980wifi
2019-05-08_22:19:05 Movie_Regen cmd_1
2019-05-08_22:29:05 Movie_Regen cmd_nr: 2
2019-05-08_22:29:05 Movie_Regen cmd: 2
2019-05-08_22:29:05 Movie_Regen cmd_event: ws980wifi
2019-05-08_22:29:05 Movie_Regen cmd_2


Sehr schön, da wird was ins Log geschrieben. Aber - was ist nun 1 und was 2? Wie kriege ich das denn raus?
RPI 4 - Jeelink HomeMatic Z-Wave

amenomade

Zitatwas ist nun 1 und was 2?
Der Zustand des DOIFS, ob er im 1. oder 2. Zweig sich befindet.
ZitatWie kriege ich das denn raus?
Indem Du in der DEF des Filelog-Devices spezifischer wirst, wie oben beschrieben https://forum.fhem.de/index.php/topic,100300.msg937781.html#msg937781
Damit kriegst Du durch EventMonitor die genauere Regex, die in DEF muss.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

curt

@amenomade
Das war eine schwere Geburt, ich mache das ja zum ersten Mal. Irgendwann hatte ich es, leider noch mit der falschen Zeile. Das wird morgen korrigiert. Herzlichen Dank!

Eins habe ich aber noch nicht völlig verstanden, darf ich bitte noch etwas zu DOIF fragen?

Ich habe doch diese Konstruktion hier:

define Movie_Regen DOIF ([ws980wifi:rainRate] >= 0.5) (set Movie feierabend)


Was diese Konstruktion bedeutet ist mir in Teilen klar. Du sprachest nun vom ersten und zweiten Pfad. MAn kann ja offenbar ein DOELSEIF und eine weitere Option anhängen, also beispielsweise "DOELSEIF (set Movie weitermähen)". Das schien mir sinnlos, da es ja immer 0 ist wenn es nicht regnet. Kann es sein, dass ich das falsch verstand? Kann es sein, dass  der DOELSEIF-Zweig nur dann ausgeführt wird, wenn der fragliche Parameter unter 0.5 sinkt?.

Falls das so ist, wäre das ja spannend, da kann ich dem Mover ja sagen, dass er weitermachen soll. Aber leider ist das Gras noch nass. Frage: Kriegt man das mit Lastenzzeit hin? Also "nach einer Stunde set Movie weitermaehen" oder so?
RPI 4 - Jeelink HomeMatic Z-Wave

Tedious

Noch ein Tip aus einer anderen Sichtweise - für Dinge die Dir wichtig sind könntest Du das Modul Telegram nutzen. Ich lass mir für die wichtigen Dinge die per DOIF gesteuert werden als Bestätigung eine Telegram Message aufs Handy schicken. Denn hast Du eine direkte Bestätigung.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

amenomade

#10
Steht im CommandREF:
ZitatSoll bei Nicht-Erfüllung aller Bedingungen ein Zustandswechsel erfolgen, so muss man ein DOELSE am Ende der Definition anhängen. Ausnahme ist eine einzige Bedingung ohne do always, wie im obigen Beispiel, hierbei wird intern ein virtuelles DOELSE angenommen, um bei Nicht-Erfüllung der Bedingung einen Zustandswechsel in cmd_2 zu provozieren, da sonst nur ein einziges Mal geschaltet werden könnte, da das Modul aus dem cmd_1-Zustand nicht mehr herauskäme.
Und ja, der wechselt auf dieses implizite DOELSE sobald es unter 0.5 ist.

Um weiter zu Mähen, würde ich so machen (das ist aber kein muss..., ein einfaches DOIF wie am Anfang reicht. Es sei denn, du möchtest komplexere Aufgaben erledigen, dann bitte beschreiben):

define Movie_Regen DOIF ([ws980wifi:rainRate] >= 0.5) (set Movie feierabend) DOELSE (set Movie weitermähen)
attr Movie_Regen wait 0:3600

Hier hilft es auch, CommandRef zu lesen.

Du kannst auch überlegen, ob es vielleicht nicht besser so wäre:
define Movie_Regen DOIF ([ws980wifi:rainRate] == 0) (set Movie weitermähen) DOELSE (set Movie feierabend)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

curt

@amenomade
Sehr herzlichen Dank - das meiste habe ich verstanden.

Das attr wait - wirkt das auf beide Zweige? Idealerweise soll der Mover bei Regen sofort zur Garage fahren. Wenn es aufhört zu regnen soll er aber noch eine Stunde warten (damit das Gras noch etwas abtrocknet).
RPI 4 - Jeelink HomeMatic Z-Wave

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

curt

Ahhh - jetzt! (Die Stelle fand ich nicht in der commandref.)
Alles verstanden.

Wenn ich meinen goldenen Papporden "Freundlicher Helfer des Tages" hier verleihen könnte und dürfte: Du würdest ihn heute erhalten - herzlichen Dank!
RPI 4 - Jeelink HomeMatic Z-Wave