Autor Thema: DoIF Abfragen /ABzweigungen nach Bedingung  (Gelesen 366 mal)

Offline masterpete23

  • Sr. Member
  • ****
  • Beiträge: 661
DoIF Abfragen /ABzweigungen nach Bedingung
« am: 08 Dezember 2022, 13:41:00 »
Hi, ich hoffe ich bin hier richtig.
Ich habe einen Codeschnipsel (ja, irgendwo kopiert ohne ihn 100% nachvollziehen zu können - aber ich verstehe ihn).
Es ist die Def eines DoIF für meinen Trockner:
([MQTT2_SP1_02:ENERGY_Power] > 0.1 and [?dTrockner] =~ "cmd_4|initialized")
      (({Log 3, "Trockner: Ein"}))## Schalter ein
DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_1")
     (({Log 3, "Trockner: Programmstart"}))
DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_2" and [?08:00-22:00])## Ende (wenn länger als 5 min < 20)
     (({Log 3, "Trockner: Programmende"}),(set teleBot message NEU Trockner ist fertig NEU!) (set ECHO_G0911M10017312DM sounds glocken) (sleep 3) (set ECHO_G0911M10017312DM speak Der Trockner ist fertig))
DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] < 0.1 or [MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_3")
     (({Log 3, "Trockner: Aus"}))## Schalter aus oder Neustart ohne aus

So wird zwischen [?08:00-22:00]) dies ausgeführt:   (({Log 3, "Trockner: Programmende"}),(set teleBot message NEU Trockner ist fertig NEU!) (set ECHO_G0911M10017312DM sounds glocken) (sleep 3) (set ECHO_G0911M10017312DM speak Der Trockner ist fertig))
Ich hätte gerne das nur (set ECHO_G0911M10017312DM sounds glocken) (sleep 3) (set ECHO_G0911M10017312DM speak Der Trockner ist fertig) zwischen 8-22 Uhr ausgeführt wird und der Rest immer.
WIe gehe ich am besten vor?

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:DoIF Abfragen /ABzweigungen nach Bedingung
« Antwort #1 am: 08 Dezember 2022, 14:08:32 »
Hi, ich hoffe ich bin hier richtig.
Ich habe einen Codeschnipsel (ja, irgendwo kopiert ohne ihn 100% nachvollziehen zu können - aber ich verstehe ihn).
Es ist die Def eines DoIF für meinen Trockner:
([MQTT2_SP1_02:ENERGY_Power] > 0.1 and [?dTrockner] =~ "cmd_4|initialized")
      (({Log 3, "Trockner: Ein"}))## Schalter ein
DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_1")
     (({Log 3, "Trockner: Programmstart"}))
DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_2" and [?08:00-22:00])## Ende (wenn länger als 5 min < 20)
     (({Log 3, "Trockner: Programmende"}),(set teleBot message NEU Trockner ist fertig NEU!) (set ECHO_G0911M10017312DM sounds glocken) (sleep 3) (set ECHO_G0911M10017312DM speak Der Trockner ist fertig))
DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] < 0.1 or [MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_3")
     (({Log 3, "Trockner: Aus"}))## Schalter aus oder Neustart ohne aus

So wird zwischen [?08:00-22:00]) dies ausgeführt:   (({Log 3, "Trockner: Programmende"}),(set teleBot message NEU Trockner ist fertig NEU!) (set ECHO_G0911M10017312DM sounds glocken) (sleep 3) (set ECHO_G0911M10017312DM speak Der Trockner ist fertig))
Ich hätte gerne das nur (set ECHO_G0911M10017312DM sounds glocken) (sleep 3) (set ECHO_G0911M10017312DM speak Der Trockner ist fertig) zwischen 8-22 Uhr ausgeführt wird und der Rest immer.
WIe gehe ich am besten vor?

Dann musst du wohl konventionell vorgehen: [08:00-22:00] aus der Bedingung rausnehmen und im Ausführungsteil mit if ($hm ge "08:00" and $hm lt "22:00") den zweiten Teil einleiten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline juergen012

  • Full Member
  • ***
  • Beiträge: 426
Antw:DoIF Abfragen /ABzweigungen nach Bedingung
« Antwort #2 am: 08 Dezember 2022, 14:56:04 »
(set teleBot message NEU Trockner ist fertig NEU!)

entfernen?
Fhem unter Proxmox

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:DoIF Abfragen /ABzweigungen nach Bedingung
« Antwort #3 am: 08 Dezember 2022, 17:06:28 »
(set teleBot message NEU Trockner ist fertig NEU!)

entfernen?

DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_2")## Ende (wenn länger als 5 min < 20)
    {Log 3, "Trockner: Programmende";fhem "set teleBot message NEU Trockner ist fertig NEU!"; if ($hm ge "08:00" and $hm lt "22:00") {fhem"set ECHO_G0911M10017312DM sounds glocken;sleep 3;set ECHO_G0911M10017312DM speak Der Trockner ist fertig"}}
« Letzte Änderung: 08 Dezember 2022, 18:53:36 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline masterpete23

  • Sr. Member
  • ****
  • Beiträge: 661
Antw:DoIF Abfragen /ABzweigungen nach Bedingung
« Antwort #4 am: 08 Dezember 2022, 22:22:35 »
Danke. was ist denn der Unterschied zwischen:
fhem "set teleBot message NEU Trockner ist fertig NEU!"und
(set teleBot message NEU Trockner ist fertig NEU!)?

DOELSEIF ([MQTT2_SP1_02:ENERGY_Power] > 20 and [?dTrockner] eq "cmd_2")## Ende (wenn länger als 5 min < 20)
    {Log 3, "Trockner: Programmende";fhem "set teleBot message NEU Trockner ist fertig NEU!"; if ($hm ge "08:00" and $hm lt "22:00") {fhem"set ECHO_G0911M10017312DM sounds glocken;sleep 3;set ECHO_G0911M10017312DM speak Der Trockner ist fertig"}}


Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10126
Antw:DoIF Abfragen /ABzweigungen nach Bedingung
« Antwort #5 am: 08 Dezember 2022, 23:03:42 »
Das eine ist Perl und das andere ist FHEM. Das wundert mich jetzt aber, dass du den Unterschied nicht kennst, wenn du selbst beide Modi benutzt (Log ist auch Perl und nicht FHEM)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF