Hauptmenü

[gelöst] DOIF Verschachtelt

Begonnen von Shojo, 04 August 2017, 12:01:07

Vorheriges Thema - Nächstes Thema

Shojo

Hiho,

Wie sieht das eigentlich mit der Verschachtlung von DOIF´s aus?

Das hier würde so ja nicht gehen...


DOIF ([IT_F000FFFFFF:STATE] eq "on")
DOIF([AVReceiver:power]eq "on")
(set AVReceiver:FILTER=!input=cd cd)
(set AVReceiver:FILTER=!volume=38 38)
(set AVReceiver:FILTER=!listeningMode=extendedStereo extendedStereo)
DOELSE
({GetHttpFile("192.168.0.120","/json?pass=xxxxxx&plain=[{%27data%27:%27A55A38C7%27,%20%27type%27:%27NEC%27,%20%27length%27:32,%27cdelay%27:5000},{%27data%27:%27A55A32CD%27,%20%27type%27:%27NEC%27,%20%27length%27:32}]")})
DOELSEIF([TV_Parasonic_ETW60:power] eq "on")
(set AVReceiver:FILTER=!input=hdmi1 hdmi1)
(set AVReceiver:FILTER=!volume=29 29)
DOELSE
(set AVReceiver:power=!power=off off)
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

CoolTux

Da musst Du dann IF nehmen. Das ist ein FHEM Befehl. Schaue mal in die Commandref
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

Shojo

#2
Dann kann ich es doch auch gleich in der 99_myUtils.pm lassen.
Oder hat es sonst noch Vorteile es direkt in FHEM abzuarbeiten?


##############################################
# Schaltlogik für Bluetooth von den Dot_Wohnzimmer
# und den AVReceiver
#
sub NotifyBluetooth($){
my ($Device) = @_;
my $BTState = ReadingsVal("IT_F000FFFFFF","state","");
my $TVSate = fhem("get TV_Parasonic_ETW60 power");
my $AVSate = fhem("get AVReceiver power");

# Einschaltlogik Bluetooth
if($Device eq "IT_F000FFFFFF")
{
if($BTState eq "on")
{
if($AVSate eq "on")
{
fhem("set AVReceiver input cd");
fhem("set AVReceiver volume 38");
fhem("set AVReceiver listeningMode extendedStereo");
}
else
{
# Über IR toggle AVReceiver und auf CD-Input wechseln mit fünf Sekunden Pause
GetHttpFile("192.168.0.120","/json?pass=xxxxx&plain=[{%27data%27:%27A55A38C7%27,%20%27type%27:%27NEC%27,%20%27length%27:32,%27cdelay%27:5000},{%27data%27:%27A55A32CD%27,%20%27type%27:%27NEC%27,%20%27length%27:32}]");
}
}
elsif($TVSate eq "on")
{
fhem("set AVReceiver input hdmi1");
fhem("set AVReceiver volume 29");
}
else
{
fhem("set AVReceiver off");
}
}

# Ausschaltlogik AVReceiver
elsif($Device eq "AVReceiver")
{
if($BTState eq "on")
{
fhem("set IT_F000FFFFFF off");
}
}
}



EDIT:

Oder geht das so ?

([IT_F000FFFFFF:STATE] eq "on")
(IF([AVReceiver:power] eq "on")(
(set AVReceiver:FILTER=!input=cd cd)
(set AVReceiver:FILTER=!volume=38 38)
(set AVReceiver:FILTER=!listeningMode=extendedStereo extendedStereo)
)
ELSE(
({GetHttpFile("192.168.0.120","/json?pass=xxxxxx&plain=[{%27data%27:%27A55A38C7%27,%20%27type%27:%27NEC%27,%20%27length%27:32,%27cdelay%27:5000},{%27data%27:%27A55A32CD%27,%20%27type%27:%27NEC%27,%20%27length%27:32}]")})
))
DOELSEIF([TV_Parasonic_ETW60:power] eq "on")
(set AVReceiver:FILTER=!input=hdmi1 hdmi1)
(set AVReceiver:FILTER=!volume=29 29)
DOELSE
(set AVReceiver:power=!power=off off)


FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

amenomade

Ja, so sollte es gehen. Allerdings triggert so die Bedingung [AVReceiver:power] das DOIF nicht. Es wird nur bewertet und entspr. die Entscheidung it/else getroffen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Shojo

Leider nein bekomme den Fehler:
2017-08-04 13:17:11 DOIF Bluetooth_AVReceiver_DOIF error: IF([AVReceiver:power] eq "on")(set AVReceiver:FILTER=!input=cd cd): Unknown command IF([AVReceiver:power], try help. ELSE({GetHttpFile("192.168.0.120","/json?pass=xxx&plain=[{'data':'7A55A38C7', 'type':'NEC', 'length':32,'cdelay'5000},{'data':'A55A32CD', 'type':'NEC', 'length':32}]")}): Unknown command ELSE, try help.
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Per

Pack mal nen Leerzeichen hinter IF.

Shojo

Zitat von: Per am 04 August 2017, 13:51:38
Pack mal nen Leerzeichen hinter IF.

Japp das wars  ::)

nun wird aber noch das ELSE angenörgeld..
ELSE ({GetHttpFile("192.168.0.120","/json?pass=xxxxx&plain=[{'data':'7A55A38C7', 'type':'NEC', 'length':32,'cdelay'5000},{'data':'A55A32CD', 'type':'NEC', 'length':32}]")}): Unknown command ELSE, try help.
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Per

Schon mal in der CommandRef geschaut? Bissel viele Klammernpaare, bevor dein ELSE kommt!

Shojo

#8
Zitat von: Per am 04 August 2017, 15:18:51
Schon mal in der CommandRef geschaut? Bissel viele Klammernpaare, bevor dein ELSE kommt!

Sicher habe ich das, aber auch wenn nur ein Klammernpaar davor stecht kommt der gleiche Fehler...

Edit:
Habe jetzt mir das ganze mal in nano angesehen, da war ein Sonderzeichen vor den Else habe es nun entfernt und es läuf....

Danke für die Unterstützung! 
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

amenomade

ZitatHabe jetzt mir das ganze mal in nano angesehen, da war ein Sonderzeichen vor den Else habe es nun entfernt und es läuf....

Wieso kann ein unsichbare Sonderzeichen da kommen? Fhem speichert die DEF nicht, bis alles korrekt ist.





:-X
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Shojo

Das kann ich dir leider nicht sagen....
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Per

Vllt. ein <tab>, DOIF war da anfangs auch recht sensibel.

Damian

Zitat von: amenomade am 04 August 2017, 15:33:56
Wieso kann ein unsichbare Sonderzeichen da kommen? Fhem speichert die DEF nicht, bis alles korrekt ist.

Meistens durch copy & paste. FHEM speichert alles, was DOIF nicht anmeckert. DOIF macht keinen vollständigen Syntaxcheck - es werden insbesondere im Vorfeld Klammern-Paare geprüft.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Shojo

#13
Ich habe noch mal eine Verständnisfrage, ich tue mich nun doch etwas schwer mit der Logik vom DOIF... Sorry!

Muss ich tatsächlich ein DOIF so auf bauen das auch bei den Event [IT_F000FFFFFF:state] eq "off" and [TV_Parasonic_ETW60:power] eq "on" der cmd_2 ausgeführt wird?

([IT_F000FFFFFF:state] eq "on")
(IF ([AVReceiver:power] eq "on")
(
set AVReceiver:FILTER=input!=cd input cd,
set AVReceiver:FILTER=volume!=38 volume 38,
set AVReceiver:FILTER=listeningMode!=extendedStereo listeningMode extendedStereo
)
ELSE
(
{GetHttpFile("192.168.0.120","/json?pass=xxxx&plain=[{%27data%27:%27A55A38C7%27,%20%27type%27:%27NEC%27,%20%27length%27:32,%27cdelay%27:5000},{%27data%27:%27A55A32CD%27,%20%27type%27:%27NEC%27,%20%27length%27:32}]")}
))
DOELSEIF([IT_F000FFFFFF:state] eq "off" and [TV_Parasonic_ETW60:power] eq "on")
(
set AVReceiver:FILTER=input!=hdmi1 input hdmi1,
set AVReceiver:FILTER=volume!=29 volume 29
)


Und dies reicht so nicht aus?! (man beachte die DOELSEIF Bedienung)

([IT_F000FFFFFF:state] eq "on")
(IF ([AVReceiver:power] eq "on")
(
set AVReceiver:FILTER=input!=cd input cd,
set AVReceiver:FILTER=volume!=38 volume 38,
set AVReceiver:FILTER=listeningMode!=extendedStereo listeningMode extendedStereo
)
ELSE
(
{GetHttpFile("192.168.0.120","/json?pass=xxxx&plain=[{%27data%27:%27A55A38C7%27,%20%27type%27:%27NEC%27,%20%27length%27:32,%27cdelay%27:5000},{%27data%27:%27A55A32CD%27,%20%27type%27:%27NEC%27,%20%27length%27:32}]")}
))
DOELSEIF([TV_Parasonic_ETW60:power] eq "on")
(
set AVReceiver:FILTER=input!=hdmi1 input hdmi1,
set AVReceiver:FILTER=volume!=29 volume 29
)
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

Shojo

Hat da wer noch eine Antwort für mich?
Oder war jetzt die Frage einfach zu blöd? :)
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It