FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: kblc am 05 November 2017, 22:36:20

Titel: Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: kblc am 05 November 2017, 22:36:20
Hallo,
ich habe eine ganz große Küche mit mehreren Deckenlampen. Wenn alle Deckenlampen an sind, ist der Raum überreichtet. Es ist ja kein Labor. Daher möchte ich bei allen eingeschalteten Lichtern einige automatisch abschalten lassen.

Hier meine Programmierung mit der ich immer eine Fehlermeldung bekomme.

Melder2:on { if ("HM_1C8D99_Sw_01" eq "on") && ("HM_1C6E6E" eq "on") && ("HM_1B3694" eq "on") && ("HM_2FE643" eq "on") {fhem( "set HM_2FE643,HM_1C6E6E off" )} }

Melder2 ist ein dummy der über ein jeweiliges Notify in allen angegebenen  Devices (HM_1C8D99_Sw_01,HM_1C6E6E,HM_1B3694,HM_2FE643) bei on auf on gesetzt wird. "ON" gibt ja eigentlich immer ein event - oder?
Wenn also Melder2 auf on steht, soll die IF Bedingung prüfen, ob alle Licher an sind und dann die beiden abschalten

set HM_2FE643,HM_1C6E6E off

Allerdings bekomme ich immerwieder diese Fehlermeldung:
syntax error at (eval 49295) line 1, near ") &&"
syntax error at (eval 49295) line 1, near "}}"


Kann mir bitte bitte jemand einen kleinen Tipp geben, wo mein Fehlerlein sitzt?

Vielen lieben Dank.

KBLc
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: Otto123 am 05 November 2017, 22:46:18
Hi,

kein Fehlerlein, leider.
1. Es gibt if und IF - das solltest Du einfach mal beachten.
2. Dein Code verwendet if (Perl) aber was Du dann machst ist ein If oder iF Weg?

Sowas -> ("HM_1C8D99_Sw_01" eq "on") gibt es nicht!
Entweder ([HM_1C8D99_Sw_01] eq "on") für IF oder
(Value ("HM_1C8D99_Sw_01") eq "on") für if

Und wenn Du Dich entschieden hast ob if oder IF können wir den Rest  klären.  :)

Gruß Otto
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: Pfriemler am 05 November 2017, 22:49:18
Und dann müsste nicht noch eine zusammenfassende Klammer um alle Bedingungen?
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: Otto123 am 05 November 2017, 22:51:19
soweit war ich noch nicht  ;D

Auf alle Fälle muss um die gesamte Bedingung eine Klammer - aber wenn die Bedingung und das If nicht stimmt ist die auch egal.  :o
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: amenomade am 06 November 2017, 09:23:52
Zitat von: Otto123 am 05 November 2017, 22:46:18
Sowas -> ("HM_1C8D99_Sw_01" eq "on") gibt es nicht!

Gibt es doch! Kann man auch so schreiben:
(0)

Sowas Melder2:on { if ("HM_1C8D99_Sw_01" eq "on") && ("HM_1C6E6E" eq "on") && ("HM_1B3694" eq "on") && ("HM_2FE643" eq "on") {fhem( "set HM_2FE643,HM_1C6E6E off" )} }kann man dann so kürzen:
Melder2:on { if (0) && (0) && (0) && (0) {fhem( "set HM_2FE643,HM_1C6E6E off" )} }
Kann man wieder kürzen:
Melder2:on { if (0) {fhem( "set HM_2FE643,HM_1C6E6E off" )} }
Und dann wieder kürzen:
   

   

;)
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: Pfriemler am 06 November 2017, 11:17:47
Ooh ... ihr seid so gemein ...  8) obwohl ... Otto hats ja gesagt.
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: amenomade am 06 November 2017, 12:15:04
Das ist nicht böse gemeint. Ich bin immer hilfsbereit, das wisst ihr schon. Das heisst aber nicht, dass man keinen Spass haben kann ;)
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: Pfriemler am 06 November 2017, 18:16:58
Oh, auch hier Trollalarm. ... die Beträge wurden gelöscht.

Zitat von: amenomade am 06 November 2017, 12:15:04
Das ist nicht böse gemeint...
Das war auch nicht so aufgefasst, siehe Smilie. Ich frage mich nur, wann der Fragesteller dahinter kommt, dass der ursprünglich formulierte Vergleich ein statischer ist und Du die Ergebnisse ganz logisch und folgerichtig ohne Verlust an Funktionalität zusammengefasst hast. Ich habe eine paar Monate gebraucht, bis ich etwas bei perl angekommen bin. Nicht umsonst bin ich ein Freund von IF und DOIF.
Und zur Sache: Wenn man nicht den Status, sondern ein Reading vergleichen will, braucht es ReadingsVal($device,$reading,default) im if. Oder [device:reading] in IF und DOIF.

@kblc: Du bist inzwischen weitergekommen?
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: CoolTux am 06 November 2017, 20:36:39
Ich würde ja eine structure nehmen, alle Lampen rein machen und dann so einstellen das wenn alle Lampen an sind die Structure an ist. Dann ein notify auf die structure an und 3-4 Lampen aus schalten lassen.
Nur so ne Idee
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: kblc am 06 November 2017, 21:02:17
Zitat von: Otto123 am 05 November 2017, 22:46:18
1. Es gibt if und IF - das solltest Du einfach mal beachten.
Entschuldigung Otto123, das war schon das dritte mal. Ich werde mich bessern.

Zitat von: Pfriemler am 05 November 2017, 22:49:18
Und dann müsste nicht noch eine zusammenfassende Klammer um alle Bedingungen?
OK, vielen Dank

Zitat von: amenomade am 06 November 2017, 09:23:52
Gibt es doch! Kann man auch so schreiben:
(0)

Sowas Melder2:on { if ("HM_1C8D99_Sw_01" eq "on") && ("HM_1C6E6E" eq "on") && ("HM_1B3694" eq "on") && ("HM_2FE643" eq "on") {fhem( "set HM_2FE643,HM_1C6E6E off" )} }kann man dann so kürzen:
Melder2:on { if (0) && (0) && (0) && (0) {fhem( "set HM_2FE643,HM_1C6E6E off" )} }
Kann man wieder kürzen:
Melder2:on { if (0) {fhem( "set HM_2FE643,HM_1C6E6E off" )} }
Und dann wieder kürzen:
   

   

;)
Oh man, jetzt hab ich es kapiert: meine IF Bedingung ist voll Schrott.  ??? Oh nein, und ich dachte ich kenne mich ein wenig mittlerweile

Zitat von: Pfriemler am 06 November 2017, 11:17:47
Ooh ... ihr seid so gemein ...  8) obwohl ... Otto hats ja gesagt.
aus.
Ich muss gestehen, Otto hat mir diesen Fehler nicht zum ersten Mal verbessert.

Zitat von: amenomade am 06 November 2017, 12:15:04
Das ist nicht böse gemeint. Ich bin immer hilfsbereit, das wisst ihr schon. Das heisst aber nicht, dass man keinen Spass haben kann ;)
Spass gehört zum Leben dazu. In einer Zeit, in der wir heute leben, ist es doch schön, wenn man auch mal lachen kann. Ich bin auch nicht böse, dass es "auf meine Kosten" geht. Denn ich bin ja kein Profi. Außerdem sehr dankbar, dass ihr meine "dummen" Fragen immer mit tragt und mir halt.
Bei einem Baby das in seiner Entwicklung ist, und bei den ersten Laufversuchen hinfällt wird auch gelacht. Und da ist es doch auch normal. Ergo: Ich lache gerne mit.

Zitat von: Pfriemler am 06 November 2017, 18:16:58
Oh, auch hier Trollalarm.
Das war auch nicht so aufgefasst, siehe Smilie. Ich frage mich nur, wann der Fragesteller dahinter kommt, dass der ursprünglich formulierte Vergleich ein statischer ist und Du die Ergebnisse ganz logisch und folgerichtig ohne Verlust an Funktionalität zusammengefasst hast. Ich habe eine paar Monate gebraucht, bis ich etwas bei perl angekommen bin. Nicht umsonst bin ich ein Freund von IF und DOIF.
Und zur Sache: Wenn man nicht den Status, sondern ein Reading vergleichen will, braucht es ReadingsVal($device,$reading,default) im if. Oder [device:reading] in IF und DOIF.

@kblc: Du bist inzwischen weitergekommen?
:)

Nein, überhaupt nicht. Ich bin nicht weitergekommen. Leider. Aber ich vermute mit allen guten Ratschlägen und Hinweisen werde ich einen Neuen Versuch starten und erneut eine IF Bedingung zusammenstellen.

Ich glaube ich bleibe besser mal bei IF. Aber im Gegensatz zu if, wo ich mit && ein UND - Glied setzen kann, hab ich keine Ahnung wie ich das bei IF macht. Kann mir das noch jemand verraten?

Was ist in structure <struct_type>???
define <name> structure <struct_type> <dev1> <dev2> ...
ZitatJedes zugefügt Device erhält zwei neue Attribute <struct_type>=<name> sowie <struct_type>_map wenn es zu einer Struktur zugefügt wurde.
CommandRev ist super geschrieben. Ich werde es nicht und nie kritisieren, was ich kritisiere bin ich selbst. Ich verstehe es nicht so ganz.
Vielen Dank nochmal an Alle

KBLc
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: CoolTux am 06 November 2017, 21:06:50
Structure_Type kannst selber benennen. soll die structure besser beschreiben. Zb LichtKueche
Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: Pfriemler am 06 November 2017, 21:14:01
Zitat von: kblc am 06 November 2017, 21:02:17
Was ist in structure <struct_type>???
Cooltux war schneller. Wollte auch sagen: Kannst Du (fast) beliebig wählen. Wird als Attribut den zu überwachenden Geräten zugefügt, mit dem Namen der structure. Quasi als Hinweis dass dieses Gerät in der Struktur verwendet wird.
Heißt bei mir bspw. "available" (Handyanwesenheitsüberwachung) oder "struct_AlleLichter" (Überwachung aller steuerbaren Lampen).

und zum IF:
IF ([HM_1C8D99_Sw_01] eq "on" and [HM_1C6E6E] eq "on" and [HM_1B3694] eq "on" and [HM_2FE643] eq "on") (set HM_2FE643,HM_1C6E6E off)

Titel: Antw:Fehler in der IF-Bedungung mit mehreren Devices
Beitrag von: kblc am 10 November 2017, 17:13:43
Hallo und herzlichen Dank für alle Tipps, die informativen Diskussionen und vor allem das Wissen, das ihr dadurch vermittelt.

Ich habe es nicht vergessen und leider im Moment auch noch nicht geschafft. Aber ich bin noch am durcharbeiten der verschiedenen Wege und versuche gerade einiges aus. Wenn ich eine Lösung habe oder wenn ich alle Informationen durch habe und mir CommandRev, Wiki und das Forum nicht mehr weiterhelfen können, melde ich mich wieder.

Vielen Dank.


KBLc