Fehler in der IF-Bedungung mit mehreren Devices

Begonnen von kblc, 05 November 2017, 22:36:20

Vorheriges Thema - Nächstes Thema

kblc

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
SPS, Arduino, Controllino, Sensortechnik, Elektronik

Otto123

#1
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
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

Pfriemler

Und dann müsste nicht noch eine zusammenfassende Klammer um alle Bedingungen?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Otto123

#3
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
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

amenomade

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:
   

   

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

Pfriemler

Ooh ... ihr seid so gemein ...  8) obwohl ... Otto hats ja gesagt.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

amenomade

Das ist nicht böse gemeint. Ich bin immer hilfsbereit, das wisst ihr schon. Das heisst aber nicht, dass man keinen Spass haben kann ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Pfriemler

#7
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?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

CoolTux

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
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

kblc

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
SPS, Arduino, Controllino, Sensortechnik, Elektronik

CoolTux

Structure_Type kannst selber benennen. soll die structure besser beschreiben. Zb LichtKueche
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

Pfriemler

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)

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

kblc

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
SPS, Arduino, Controllino, Sensortechnik, Elektronik