Hallo,
habe folgendes kleines DOIF:
([02:30] and [?switch.di.02.GA.ss.SA.Licht.dum] eq "on")
(set GH.ss.SA.Strahler:FILTER=STATE!=off off, set GA.ss.SA.Licht:FILTER=STATE!=off off)
DOELSEIF
([switch.di.02.GA.ss.SA.Licht.dum] eq "off")
Ich möchte gerne die Uhrzeit "02:30" als cmdState anzeigen. Ich habe das Attribut cmdState wie folgt gesetzt:
attr di.02.GA.ss.SA.Lich cmdState [di.02.GA.ss.SA.Licht:timer_01_c01]|[di.02.GA.ss.SA.Licht:timer_01_c01]
Reading "Timer "timer_01_c01" zeigt intern: "03.01.2017 02:30:00"
Als cmdState wird aber nichts angezeigt, wenn ich den Softswitch betätige. Ich hätte erwartet, das mir das Reading von timer1 angezeigt wird.
Habe ich das mit dem Anzeigen von Readings im cmdState falsch verstanden, oder wo ist mein Fehler?
Christian
Du hast das t vergessen.
Zitatattr di.02.GA.ss.SA.Licht cmdState [di.02.GA.ss.SA.Licht:timer_01_c01]|[di.02.GA.ss.SA.Licht:timer_01_c01]
Hallo,
Zitat von: Ellert am 02 Januar 2017, 20:18:02
Du hast das t vergessen.
nee, das ist es nicht! Das ist beim Kopieren passiert. Das muss etwas Anderes sein:
Hier noch mal das Listing. ICh sehe es einfach nicht.
Christian
Internals:
DEF ([02:30] and [?switch.di.02.GA.ss.SA.Licht.dum] eq "on")
(set GH.ss.SA.Strahler:FILTER=STATE!=off off, set GA.ss.SA.Licht:FILTER=STATE!=off off)
DOELSEIF
([switch.di.02.GA.ss.SA.Licht.dum] eq "off")
NAME di.02.GA.ss.SA.Licht
NR 1158
NTFY_ORDER 50-di.02.GA.ss.SA.Licht
STATE
TYPE DOIF
Readings:
2017-01-02 23:10:44 Device switch.di.02.GA.ss.SA.Licht.dum
2017-01-02 18:20:52 cmd 2
2017-01-02 18:20:52 cmd_event switch.di.02.GA.ss.SA.Licht.dum
2017-01-02 18:20:52 cmd_nr 2
2017-01-02 23:10:44 e_switch.di.02.GA.ss.SA.Licht.dum_STATE off
2017-01-02 18:20:52 state
2017-01-02 18:50:00 timer_01_c01 03.01.2017 02:30:00
Condition:
0 DOIF_time_once($hash,0,$wday) and InternalDoIf($hash,'switch.di.02.GA.ss.SA.Licht.dum','STATE') eq "on"
1 InternalDoIf($hash,'switch.di.02.GA.ss.SA.Licht.dum','STATE') eq "off"
Days:
Devices:
1 switch.di.02.GA.ss.SA.Licht.dum
all switch.di.02.GA.ss.SA.Licht.dum
Do:
0:
0 set GH.ss.SA.Strahler:FILTER=STATE!=off off, set GA.ss.SA.Licht:FILTER=STATE!=off off
1:
0
2:
Helper:
event off
globalinit 1
last_timer 1
sleeptimer -1
timerdev switch.di.02.GA.ss.SA.Licht.dum
timerevent off
triggerDev switch.di.02.GA.ss.SA.Licht.dum
timerevents:
off
timereventsState:
state: off
triggerEvents:
off
triggerEventsState:
state: off
Internals:
0 switch.di.02.GA.ss.SA.Licht.dum:STATE
1 switch.di.02.GA.ss.SA.Licht.dum:STATE
all switch.di.02.GA.ss.SA.Licht.dum:STATE
Itimer:
Localtime:
0 1483407000
Readings:
Realtime:
0 02:30:00
Regexp:
0:
1:
All:
State:
Time:
0 02:30:00
Timecond:
0 0
Timer:
0 0
Timers:
0 0
Trigger:
Triggertime:
1483407000:
localtime 1483407000
Hash:
Attributes:
cmdState [di.02.GA.ss.SA.Licht:timer_01_c01]|[di.02.GA.ss.SA.Licht:timer_01_c01]
group Scripte
icon icoUhr
room 05-Garten
Ich sehe keinen Fehler.
Falls im Attribut cmdState allerdings doch ein Fehler war, den du erst nach der letzten triggerung des DOIF (18.20.52) behoben hast, dann kommt die gewünschte State Anzeige erst nach der nächsten triggerung des DOIF. Und die gibts erst um 02:30.
Das umschalten des Softswitch wird daran nichts ändern. Es sei denn du fügst testweise ein 'attr <DOIF> do always' hinzu.
wenns darum geht, sich die 02:30 anzeigen zu lassen, dann geht es doch auch über stateFormat
attr di.02.GA.ss.SA.Licht stateFormat timer_01_c01
Hallo,
Besten Dank für die Antworten. Es funzt jetzt!
Danke Euch,
Christian
Zitat von: Spartacus am 03 Januar 2017, 08:22:36
Hallo,
Besten Dank für die Antworten. Es funzt jetzt!
Danke Euch,
Christian
lass uns nicht unwissend sterben :)
Die Lösung war ...?
Hallo,
Zitat von: kumue am 03 Januar 2017, 08:29:10
lass uns nicht unwissend sterben :)
Die Lösung war ...?
sorry! Ich dachte es wäre klar gewesen...
Es geht sowohl mit "do always" als auch mit "stateFormat". Ich habe mich allerdings für die "do always"-Variante entschieden und habe das Attribut cmdState entsprechend formatiert, da ich die "02:30 Uhr" nur anzeigen möchte, wenn der Switch "switch.di.02.GA.ss.SA.Licht.dum" auf "on" steht.
Allerdings scheitere ich bei der Formatierung im Attribut cmdState und bekomme immer einen Syntaxfehler.
Mein DOIF kann 3 cmdStates annehmen:
([02:30] and [?switch.di.02.GA.ss.SA.Licht.dum] eq "on")
(set GH.ss.SA.Strahler:FILTER=STATE!=off off, set GA.ss.SA.Licht:FILTER=STATE!=off off)
DOELSEIF
([switch.di.02.GA.ss.SA.Licht.dum] eq "on")
DOELSEIF
([switch.di.02.GA.ss.SA.Licht.dum] eq "off")
Das Attribut cmdState sieht so aus:
{(substr[$SELF:timer_01_c01],11,5)}|{(substr[$SELF:timer_01_c01],11,5)}|deaktiv
Das Reading "timer_01_c01" hat folgenden Inhalt:
04.01.2017 02:30:00Der Fehler lautet:
syntax error at (eval 16794) line 1, near "2017 02"Ziel soll es sein, nur die Uhrzeit (5 Stellen ab Pos. 11) aus dem Timer auszulesen.
Christian
Nachtrag:
so funktioniert es:
{(substr(ReadingsVal("$SELF","timer_01_c01",""),11,5)." Uhr")}|{(substr(ReadingsVal("$SELF","timer_01_c01",""),11,5)." Uhr")}|deaktiv
Hallo,
so sieht es noch einfacher aus:
off|[$SELF:timer_01_c01:"(\d\d):(\d\d):(\d\d)":"$1:$2 Uhr"]|deaktiv
Christian