Vorgehensweise bzgl. zweier if

Begonnen von chq, 10 Juli 2018, 21:20:56

Vorheriges Thema - Nächstes Thema

chq

Hallo,

ich tracke mittlerweile den Status zweier Smartphones und führe diese via Residents in einem Device namens "Anwesenheit" zusammen.

Nun möchte ich Folgendes erreichen:

if("Anwesenheit:presence-Wechsel nach absent" ist mind. 20 Minuten her) set Device x off;
if("Anwesenheit:presence-Wechsel nach present") set Device x on;

Das mit den 20 Minuten möchte ich nicht mit absenceTimeout in den Presence-Devices lösen, sondern eine autarke Regel definieren, die nur für das Device x gelten soll.

Eine grobe Richtung, mit welchen "Werkzeugen" sich dies am Besten lösen könnte, würde mir schon fürs Erste reichen.  :)

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

CoolTux

Das erste mit watchdog, das zweite mit notify.
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

chq

Ok, gut.

Wie behält man denn die Übersicht innerhalb von FHEM, wenn man für solch eine Aktion bereits zwei unterschiedliche Devices anlegen muss?

Das kann dann ja, je nach Anzahl der zu steuernden Geräte, sehr schnell sehr unübersichtlich werden.

Macht "man" das dann über Gruppen?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

CoolTux

Du siehst in der Detailansicht der Devices immer mit welchem anderen Device es "Probably associated" ist.
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

chq

Ja, schon.

Ich dacht nur, dass man die riesen Liste in "Everything" irgendwie etwas ordnen könnte.

Ich gehe eigentlich immer in "Everything", um mir einen Überblick zu verschaffen, aber vielleicht gibt es ja auch diesbezüglich einen besseren Weg.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

CoolTux

Gruppen, Räume, persönliche Notizen. Such Dir was aus. Du kannst mittels devspec wunderbar suchen nach Kriterien.
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

Byte09

#6
Zitat von: chq am 10 Juli 2018, 22:15:26
Ja, schon.

Ich dacht nur, dass man die riesen Liste in "Everything" irgendwie etwas ordnen könnte.

Ich gehe eigentlich immer in "Everything", um mir einen Überblick zu verschaffen, aber vielleicht gibt es ja auch diesbezüglich einen besseren Weg.

Gruß Chris

das kannst du mit dem Modul MSwitch in einem Device erledigen .
hier das zugehörige wiki:
https://wiki.fhem.de/wiki/MSwitch.pm

wenn du es damit versuchen willsz und hilfe benötigst , hier der passende thread:
https://forum.fhem.de/index.php/topic,86199.0.html

gruss Byte09

PS: Das Modul bietet eine Möglichkeit , recht einfach den Überblick zu behalten :
https://wiki.fhem.de/wiki/MSwitch.pm#MSwitch_Inforoom

chq

#7
Hallo,

das MSwitch-Modul möchte ich zunächst einmal nicht verwenden und versuchte (entgegen Euren Vorschlägen) das Ganze mit einem DOIF zu lösen.

Ich bin zu dem Schluss gekommen, dass es mit einem DOIF nicht geht (ja, ich habe mir die Commandref. (die im Fall von DOIF auch sehr gut dokumentiert ist) angeschaut). Ich möchte meine Versuche mit DOIF an dieser Stelle beenden und das Ganze wie bereits vorgeschlagen mit einem Watchdog und einem Notify lösen.

Gruß Chris

Edit: Es hapert wohl noch etwas an der Formatierung.  :-\

defmod nf_NAS notify ([Bewohner:state] eq "home") set NAS on
defmod wd_NAS watchdog ([Bewohner:state] not eq "home") 00:10:00 ([Bewohner:state] eq "home") set NAS off
So einfach wie möglich, so kompliziert wie nötig

chq

#8
Hab mir zum Testen nun mal einen Dummyschalter, eine Dummylampe und ein Notify erzeugt.

Ich möchte mit dem Schalter die Lampe einschalten und hierfür explizit auf das Reading state des Schalters zugreifen.

Das hier schaltet zwar die Lampe, bringt mich aber nicht weiter, da ich ja wissen möchte, wie man auf ein def. Reading zugreift:

schalter:on set lampe on

Das hier schaltet die Lampe leider nicht:

schalter:state:on set lampe on

Ist mein Problem, dass ich über ReadingsVal lösen müsste, wenn ich bestimmte Readings "abfragen" möchte?

Schalter:

Internals:
   CFGFN     
   NAME       schalter
   NR         3882
   STATE      on
   TYPE       dummy
   READINGS:
     2018-07-23 07:59:06   state           on
Attributes:
   room       Testraum
   webCmd     on:off


Lampe:

Internals:
   CFGFN     
   NAME       lampe
   NR         3878
   STATE      on
   TYPE       dummy
   READINGS:
     2018-07-23 07:59:06   state           on
Attributes:
   room       Testraum


Notify:

Internals:
   CFGFN     
   DEF        schalter:on set lampe on
   NAME       n_lampe
   NOTIFYDEV  schalter
   NR         3980
   NTFY_ORDER 50-n_lampe
   REGEXP     schalter:on
   STATE      2018-07-23 07:59:06
   TYPE       notify
   READINGS:
     2018-07-23 07:59:00   state           active
Attributes:
   room       Testraum
So einfach wie möglich, so kompliziert wie nötig

CoolTux

Zitat von: chq am 23 Juli 2018, 08:01:57
Hab mir zum Testen nun mal einen Dummyschalter, eine Dummylampe und ein Notify erzeugt.

Ich möchte mit dem Schalter die Lampe einschalten und hierfür explizit auf das Reading state des Schalters zugreifen.


Der Satz ist Mist. Was genau willst Du? Man reagiert nicht auf ein Reading sondern auf ein Event. Immer!

schalter:state:on

Dieses Event gibt es so nicht, dafür muss man ein Attribut setzen beim notify. addStateEvent Dann sollte glaube das hier gehen
schalter:state.on


Kommen wir zu Deinem komischen Satz. Möchtest Du ein Reading vorher abfragen?
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

chq

Was ich möchte ist dann vermutlich Folgendes:

Wenn das event "on" des Readings state von schalter erzeugt wird, soll die Lampe angehen.
Wenn das event "home" des Readings state von Bewohner erzeugt wird, soll das NAS angehen.

state kann doch unterschiedliche Status haben und genau auf einen dieser Status soll das Notify auslösen.

defmod nf_NAS notify ([Bewohner:state] eq "home") set NAS on

Hier stimmt doch nur die Formatierung nicht, oder? Das ist doch nicht grundsätzlich falsch.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

CoolTux

Zitat von: chq am 23 Juli 2018, 08:42:20
Was ich möchte ist dann vermutlich Folgendes:

Wenn das event "on" des Readings state von schalter erzeugt wird, soll die Lampe angehen.
Wenn das event "home" des Readings state von Bewohner erzeugt wird, soll das NAS angehen.

state kann doch unterschiedliche Status haben und genau auf einen dieser Status soll das Notify auslösen.

defmod nf_NAS notify ([Bewohner:state] eq "home") set NAS on

Hier stimmt doch nur die Formatierung nicht, oder? Das ist doch nicht grundsätzlich falsch.

Gruß Chris

Das ist sogar super falsch.
Entweder 2 Notify
1.

defmod nf_NAS notify Bewohner:home set NAS on

2.

defmod nf_NAS notify Bewohner:on set Lampe on


oder ein notify


defmod nf_NAS notify Bewohner:(home|on) {
        fhem("set NAS on") if $EVENT eq 'home';
        fhem("set Lampe on") if $EVENT eq 'on';
}

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

chq

Vielen Dank, aber was mache ich denn z.B. wenn es nicht um state gehen würde, sondern das eventerzeugende Reading z.B. sensor1234 heissen würde?

Würde ich dann z.B. das hier schreiben..

defmod nf_NAS notify Bewohner:home set NAS on

..wüsste FHEM ja gar nicht, dass er vom Device Bewohner das Reading sensor1234 auslesen sollte.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

CoolTux

So ganz verstehe ich Dich nicht. Aber ich rate mal.

Triggern soll er immer noch auf Bewohner home aber soll dann für eine weitere Entscheidung ein Reading auslesen

defmod nf_NAS notify Bewohner:(home|on) {
        fhem("set NAS on") if( ReadingsVal($NAME,'sensor1234','none') eq 'WERT' );
        fhem("set Lampe on") if $EVENT eq 'on';
}


http://commandref.fhem.de/#readingFnAttributes
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

chq

#14
Hallo,

ich möchte an dieser Stelle kurz anhalten, um Konfusion vorzubeugen. Ich bin deshalb den Thread von Beginn an bis zum Ende noch einmal durch und kann verstehen, dass nicht alles klar ist, was ich erreichen möchte. Der Einfachheit halber ist es in Summe denke ich am einfachsten, wenn wir bei dem Beispiel mit dem Dummyschalter und der Dummylampe bleiben.

Der Schalter hat ein Reading namens state. Um den Zustand des Schalters z.B. für ein notify zu verwenden, reicht es (ohne Angabe von state)
Folgendes zu schreiben:

schalter:on set lampe on Warum state hierbei nicht angegeben muss verstehe ich zwar nicht, akzeptiere dies jedoch.

Die Frage die sich mir stellt ist, wie ich Events weiterer Readings dieses Schalters (die jedoch nicht state lauten) als Basis für das notify verwenden kann. Hierzu müsste ich doch an irgendeiner Stelle das entsprechende Reading angeben.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig