Hauptmenü

IF Abfrage

Begonnen von jutil, 14 Dezember 2022, 10:58:38

Vorheriges Thema - Nächstes Thema

jutil

Hallo zusammen,

ich kriege hier ums erbrechen leider die If Abfrage nicht hin.
Heißt, der Befehl wird ausgeführt obwohl die Bedingung nicht erfüllt wurde.

Denke das ich wieder mit Klammer und / oder Kommata durchn tüttel komme.
Kann mir bitte jemand kurz dabei helfen? Danke!


Wohnung_komplett:off { fhem "set Aussen_1,Aussen_2,Aussen_3, Licht, $EVENT; set WZLicht_1 $EVENT; sleep 3; set WZLicht_2 $EVENT; sleep 3; set WZLicht_3 $EVENT; sleep 10; set Wohnung_komplett on; set Gute_Nacht $EVENT" }
{ if ( "TV" eq "on" ) {
fhem("set harmony_36285656 command PowerToggle; set harmony_51989440 command PowerToggle; set harmony_37540046 command PowerToggle; sleep 5; set TV off; set Canton off") }}

MadMax-FHEM

#1
Zitat
{ fhem "set Aussen_1,Aussen_2,Aussen_3, Licht, $EVENT; set WZLicht_1 $EVENT; sleep 3; set WZLicht_2 $EVENT; sleep 3; set WZLicht_3 $EVENT; sleep 10; set Wohnung_komplett on; set Gute_Nacht $EVENT" }

Du gehst nach Perl -> geschweifte Klammer auf
Machst was: fhem-Befehl (Folge)
Verlässt Perl -> geschweifte Klammer zu

-> fertig

Was danach kommt müsste einen Fehler werfen?

EDIT: wenn du nur das gewollt hättest, hättest du es auch einfach ohne geschweifte Klammern und ohne fhem-Befehl eingeben können ;) :D

Zitat
if ( "TV" eq "on" )

Ist NIE wahr, weil der String "TV" nun mal nicht (und nie wird ;)  ) "on" ist.
Da ist ja mal 0% Übereinstimmung ;)

Also du müsstest für 1. Problem das if noch in die erste öffnende geschweifte Klammer bringen.
Befehle in Perl trennt man mittels Strichpunkt.
Also nach dem fhem-Befehl einen Strichpunkt (wenn im DEF-Code-Fenster / 2 Strichpunkte wenn per define in FhemWeb) und dann die if-Abfrage...

Vermutlich soll "TV" eq "on" den Status vom Fernseher abfragen/vergleichen?

if(ReadingsVal("TV", "status", "n.a.") eq "on")  ?

EDIT:
Also in Summe in etwa so (wobei das mit ReadingsVal usw. musst du wissen was da gemeint ist UND der erste fhem-Befehl [Folge] wird [weiterhin] IMMER ausgeführt):

Wohnung_komplett:off { fhem ("set Aussen_1,Aussen_2,Aussen_3, Licht, $EVENT; set WZLicht_1 $EVENT; sleep 3; set WZLicht_2 $EVENT; sleep 3; set WZLicht_3 $EVENT; sleep 10; set Wohnung_komplett on; set Gute_Nacht $EVENT");
if ( ReadingsVal("TV","state","n.a.") eq "on" ) {
fhem("set harmony_36285656 command PowerToggle; set harmony_51989440 command PowerToggle; set harmony_37540046 command PowerToggle; sleep 5; set TV off; set Canton off") }}


Zitat
set Aussen_1,Aussen_2,Aussen_3, Licht, $EVENT; set WZLicht_1 $EVENT;
Da kann man doch WZLicht_1 einfach auch vorne mit dazu nehmen? ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

jutil

Mega Antwort, danke dafür!
Ich komme mit dieser Sprache einfach nicht klar, mache dafür einfach zu wenig ...

Ich lese mich da ersteinmal in deine Antwort ein :D

Beste Grüße
Timo

jutil

Joachim ich muss noch einmal nerven, sorry.

Das funktioniert bei mir nicht.
Also, ja stimmt
Wohnung_komplett:off { fhem ("set Aussen_1,Aussen_2,Aussen_3, Licht, $EVENT; set WZLicht_1 $EVENT; sleep 3; set WZLicht_2 $EVENT; sleep 3; set WZLicht_3 $EVENT; sleep 10; set Wohnung_komplett on; set Gute_Nacht $EVENT");
Wird immer ausgeführt und das soll er auch.

Das,
if ( ReadingsVal("TV","state","n.a.") eq "on" ) {
fhem("set harmony_36285656 command PowerToggle; set harmony_51989440 command PowerToggle; set harmony_37540046 command PowerToggle; sleep 5; set TV off; set Canton off") }}

funktioniert so leider nicht.
Habe es auch mit If (Value(.... etc. sowie diversen anderen Variablen hinter "state", "?" ausprobiert, leider erfolglos.

TV ist im Grunde nur eine IT Steckdose deren Status abgefragt und in Abhängigkeit eine Funktion ausgeführt werden soll, aber ich denke das war soweit klar.

Zu deinem Hinweis mit dem Kompakten Code. Ich hatte den Code schon einmal etwas komprimierter aber da wollten komischerweise die milight brigde (WZLicht...) nicht so richtig mitspielen daher hab ich es wieder getrennt.

Hoffe Du kannst hier noch einmal einsteigen.

Beste Grüße
Timo

MadMax-FHEM

#4
Naja, ohne ein list des/der Devices konnte ich nur raten.

Ich weiß nicht, ob "state" das richtige Reading ist...

EDIT: und das Device heißt aber auch "TV"? EDIT: ok, heißt es wohl, nachdem du es ja mittels set TV off ausschaltest ;)

Und lass Value!

Value() "frägt" den STATE (ja das INTERNAL!) ab und STATE wird durch z.B. stateFormat beeinflusst und dann hat mal zwar passende "Optik" aber die Logik (mittels Value-Abfrage) funktioniert nicht (mehr).

Das notify triggert aber generell?
Aus dem Eventmonitor erzeugt?

-> davon gehe (ging) ich aus.

Ansonsten wären halt lists der beteiligten Devices, mindestens derer von denen etwas abgefragt werden soll(en) hilfreich.

Hier zu lesen: https://forum.fhem.de/index.php/topic,71806.0.html

EDIT: wie/wo gibst du ein? Frage wegen der Strichpunkte. Und: geht nicht? Gar nicht, nur das if nicht? Fehler im Log? Also generell: ohne ausreichende Infos kann ich (und andere Helfer) nur raten und das ist anstrengend...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wernieman

Wenn Du in FHEM eingiebst (Beim Device), kannst Du die Lesbarkeit/Logik auch durch Formatieren verbessern:
Wohnung_komplett:off
{
  fhem ("set Aussen_1,Aussen_2,Aussen_3, Licht, $EVENT; set WZLicht_1 $EVENT; sleep 3; set WZLicht_2 $EVENT; sleep 3; set WZLicht_3 $EVENT; sleep 10; set Wohnung_komplett on; set Gute_Nacht $EVENT");
  if ( ReadingsVal("TV","state","n.a.") eq "on" )
   {
     fhem("set harmony_36285656 command PowerToggle; set harmony_51989440 command PowerToggle; set harmony_37540046 command PowerToggle; sleep 5; set TV off; set Canton off")
   }
}


Hast Du Dir mal den state (nicht STATE) vom Device angesehen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html