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
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
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)
Vielleicht gehts mit
Zitat[WinPCT:service_NoIPDUCService4] ne "Running"
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.
Und wie muss da die Syntax aussehen?
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?
([WinPCT:service_NoIPDUCService4] eq "Stopped" and [$SELF:cmd] == 2) (set Telegram msg Der Dienst DUC wurde gestoppt)
DOELSEIF ([WinPCT:service_NoIPDUCService4] eq "Running")
DOELSE
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.
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
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.