Hallo!
Ich verwende ein DOIF, um den Status meiner Waschmaschine in einem Dummy anzuzeigen. Bisher habe ich (erfolgreich) dieses DOIF verwendet:
define di_UG_WK_Waschmaschine_Aus DOIF ([UG_WK_Waschmaschine_Pwr:power]<5) {fhem ("set UG_WK_Waschmaschine_Status off") if (Value("UG_WK_Waschmaschine_Status") ne "off")}
Nun wollte ich noch eine Sprachausgabe über einen Amazon Echo einbauen, habe mich da aber irgendwie mit dem Syntax verheddert:
define di_UG_WK_Waschmaschine_Aus DOIF ([UG_WK_Waschmaschine_Pwr:power]<5) {fhem ("set UG_WK_Waschmaschine_Status off ;; set ECHO speak \"Waschmaschine ist fertig!\"") if (Value("UG_WK_Waschmaschine_Status") ne "off")}
Jetzt wird UG_WK_Waschmaschine_Status nicht mehr auf 'off' sondern auf 'off;set ECHO speak "Waschmaschine ist fertig!"' gesetzt.
Ich denke mal, ich bringe hier irgendwie Perl Mode und FHEM Mode im DOIF durcheinander, oder? Ich glaube auch, dass die hintere if-Abfrage im Perl Teil da irgendwie Falsch ist und eigentlich nach vorne zu der eigentlichen IF-Bedingung als zweite Bedingung gehört aber habe es bisher noch nicht geschaft, das so zu formulieren, dass es funktioniert.
Kann mir jemand sagen, wie ich das Kudelmuddel vereinfacht bekomme?
Alles gut, Du bit im DOIF Modus, und hast nur eine Perl Bedingung. Sollte gehen, obwohl hier der Umgang über perl /fhem() unnötig ist.
Bei mir geht es wie Du das define geschrieben hast. Mein dummy wird nur auf off gesetzt.
Zeig mal bitte ein "list" von deinem DOIF, damit man genau sieht, was Du implementiert hast.
Hier das List des DOIF:
Internals:
DEF ([UG_WK_Waschmaschine_Pwr:power]<5) {fhem ("set UG_WK_Waschmaschine_Status off ;; set ECHO speak \"Waschmaschine ist fertig!\"") if (Value("UG_WK_Waschmaschine_Status") ne "off")}
FUUID 5c59d11e-f33f-3bc6-9cec-3193c6f694ea4741
MODEL FHEM
NAME di_UG_WK_Waschmaschine_Aus
NOTIFYDEV global,UG_WK_Waschmaschine_Pwr
NR 709
NTFY_ORDER 50-di_UG_WK_Waschmaschine_Aus
STATE cmd_1
TYPE DOIF
VERSION 22161 2020-06-11 12:49:48
Helper:
DBLOG:
cmd:
logdb:
TIME 1604240424.85213
VALUE 1
cmd_event:
logdb:
TIME 1604240424.85213
VALUE UG_WK_Waschmaschine_Pwr
cmd_nr:
logdb:
TIME 1604240424.85213
VALUE 1
mode:
logdb:
TIME 1603965747.56715
VALUE enabled
state:
logdb:
TIME 1604240424.85213
VALUE cmd_1
wait_timer:
logdb:
TIME 1604240424.77367
VALUE no timer
READINGS:
2020-11-02 09:52:15 Device UG_WK_Waschmaschine_Pwr
2020-11-01 15:20:24 cmd 1
2020-11-01 15:20:24 cmd_event UG_WK_Waschmaschine_Pwr
2020-11-01 15:20:24 cmd_nr 1
2020-11-02 09:52:15 e_UG_WK_Waschmaschine_Pwr_power 0.04
2020-10-29 11:02:27 mode enabled
2020-11-01 15:20:24 state cmd_1
2020-11-01 15:20:24 wait_timer no timer
Regex:
accu:
cond:
UG_WK_Waschmaschine_Pwr:
0:
power ^UG_WK_Waschmaschine_Pwr$:^power:
attr:
cmdState:
wait:
0:
120
waitdel:
condition:
0 ::ReadingValDoIf($hash,'UG_WK_Waschmaschine_Pwr','power')<5
do:
0:
0 {fhem ("set UG_WK_Waschmaschine_Status off ;; set ECHO speak \"Waschmaschine ist fertig!\"") if (Value("UG_WK_Waschmaschine_Status") ne "off")}
1:
helper:
DEVFILTER ^global$|^UG_WK_Waschmaschine_Pwr$
NOTIFYDEV global|UG_WK_Waschmaschine_Pwr
event eState: E: 1816.5 P: 0.04 I: 0 U: 233.8 f: 50.01,power: 0.04
globalinit 1
last_timer 0
sleepdevice UG_WK_Waschmaschine_Pwr
sleepsubtimer -1
sleeptimer -1
timerdev UG_WK_Waschmaschine_Pwr
timerevent eState: E: 1816.5 P: 0.04 I: 0 U: 233.8 f: 50.01,power: 0.04
triggerDev UG_WK_Waschmaschine_Pwr
timerevents:
eState: E: 1816.5 P: 0.04 I: 0 U: 233.8 f: 50.01
power: 0.04
timereventsState:
eState: E: 1816.5 P: 0.04 I: 0 U: 233.8 f: 50.01
power: 0.04
triggerEvents:
eState: E: 1816.5 P: 0.04 I: 0 U: 233.8 f: 50.01
power: 0.04
triggerEventsState:
eState: E: 1816.5 P: 0.04 I: 0 U: 233.8 f: 50.01
power: 0.04
internals:
readings:
all UG_WK_Waschmaschine_Pwr:power
trigger:
uiState:
uiTable:
Attributes:
group Systemlogik
room Logik
wait 120
Genau was ich dachte. Du hast nicht
define .......................... ;; .................
eingetragen, sondern
define .......................... ;;;; .................
(guck mal in "Raw definition" - Knopf unten)
Klicke auf DEF und entferne ein Semikolon (aus zwei).
Oder Klicke auf "Raw definition" und entferne zwei Semikola (aus vier).
Das wars! Vielen Dank!