FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: HoTi am 16 Dezember 2016, 07:50:35

Titel: Überprüfen ob ein at schon existiert
Beitrag von: HoTi am 16 Dezember 2016, 07:50:35
Hallo zusammen,

ich definiere in einem DOIF ein at. Dieser muss aber nicht immer existieren, wenn er aber existiert kann es sein das er gelöscht werden muss.

Derzeit mache ich das so:

define GT_li_at_loeschen_DOIF DOIF ([GT_li_ST] eq "off") (delete at_GT_li_toggle)
attr GT_li_at_loeschen_DOIF room Garten


Das Problem ist, wenn es das at nicht gibt bekomme ich eine Fehlermeldung im Log kommt. (logisch)

GT_li_at_loeschen_DOIF: delete at_GT_li_toggle: Please define at_GT_li_toggle first

Wie kann ich im DOIF überprüfen ob es das at schon gibt und dann ggf. löscht?

Vielen Dank und Grüße
Tim
Titel: Antw:Überprüfen ob ein at schon existiert
Beitrag von: Beta-User am 16 Dezember 2016, 08:57:27
Evtl. kannst Du mit dem hier (https://forum.fhem.de/index.php?action=post;quote=540493;topic=62501.0;last_msg=540513) was anfangen?

Anmerkungen:
Wenn Du (nur) eine einfache Reaktion auf ein Event hast, könntest Du hier auch ein notify verwenden. Da ich nicht weiß, wie Du das zu löschende (temporäre?) at definierst, könntest Du evtl. auch dort ein defmod einsetzen, oder in die dortige Definition (DOIF?) gleich (mit Attribut wait?) das "off" mit reinbasteln.

Gruß, Beta-User
Titel: Antw:Überprüfen ob ein at schon existiert
Beitrag von: HoTi am 16 Dezember 2016, 10:18:34
hmm, ich stehe auf dem Schlauch.

So wir das at definiert gerade:



define GT_li_aus_DOIF DOIF ([GT_li_ST] eq "on") (define at_GT_li_toggle at +00:01:30 set GT_li_SW toggle)
attr GT_li_aus_DOIF room Garten

define GT_li_at_loeschen_DOIF DOIF ([GT_li_ST] eq "off") (delete at_GT_li_toggle)
attr GT_li_at_loeschen_DOIF room Garten
Titel: Antw:Überprüfen ob ein at schon existiert
Beitrag von: Beta-User am 16 Dezember 2016, 10:43:41
Sorry, stehe ebenfalls auf dem Schlauch...

Was habe ich verstanden: Du willst bei einem bestimmten Event (GT_li_ST, das scheint ein Schalterdruck zu sein; Bitte ggf. um Info, was das für eine Hardware ist) eine Aktion auslösen, nämlich das Device nach 1:30 Min. auf toggle setzen (vermutlich wieder ein damit eingeschaltetes Licht ausschalten, Hardware?). Du nutzt dafür 2 DOIFs. Warum, habe ich nicht verstanden. Eine solche Konstruktion über mehrere Schaltlogiken macht m.E. nur Sinn, wenn zwischenzeitlich irgendwas passieren kann, das den Zustand des Zieldevices (GT_li_SW) ändert. Warum dann aber als "toggle" und kein "off"?

Also m.E. wäre es einfacher, hier ein einfaches notify auf den Schalter zu setzen, direkt im notify ein "on-for-timer 180" abzusetzen (so das definierte Gerät das unterstützt; ggf. über einen readingsProxy) oder ein wait 180,set GT_li_SW off zu verwenden. Leider kann ich im Moment nicht mit ausgefeiltem Code dienen, unter "Treppenhausschalter" sollten aber entsprechende Beispiele hier im Forum zu finden sein. Soweit ich das im Kopf habe, ist eine solche Treppenhausschaltung gerade auch als Beispiel in der Commandref zu notify, defmod oder at zu finden. Sieh' bitte erst mal dort nach.
Titel: Antw:Überprüfen ob ein at schon existiert
Beitrag von: CoolTux am 16 Dezember 2016, 10:57:40

if (defined($defs{"atNAME"}))


atNAME bitte durch den Devicenamen des at's ersetzen