FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cc13 am 23 Januar 2017, 12:16:18

Titel: Testen einer Notify
Beitrag von: cc13 am 23 Januar 2017, 12:16:18
Hallo,

ich rufe per SYSSTAT verschiedene Werte meines QNAP NAS ab (NASStat). Das läuft gut. Mit dabei sind u.A. die Smartinfo-Werte der Festplatten, die im Augenblick alle "GOOD" ausgeben. Dieser Wert wird per Reading (z.B. smartinfo_hdd1) angezeigt.

Ich habe mir nun eine Notify angelegt, die auf einer Änderung dieses Readings reagiert und mir per Telegram eine Nachricht schickt. Für Vorschläge, das Besser zu lösen, bin ich offen und dankbar.


define n_NASStat_smartinfo_hdd1 notify NASStat.smartinfo_hdd1:.* { if ($EVENT !~ m/GOOD/) {fhem("set telegram message $EVENT")}}


Um nun zu testen, ob das Notify funktioniert, suche ich eine Möglichkeit und benötige eure Hilfe. Ich habe es mit einem Trigger probiert:


trigger NASStat:smartinfo_hdd1 BAD
trigger NASStat:smartinfo_hdd1:.* BAD


Beides hat leider nicht funktioniert.

VG
Carsten
Titel: Antw:Testen einer Notify
Beitrag von: Syrex-o am 23 Januar 2017, 12:40:02
Hey cc13,

ZitatIch habe mir nun eine Notify angelegt, die auf einer Änderung dieses Readings reagiert und mir per Telegram eine Nachricht schickt. Für Vorschläge, das Besser zu lösen, bin ich offen und dankbar.

Funktioniert denn dein Code nicht, mit dem du eine Nachricht bekommen möchtest, oder willst du das einfach testen?

Ich würde dir ein einfaches DOIF empfehlen.
Benutze ich auch und stelle Stück für Stück alle Notify´s darauf um.
Dann nimmst du dir einfach beide events die eintreten können und packst sie in dein DOIF.

Wenn du das dann einfach testen willst, dann bau einfach ein DOIF mit einer zeit um zu gucken ob du eine Nachricht bekommst.

Hoffe das hilft dir.

Grüße
Titel: Antw:Testen einer Notify
Beitrag von: Otto123 am 23 Januar 2017, 12:49:58
Hallo Carsten,

was bekommst Du mit deinem trigger denn für einen Fehler?

Schau Dir im Eventmonitor an was passiert und schlussfolgere daraus wie dein trigger aussehen muss.
Schau Dir auch an wie die normalen Events aussehen die triggern sollen.
Und lies die Beschreibung in der commandref und im Wiki zu notify genau!

Gruß Otto
Titel: Antw:Testen einer Notify
Beitrag von: cc13 am 23 Januar 2017, 12:58:06
Ich kann im Moment nur vermuten, ob/dass mein Notify funktioniert. Da der Smartinfo-Wert (zum Glück) im Moment auf GOOD steht und sich nicht ändert, habe ich es damit getan, dass ich die if-Abfrage umgekehrt habe, also auf "eq GOOD" geprüft. Telegram hat die Nachricht verschickt.

Leider weiß ich nicht, welcher Wert im Reading erscheint, wenn die Platte nicht mehr GOOD ist. Deshalb wollte ich jetzt per Trigger eine Änderung des Werts GOOD simulieren, das Notify einfach nur testen. Also Fehlermeldung beim Trigger kam


Please define NASStat:smartinfo_hdd1 first


Ok, wenn ich auf DOIF umstelle, wie kann ich das dann testen, wenn die Smartinfo-Werte sich im Moment nicht verändern? Quasi vorbeugend testen.
Titel: Antw:Testen einer Notify
Beitrag von: Syrex-o am 23 Januar 2017, 13:07:50
ZitatOk, wenn ich auf DOIF umstelle, wie kann ich das dann testen, wenn die Smartinfo-Werte sich im Moment nicht verändern? Quasi vorbeugend testen.

Naja wenn du einfach nur erfassen möchtest, dass sich der Wert geändert hat, dann benutze doch:
define n_NASStat_smartinfo_hdd1 DOIF ([NASStat.smartinfo_hdd1:] ne "GOOD" )
("dein set Befehl")


Dabei benutzt du einfach "ne" und sagst somit: not equal.
Dann sollte es funktionieren.  ;)

Grüße
Titel: Antw:Testen einer Notify
Beitrag von: KölnSolar am 23 Januar 2017, 13:16:17
Zitatdefine n_NASStat_smartinfo_hdd1 notify NASStat.smartinfo_hdd1:.*
Zitattrigger NASStat:smartinfo_hdd1 BAD
trigger NASStat:smartinfo_hdd1:.* BAD

Das define des notify müsste meines Erachtens so aussehen:
define n_NASStat_smartinfo_hdd1 notify NASStat:smartinfo_hdd1.*
und der trigger
trigger NASStat smartinfo_hdd1 BAD

Grüße Markus
Edit: So triggert aber jedes event und nicht nur BAD das notify !!!
Titel: Antw:Testen einer Notify
Beitrag von: Otto123 am 23 Januar 2017, 13:23:34
Zitat von: cc13 am 23 Januar 2017, 12:58:06
Ich kann im Moment nur vermuten, ob/dass mein Notify funktioniert. Da der Smartinfo-Wert (zum Glück) im Moment auf GOOD steht und sich nicht ändert, habe ich es damit getan, dass ich die if-Abfrage umgekehrt habe, also auf "eq GOOD" geprüft. Telegram hat die Nachricht verschickt.

Leider weiß ich nicht, welcher Wert im Reading erscheint, wenn die Platte nicht mehr GOOD ist. Deshalb wollte ich jetzt per Trigger eine Änderung des Werts GOOD simulieren, das Notify einfach nur testen. Also Fehlermeldung beim Trigger kam


Please define NASStat:smartinfo_hdd1 first


Ok, wenn ich auf DOIF umstelle, wie kann ich das dann testen, wenn die Smartinfo-Werte sich im Moment nicht verändern? Quasi vorbeugend testen.
Mir ist es letztlich völlig egal wie du das machst, aber ein notify solltest Du auch verstehen. Und ich finde notify ist der richtigere Ansatz für Deine Aufgabenstellung.

Und was sagt Deine Fehlermeldung? -> Du triggerst ein device was es gar nicht gibt!
Also die erste Richtigstellung wäre: -> hinter trigger das notify welches Du triggern willst. Danach könntest du noch weitere Argumente packen.
trigger n_NASStat_smartinfo_hdd1

Aber ich denke Dein regEx im notify stimmt auch nicht. Wie gesagt Eventmonitor hilft!

Gruß Otto
Titel: Antw:Testen einer Notify
Beitrag von: cc13 am 23 Januar 2017, 18:30:51
Ob das Regex in meiner Notify falsch ist, kann ich noch gegenprüfen (siehe dazu der nächste Absatz). Ich möchte noch einmal ausholen und erklären, worum es mir geht.

Der Wert "GOOD" im Reading ist so und verändert sich hoffentlich nie. Allerdings weiß jeder, der mit Festplatten zu tun hat, dass die Dinger alt werden und der Wert sich dann ändert. In welchen Wert, weiß ich (jetzt noch) nicht. Und auf diese Änderung soll mein Notify reagieren. Getestet habe ich das jetzt, indem ich nicht auf !"GOOD" teste (Es ist ja "GOOD" und somit würde mein Notify nicht WAHR ergeben), sondern auf !"BAD". Da das Reading "GOOD" enthält, war es !"BAD". Das hat funktioniert, das Notify wurde ausgelöst.

Nun möchte ich aber den Gegentest machen, bzw. für einen Test den Wert des Readings ändern, damit !"GOOD" WAHR ergibt. Man könnte es auch Unit-Testing nennen. Ok, das wäre zu viel verlangt, aber es sollten alle Möglichkeiten und Eventualitäten getestet werden und deshalb möchte ich den Fall, dass das Reading nicht mehr "GOOD" ist, testen.