Klammerproblem/Syntax oder ein Mix aus Art und Weise :-) [GELÖST]

Begonnen von Master_Nick, 16 Mai 2023, 17:06:06

Vorheriges Thema - Nächstes Thema

Master_Nick

Moin moin :-)

Ich hab ein Doif, dass mir in meiner Abwesenheit infos über ausgelöste Bewegungsmelder inkl. Raumangabe liefert.
Nun merkte ich - oh es gibt bei dem einen Bewegungsmelder IMMER eine Info, solange der ein Event hat -> also eine IF in den Ausführungsteil.
Seither hab ich nun ein Klammer Problem.

Vom Gefühl her glaub ich ich mixe zwei Modis :-D Und weiß nicht so ganz weiter.

Ohne das IF im Ausführungsteil funktioniert es ganz gut - nur halt bei jedem Event des einen Melders (die anderen haben keine Lichtmessung und geben nur Motion aus).

Mag mir jemand auf die Sprünge helfen?

(["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent") (IF ([$DEVICE] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))}))
Error:
error
IF ([Motion_Kueche] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("Motion_Kueche","room", "Motion_Kueche"))}): IF: no right bracket: {(AttrVal("Motion_Kueche"

Funktionierend ohne IF war es:
(["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))})
Oder kann ich sinnvoller auf das Reading "motion" oder eben NUR den state reagieren schon im Bedingunsteil des DOIF -also eben ausschließen, dass eine Lichtmessung das DOIF triggert?

Lg und Danke!
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

Ist das alles in deinem DOIF oder hast du mehrere Zweige?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

Das ist alles.

define Movement_DOIF DOIF (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent") (IF ([$DEVICE] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))}))
attr Movement_DOIF do always
attr Movement_DOIF group DOIF FHEM
attr Movement_DOIF room ~Technikraum
attr Movement_DOIF verbose 1
#  DEF        (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent") (IF ([$DEVICE] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))}))
#  FUUID      64523548-f33f-bf4c-0c43-b99966ebea63f6a4
#  FVERSION  98_DOIF.pm:0.274870/2023-04-26
#  MODEL      FHEM
#  NAME      Movement_DOIF
#  NOTIFYDEV  .*(^Motion_[A-Z]).*,Anwesenheit,global
#  NR        232
#  NTFY_ORDER 50-Movement_DOIF
#  STATE      cmd_1
#  TYPE      DOIF
#  VERSION    27487 2023-04-26 08:04:04
#  eventCount 201
#  READINGS:
#    2023-05-16 19:52:09  Device          Motion_Flur
#    2023-05-16 19:24:51  cmd            1
#    2023-05-16 19:24:51  cmd_event      Motion_Flur
#    2023-05-16 19:24:51  cmd_nr          1
#    2023-05-16 19:25:07  e_Anwesenheit_STATE present
#    2023-05-16 19:24:51  error          IF ([Motion_Flur] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("Motion_Flur","room", "Motion_Flur"))}): IF: no right bracket: {(AttrVal("Motion_Flur"
#    2023-05-16 17:06:54  mode            enabled
#    2023-05-16 19:24:51  state          cmd_1
#  Regex:
#    accu:
#    bar:
#    barAvg:
#    collect:
#    cond:
#      :
#        0:
#          "^Motion_[A-Z]:on" ^Motion_[A-Z]:on
#      Anwesenheit:
#        0:
#          &STATE    ^Anwesenheit$
#  attr:
#    cmdState:
#    wait:
#    waitdel:
#  condition:
#    0          ::EventDoIf('^Motion_[A-Z]',$hash,'on',0) and ::InternalDoIf($hash,'Anwesenheit','STATE') eq "absent"
#  do:
#    0:
#      0          IF ([$DEVICE] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))})
#    1:
#  helper:
#    NOTIFYDEV  .*(^Motion_[A-Z]).*,Anwesenheit,global
#    event      transmission-state: incoming publish received
#    globalinit 1
#    last_timer 0
#    sleeptimer -1
#    timerdev  Motion_Flur
#    timerevent transmission-state: incoming publish received
#    triggerDev Motion_Flur
#    timerevents:
#      transmission-state: incoming publish received
#    timereventsState:
#      transmission-state: incoming publish received
#    triggerEvents:
#      transmission-state: incoming publish received
#    triggerEventsState:
#      transmission-state: incoming publish received
#  internals:
#    all        Anwesenheit:STATE
#  readings:
#  trigger:
#  uiState:
#  uiTable:
#
setstate Movement_DOIF cmd_1
setstate Movement_DOIF 2023-05-16 19:52:09 Device Motion_Flur
setstate Movement_DOIF 2023-05-16 19:24:51 cmd 1
setstate Movement_DOIF 2023-05-16 19:24:51 cmd_event Motion_Flur
setstate Movement_DOIF 2023-05-16 19:24:51 cmd_nr 1
setstate Movement_DOIF 2023-05-16 19:25:07 e_Anwesenheit_STATE present
setstate Movement_DOIF 2023-05-16 19:24:51 error IF ([Motion_Flur] eq "on") (set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("Motion_Flur","room", "Motion_Flur"))}): IF: no right bracket: {(AttrVal("Motion_Flur"
setstate Movement_DOIF 2023-05-16 17:06:54 mode enabled
setstate Movement_DOIF 2023-05-16 19:24:51 state cmd_1

Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

ich würde es gleich in DOIF-Perl machen. Probiere mal:

DOIF { if (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent"  and [$DEVICE:state] eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

#4
Vielen Dank dir erstmal :-)
Ich glaube damit hab ich bisher kaum oder gar nicht gearbeitet :-D

Nehme ich das mit dem "DOIF" in die Zeile?

Quasi so?
define Movement_DOIF DOIF DOIF { if (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent"  and [$DEVICE:state] eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}}
attr Movement_DOIF do always
attr Movement_DOIF group DOIF FHEM
attr Movement_DOIF room ~Technikraum
attr Movement_DOIF verbose 1
#  DEF        DOIF { if (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent"  and [$DEVICE:state] eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}}
#  FUUID      64523548-f33f-bf4c-0c43-b99966ebea63f6a4
#  FVERSION  98_DOIF.pm:0.274870/2023-04-26
#  MODEL      Perl
#  NAME      Movement_DOIF
#  NOTIFYDEV  Anwesenheit,.*(^Motion_[A-Z]).*,global
#  NR        232
#  NTFY_ORDER 50-Movement_DOIF
#  STATE      initialized
#  TYPE      DOIF
#  VERSION    27487 2023-04-26 08:04:04
#  eventCount 214
#  READINGS:
#    2023-05-16 20:29:37  mode            enabled
#    2023-05-16 20:29:37  state          initialized
#  Regex:
#    accu:
#    bar:
#    barAvg:
#    collect:
#    cond:
#      :
#        0:
#          "^Motion_[A-Z]:on" ^Motion_[A-Z]:on
#      Anwesenheit:
#        0:
#          &STATE    ^Anwesenheit$
#  attr:
#    cmdState:
#    wait:
#    waitdel:
#  condition:
#    0          if (::EventDoIf('^Motion_[A-Z]',$hash,'on',0) and ::InternalDoIf($hash,'Anwesenheit','STATE') eq "absent"  and ::ReadingValDoIf($hash,'$DEVICE','state') eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}
#  helper:
#    NOTIFYDEV  Anwesenheit,.*(^Motion_[A-Z]).*,global
#    globalinit 1
#    last_timer 0
#    sleeptimer -1
#  internals:
#    all        Anwesenheit:STATE
#  perlblock:
#    0          DOIF
#  uiState:
#  uiTable:
#
setstate Movement_DOIF initialized
setstate Movement_DOIF 2023-05-16 20:29:37 mode enabled
setstate Movement_DOIF 2023-05-16 20:29:37 state initialized


EDIT--> Rubberducking -> man sieht hier ja sogar das DOIF DOIF ^^ Also NEIN!

Habe es nun so drin und teste direkt mal:
define Movement_DOIF DOIF { if (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent"  and [$DEVICE:state] eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}}
attr Movement_DOIF do always
attr Movement_DOIF group DOIF FHEM
attr Movement_DOIF room ~Technikraum
attr Movement_DOIF verbose 1
#   DEF        { if (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent"  and [$DEVICE:state] eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}}
#   FUUID      64523548-f33f-bf4c-0c43-b99966ebea63f6a4
#   FVERSION   98_DOIF.pm:0.274870/2023-04-26
#   MODEL      Perl
#   NAME       Movement_DOIF
#   NOTIFYDEV  Anwesenheit,.*(^Motion_[A-Z]).*,global
#   NR         232
#   NTFY_ORDER 50-Movement_DOIF
#   STATE      initialized
#   TYPE       DOIF
#   VERSION    27487 2023-04-26 08:04:04
#   eventCount 215
#   READINGS:
#     2023-05-16 20:32:48   mode            enabled
#     2023-05-16 20:32:48   state           initialized
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       :
#         0:
#           "^Motion_[A-Z]:on" ^Motion_[A-Z]:on
#       Anwesenheit:
#         0:
#           &STATE     ^Anwesenheit$
#   attr:
#     cmdState:
#     wait:
#     waitdel:
#   condition:
#     0           if (::EventDoIf('^Motion_[A-Z]',$hash,'on',0) and ::InternalDoIf($hash,'Anwesenheit','STATE') eq "absent"  and ::ReadingValDoIf($hash,'$DEVICE','state') eq "on") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}
#   helper:
#     NOTIFYDEV  Anwesenheit,.*(^Motion_[A-Z]).*,global
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#   internals:
#     all         Anwesenheit:STATE
#   perlblock:
#     0          block_01
#   uiState:
#   uiTable:
#
setstate Movement_DOIF initialized
setstate Movement_DOIF 2023-05-16 20:32:48 mode enabled
setstate Movement_DOIF 2023-05-16 20:32:48 state initialized

Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

-> Da passiert nun gar nix  :o

Device (also den Melder) getriggert und Abwesenheit = absent -> Keine Meldung -> DOIF weiter auf "initialized".
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

Wie hast du getestet?

Wenn nichts passiert und der Block auf executed steht, dann ist die Bedingung einfach nicht wahr.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

Ich hab mein WLAN aus am Handy = Anwesenheit -> absent.
Laufe in den Flur wenn der Melder auf "off" ist.

Melder wechselt auf on.
Anwesenheit = absent.

Somit sollte es ja getriggert werden.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

#8
Ah eine Log Meldung:

Oh sorry die war von der falschen Uhrzeit :-D


Mhhh also es passiert ja "etwas":

ZitatDevice Motion_Flur 2023-05-16 20:41:28
block_01 executed2023-05-16 20:41:28
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

@Damian VIELEN DANK!!!

Hab es  -> OFF und ON waren falsch ;-)
Habe es dann auch noch direkt auf das "motion" Reading geändert.
True und False sind es unter der Haube -> hab es angepasst wie folgt:

{ if (["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent"  and [$DEVICE:motion] eq "true") {fhem_set "GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: ".AttrVal($device,"room", $device)}}

Einen schönen Abend :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

Guten Morgen,

@Damian gab es eigentlich irgendwas, dass ich falsch gemacht hatte oder geht ein IF nicht im Ausführungsteil bei nicht PERL Mode?
Gibt es irgendwo eine Festlegung wann welche Art RegEx genutzt werden muss?

Danke dir :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Damian

Das geht auch mit IF, das Problem ist hier das Komma, das als Trennzeichen beim IF-Befehl gilt, daher muss man die Anweisung zusätzlich Klammern.

(["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent") (IF ([$DEVICE] eq "on") ((set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))})))
Allerdings auch im FHEM-Modus ist das IF überflüssig, wenn man die Bedingung [$DEVICE] eq "on" in die DOIF-Bedingung mit and aufnimmt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

#13
Mh habe die Version mal getestet, es kommen dabei cmd1 und cmd2 raus - war aber gerade auch mur am Mobiltelfon - da ist Debuggen doof.

Funktionieren tut die Version so nicht.


**EDIT:
Guten Morgen :-)
Gerade nochmal angesehen - da war logischerweise noch "on" statt "true" und ohne Eingrenzung auf das reading motion :)

Teste gerade nochmal.



(["^Motion_[A-Z]:on"] and [Anwesenheit] eq "absent" and [$DEVICE:motion] eq "true") ((set GoogleCloudMessages send Homeland|Bewegung in Abwesenheit|Bewegung im Raum: {(AttrVal("$DEVICE","room", "$DEVICE"))}))
So tut es :-)

Danke dir!
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)