Hauptmenü

DOIF für Schalter

Begonnen von geforce28, 16 Januar 2018, 22:02:13

Vorheriges Thema - Nächstes Thema

geforce28

Guten Abend,

vielleicht ist es schon zu spät (für mich), aber ich brauche mal wieder eure Hilfe, da ich nicht dahinter komme, wie ich folgendes Löse.

Ich habe einen Schalter "SZ.Nachttisch.L.Schalter".
Wenn man diesen drückt verändert dieser seinen Status auf "SZ.Nachttisch.L.Schalter_Btn_01 Short".

Dann habe ich eine Nachttischlampe mit einer HUE Birne drin. ("HUEDevice14")
Diese soll mithilfe des Schalters mit nur einem kurzen Druck, (quasi Toggle mäßig) an und ausgeschaltet werden können.

Gleichzeitig soll geprüft werden, ob die Hue Lampe "HUEDevice14" den pct Wert von 31, und den rgb Wert von 644010 hat.
Wenn die Lampe einer der beiden Werte nicht hat soll ein
set HUEDevice14 pct 31, set HUEDevice14 rgb 644010
ausgeführt werden.

Wenn die Lampe diese Werte allerdings hat, soll sie mit dem Tastendruck ausgeschaltet werden.
set HUEDevice14 off

Könnt ihr mir helfen das in FHEM abzubilden ?
Geht das überhaupt alles in einem DOIF ?

Vielen lieben Dank im Voraus... :) !

EDIT:
Habe gerade noch was entdeckt..
Es gibt ein Device "SZ.Nachttisch.L.Schalter_Btn_01".
Welches mit jedem Druck auf den Schalter einen Counter erhöht.
So z.B. das Reading
trigger Short_40
Wenn ich nochmals draufdrücke, verändert es sich zu
trigger Short_41

Vielleicht hilft das ja ?

Otto123

Hi,

nur als Ansatz, ungetestet!!!DOIF ([SZ.Nachttisch.L.Schalter_Btn_01:Short] and ([?HUEDevice14:pct] ne "31") and ([?HUEDevice14:rgb] ne "644010")) (set HUEDevice14 pct 31, set HUEDevice14 rgb 644010) DOELSE (set HUEDevice14 off)

Ich habe keine Ahnung ob der Status stimmt und ob es die Readings so gibt.

Siehe auch https://fhem.de/commandref_DE.html#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

geforce28

Läuft leider nicht...

Der State von "SZ.Nachttisch.L.Schalter_Btn_01" ist aber auch nicht Short, sondern "Short 1_48 (to VCCU)".
Und dieser State erhöht sich auch mit jedem weiteren Drücken.

Also beim nächsten drücken ist der State "Short 1_49 (to VCCU)".

Per

Versuch
([SZ.Nachttisch.L.Schalter_Btn_01:"Short"] and ...
oder sicherheitshalber
([SZ.Nachttisch.L.Schalter_Btn_01:"Short.* (to VCCU)"] and ...

geforce28

So eine scheiße.... !
Es will immer noch nicht.

Habe jetzt folgendes probiert:

([SZ.Nachttisch.L.Schalter_Btn_01:"Short.* (to VCCU)"] and ([HUEDevice14:bri] ne "77" or [HUEDevice14:rgb] ne "644010" or [HUEDevice14:state] eq "off")) (set HUEDevice14 bri 77, set HUEDevice14 rgb 644010) DOELSE (set HUEDevice14 off)


Das HUEDevice14 ist im state "off".
Da müsste doch jetzt endlich diese bescheuerte Lampe angehen... Wieso will es nicht? :'(

geforce28

Okay, so ein bisschen weiter bin ich jetzt.

Ich habe mir mal einen dummy "test2" zum testen angelegt, damit ich sehe was passiert..

Ich habe jetzt folgendes DOIF:

([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and ([HUEDevice14:bri] ne "77" or [HUEDevice14:rgb] ne "644010" or [HUEDevice14:state] eq "off")) (set HUEDevice14 rgb 644010, set HUEDevice14 bri 77, set test2 on)
DOELSE (set HUEDevice14 off, set test2 off)


Wenn ich den Schalter nun betätige, geht test2 auf on, die HUE Lampe geht auch an, aber direkt danach wieder aus, test2 auch sofort wieder aus.
Das heißt, er springt in das DOELSE.

Wenn ich das DOELSE lösche, bleibt die Lampe und auch der dummy "test2" an.



Kann mir jemand sagen, warum das DOIF in DOELSE springt ?...

Damian

Zitat von: geforce28 am 17 Januar 2018, 20:56:32
Okay, so ein bisschen weiter bin ich jetzt.

Ich habe mir mal einen dummy "test2" zum testen angelegt, damit ich sehe was passiert..

Ich habe jetzt folgendes DOIF:

([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and ([HUEDevice14:bri] ne "77" or [HUEDevice14:rgb] ne "644010" or [HUEDevice14:state] eq "off")) (set HUEDevice14 rgb 644010, set HUEDevice14 bri 77, set test2 on)
DOELSE (set HUEDevice14 off, set test2 off)


Wenn ich den Schalter nun betätige, geht test2 auf on, die HUE Lampe geht auch an, aber direkt danach wieder aus, test2 auch sofort wieder aus.
Das heißt, er springt in das DOELSE.

Wenn ich das DOELSE lösche, bleibt die Lampe und auch der dummy "test2" an.



Kann mir jemand sagen, warum das DOIF in DOELSE springt ?...

So etwas kannn man nur über genaue Auswertung der Events analysieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

#7
Kann mir jemand sagen, warum das DOIF in DOELSE springt ?...

Die Bedingung wird unwahr, was sonst ;)

Edit: Zitat berichtigt

geforce28

Vielen Dank für eure Hilfe..
Habe es jetzt so gelöst, sodass es funktional ist :

([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and ([HUEDevice14:bri] ne "77" or [HUEDevice14:rgb] ne "644010" or [HUEDevice14:state] eq "off")) (set HUEDevice14 rgb 644010, set HUEDevice14 bri 77, set test2 on)
DOELSEIF
([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and ([HUEDevice14:bri] eq "77" and [HUEDevice14:rgb] eq "644010" and [HUEDevice14:state] ne "off")) (set HUEDevice14 off, set test2 off)

Otto123

Moin,

ich würde trotzdem die Werte nur abfragen und nicht als zusätzlichen  trigger nehmen:
[HUEDevice14:rgb] -> [?HUEDevice14:rgb]

Siehe Doku -> https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger

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

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

geforce28

Ah okay, danke für die Info.

Und, sorry dass ich nochmal so "blöd" nachfragen muss, aber was würde es bedeuten, wenn ich es weiterhin so ohne die "?" lasse ?
Das DOIF wird doch sowieso nur "getriggert" wenn der Schalter betätigt wird, oder verstehe ich da (mal wieder  ;D) was falsch ?...


Vielen Dank an alle. :)

Otto123

#11
Also ob DOIF es wirklich so tut kann ich dir nicht sagen, aber die Doku verstehe ich so:
Du hast vier Kriterien, in Deinem Fall bemüht jede Änderung eines diese Werte das Modul (Dein Code wird aktiv) und stellt sofort fest: ok das war nix.
Du willst es aber sowieso nur bei [SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] triggern, ansonsten interessieren die ganzen anderen Dinge nicht!

Nehmen wir mal an Du steuerst an andere Stelle rgb von 0 bis maximal Farbkombination kontinuierlich durch. Dann rennt die ganze Zeit dein DOIF mit obwohl klar ist - der Schalter ist gar nicht getriggert.

Also nur falls Dein FHEM mal zu langsam ist und Du nach neuer Serverhardware suchst, manchmal helfen auch solche Sachen in der Codierung.  8)

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

Per


geforce28

@Otto123:
Danke, verstanden, ja das macht Sinn.


@Per:
Verstehe ich nicht so ganz, was das mit dem "checkReadingEvent 1" auf sich hat.. .?

nils_

Zitat von: geforce28 am 17 Januar 2018, 21:50:27
([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and ([HUEDevice14:bri] ne "77" or [HUEDevice14:rgb] ne "644010" or [HUEDevice14:state] eq "off")) (set HUEDevice14 rgb 644010, set HUEDevice14 bri 77, set test2 on)
DOELSEIF
([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and ([HUEDevice14:bri] eq "77" and [HUEDevice14:rgb] eq "644010" and [HUEDevice14:state] ne "off")) (set HUEDevice14 off, set test2 off)


warum schaust du denn nicht nur auf den state von HUEDevice?? sind die werte für bri und rgb entscheidend??
weil du setzt die eh fix auf den Wert im ersten fall, und falls du da mal ne änderung beim setzen machst, musst du auch deine bedingungen (unnötigerweise!?) mit anpassen



([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and [?HUEDevice14:state] eq "off") (set HUEDevice14 rgb 644010, set HUEDevice14 bri 77, set test2 on)
DOELSEIF
([SZ.Nachttisch.L.Schalter_Btn_01:"Short.*"] and [?HUEDevice14:state] eq "on") (set HUEDevice14 off, set test2 off)



hab die ? mal mit eingebaut, so wie von Otto ja auch empfohlen :)
welche werte kann state denn einnehmen? gibts mehr als "on" / "off" ??
viele Wege in FHEM es gibt!