set group=Licht on mit exkludierung eines Devices

Begonnen von choetzu, 11 Februar 2018, 14:10:02

Vorheriges Thema - Nächstes Thema

choetzu

Hallo,

ich will, dass bei einem Alarm sämtliche Lichter aus der Gruppe Licht angehen, AUSSER einem einzigen. Ich habe in der Gruppe 10 Lichter und möchte 9 davon schalten, ohne dass ich jedes einzeln aufführen muss. Geht das?

Lg c
Raspi3, EnOcean, Zwave, Homematic

Otto123

#1
Hi,

na klar geht das Doku -> https://fhem.de/commandref_DE.html#devspec.
Folgendes Beispiel aus meiner Umgebung
list LichtB.*
list LichtB.*:FILTER=NAME=LichtBWaSw.*
list LichtB.*:FILTER=NAME!=LichtBWa

Ausgabe bei mir
LichtBWa
LichtBWaSw_01
LichtBWaSw_02

LichtBWaSw_01
LichtBWaSw_02

LichtBWaSw_01
LichtBWaSw_02

Wo list geht geht auch set  ;)

Und die Frage hat nichts mit DOIF zu tun.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

Super herzlichen Dank.  So geht das bestens!! Was bedeutet eigentlich ein ? vor NAME.. also ?NAME


Gesendet von iPhone mit Tapatalk
Raspi3, EnOcean, Zwave, Homematic

Otto123

Du bist jetzt wieder beim DOIF? Oder in welchem Kontext steht Deine Frage?

Beim DOIF bedeutet ein? an dieser Stelle [?Name:reading] das nur abgefragt und nicht getriggert wird. Siehe Doku DOIF.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux


set group=Licht:FILTER=NAME!=LampeDieNichtAngehenSoll 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

choetzu

Zitat von: Otto123 am 11 Februar 2018, 22:36:49
Du bist jetzt wieder beim DOIF? Oder in welchem Kontext steht Deine Frage?

Beim DOIF bedeutet ein? an dieser Stelle [?Name:reading] das nur abgefragt und nicht getriggert wird. Siehe Doku DOIF.

Gruß Otto

Herzlcihen Dank, das habe ich auch schon gelesen, aber "ehrlich" gesagt nicht richtig kapiert.


Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
attr di_motion do always


Verstehe ich das richtig so: Wenn der button getätigt wird zwischen 6-10 Uhr und wenn jemand zu hause ist, dann wird der Schalter eingeschaltet. Was wäre denn, wenn die Fragezeichen nicht wären? Durch die "and" muss doch die Bedingung button ja trotzdem erfüllt werden, was ja nicht ist, wenn man ihn nicht drückt.. Also ich verstehe den Unterschied nicht, auch nach mittlerweile knapp 2 Jahren nicht... Irgendwo hab ich einen knacks ;)

Raspi3, EnOcean, Zwave, Homematic

Damian

Zitat von: choetzu am 12 Februar 2018, 08:50:28
Herzlcihen Dank, das habe ich auch schon gelesen, aber "ehrlich" gesagt nicht richtig kapiert.


Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr und nicht durch das Device Home

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)
attr di_motion do always


Verstehe ich das richtig so: Wenn der button getätigt wird zwischen 6-10 Uhr und wenn jemand zu hause ist, dann wird der Schalter eingeschaltet. Was wäre denn, wenn die Fragezeichen nicht wären? Durch die "and" muss doch die Bedingung button ja trotzdem erfüllt werden, was ja nicht ist, wenn man ihn nicht drückt.. Also ich verstehe den Unterschied nicht, auch nach mittlerweile knapp 2 Jahren nicht... Irgendwo hab ich einen knacks ;)

Das Beispiel ist vielleicht ungünstig gewählt, weil button normalerweise nicht wahr ist.

([?06:00-10:00] and [hell]) (set lamp off)

([06:00-10:00] and [hell]) (set lamp off)

im ersten Fall wird die Lampe nur ausgeschaltet, wenn es zwischen 06:00-10:00 Uhr hell wird.

im zweiten Fall wird die Lampe auch dann ausgeschaltet, wenn vor 06:00 hell geworden ist, da auch um 06:00 Uhr die Bedingung geprüft wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

Hi,

ZitatAlso ich verstehe den Unterschied nicht, auch nach mittlerweile knapp 2 Jahren nicht... Irgendwo hab ich einen knacks ;)
Vielleicht nochmal ein Versuch:
triggern bedeutet etwas starten, anstossen. Ein DOIF muss immer getriggert werden damit was passiert.
Das Fragezeichen bedeutet das was es ist: etwas fragen, also nur abfragen nicht triggern.
Um bei Damians Beispiel zu bleiben([?hell]) (set lamp off) würde nie etwas tun, egal ob es hell wird oder nicht. Weil nicht getriggert wird.

Man kann mit den ? verhindern das ein DOIF unnötig getriggert wird, siehe Beispiel von Damian.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

Danke für die Erläuterungen, ich sehe schon viel klarer. Was ich aber nicht kapiere, wieso soll ich [?6:00-10:00] machen, wenn es keine Wirkung resp. nicht triggert.. beim DoIf gehts doch ums triggern.. also, wann macht ? Sinn? Das ist mir noch nicht klar...


Gesendet von iPhone mit Tapatalk
Raspi3, EnOcean, Zwave, Homematic

Damian

Zitat von: choetzu am 12 Februar 2018, 11:55:38
Danke für die Erläuterungen, ich sehe schon viel klarer. Was ich aber nicht kapiere, wieso soll ich [?6:00-10:00] machen, wenn es keine Wirkung resp. nicht triggert.. beim DoIf gehts doch ums triggern.. also, wann macht ? Sinn? Das ist mir noch nicht klar...


Gesendet von iPhone mit Tapatalk

define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)

Warum sollte das Modul hier um 06:00, 10:00 Uhr und wenn sich Home ändert, die Bedingung auswerten, wenn button ohnehin nicht wahr ist - das würde es nämlich unnötigerweise tun, wenn man keine Fragezeichen angeben würde.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

choetzu

Zitat von: Damian am 12 Februar 2018, 12:34:27
define di_motion DOIF ([?06:00-10:00] and [button] and [?Home] eq "present")(set lamp on-for-timer 600)

Warum sollte das Modul hier um 06:00, 10:00 Uhr und wenn sich Home ändert, die Bedingung auswerten, wenn button ohnehin nicht wahr ist - das würde es nämlich unnötigerweise tun, wenn man keine Fragezeichen angeben würde.

ich bin definitiv zu blöd... Was ist aber dann der Unterschied zu

define di_motion DOIF ([button])(set lamp on-for-timer 600)

wenn, das Modul unabhängig der Zeit (6-10) und von home (present) bei Button angeht? 
Raspi3, EnOcean, Zwave, Homematic

Otto123

Sagen wir Du packst in Dein DOIF 27 verschiedene Zeiten, Geräte, Abfragen ob Wetter oder nicht usw. rein. Du willst eigentlich, dass wenn Du einen Knopf drückst 26 weitere Dinge abgefragt werden damit die Lampe angeht. Aber definitiv spielt der Knopf die erste Geige.

Warum soll bei jeder Änderung der 26 Dinge das DOIF losrennen (Strom und Rechenleistung verbrauchen) wenn es völlig egal ist weil der Knopf nicht gedrückt ist.

Und mit Deiner letzten Aussage hast Du nicht Recht, es ist nicht unabhängig. Das Licht geht nur in der Zeit von 6-10 an falls einer zu Hause ist und der Knopf gedrückt wird.

Bei Deinem Beispiel geht das Licht immer an, wenn der Knopf gedrückt wird.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

BAAAAM, jetzt hab ich es auch kapiert... Halleluja... Herzlichen Dank.

Zur Sicherheit:

Die Zeit und Home spielen ERST dann eine Rolle, wenn der Button gedrückt ist. Der Button ist der eigentliche Trigger... Hmm, eigentlich logisch, ich Depp.. ;)

Danke Otto und Damian für die Geduld. Noch 500 Beiträge von mir und ich kann dann auch mitreden sprich helfen ;)
Raspi3, EnOcean, Zwave, Homematic

choetzu

Sorry, jetzt will ich es wissen...

Geht demzufolge folgendes:

([ALARM:state] eq "on")
(set Rauchmelder_Team alarmOn)

DOELSEIF
([?ALARM] eq "on"
and [ALARM:state] eq "off")
(set Rauchmelder_Team alarmOff)

DOELSE


Was will ich: Der Alarm geht an, wenn ALARM auf on ist. Der Alarm wird nur ausgeschaltet (off), wenn der state von ALARM auf on war. War er auf OFF und wird erneut ausgeschaltet, dann passiert nix... Richtig?
Raspi3, EnOcean, Zwave, Homematic

Damian

#14
Zitat von: choetzu am 12 Februar 2018, 13:28:23
Sorry, jetzt will ich es wissen...

Geht demzufolge folgendes:

([ALARM:state] eq "on")
(set Rauchmelder_Team alarmOn)

DOELSEIF
([?ALARM] eq "on"
and [ALARM:state] eq "off")
(set Rauchmelder_Team alarmOff)

DOELSE


Was will ich: Der Alarm geht an, wenn ALARM auf on ist. Der Alarm wird nur ausgeschaltet (off), wenn der state von ALARM auf on war. War er auf OFF und wird erneut ausgeschaltet, dann passiert nix... Richtig?
Die Definition ist hier nicht sinnvoll, denn wenn Alarm auf off geht, dann ist [ALARM:state] eq "off" wahr, gleichzeitig kann aber [?ALARM] eq "on" nicht mehr wahr sein, denn zum Triggerzeitpunkt (Zeitpunkt der Abfrage) ist Alarm bereits off.

Ebenso, wenn Alarm nur zwei Zustände hat on/off kannst du in dem einfachen Fall auch gleich definieren:

([ALARM:state] eq "on")
(set Rauchmelder_Team alarmOn)
DOELSE
(set Rauchmelder_Team alarmOff)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

choetzu

#15
Hallo Damian,

super, danke. Bei 2 Zuständen eigentlich auch logisch..

Da ich mir z.Z. eine Alarmanlage "baue", bin ich ein bischen vorsichtig, weil das muss ja auch funktionieren. Darf ich mein Vorhaben "Alarmanlage" kurz erläutern, oder soll ich dies in einem neuen Beitrag tun. Ich wäre dankbar, wenn ihr kurz drüber schaut und mir meldet, ob ich etwas falsch gemacht habe oder noch optimieren kann. Input sehr willkommen. Danke.

Vorhaben:

1. Aktivierung/Deaktivierung Alarmanlage: Wenn ich das Haus verlasse, drücke ich einen Schalter, welcher mein Abwesenheitsdummy via DOIF auf ON setzt und gleichzeitig meine Kameras einschaltet (Arlo_Dummy und phyton script). Wenn ich nach Hause komme, dann drück ich den Schalter erneut. Somit wird die Anlage aktiviert resp. deaktiviert.

Das entsprechende Abwesenheit-DOIF lautet wie folgt:
([Taster_EnO2] eq "on")
({system ("python /opt/fhem/FHEM/ArloAllesAN.py &")})
(set Abwesenheit_Dummy on)
(set Arlo_Dummy on)
(set ALARM_Vorwarnung_DOIF enable)
(save)
(set Sonos_.*:FILTER=TYPE=SONOSPLAYER Stop)
(set Pushover msg title=Abwesend message="NIEMAND zu hause")

DOELSEIF
([Taster_EnO2] eq "off")
({system ("python /opt/fhem/FHEM/ArloAllesAUS.py &")})
(set Abwesenheit_Dummy off)
(set Arlo_Dummy off)
(set ALARM off)
(set ALARM_Vorwarnung_DOIF disable)
(save)
(set Pushover msg title=Home message="JEMAND zu hause")
DOELSE



2. Alarmauslöser: Wenn meine Innenkamera eine Bewegung bemerkt (Reading "motion" im Device Arlo_Dummy), dann löst es den Alarm-Vorwarn trigger ein und schaltet den ALARM_Dummy ein. Der Alarm-Vorwarn trigger ist ein 3maliges Blinken der Esszimmerlampe.

Das Alarm_Vorwarn_DOIF dazu:
([Arlo_Dummy:Innen] eq "motion"
and [?Abwesenheit_Dummy] eq "on")
(set EZ_L_NodOn11 blink 3 1)
(set ALARM on)
(set ALARM_Vorwarnung_DOIF disable)
(save)

DOELSE


3. Wenn nach 30 Sekunden nicht der Abwesenheits-Schalter gedrückt wird, dann geht der Alarm an. Der Alarm besteht aus den Sirenen meiner 3 Rauchmelder. Ursprünglich wollte ich Sonos dazu benutzen, aber dies läuft m.E. nicht zuverlässig. Deshalb beschränk ich es auf die Sirene. Was ich in einem zweiten Schritt noch ergänzen werde: Zwischen sunset-sunrise werden zusätzlich noch alle Lichter angehen und die Storen öffen. Aber das mach ich erst, wenn alles funktioniert.

Ich kann den Alarm wiederum mit dem Abwesenheits-Schalter abstellen.

Das Alarm-Doif lautet:

([ALARM:state] eq "on")
(set Rauchmelder_Team alarmOn)
(set Pushover msg title=ALARM message="ALARM ALARM ALARM - Da ist jemand im Haus!")

DOELSE
(set Rauchmelder_Team alarmOff)
(set Pushover msg title=ALARM message="ALARM Deaktiviert!!")


Na, wie sieht das für Euch aus? Ich habe es nicht getestet, weil ich gerne zuerst euer Feedback möchte...  Natürlich nur, wenn es Euch keine Umstände macht. Herzlichen Dank..

Raspi3, EnOcean, Zwave, Homematic

Damian

Warum nicht, dann teste es mal.

DOELSE ohne Anweisung macht nur ohne do always Sinn, wenn es nur einen DOIF-Zweig gibt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

choetzu

#17
Zitat von: Damian am 12 Februar 2018, 20:12:55
Warum nicht, dann teste es mal.

DOELSE ohne Anweisung macht nur ohne do always Sinn, wenn es nur einen DOIF-Zweig gibt.

Danke. Ich habe da kein do always. Deshalb kann ich es stehen lassen, oder?

Test verlief erfolgreich.  Was ich aber nicht verstehe, wenn ich im Vorwarn-Dummy als Trigger folgendes schreibe, triggert er nicht:

([Arlo_Dummy:Innen] eq "motion")
Wenn die Innenkamera angeht, gibt es einen Eintrag im Dummy mit dem Reading Innen und dem Wert motion. Als Attribut habe ich im Dummy event-on-update-reading hinterlegt und es wird auch im Eventmonitor so aufgezeigt.. Geht wie gesagt nicht.

Oder

([Arlo_Dummy:Innen] eq "motion" or [Bewegungsmelder2] eq "on")
Wenn ich nebst der Innenkamera noch einen Bewegungsmelder platziere, dann geht es auch nicht.. Komisch.


Es funktioniert nur mit
([Arlo_Dummy:Innen] eq "motion"
and [?Abwesenheit_Dummy] eq "on")


Wieso wohl?
Raspi3, EnOcean, Zwave, Homematic

Otto123

Hi,

also warum Deine drei letzten Beispiele funktionieren oder nicht kann man nur raten. Dazu waäre ein list vom DOIF in verschiedenen Zuständen hilfreicher als der Code. Im list sieht man viel mehr!
Aber Ideen
([Arlo_Dummy:Innen] eq "motion") funktioniert ohne do always meines Wissen nur einmal.
([Arlo_Dummy:Innen] eq "motion" or [Bewegungsmelder2] eq "on") ist eventuell gleiches Problem.
([Arlo_Dummy:Innen] eq "motion" and [?Abwesenheit_Dummy] eq "on") hier ändert sich sicher wirklich der Zustand deswegen geht es ohne do always.

Da wir ja das mit ? durchgekaut haben: All diese Sachen funktionieren durch Zustände, DOIF kann auch auf Events triggern. Schau Dir das in der commandref an.

Ich mache solche Sachen mit Bewegungsmeldern immer mit Event Triggerung
([PIR1:"motion:.on"]]

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz