FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: TWART016 am 20 Juli 2017, 23:15:29

Titel: [gelöst] Benachrichtigung bei Dienständerung
Beitrag von: TWART016 am 20 Juli 2017, 23:15:29
Hallo,

ich möchte mir eine Benachrichtigung senden lassen, wenn ein Windows Dienst sich beendet, und die runtime von PC über 2 Minuten beträgt. Mein DOIF sendet jedoch, sobald der PC 3 Minuten läuft. Wie muss mein DOIF oder sonstiges Device aussehen?

([WinPCT:service_NoIPDUCService4] eq "Running" and [WinPCT:os_RunTime_minutes] > 2) (set Telegram msg Der Dienst DUC wurde gestartet)


Gruß
TWART016
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: Otto123 am 21 Juli 2017, 00:04:25
Hi,

was liefert denn [WinPCT:os_RunTime_minutes] ? 2 min oder 2.0 min?
> 2 ist nun mal erst 3.
Falls der Wert von [WinPCT:os_RunTime_minutes] 2.x kannst Du auf >2.0 testen. Das sollte dann bei 2.1 ansprechen.
Ansonsten wäre > 1 in dem Moment wo [WinPCT:os_RunTime_minutes] = 2 wird :)

Gruß Otto
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: nils_ am 21 Juli 2017, 08:16:07
also irgendwie passt deine beschreibung nicht zu dem geposteten Code

Zitat von: TWART016 am 20 Juli 2017, 23:15:29
ich möchte mir eine Benachrichtigung senden lassen, wenn ein Windows Dienst sich beendet, und die runtime von PC über 2 Minuten beträgt. Mein DOIF sendet jedoch, sobald der PC 3 Minuten läuft. Wie muss mein DOIF oder sonstiges Device aussehen?

Zitat von: TWART016 am 20 Juli 2017, 23:15:29([WinPCT:service_NoIPDUCService4] eq "Running" and [WinPCT:os_RunTime_minutes] > 2) (set Telegram msg Der Dienst DUC wurde gestartet)


ich vermute du möchtest da irgendwas anderes, jedenfalls passt dein code zum verhalten (siehe auch Otto's Erklärung)
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: Ellert am 21 Juli 2017, 08:44:55
Vielleicht gehts mit
Zitat[WinPCT:service_NoIPDUCService4] ne "Running"
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: TWART016 am 23 Juli 2017, 21:40:31
Ich habe noch einen zweiten Code

([WinPCT:service_NoIPDUCService4] eq "Stopped" and [WinPCT:os_RunTime_minutes] > 2) (set Telegram msg Der Dienst DUC wurde gestoppt)

Ich möchte nur eine Benachrichtigung, wenn das Reading von Running auf Stoppped wechselt. Ist das mit DOIF möglich?

os_RunTime_minutes ist eine ganze Zahl, also 2 min.
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: Otto123 am 23 Juli 2017, 22:12:03
Zitat von: TWART016 am 23 Juli 2017, 21:40:31
Ist das mit DOIF möglich?
Ja.  ;)
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: TWART016 am 23 Juli 2017, 23:11:18
Und wie muss da die Syntax aussehen?
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: Otto123 am 23 Juli 2017, 23:38:53
Deine Frage ist eigenartig und Deine Infos spärlich. Keiner weiß was WinPCT:service_NoIPDUCService4 wirklich liefert, wie Events aussehen...
Dein Code sendet Dir eine Nachricht wenn WinPCT:service_NoIPDUCService4 einen Event erzeugt und die Bedingung erfüllt wird. Das macht er einmal solange sich der Zustand der Bedingung nicht ändert. Würde ich zumindest annehmen.
Hast Du ihn probiert und er funktioniert nicht?
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: Per am 25 Juli 2017, 14:18:29
([WinPCT:service_NoIPDUCService4] eq "Stopped" and [$SELF:cmd] == 2) (set Telegram msg Der Dienst DUC wurde gestoppt)
DOELSEIF ([WinPCT:service_NoIPDUCService4] eq "Running")
DOELSE
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: TWART016 am 30 Juli 2017, 14:02:46
WinPCT:service_NoIPDUCService4 steht entweder auf Running oder Stopped.

Zitat von: Per am 25 Juli 2017, 14:18:29
([WinPCT:service_NoIPDUCService4] eq "Stopped" and [$SELF:cmd] == 2) (set Telegram msg Der Dienst DUC wurde gestoppt)
DOELSEIF ([WinPCT:service_NoIPDUCService4] eq "Running")
DOELSE

Mit dem Code werden ganz viele Events gesendet, sobald die Abfrage korrekt ist.

Eigentlich soll nur die Prüfung erfolgen, wenn das Reading service_NoIPDUCService4 sich ändert.
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: Otto123 am 30 Juli 2017, 14:15:30
Ich verstehe Deine Frage leider immer noch nicht.
Zitat von: TWART016 am 30 Juli 2017, 14:02:46
Eigentlich soll nur die Prüfung erfolgen, wenn das Reading service_NoIPDUCService4 sich ändert.
Darauf mein Vorschlag:
define nty_ServiceStopped notify WinPCT:service_NoIPDUCService4.Stopped set Telegram msg Der Dienst DUC wurde gestoppt
Allerdings ist das jetzt nur hingeschrieben, da ich immer noch nicht weiß, welche Events der WinPCT erzeugt.
Also mach bitte den Eventmonitor auf, klicke oben auf .* und schreibe WinPCT davor. Dann stoppst Du den Dienst und siehst den passenden Event. Diese Zeile markierst Du und lässt Dir damit das richtige notify erzeugen. Dann brauchst Du bloß noch den Ausführungsteil zu ergänzen. Die Bedienung vom Eventmonitor ist eigentlich erklärend.

DOIFs kannst Du dort auch erzeugen lassen.

Gruß Otto
Titel: Antw:Benachrichtigung bei Dienständerung
Beitrag von: TWART016 am 31 Juli 2017, 22:13:35
Dann haben ich wieder was gelernt. Notify aus Event Monitor heraus.

In deinem Code hat ein Doppelpunkt gefehlt:
define DUCserviceStarted notify WinPCT:service_NoIPDUCService4:.Stopped {if(ReadingsVal("WinPCT","os_RunTime_minutes","") > 2) {fhem ("set Telegram msg Der Dienst DUC wurde gestoppt " .(substr(FmtTime(time()),0,8) ))} }

Ich dachte das könnte man auch mit DOIF machen.