FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gear am 02 Juni 2018, 11:22:44

Titel: [Gelöst] DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 11:22:44
Guten Tag Zusammen,

ich habe mich heute mal an DOIF herangetastet.
Mein Vorhaben ist per Dummy ein Relais zu schalten 15s danach via WOL den Server zu starten, was natürlich auch klappt.
Wenn ich im Dummy "ShutDown" wähle, dann fährt der Server herunter.
Nun haben wir im Dummy swn state "ShutDown" und in WOL isRunning als "false", nun soll das Relais wieder abgeschaltet werden und der Dummy auf OFF gesetzt werden.

Mein DOIF: (Die Zeilenumbrüche sind im DOIF nicht, die hab ich hier einfach mal rein geamcht, zwecks Übersicht)
([Dummy.Start.Server.Main:"ON"]) (set WZ.ID003.Server.Main ON,define at_tmp1 at +00:00:15 set WOL.IT.Server.Main ON)
DOELSEIF ([WOL.IT.Server.Main isRunning: "false"] and [Dummy.Start.Server.Main:"ShutDown"]) (set Dummy.Start.Server.Main OFF,set WZ.ID003.Server.Main OFF)
DOELSEIF ([Dummy.Start.Server.Main:"ShutDown"]) (set WOL.IT.Server.Main OFF)


Ich möchte gerne auf "isRunning: false" abfragen.

Ich bedanke mich bei euch und wünsche einen schönen Samstag.

Beste Grüße
Gear
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 11:52:40
([WOL.IT.Server.Main isRunning: "false"] and [Dummy.Start.Server.Main:"ShutDown"])

Das ist dein Problem. Du triggerst auf ein Event und verknüpftst ein and mit einem zweiten Event. Es wird also auf die Nanosekunde genau erwartet das beide Events kommen. Das geht nicht. Du musst eine Zustandsabfrage aus einem der beiden machen.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 12:01:24
Okey, das habe ich mir schon fast gedacht...

Also sprich auf einen Triggern und dann Perl mit IF/ELSE, wenn ich das richtig verstanden habe. =)

Vielen Dank! =D
Grüße
Gear
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: der-Lolo am 02 Juni 2018, 12:11:15
Oder eben mit dem "?" auf den Zustand einer der beiden abfragen.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 12:15:58
Da hatte ich mal was zu gelesen, aber hab mich noch nicht damit befasst.
Hast du nen dirketen Link wo das beschrieben steht mit dem "?"
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 12:18:47
([WOL.IT.Server.Main isRunning: "false"] and [?Dummy.Start.Server.Main] eq "ShutDown")

Als Beispiel. Und du machst alles auf Zustand. Dann reagiert das Teil bei Zustandsänderung.

([WOL.IT.Server.Main isRunning] eq "false" and [Dummy.Start.Server.Main] eq "ShutDown")
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 12:21:55
Vielen Dank.

Was ist der Unterschied zwischen
[WOL.IT.Server.Main isRunning: "false"]
und
[WOL.IT.Server.Main isRunning] eq "false"
??
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 12:29:06
Hatte ich geschrieben.

Das eine reagiert auf Event das andere auf Zustand.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 12:34:51
Ahh, sry so war das gemeint! =D
Vielen Dank, ich teste es gleich mal.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 13:32:02
Ich glaube ich bin zu doof dafür oder habs tatsächlich falsch verstanden, sry. =/

Habe es nun mit beiden versucht, aber er reagiert nicht drauf.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 13:45:53
Und nun?
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 13:52:47
Ich habe in den Readings gerade folgendes gesehen:
timer_01_c02    error: Wrong timespec WOL.IT.Server.MainisRunning:"false": either HH:MM:SS or {perlcode}

Er hat scheinbar ein Problem mit dem Leerzeichen, wenn ich das richtig verstehe.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 13:58:55
Zitat von: Gear am 02 Juni 2018, 13:52:47
Ich habe in den Readings gerade folgendes gesehen:
timer_01_c02    error: Wrong timespec WOL.IT.Server.MainisRunning:"false": either HH:MM:SS or {perlcode}

Er hat scheinbar ein Problem mit dem Leerzeichen, wenn ich das richtig verstehe.

So lange Du mir Dein Define nicht gibst kann ich nichts machen.
Mach mal bitte ein list vom Device.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 14:05:30
Hier das List:
Internals:
   DEF        XX:XX:XX:XX:XX:XX XXX.XXX.XXX.XXX BOTH
   IP         XXX.XXX.XXX.XXX
   MAC        XX:XX:XX:XX:XX:XX
   MODE       BOTH
   NAME       WOL.IT.Server.Main
   NR         63
   REPEAT     000
   STATE      OFF
   TYPE       WOL
   READINGS:
     2018-06-02 13:35:29   active          off
     2018-06-02 14:03:35   isRunning       false
     2018-06-02 13:06:08   packet_via_EW   XX:XX:XX:XX:XX:XX
     2018-06-02 13:06:08   packet_via_UDP  XXX.XXX.XXX.XXX
     2018-06-02 14:03:35   state           off
   TIMER:
     WOL.IT.Server.Main_ping:
       HASH       WOL.IT.Server.Main
       MODIFIER   ping
       NAME       WOL.IT.Server.Main_ping
   helper:
Attributes:
   DbLogExclude .*
   devStateIcon ON:it_nas@green OFF:it_nas@red
   eventMap   on:ON off:OFF
   interval   60
   room       11 IT


Oder meintest du das DOIF?
Internals:
   DEF        ([Dummy.Start.Server.Main:"ON"])
(set WZ.ID003.Server.Main ON,define at_tmp1 at +00:00:15 set WOL.IT.Server.Main ON)
DOELSEIF ([WOL.IT.Server.Main isRunning:"false"] and [Dummy.Start.Server.Main] eq "ShutDown")
(set Dummy.Start.Server.Main OFF,set WZ.ID003.Server.Main OFF)
DOELSEIF ([Dummy.Start.Server.Main:"ShutDown"])
(set WOL.IT.Server.Main OFF)
   MODEL      FHEM
   NAME       DOIF.Start.Server.Main
   NR         96
   NTFY_ORDER 50-DOIF.Start.Server.Main
   STATE      cmd_3
   TYPE       DOIF
   READINGS:
     2018-06-02 14:09:27   Device          Dummy.Start.Server.Main
     2018-06-02 14:09:20   cmd             3
     2018-06-02 14:09:20   cmd_event       Dummy.Start.Server.Main
     2018-06-02 14:09:20   cmd_nr          3
     2018-06-02 14:09:27   e_Dummy.Start.Server.Main_STATE ShutDown
     2018-06-02 14:09:27   e_Dummy.Start.Server.Main_events ShutDown
     2018-06-02 14:09:18   mode            enabled
     2018-06-02 14:09:20   state           cmd_3
     2018-06-02 14:09:18   timer_01_c02    error: Wrong timespec WOL.IT.Server.Main.*isRunning:"false": either HH:MM:SS or {perlcode}
   Regex:
   condition:
     0          EventDoIf('Dummy.Start.Server.Main',$hash,'ON',1)
     1          DOIF_time_once($hash,0,$wday) and InternalDoIf($hash,'Dummy.Start.Server.Main','STATE') eq "ShutDown"
     2          EventDoIf('Dummy.Start.Server.Main',$hash,'ShutDown',1)
   devices:
     0           Dummy.Start.Server.Main
     1           Dummy.Start.Server.Main
     2           Dummy.Start.Server.Main
     all         Dummy.Start.Server.Main
   do:
     0:
       0          set WZ.ID003.Server.Main ON,define at_tmp1 at +00:00:15 set WOL.IT.Server.Main ON
     1:
       0          set Dummy.Start.Server.Main OFF,set WZ.ID003.Server.Main OFF
     2:
       0          set WOL.IT.Server.Main OFF
     3:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      ShutDown
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   Dummy.Start.Server.Main
     timerevent ShutDown
     triggerDev Dummy.Start.Server.Main
     timerevents:
       ShutDown
     timereventsState:
       state: ShutDown
     triggerEvents:
       ShutDown
     triggerEventsState:
       state: ShutDown
   internals:
     1           Dummy.Start.Server.Main:STATE
     all         Dummy.Start.Server.Main:STATE
   itimer:
   localtime:
   readings:
   time:
     0          WOL.IT.Server.Main.*isRunning:"false"
   timeCond:
     0          1
   timer:
     0          0
   timers:
     1           0
   trigger:
     all         Dummy.Start.Server.Main
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 14:52:40
Du hast ja null umgesetzt von dem was ich dir geschrieben habe. Habe sogar Beispiel gegeben.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 14:59:10
Ich habe es mit deinen Beispielen versucht.
Weder
([WOL.IT.Server.Main isRunning: "false"] and [?Dummy.Start.Server.Main] eq "ShutDown")
noch
([WOL.IT.Server.Main isRunning] eq "false" and [Dummy.Start.Server.Main] eq "ShutDown")
haben etwas gebracht.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 15:26:05
Das Problem liegt an dem Leerzeichen, nur keine Ahnung wie ich das beheben kann.
ein ":" hat nichts gebracht wie ich über google als "lösung" gefunden habe.

WOL.IT.Server.Main isRunning

Das Leerzeichen dazwischen verursacht das Problem.
Titel: Antw:DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 15:51:32
So jetzt geht es.

DOELSEIF ([WOL.IT.Server.Main:isRunning] eq "false" and [?Dummy.Start.Server.Main] eq "ShutDown")

Danke für die Hilfe.

Grüße
Gear
Titel: Antw:[Gelöst] DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: CoolTux am 02 Juni 2018, 17:50:37
Ach jetzt sehe ich das erst mit dem Leerzeichen. War auf dem Handy nicht zu erkennen.
Titel: Antw:[Gelöst] DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt
Beitrag von: Gear am 02 Juni 2018, 17:53:08
Macht nichts. =D
Danke nochmals für die Hilfe.