Anfängerfrage: Wie macht man eine einfache Und-Verknüpfung?

Begonnen von Jogi, 17 Februar 2017, 12:17:10

Vorheriges Thema - Nächstes Thema

Jogi

Hallo,
das ist vielleicht eine Frage, bei der manch einer schmunzelt, ich weiß aber nicht wie es geht.

FHEM hat ja sehr viele Funktionen und Zusatzmodule. Bei manchem habe ich das Gefühl, dass es für eine Aufgabe gleich mehrere Möglichkeiten zur Realisierung gibt. Manche sind kompliziert, andere einfacher. Ich mag es gerne einfach.
Daher meine Frage:
Wie kann ich eine Und-Verknüpfung am einfachsten (!) realisieren?
Beispiel:
Lampe1 soll nur einschalten, wenn Schalter1 und Schalter2 eingeschaltet sind.
Wenn einer der beiden Schalter aus ist, soll die Lampe wieder ausschalten.

Vielen Dank für Tipps.


franky08

So auf die Schnelle:
{if ((Value("Schalter1" eq "on")) && (Value("Schalter2") eq "on")) {
fhem "set Lampe on";
} else {
fhem "set Lampe off";
}
}
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Otto123

#2
Hi,

Für die Raw Def als komplettes Testscenario:
define T_Aktor1 dummy
define T_Aktor2 dummy
attr T_Aktor[1-2] webCmd on:off
define T_Lampe1 dummy
defmod T_di_Aktor DOIF ([T_Aktor1] eq "on" and [T_Aktor2] eq "on" )(set T_Lampe1 on) DOELSE (set T_Lampe1 off)
attr T_.* room Test


Dazu noch Franky's korrigierte :) notify Variante:
defmod T_nty_Aktor notify T_Aktor[1,2]:(on|off) {if ((Value("T_Aktor1") eq "on") && (Value("T_Aktor2") eq "on")) {fhem "set T_Lampe1 on"} else {fhem "set T_Lampe1 off"}}
attr T_nty_Aktor room Test


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

franky08

Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Beta-User

@Frank: Du hättest ihm auch wirklich einen copy-paste-code für ein notify mit alternativen Eingangsbedingungen liefern sollen  ;).

Wollte noch structure in den Raum werfen, macht aber m.E. erst richtig Sinn, wenn es ein paar mehr Schalter sind, auf deren Zustand reagiert werden soll...

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

Otto123

#5
Hab meinen Post oben noch erweitert ums notify :)

Und hier noch mit IFdefmod T_nty_AktorIF notify T_Aktor[1,2]:(on|off) IF ((Value("T_Aktor1") eq "on") && (Value("T_Aktor2") eq "on")) (set T_Lampe1 on) ELSE (set T_Lampe1 off)
attr T_nty_AktorIF room Test


Die Frage ist jetzt, was ist einfacher  ;D ;D ;D

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

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

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

Beta-User

#8
Zitat von: Otto123 am 17 Februar 2017, 13:07:01
Was hab ich falsch gemacht?  ::)
Der Religionsbezug kam von woanders her ;).

Aber ausgepeitscht oder schlimmeres wird hier niemand, von daher war die Reaktion mit der anderen Backe schon ok ;D ;D ;D ;D.

Aber mal abgesehen von den nicht zur Sache gehörenden Kommentaren könnte man den Post m.E. gut als "Entscheide-Selbst"-Post für den Sticky-Anfängerbereich nehmen; es fehlt nur die ausformulierte structure-Variante, oder fällt sonst noch jemand was ein ;)? Wobei structure eher dann Vorteile bringt, wenn man sie auch schalten will und nicht nur einen Zustand von meheren Geräten zusammenfassen.
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

betateilchen

Für die eingangs gestellte Anforderung ist die structure tatsächlich die beste Wahl.

In meinem Arbeitszimmer habe ich drei Homematic Schaltaktoren


  • für den Switch, der das Arbeitszimmer mit Netzwerk versorgt
  • für den PC
  • für den Netzwerkdrucker, der auch von anderen Räumen aus ansprechbar ist

Daraus ergibt sich die Anforderung, dass der switch immer dann eingeschaltet sein, muss, wenn mindestens eine der Hardwarekomponenten (Drucker und PC) eingeschaltet ist. Sind beide aus, kann auch der Switch ausgeschaltet werden.

Dazu sind PC und Drucker in einer structure zusammengefaßt. Immer wenn ein event von der structure kommt, wird per notify geprüft, ob der event "off" ist. In diesem Fall sind beide Geräte aus und das notify schaltet den Switch ab. In allen anderen events wird (bzw. bleibt) der Switch angeschaltet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Das wäre dann so?
defmod T_st_Aktor structure Switch T_Aktor1 T_Aktor2
attr T_st_Aktor clientstate_behavior relative
attr T_st_Aktor clientstate_priority on|on off|off
attr T_st_Aktor event-on-change-reading state
attr T_st_Aktor room Test

defmod T_nty_AktorST notify T_st_Aktor:(on|off) set T_Lampe1 $EVENT
attr T_nty_AktorST room Test

PC -> Aktor1
Netzwerkdrucker -> Aktor2
Switch -> Lampe1
Sozusagen als Fertigfutter - mal ganz Ausnahmsweise  8)
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

Jogi

Vielen Dank für Eure umfangreichen Antworten. Da sollte doch etwas für mich dabei sein!
Danke!

betateilchen

Zitat von: Otto123 am 17 Februar 2017, 14:40:13
Das wäre dann so?

Nein. Dein notify würde nicht korrekt funktionieren. Eine structure hat nicht nur on|off sondern auch noch undefined.

on und off würden nur auftreten, wenn beide Geräte den gleichen Zustand haben. Wenn aber nur ein Gerät eingeschaltet ist, meldet die structure "undefined".

Deshalb hatte ich extra geschrieben:

Zitat von: betateilchen am 17 Februar 2017, 14:12:10
wird per notify geprüft, ob der event "off" ist. In diesem Fall sind beide Geräte aus und das notify schaltet den Switch ab. In allen anderen events wird (bzw. bleibt) der Switch angeschaltet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Thorsten Pferdekaemper

Zitat von: betateilchen am 17 Februar 2017, 16:33:24
Nein. Dein notify würde nicht korrekt funktionieren. Eine structure hat nicht nur on|off sondern auch noch undefined.
Kommt das nicht noch so ein bisschen auf clientstate_behavior und clientstate_priority an?
Gruß,
   Thorsten
FUIP

Otto123

Also ich habe es natürlich getestet und für die gestellte Aufgabe funktioniert es prima. Die structure hat nie undefined wenn die beiden Aktoren nur on und off kennen wegen
attr T_st_Aktor clientstate_priority on|on off|off
Zitaton und off würden nur auftreten, wenn beide Geräte den gleichen Zustand haben. Wenn aber nur ein Gerät eingeschaltet ist, meldet die structure "undefined".
Der Fall tritt wegen den beiden Attributen nicht ein!
Wenn beide Aktoren noch einen anderen Zustand haben dann ok. Dürfte aber nicht vorkommen. Zumindest wird dann einfach nichts gemacht.
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