Überprüfen ob ein at schon existiert

Begonnen von HoTi, 16 Dezember 2016, 07:50:35

Vorheriges Thema - Nächstes Thema

HoTi

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
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

Beta-User

Evtl. kannst Du mit dem hier 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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

HoTi

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
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

CoolTux


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


atNAME bitte durch den Devicenamen des at's ersetzen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net