if-Befehl Kombinationen nach notify

Begonnen von theophilou85, 26 Januar 2018, 02:35:14

Vorheriges Thema - Nächstes Thema

theophilou85

Hallo

Bin gerade dabei mir eine Alarmanlage zu bauen (kenne das Modul von pah, aber unterstützt nicht alle meine Ansprüche) und habe einen Taster, der meinen Alarm canceln soll.
Hierfür soll er "set surve canceled","set smo00 alarmOff" und bei den Readings "con00,con01,mod00_det und smo00" des Dummies "surve" das Reading auf "canceled" stellen, sofern es davor auf "raised" oder "waiting" war. (Wobei "waiting" nur das Reading "mod00_det" annehmen kann".)

Hier mein Versuch, der natürlich nicht klappt:

define mod00_btn00_n1 notify mod00_btn00:Long.* set surve canceled;;set smo00 alarmOff;;{if(ReadingsVal("surve","con00","") eq "raised") {fhem("set surve con00 canceled")}};;{if(ReadingsVal("surve","con01","") eq "raised") {fhem("set surve con01 canceled")}};;{if(ReadingsVal("surve","mod00_det","") eq "raised||waiting") {fhem("set surve mod00_det canceled")}};;{if(ReadingsVal("surve","smo00","") eq "raised") {fhem("set surve smo00 canceled")}}

Die Kernfrage lautet: Wie reiht man unterschiedliche if-Schleifen aneinander? Bzw. Gibt es eine elegante Variante mehrere Readings nach einem gewissen Muster (in meinem Fall "raised oder waiting) gleichzeitig zurücksetzen?

Vielen Dank schon vorab.


Wernieman

1. das ist direkt aus der Condfig copiert? Besser ist es aus dem Editor
2. Kannst Du es etwas übersichtlicher darstellen? Nachdem ich nach 2 Minuten immer nioch keine Übersicht habe, cancel ich ...
3. Du springst immer wieder von Perl zu FHEM un dzurück ... kannst Du es nicht komplett unter Perl machen?
4. Währe nicht eine Funktion unter myutils besser?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

CoolTux

Du musst sobald Du mit Perl Code arbeiten möchtest komplett auf die Perl Ebene gehen


define mod00_btn00_n1 notify mod00_btn00:Long.* {

                fhem('set surve canceled; set smo00 alarmOff');
               
                if(ReadingsVal("surve","con00","") eq "raised") {
                    fhem("set surve con00 canceled");
                }

                if(ReadingsVal("surve","con01","") eq "raised") {
                    fhem("set surve con01 canceled");
                }

                if(ReadingsVal("surve","mod00_det","") eq "raised" or ReadingsVal("surve","mod00_det","") eq "waiting") {
                    fhem("set surve mod00_det canceled");
                }

                if(ReadingsVal("surve","smo00","") eq "raised") {
                    fhem("set surve smo00 canceled");
                }
}


ungetestet!!!
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

Brandenburger

#3
setreading

Bringt aber wenig, wenn die Readings automatisch überschrieben werden.

Gruß aus Brandenburg

CoolTux

Zitat von: Brandenburger am 26 Januar 2018, 08:41:53
setreading

Bringt aber wenig, wenn die Readings automatisch überschrieben werden.

Gruß aus Brandenburg

Habe ich was übersehen? Kann kein setreading Befehl finden.
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

Brandenburger

Die Werte der Readings sollen verändert werden und das passiert doch nicht mit set - oder?

CoolTux

Nee da haste Recht. Da habe ich mich wohl zu sehr auf den Code verlassen was die FHEM Befehle an geht.
Readings werden mit setreading geändert.
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

theophilou85

Grüß euch

Danke erstmal für den Support. Mir persönlich ist es eigentlich egal ob ich diese Funktion in Perl oder FHEM schreibe. Ich suche nur nach einer "sauberen" Lösung, wenn das in FHEM besser möglich ist, dann gerne in FHEM. Meine Wurst galt nur der Symbolik.

Ich beschreibe nochmal: "surve" <--ist meine Alarmanlagendummy, der u.A den STATE "raised" oder "waiting" haben kann.
Dieser surve hat für jeden Sensor der den Alarm auslösen kann ein Reading: Fensterkontakt 0 (con00), Fensterkontakt 1 (con01), Bewegungsmelder (mod00_det) die auch "raised" oder "waiting" sein können.

Drücke ich jetzt den "cancel"-Knopf, sollen alle readings und das STATE des surve-dummies auf "cancel" gesetzt werden, die zuvor "waiting" oder "raised" waren.

Ich könnte natürlich auch pauschal alle Readings auf "cancel" setzen, egal ob sie vorher ausgelöst "raised" waren oder nicht. Allerdings verliere ich dann die Info, welcher der Sensoren ausgelöst hat.


Beispiel: Alarmanlage scharf, jemand macht das Fenster auf. Das Reading "con00" des Dummies "surve" wird auf "raised" gesetzt und lässt die Sirene losheulen. Klick ich jetzt auf meinen "cancel"-Knopf, soll nur dieses Reading auf cancel gesetzt werden.

Verständlich beschrieben? :)




CoolTux

Eine Funktion schreibt man nicht in FHEM sondern in der Sprache in der das Programm geschrieben wurde von dem Du die Funktion per Code Zugabe erweitern willst. Bei FHEM ist es Perl. Und da du Perl If verwendest musst Du auf Perlebene gehen.

Nimm mein Beispiel und passe es Deinem Wunsch entsprechend an.
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

KernSani

Zitat von: Brandenburger am 26 Januar 2018, 08:53:56
Die Werte der Readings sollen verändert werden und das passiert doch nicht mit set - oder?
Wenn sie im Dummy als readingslist definiert sind, dann geht das schon
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

#10
Ich kenne Leute, die würden sich jetzt Popcorn holen...
Verstehe ich das jetzt falsch, oder hast du noch nie auf ,,DEF" in der Device-Ansicht gedrückt?

EDIT: Da hat wohl jemand gemerkt, dass der Beitrag Popcorn-würdig war ;-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

theophilou85

Hatte ich wirklich noch nie ;) Und ich habe bei Gott keinen komplizierten Code, aber bin eigentlich schon ganz stolz über Funktion und Umfang. Nutze halt nur die einfachsten Abfragen und tippe sicher viel mehr als nötig.

Das heißt aber nicht, dass ich darauf bestehe so zu tippen, wenn die Weboberfläche Vorteile hat.

Nun versuche ich gerade ein notify über die Weboberfläche zu gestalten, habe aber kein Glück, da ich zwar device und reading noch per dropdown-menü anwählen kann. aber nicht mehr den inhalt des readings.

Habe es halt soweit es geht in der Webo. gemacht und dann selbst den Rest editiert und klappt natürlich nicht :(

define surve_waiting_wd watchdog surve:mod00_det:waiting 00:00:15 surve:mod00_det:(canceled|disarmed) set surve mod00_det

define surve_waiting_n0 notify surve:mod00_det:waiting set swt05 on


Bitte nochmal um Hilfe. Ich hoffe ihr seht, dass ich Tipps umsetzen versuche.