[Gelöst] DOIF: funktioniert nicht richtig, DOELSEIF wird nicht ausgeführt

Begonnen von Gear, 02 Juni 2018, 11:22:44

Vorheriges Thema - Nächstes Thema

Gear

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
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

([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.
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

Gear

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
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

der-Lolo

Oder eben mit dem "?" auf den Zustand einer der beiden abfragen.

Gear

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 "?"
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

([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")
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

Gear

Vielen Dank.

Was ist der Unterschied zwischen
[WOL.IT.Server.Main isRunning: "false"]
und
[WOL.IT.Server.Main isRunning] eq "false"
??
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

Hatte ich geschrieben.

Das eine reagiert auf Event das andere auf Zustand.
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

Gear

Ahh, sry so war das gemeint! =D
Vielen Dank, ich teste es gleich mal.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Gear

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.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

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

Gear

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.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

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

Gear

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 .*
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

CoolTux

Du hast ja null umgesetzt von dem was ich dir geschrieben habe. Habe sogar Beispiel gegeben.
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