ERLEDIGT "Perl if" in einer "at"-Definition innerhalb einer "Perl if" Bedingung

Begonnen von duu75, 01 März 2020, 13:39:22

Vorheriges Thema - Nächstes Thema

duu75

Hallo zusammen,

irgendwie komme ich nicht weiter, meine aber von der Logik und Syntax richtig zu liegen.
Warum geht es aber nicht?

Folgendes möchte ich prinzipiell umsetzen:

*8:00
{if ((...) && (...) && (...))
  {fhem ("set ... ; set ... ; define Timer at +02:00 {if (ReadingsVal("..."),"value","") ne ("off") {fhem ("set ....")}} ; set ... ; set ... ")}
   elsif (.....)
  {fhem ("set ... ; set ... ")}
}


Also einen Timer, der schon auf der 1. Ebene Bedingungen wie Wochentage und Values berücksichtigt. Soweit geht das auch.
Jetzt will ich aber bei der Ausführung der Befehle "set  ...." bei der Definition eines Timers in +2 Std. in dessen Ausführung ebenfalls nochmals eine "Perl-if" Abfrage einbauen, um in 2 Std den aktuellen Status eines Devices vor dem Ausführen des Timers zu berücksichtigen.

Das geht aber nicht wegen angeblichen Syntaxerros.

Was mache ich falsch?

"define Timer at +2:00 {}" in FHEM cmd eingegeben geht doch auch.

Gruß
Dirk

MadMax-FHEM

#1
Ruf doch im Timer/at Define einfach eine Sub in myUtils auf und erledige alles dort (und statt define defmod):


defmod Timer at +02:00:00 {mySub()}


Bzw. (so würde ich das machen / mache ich das) gleich alles in eine Sub packen...

EDIT: aufpassen mit Anführungszeichen "innerhalb" von Anführungszeichen. Da dann "escapen" oder "einfache Anführungszeichen" verwenden, da dann aber "aufpassen" weil dann "darin" KEINE Variablen "ausgewertet" werden, sondern "exakt" das steht/stehen bleibt was eben da drin steht. "$Variable" -> "Inhalt" von $Variable / '$Variable' -> $Variable (als "Text")

EDIT2: https://wiki.fhem.de/wiki/99_myUtils_anlegen

Ansonsten: statt "pseudo-code" besser "Original-Code" und "Original-Fehlermeldung"...
...sonst wird das ein wildes "Ratespiel"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

duu75

Danke für den Tip.
Ich packe das mal in die MyUtils und teste mal so, ob es geht.

duu75

Zitat von: MadMax-FHEM am 01 März 2020, 14:08:02
Ruf doch im Timer/at Define einfach eine Sub in myUtils auf und erledige alles dort (und statt define defmod):


defmod Timer at +02:00:00 {mySub()}


Bzw. (so würde ich das machen / mache ich das) gleich alles in eine Sub packen...

EDIT: aufpassen mit Anführungszeichen "innerhalb" von Anführungszeichen. Da dann "escapen" oder "einfache Anführungszeichen" verwenden, da dann aber "aufpassen" weil dann "darin" KEINE Variablen "ausgewertet" werden, sondern "exakt" das steht/stehen bleibt was eben da drin steht. "$Variable" -> "Inhalt" von $Variable / '$Variable' -> $Variable (als "Text")

EDIT2: https://wiki.fhem.de/wiki/99_myUtils_anlegen

Ansonsten: statt "pseudo-code" besser "Original-Code" und "Original-Fehlermeldung"...
...sonst wird das ein wildes "Ratespiel"...

Gruß, Joachim

Danke Joachim, es funktioniert mit der MyUtils.

MadMax-FHEM

Prima!
Gerne!

Dann pack doch noch ein [gelöst] oder [erledigt] vor den ersten Post...

Viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)